{"version":3,"file":"static/chunks/396464d2-f50c9d65627942aa.js","mappings":"qGAwRAA,EACAC,EA21DAC,EA2vCAC,EAweAC,uCAhyHAC,EA08CAC,EAUAC,EAoBAC,EAcAC,EA4oFAJ,EAnoIAK,EAkoIAL,qMAhrIA,IAAAM,EAAeC,EAAAC,EAAU,CAEzBC,EAAA,sBAEAC,EAAA,wBAuDA,SAAAC,EAAAC,CAAA,EACA,IAAAC,EAAAD,MAAAA,EAAA,OAAAA,EAAAC,IAAA,CACA,OAAAA,MAAAA,EAAA,OAAAA,EAAAC,UAAA,IAAAF,CACA,CACA,SAAAG,EAAAD,CAAA,EACA,MAAAE,wBAAAA,OAAAC,SAAA,CAAAC,QAAA,CAAAC,IAAA,CAAAL,EACA,CA2BA,SAAAM,EAAAC,CAAA,EACA,QA3BAC,EA4BA,IAAAC,EAAAF,EAAAE,KAAA,EAAAF,EAAAG,QAAA,CACA,OAAAD,GA5BAD,CADAA,EA8BAG,MAAAC,IAAA,CAAAH,EAAAI,GAAAC,IAAA,MA7BAC,QAAA,6BACA,CAAAP,EAAAO,QAAA,qCACAP,CAAAA,EAAAA,EAAAQ,OAAA,2BAA0D,yDAA0D,EAEpHR,GA0BA,IACA,CACA,MAAAS,EAAA,CACA,WACA,CACA,CACA,SAAAJ,EAAAK,CAAA,EACA,IAAAC,EACA,GAmBA,eAnBAD,EACA,IACAC,EACAb,EAAAY,EAAAE,UAAA,GACAC,SApCAH,CAAA,EACA,IAAYV,QAAAA,CAAA,EAAUU,EACtB,GAAAV,EAAAc,KAAA,MAAAC,MAAA,GACA,OAAAf,EACA,IAAAgB,EAAA,kBAAyCC,KAAAC,SAAA,CAAAR,EAAAS,IAAA,EAA0B,IAanE,MAZAT,KAAAA,EAAAU,SAAA,CACAJ,EAAAK,IAAA,UAEAX,EAAAU,SAAA,EACAJ,EAAAK,IAAA,UAAgCX,EAAAU,SAAA,CAAe,IAE/CV,EAAAY,YAAA,EACAN,EAAAK,IAAA,aAAmCX,EAAAY,YAAA,CAAkB,IAErDZ,EAAAa,KAAA,CAAAR,MAAA,EACAC,EAAAK,IAAA,CAAAX,EAAAa,KAAA,CAAAC,SAAA,EAEAR,EAAAV,IAAA,SACA,EAkBAI,EACA,CACA,MAAAD,EAAA,CACA,MAEA,GAAAgB,iBAAAf,GAAAA,EAAAgB,YAAA,CAAAnB,QAAA,MACA,OAMAoB,EANA3B,OAAA,CAMAQ,OAAA,CADA,uCACA,UAJA,OAAAG,GAAAD,EAAAV,OAAA,CArEAtB,CADAA,EAOCK,GAAAA,CAAAA,EAAA,IAND,CAAAL,EAAA,uBACAA,CAAA,CAAAA,EAAA,+BACAA,CAAA,CAAAA,EAAA,qBACAA,CAAA,CAAAA,EAAA,eACAA,CAAA,CAAAA,EAAA,iBACAA,CAAA,CAAAA,EAAA,oBA4EA,OAAAkD,EACAC,aAAA,CACA,KAAAC,SAAA,KAAAC,IACA,KAAAC,WAAA,KAAAC,OACA,CACAC,MAAA5C,CAAA,EACA,IAAA6C,EACA,IAAA7C,EACA,UACA,IAAA8C,EAAA,OAAAD,CAAAA,EAAA,KAAAE,OAAA,CAAA/C,EAAA,GAAA6C,KAAA,IAAAA,EAAA,OAAAA,EAAAC,EAAA,CACA,OAAAA,MAAAA,EAAAA,EAAA,EACA,CACAE,QAAAF,CAAA,EACA,YAAAN,SAAA,CAAAS,GAAA,CAAAH,IAAA,IACA,CACAI,QAAA,CACA,OAAArC,MAAAC,IAAA,MAAA0B,SAAA,CAAAW,IAAA,GACA,CACAJ,QAAA/C,CAAA,EACA,YAAA0C,WAAA,CAAAO,GAAA,CAAAjD,IAAA,IACA,CACAoD,kBAAApD,CAAA,EACA,IAAA8C,EAAA,KAAAF,KAAA,CAAA5C,GACA,KAAAwC,SAAA,CAAAa,MAAA,CAAAP,GACA9C,EAAAsD,UAAA,EACAtD,EAAAsD,UAAA,CAAAC,OAAA,SAAAH,iBAAA,CAAAI,GAEA,CACAC,IAAAX,CAAA,EACA,YAAAN,SAAA,CAAAiB,GAAA,CAAAX,EACA,CACAY,QAAAC,CAAA,EACA,YAAAjB,WAAA,CAAAe,GAAA,CAAAE,EACA,CACAC,IAAA5D,CAAA,CAAA6D,CAAA,EACA,IAAAf,EAAAe,EAAAf,EAAA,CACA,KAAAN,SAAA,CAAAsB,GAAA,CAAAhB,EAAA9C,GACA,KAAA0C,WAAA,CAAAoB,GAAA,CAAA9D,EAAA6D,EACA,CACA3C,QAAA4B,CAAA,CAAA9C,CAAA,EACA,IAAA+D,EAAA,KAAAf,OAAA,CAAAF,GACA,GAAAiB,EAAA,CACA,IAAAF,EAAA,KAAAnB,WAAA,CAAAO,GAAA,CAAAc,GACAF,GACA,KAAAnB,WAAA,CAAAoB,GAAA,CAAA9D,EAAA6D,EACA,CACA,KAAArB,SAAA,CAAAsB,GAAA,CAAAhB,EAAA9C,EACA,CACAgE,OAAA,CACA,KAAAxB,SAAA,KAAAC,IACA,KAAAC,WAAA,KAAAC,OACA,CACA,CAIA,SAAAsB,EAAA,CAA2BC,iBAAAA,CAAA,CAAAC,QAAAA,CAAA,CAAAC,KAAAA,CAAA,CAAkC,EAI7D,MAHA,WAAAD,GACAA,CAAAA,EAAA,UAEAE,CAAAA,CAAAH,CAAAA,CAAA,CAAAC,EAAAG,WAAA,KACAF,GAAAF,CAAA,CAAAE,EAAA,EACAA,aAAAA,GACAD,UAAAA,GAAA,CAAAC,GAAAF,EAAA,KACA,CACA,SAAAK,EAAA,CAA0BC,SAAAA,CAAA,CAAAC,QAAAA,CAAA,CAAAC,MAAAA,CAAA,CAAAC,YAAAA,CAAA,CAAwC,EAClE,IAAAC,EAAAF,GAAA,UACA,GAGAC,GACAC,CAAAA,EAAAD,EAAAC,EAAAH,EAAA,EAEA,IAAAI,MAAA,CAAAD,EAAAnD,MAAA,GALAmD,CAMA,CACA,SAAAN,EAAAQ,CAAA,EACA,OAAAA,EAAAR,WAAA,EACA,CACA,SAAAS,EAAAD,CAAA,EACA,OAAAA,EAAAC,WAAA,EACA,CACA,IAAAC,EAAA,qBAmBA,SAAAC,EAAAR,CAAA,EACA,IAAAL,EAAAK,EAAAL,IAAA,CACA,OAAAK,EAAAS,YAAA,wBACA,WACAd,EAEAE,EAAAF,GACA,IACA,CACA,SAAAe,EAAAC,CAAA,CAAAjB,CAAA,CAAAC,CAAA,QACA,UAAAD,GAAAC,CAAAA,UAAAA,GAAAA,aAAAA,CAAA,EACAgB,EAAAC,YAAA,cAEAD,EAAAV,KAAA,CAGA,IAAAY,EAAA,EACAC,EAAA,uBAEA,SAAAC,IACA,OAAAF,GACA,CAwBA,IAAAG,EAAA,6CACAC,EAAA,sBACAC,GAAA,YACAC,GAAA,wBACA,SAAAC,GAAAnF,CAAA,CAAAmB,CAAA,EACA,OAAAnB,GAAA,IAAAQ,OAAA,CAAAuE,EAAA,CAAAK,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,KACA,IAAAC,EAAAJ,GAAAE,GAAAC,EACAE,EAAAN,GAAAE,GAAA,GACA,IAAAG,EACA,OAAAN,EAEA,GAAAJ,EAAAY,IAAA,CAAAF,IAAAT,GAAAW,IAAA,CAAAF,IAGAR,GAAAU,IAAA,CAAAF,GAFA,aAA0BC,EAAW,EAAED,EAAS,EAAEC,EAAW,GAK7D,GAAAD,MAAAA,CAAA,IACA,aAA0BC,EAAW,EAvBrCP,CANAS,EAAAC,OAAA,UACAD,EAAA/E,KAAA,MAAAiF,KAAA,MAAAzF,IAAA,MAGAuF,EAAA/E,KAAA,UAEAA,KAAA,SAuBuC4E,EAA+B,EAAEC,EAAW,GAEnF,IAAAK,EAAA7E,EAAAL,KAAA,MACAmF,EAAAP,EAAA5E,KAAA,MAEA,QAAAoF,KADAF,EAAAG,GAAA,GACAF,GACA,MAAAC,IAGAA,OAAAA,EACAF,EAAAG,GAAA,GAGAH,EAAA3E,IAAA,CAAA6E,IAGA,aAAsBP,EAAW,EAAEK,EAAA1F,IAAA,MAAgB,EAAEqF,EAAW,IAEhE,CACA,IAAAS,GAAA,qBACAC,GAAA,qBA2DA,SAAAC,GAAAC,CAAA,CAAAC,CAAA,EACA,IAAAA,GAAAA,KAAAA,EAAAC,IAAA,GACA,OAAAD,EAEA,IAAAE,EAAAH,EAAAI,aAAA,MAEA,OADAD,EAAAvF,IAAA,CAAAqF,EACAE,EAAAvF,IAAA,CAKA,SAAAyF,KACA,IAAAF,EAAAG,SAAAF,aAAA,MAEA,OADAD,EAAAvF,IAAA,IACAuF,EAAAvF,IAAA,CAEA,SAAA2F,GAAAP,CAAA,CAAA9C,CAAA,CAAAsD,CAAA,CAAA/C,CAAA,CAAAD,CAAA,CAAAiD,CAAA,SACA,EAGA,QAAAD,GACAA,CAAAA,SAAAA,GAAAtD,QAAAA,GAAAO,MAAAA,CAAA,MAGA+C,CAAAA,eAAAA,GAAA/C,MAAAA,CAAA,MAGA+C,CAAAA,eAAAA,GACAtD,UAAAA,GAAAA,OAAAA,GAAAA,OAAAA,CAAA,EAGAsD,WAAAA,EACAE,SA1FAV,CAAA,CAAAC,CAAA,EACA,GAAAA,KAAAA,EAAAC,IAAA,GACA,OAAAD,EAEA,IAAAU,EAAA,EACA,SAAAC,EAAAC,CAAA,MACAC,EACA,IAAAC,EAAAF,EAAAG,IAAA,CAAAf,EAAAgB,SAAA,CAAAN,WACA,GACAG,EAAAC,CAAA,IACAJ,GAAAG,EAAAtG,MAAA,CACAsG,GAEA,EACA,CACA,IAAAI,EAAA,GACA,KACAN,EAAAd,KACAa,CAAAA,GAAAV,EAAAzF,MAAA,GAFA,CAKA,IAAA8E,EAAAsB,EAAAf,IACA,GAAAP,MAAAA,EAAAE,KAAA,KACAF,EAAAS,GAAAC,EAAAV,EAAA2B,SAAA,GAAA3B,EAAA9E,MAAA,KACA0G,EAAApG,IAAA,CAAAwE,OAEA,CACA,IAAA6B,EAAA,GACA7B,EAAAS,GAAAC,EAAAV,GACA,IAAA8B,EAAA,GACA,QACA,IAAAC,EAAApB,EAAAqB,MAAA,CAAAX,GACA,GAAAU,KAAAA,EAAA,CACAH,EAAApG,IAAA,EAAAwE,EAAA6B,CAAA,EAAAjB,IAAA,IACA,KACA,CACA,GAAAkB,EAWA,MAAAC,GACAD,CAAAA,EAAA,QAZA,CACA,GAAAC,MAAAA,EAAA,CACAV,GAAA,EACAO,EAAApG,IAAA,EAAAwE,EAAA6B,CAAA,EAAAjB,IAAA,IACA,KACA,CACA,MAAAmB,GACAD,CAAAA,EAAA,GAEA,CAMAD,GAAAE,EACAV,GAAA,CACA,CACA,CACA,CACA,OAAAO,EAAAnH,IAAA,MACA,EAiCAiG,EAAAvC,GAEA+C,UAAAA,EACA5B,GAAAnB,EAAA4C,MAEAnD,WAAAA,GAAAsD,SAAAA,EACAT,GAAAC,EAAAvC,GAEA,mBAAAgD,EACAA,EAAAD,EAAA/C,EAAAD,GAEAC,EArBAsC,GAAAC,EAAAvC,GAJAA,CA0BA,CACA,SAAA8D,GAAArE,CAAA,CAAAsD,CAAA,CAAAgB,CAAA,EACA,OAAAtE,UAAAA,GAAAA,UAAAA,CAAA,GAAAsD,aAAAA,CACA,CAoCA,SAAAiB,GAAA/E,CAAA,CAAAgF,CAAA,CAAAC,EAAAC,GAAA,CAAAC,EAAA,SACA,CAAAnF,GAEAA,EAAAoF,QAAA,GAAApF,EAAAqF,YAAA,EAEAF,EAAAF,EAHA,GAKAD,EAAAhF,GACAmF,EACAJ,GAAA/E,EAAAsF,UAAA,CAAAN,EAAAC,EAAAE,EAAA,EACA,CACA,SAAAI,GAAAC,CAAA,CAAAC,CAAA,EACA,WAEA,GAAAhE,OADAzB,EAEA,SACA,GAAAwF,GACA,oBAAAA,EACA,IAAA/D,EAAAiE,OAAA,KAAmCF,EAAU,GAC7C,cAEA,GAAAG,SA9BAlE,CAAA,CAAAmE,CAAA,EACA,QAAAC,EAAApE,EAAAqE,SAAA,CAAAhI,MAAA,CAA2C+H,KAAS,CACpD,IAAAL,EAAA/D,EAAAqE,SAAA,CAAAD,EAAA,CACA,GAAAD,EAAAjD,IAAA,CAAA6C,GACA,QAEA,CACA,QACA,EAcAxF,EAQAwF,GACA,iBAGAC,CAAAA,GAAAhE,EAAAiE,OAAA,CAAAD,EAAA,CAGA,CACA,CACA,SAAAM,GAAA/F,CAAA,CAAAgG,CAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAC,CAAA,EACA,IACA,IAAA3E,EAAAzB,EAAAoF,QAAA,GAAApF,EAAAqF,YAAA,CACArF,EACAA,EAAAqG,aAAA,CACA,GAAA5E,OAAAA,EACA,SACA,IAAA6E,EAAA,GACAC,EAAA,GACA,GAAAH,EAAA,CAEA,GAAAG,CADAA,EAAAxB,GAAAtD,EAAA8D,GAAAW,EAAAC,GAAA,EACA,EACA,SAEAG,EAAAvB,GAAAtD,EAAA8D,GAAAS,EAAAC,GAAAM,GAAA,EAAAA,EAAArB,IACA,KACA,CAEA,GAAAoB,CADAA,EAAAvB,GAAAtD,EAAA8D,GAAAS,EAAAC,GAAA,EACA,EACA,SAEAM,EAAAxB,GAAAtD,EAAA8D,GAAAW,EAAAC,GAAAG,GAAA,EAAAA,EAAApB,IACA,CACA,OAAAoB,GAAA,EACAC,CAAAA,CAAAA,GAAA,IACAD,GAAAC,EAEAA,CAAAA,CAAAA,GAAA,IAEA,EAAAH,CACA,CACA,MAAAI,EAAA,CACA,CACA,QAAAJ,CACA,CAmWA,SAAAK,GAAAC,CAAA,SACA,MAAAA,EACA,GAGAA,EAAA/F,WAAA,EAEA,CAyEA,SAAAgG,GAAAtK,CAAA,CAAAuK,CAAA,MA6BAzH,EA5BA,IAAYmE,IAAAA,CAAA,CAAAuD,OAAAA,CAAA,CAAAC,WAAAA,CAAA,CAAAC,cAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAAZ,YAAAA,CAAA,CAAAJ,cAAAA,CAAA,CAAAE,gBAAAA,CAAA,CAAAD,iBAAAA,CAAA,CAAAE,mBAAAA,CAAA,CAAAc,UAAAA,EAAA,GAAAC,iBAAAA,EAAA,GAAA3G,iBAAAA,EAAA,EAA6M,CAAAwD,gBAAAA,CAAA,CAAAoD,WAAAA,CAAA,CAAAnG,YAAAA,CAAA,CAAAoG,eAAAA,CAAA,CAAAC,eAAAA,EAAA,EAA+E,CAAAC,aAAAA,EAAA,GAAAC,aAAAA,EAAA,GAAAC,YAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAC,kBAAAA,EAAA,IAAAC,iBAAAA,CAAA,CAAAC,sBAAAA,EAAA,IAAAC,gBAAAA,EAAA,OAAAC,kBAAAA,EAAA,IAA+MlB,EACvf,CAAUmB,mBAAAA,EAAA,IAA4BnB,EACtCoB,EAAAC,SA1XA5L,CAAA,CAAAuK,CAAA,EACA,IAAYtD,IAAAA,CAAA,CAAAuD,OAAAA,CAAA,CAAAC,WAAAA,CAAA,CAAAC,cAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAAZ,YAAAA,CAAA,CAAArC,gBAAAA,CAAA,CAAAiC,cAAAA,CAAA,CAAAE,gBAAAA,CAAA,CAAAD,iBAAAA,CAAA,CAAAE,mBAAAA,CAAA,CAAAe,iBAAAA,CAAA,CAAA3G,iBAAAA,EAAA,EAAoM,CAAA4G,WAAAA,CAAA,CAAAnG,YAAAA,CAAA,CAAAqG,eAAAA,EAAA,EAA8C,CAAAC,aAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAM,gBAAAA,CAAA,CAAAC,kBAAAA,EAAA,IAA4ElB,EAC1UsB,EAAAC,SA0EA7E,CAAA,CAAAuD,CAAA,EACA,IAAAA,EAAA9G,OAAA,CAAAuD,GACA,OACA,IAAA8E,EAAAvB,EAAA5H,KAAA,CAAAqE,GACA,OAAA8E,IAAAA,EAAAC,KAAAA,EAAAD,CACA,EA/EA9E,EAAAuD,GACA,OAAAxK,EAAA+I,QAAA,EACA,KAAA/I,EAAAiM,aAAA,CACA,GAAAjM,eAAAA,EAAAkM,UAAA,CACA,OACA9H,KAAA3E,EAAA0M,QAAA,CACA7I,WAAA,GACA4I,WAAAlM,EAAAkM,UAAA,EAIA,OACA9H,KAAA3E,EAAA0M,QAAA,CACA7I,WAAA,GAGA,MAAAtD,EAAAoM,kBAAA,CACA,OACAhI,KAAA3E,EAAA4M,YAAA,CACA5E,KAAAzH,EAAAyH,IAAA,CACA6E,SAAAtM,EAAAsM,QAAA,CACAC,SAAAvM,EAAAuM,QAAA,CACAV,OAAAA,CACA,CACA,MAAA7L,EAAAgJ,YAAA,CACA,OAAAwD,SA8GAxM,CAAA,CAAAuK,CAAA,MA4IAkC,EA3IA,IAAYxF,IAAAA,CAAA,CAAAwD,WAAAA,CAAA,CAAAC,cAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAAE,iBAAAA,CAAA,CAAA3G,iBAAAA,EAAA,EAAwF,CAAAwD,gBAAAA,CAAA,CAAA/C,YAAAA,CAAA,CAAAqG,eAAAA,EAAA,EAAmD,CAAAC,aAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAM,gBAAAA,CAAA,CAAAC,kBAAAA,EAAA,GAAAI,OAAAA,CAAA,CAAA9B,YAAAA,CAAA,CAAAJ,cAAAA,CAAA,CAAAE,gBAAAA,CAAA,CAAAD,iBAAAA,CAAA,CAAAE,mBAAAA,CAAA,EAAuKS,EAC9TmC,EAAAC,SA1SAlI,CAAA,CAAAgG,CAAA,CAAAC,CAAA,CAAAC,CAAA,EACA,IACA,GAAAA,GAAAlG,EAAA4E,OAAA,CAAAsB,GACA,SAEA,oBAAAF,EACA,IAAAhG,EAAAgF,SAAA,CAAAmD,QAAA,CAAAnC,GACA,QACA,MAGA,QAAAjB,EAAA/E,EAAAgF,SAAA,CAAAhI,MAAA,CAAwD+H,KAAS,CACjE,IAAAL,EAAA1E,EAAAgF,SAAA,CAAAD,EAAA,CACA,GAAAiB,EAAAnE,IAAA,CAAA6C,GACA,QAEA,CAEA,GAAAuB,EACA,OAAAjG,EAAA4E,OAAA,CAAAqB,EAEA,CACA,MAAAP,EAAA,CACA,CACA,QACA,EAiRAnK,EAAAyK,EAAAC,EAAAC,GACAxG,EAAA0I,SAndApI,CAAA,EACA,GAAAA,aAAAqI,gBACA,aAEA,IAAAC,EAAAzI,EAAAG,EAAAN,OAAA,SACA,EAAAmC,IAAA,CAAAyG,GACA,MAEAA,CACA,EA0cA/M,GACAgN,EAAA,GACAC,EAAAjN,EAAAgN,UAAA,CAAAvL,MAAA,CACA,QAAAyL,EAAA,EAAoBA,EAAAD,EAASC,IAAA,CAC7B,IAAAC,EAAAnN,EAAAgN,UAAA,CAAAE,EAAA,CACA1E,GAAArE,EAAAgJ,EAAA1F,IAAA,CAAA0F,EAAAzI,KAAA,GACAsI,CAAAA,CAAA,CAAAG,EAAA1F,IAAA,EAAAD,GAAAP,EAAA9C,EAAAG,EAAA6I,EAAA1F,IAAA,EAAA0F,EAAAzI,KAAA,CAAA1E,EAAA0H,EAAA,CAEA,CACA,GAAAvD,SAAAA,GAAA0G,EAAA,CACA,IAAAuC,EAAAvM,MAAAC,IAAA,CAAAmG,EAAAoG,WAAA,EAAAC,IAAA,IACA7M,EAAAoB,IAAA,GAAA7B,EAAA6B,IAAA,EAEAnB,EAAA,KACA0M,GACA1M,CAAAA,EAAAF,EAAA4M,EAAA,EAEA1M,IACA,OAAAsM,EAAAO,GAAA,CACA,OAAAP,EAAAnL,IAAA,CACAmL,EAAAQ,QAAA,CAAA3H,GAAAnF,EAAA0M,EAAAvL,IAAA,EAEA,CACA,GAAAsC,UAAAA,GACAnE,EAAAyN,KAAA,EACA,EAAAzN,EAAA0N,SAAA,EAAA1N,EAAA2N,WAAA,MAAAxG,IAAA,GAAA1F,MAAA,EACA,IAAAf,EAAAF,EAAAR,EAAAyN,KAAA,EACA/M,GACAsM,CAAAA,EAAAQ,QAAA,CAAA3H,GAAAnF,EAAA4G,KAAA,CAEA,CACA,GAAAnD,UAAAA,GACAA,aAAAA,GACAA,WAAAA,GACAA,WAAAA,EAAA,CAEA,IAAAC,EAAAa,EADAjF,GAEA0E,EAAAS,EAFAnF,EAEA+E,EAAAZ,GAAAC,GACAwJ,EAAAxI,EAAAwI,OAAA,CACA,GAAAxJ,WAAAA,GAAAA,WAAAA,GAAAM,EAAA,CACA,IAAAmJ,EAAAnE,GALA1J,EAKA2J,EAAAC,EAAAC,EAAAC,EAAA7F,EAAA,CACAG,KAAAA,EACAD,QAAAY,EAAAZ,GACAD,iBAAAA,CACA,GACA8I,CAAAA,EAAAtI,KAAA,CAAAH,EAAA,CACAC,SAAAqJ,EACApJ,QAZAzE,EAaA0E,MAAAA,EACAC,YAAAA,CACA,EACA,CACAiJ,GACAZ,CAAAA,EAAAY,OAAA,CAAAA,CAAA,CAEA,CASA,GARA,WAAAzJ,IACAnE,EAAA8N,QAAA,GAAA5J,EAAA,OACA8I,EAAAc,QAAA,IAGA,OAAAd,EAAAc,QAAA,EAGA3J,WAAAA,GAAA+G,GACA,GAAAlL,OAAAA,EAAA+N,SAAA,CACA,CAAAC,SA7jBAC,CAAA,EACA,IAAAC,EAAAD,EAAAE,UAAA,OACA,IAAAD,EACA,SAEA,QAAAE,EAAA,EAAoBA,EAAAH,EAAAI,KAAA,CAAkBD,GADtC,GAEA,QAAAE,EAAA,EAAwBA,EAAAL,EAAAM,MAAA,CAAmBD,GAF3C,GAE2C,CAC3C,IAAAE,EAAAN,EAAAM,YAAA,CACAC,EAAAzJ,KAAAwJ,EACAA,CAAA,CAAAxJ,EAAA,CACAwJ,EACAE,EAAA,IAAAC,YAAAF,EAAAlO,IAAA,CAAA2N,EAAAE,EAAAE,EAAAM,KAAAC,GAAA,CAPA,GAOAZ,EAAAI,KAAA,CAAAD,GAAAQ,KAAAC,GAAA,CAPA,GAOAZ,EAAAM,MAAA,CAAAD,IAAAQ,IAAA,CAAAC,MAAA,EACA,GAAAL,EAAAM,IAAA,IAAAC,IAAAA,GACA,QACA,CAEA,QACA,EA4iBAjP,IACAgN,CAAAA,EAAAkC,UAAA,CAAAlP,EAAAmP,SAAA,CAAAnE,EAAA5G,IAAA,CAAA4G,EAAAoE,OAAA,QAGA,mBAAApP,CAAAA,EAAA,CACA,IAAAqP,EAAArP,EAAAmP,SAAA,CAAAnE,EAAA5G,IAAA,CAAA4G,EAAAoE,OAAA,EACAE,EAAA/H,SAAAF,aAAA,UACAiI,CAAAA,EAAAjB,KAAA,CAAArO,EAAAqO,KAAA,CACAiB,EAAAf,MAAA,CAAAvO,EAAAuO,MAAA,CACA,IAAAgB,EAAAD,EAAAH,SAAA,CAAAnE,EAAA5G,IAAA,CAAA4G,EAAAoE,OAAA,EACAC,IAAAE,GACAvC,CAAAA,EAAAkC,UAAA,CAAAG,CAAA,CAEA,EAEA,GAAAlL,QAAAA,GAAA8G,EAAA,CACAlM,GAEAC,CAAAA,EAAAD,CADAA,EAAAkI,EAAAI,aAAA,YACA8G,UAAA,QAGA,IAAAqB,EAAAC,EAAAC,WAAA,CADA1P,EAEA0P,WAAA,aACA,IAAAC,EAAA,KACAF,EAAAG,mBAAA,QAAAD,GACA,IACA5Q,EAAAsP,KAAA,CAAAoB,EAAAI,YAAA,CACA9Q,EAAAwP,MAAA,CAAAkB,EAAAK,aAAA,CACA9Q,EAAA+Q,SAAA,CARA/P,EAQA,KACAgN,EAAAkC,UAAA,CAAAnQ,EAAAoQ,SAAA,CAAAnE,EAAA5G,IAAA,CAAA4G,EAAAoE,OAAA,CACA,CACA,MAAAY,EAAA,CACAC,QAAAC,IAAA,0BAAsDT,EAAAU,UAAA,CAAiB,WAAWH,EAAI,EACtF,CACAR,EACAxC,EAAA0C,WAAA,CAAAF,EACAC,EAAAW,eAAA,eACA,CACAX,CAlBAzP,EAkBAqQ,QAAA,EAAAZ,IAAAA,EAAAI,YAAA,CACAF,IAEAF,EAAAa,gBAAA,QAAAX,EACA,CAeA,GAdAxL,CAAAA,UAAAA,GAAAA,UAAAA,CAAA,IACA6I,EAAAuD,aAAA,CAAAvQ,EAAAwQ,MAAA,CACA,SACA,SACAxD,EAAAyD,mBAAA,CAAAzQ,EAAA0Q,WAAA,EAEA,CAAAjF,IACAzL,EAAA2Q,UAAA,EACA3D,CAAAA,EAAA4D,aAAA,CAAA5Q,EAAA2Q,UAAA,EAEA3Q,EAAA6Q,SAAA,EACA7D,CAAAA,EAAA8D,YAAA,CAAA9Q,EAAA6Q,SAAA,GAGAnE,EAAA,CACA,IAAgB2B,MAAAA,CAAA,CAAAE,OAAAA,CAAA,EAAgBvO,EAAA+Q,qBAAA,GAChC/D,EAAA,CACAgE,MAAAhE,EAAAgE,KAAA,CACAC,SAAA,GAAyB5C,EAAM,IAC/B6C,UAAA,GAA0B3C,EAAO,IAEjC,CACA,WAAApK,GAAAqH,EAAAwB,EAAAmE,GAAA,IACAnR,EAAAoR,eAAA,EACApE,CAAAA,EAAAqE,MAAA,CAAArE,EAAAmE,GAAA,EAEA,OAAAnE,EAAAmE,GAAA,EAGA,IACAG,eAAArO,GAAA,CAAAkB,IACAsI,CAAAA,EAAA,GACA,CACA,MAAAtC,EAAA,CACA,CACA,OACA/F,KAAA3E,EAAA8R,OAAA,CACApN,QAAAA,EACA6I,WAAAA,EACA1J,WAAA,GACAkO,MAAAC,CAveApN,CAAAe,CAAAA,QAAAA,EAAAjB,OAAA,EAAAiB,EAAAsM,eAAA,GAueA1F,KAAAA,EACAU,UAAAA,EACAb,OAAAA,EACA8F,SAAAlF,CACA,CACA,EA3QAzM,EAAA,CACAiH,IAAAA,EACAwD,WAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAE,iBAAAA,EACAnD,gBAAAA,EACAxD,iBAAAA,EACAS,YAAAA,EACAqG,eAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAM,gBAAAA,EACAC,kBAAAA,EACAI,OAAAA,EACA9B,YAAAA,EACAJ,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,CACA,EACA,MAAA9J,EAAA4R,SAAA,CACA,OAAAC,SAiCA7R,CAAA,CAAAuK,CAAA,EACA,IAAA1H,EACA,IAAYkH,YAAAA,CAAA,CAAAJ,cAAAA,CAAA,CAAAE,gBAAAA,CAAA,CAAAD,iBAAAA,CAAA,CAAAE,mBAAAA,CAAA,CAAAgB,WAAAA,CAAA,CAAA5G,iBAAAA,CAAA,CAAAS,YAAAA,CAAA,CAAAkH,OAAAA,CAAA,EAAwItB,EACpJuH,EAAA9R,EAAAiJ,UAAA,EAAAjJ,EAAAiJ,UAAA,CAAA9E,OAAA,CACAwJ,EAAA3N,EAAA2N,WAAA,CACAoE,EAAAD,UAAAA,GAAA9F,KAAAA,EACAgG,EAAAF,WAAAA,GAAA9F,KAAAA,EACAiG,EAAAH,aAAAA,GAAA9F,KAAAA,EACA,GAAA+F,GAAApE,EAAA,CACA,IACA3N,EAAAkS,WAAA,EAAAlS,EAAAmS,eAAA,EAEA,QAAAtP,CAAAA,EAAA7C,EAAAiJ,UAAA,CAAAwE,KAAA,GAAA5K,KAAA,IAAAA,EAAA,OAAAA,EAAAjC,QAAA,GACA+M,CAAAA,EAAAnN,EAAAR,EAAAiJ,UAAA,CAAAwE,KAAA,EAEA,CACA,MAAAuC,EAAA,CACAC,QAAAC,IAAA,yDAAiFF,EAAI,EAAAhQ,EACrF,CACA2N,EAAA9H,GAAA8H,EAAArG,KACA,CACA0K,GACArE,CAAAA,EAAA,sBAEA,IAAAE,EAAAnE,GAAA1J,EAAA2J,EAAAC,EAAAC,EAAAC,EAAAC,GAWA,GAVAgI,GAAAC,GAAAC,IAAAtE,IAAAE,GACAF,CAAAA,EAAA7C,EACAA,EAAA6C,GACAA,EAAAzM,OAAA,eAEA+Q,GAAAtE,GAAAzJ,CAAAA,EAAAkO,QAAA,EAAAvE,CAAA,GACAF,CAAAA,EAAAhJ,EACAA,EAAAgJ,EAAA3N,EAAAiJ,UAAA,EACA0E,EAAAzM,OAAA,eAEA4Q,WAAAA,GAAAnE,EAAA,CACA,IAAA0E,EAAApO,EAAA,CACAG,KAAA,KACAD,QAAA2N,EACA5N,iBAAAA,CACA,GACAyJ,EAAApJ,EAAA,CACAC,SAAAkF,GAAA1J,EAAA2J,EAAAC,EAAAC,EAAAC,EAAAuI,GACA5N,QAAAzE,EACA0E,MAAAiJ,EACAhJ,YAAAA,CACA,EACA,CACA,OACAP,KAAA3E,EAAA6S,IAAA,CACA3E,YAAAA,GAAA,GACAoE,QAAAA,EACAlG,OAAAA,CACA,CACA,EAvFA7L,EAAA,CACA+J,YAAAA,EACAJ,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACAgB,WAAAA,EACA5G,iBAAAA,EACAS,YAAAA,EACAkH,OAAAA,CACA,EACA,MAAA7L,EAAAuS,kBAAA,CACA,OACAnO,KAAA3E,EAAA+S,KAAA,CACA7E,YAAA,GACA9B,OAAAA,CACA,CACA,MAAA7L,EAAAyS,YAAA,CACA,OACArO,KAAA3E,EAAAiT,OAAA,CACA/E,YAAA3N,EAAA2N,WAAA,KACA9B,OAAAA,CACA,CACA,SACA,QACA,CACA,EA+SA7L,EAAA,CACAiH,IAAAA,EACAuD,OAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAX,YAAAA,EACAY,gBAAAA,EACAhB,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACAe,iBAAAA,EACA3G,iBAAAA,EACAwD,gBAAAA,EACAoD,WAAAA,EACAnG,YAAAA,EACAqG,eAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAM,gBAAAA,EACAC,kBAAAA,CACA,GACA,IAAAE,EAEA,OADAsE,QAAAC,IAAA,CAAAlQ,EAAA,kBACA,KAIA8C,EADA0H,EAAA9G,OAAA,CAAA1D,GACAwK,EAAA5H,KAAA,CAAA5C,GAEA2S,CAAAA,SAzGAC,CAAA,CAAA7H,CAAA,EACA,GAAAA,EAAA8H,OAAA,EAAAD,EAAAxO,IAAA,GAAA3E,EAAAiT,OAAA,CACA,SAEA,GAAAE,EAAAxO,IAAA,GAAA3E,EAAA8R,OAAA,EACA,GAAAxG,EAAA+H,MAAA,EACAF,CAAAA,WAAAA,EAAAzO,OAAA,EACAyO,SAAAA,EAAAzO,OAAA,EACAyO,CAAAA,YAAAA,EAAA5F,UAAA,CAAAO,GAAA,EACAqF,kBAAAA,EAAA5F,UAAA,CAAAO,GAAA,GACAqF,WAAAA,EAAA5F,UAAA,CAAA+F,EAAA,EACAH,SAAAA,EAAAzO,OAAA,EACAyO,aAAAA,EAAA5F,UAAA,CAAAO,GAAA,EACA,iBAAAqF,EAAA5F,UAAA,CAAAnL,IAAA,EACA+Q,EAAA5F,UAAA,CAAAnL,IAAA,CAAAmR,QAAA,UAGAjI,EAAAkI,WAAA,EACA,UAAAL,EAAAzO,OAAA,EAAAyO,kBAAAA,EAAA5F,UAAA,CAAAO,GAAA,EACAqF,SAAAA,EAAAzO,OAAA,EACAiG,CAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,EAAAO,KAAA,uCACAoC,qBAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,SAAAA,GAAAwI,EAAA5F,UAAA,CAAAO,GAAA,GACAnD,qBAAAA,GAAAwI,EAAA5F,UAAA,CAAAO,GAAA,GACAnD,kBAAAA,GAAAwI,EAAA5F,UAAA,CAAAO,GAAA,IATA,SAYA,GAAAqF,SAAAA,EAAAzO,OAAA,EACA,GAAA4G,EAAAmI,oBAAA,EACA9I,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,EAAAO,KAAA,4BAGA+C,EAAAoI,cAAA,EACA/I,CAAAA,GAAAwI,EAAA5F,UAAA,CAAAoG,QAAA,EAAApL,KAAA,uBACAoC,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,EAAAO,KAAA,oBACAoC,cAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GALA,SAQA,GAAAsD,EAAAsI,cAAA,EACAjJ,CAAAA,WAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,cAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,YAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA,SAEA,GAAAsD,EAAAuI,iBAAA,EACAV,KAAA5G,IAAA4G,EAAA5F,UAAA,eACA,cAEA,GAAAjC,EAAAwI,kBAAA,EACAnJ,CAAAA,WAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,cAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,cAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,cAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,WAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,GAAAwI,EAAA5F,UAAA,CAAAoG,QAAA,EAAApL,KAAA,eACAoC,GAAAwI,EAAA5F,UAAA,CAAAoG,QAAA,EAAApL,KAAA,eACA,cAEA,GAAA+C,EAAAyI,oBAAA,EACApJ,CAAAA,6BAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,wBAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,eAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,oBAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,cAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,iBAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA2C,+BAAAA,GAAAwI,EAAA5F,UAAA,CAAAvF,IAAA,GACA,QAEA,CACA,CACA,QACA,EAkCAkE,EAAAZ,IACA,IACAY,EAAAvH,IAAA,GAAA3E,EAAA6S,IAAA,EACA3G,EAAAoG,OAAA,EACApG,EAAAgC,WAAA,CAAAzM,OAAA,mBAAAO,MAAA,EAIA+D,IA3uBA,GA6uBA,IAAAiO,EAAArT,OAAAsT,MAAA,CAAA/H,EAAA,CAA4D7I,GAAAA,CAAA,GAE5D,GADA0H,EAAA5G,GAAA,CAAA5D,EAAAyT,GACA3Q,KAAAA,EACA,YAEAqI,GACAA,EAAAnL,GAEA,IAAA2T,EAAA,CAAA/I,EACA,GAAA6I,EAAArP,IAAA,GAAA3E,EAAA8R,OAAA,EACAoC,EAAAA,GAAA,CAAAF,EAAA/G,SAAA,CACA,OAAA+G,EAAA/G,SAAA,CACA,IAAAxM,EAAAF,EAAAE,UAAA,CACAA,GAAAC,EAAAD,IACAuT,CAAAA,EAAAG,YAAA,IACA,CACA,IAAAH,EAAArP,IAAA,GAAA3E,EAAA0M,QAAA,EACAsH,EAAArP,IAAA,GAAA3E,EAAA8R,OAAA,GACAoC,EAAA,CACA5I,EAAA8I,cAAA,EACAJ,EAAArP,IAAA,GAAA3E,EAAA8R,OAAA,EACAkC,SAAAA,EAAAtP,OAAA,EACAuH,CAAAA,EAAA,IAEA,IAAAoI,EAAA,CACA7M,IAAAA,EACAuD,OAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAX,YAAAA,EACAY,gBAAAA,EACAhB,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACAc,UAAAA,EACAC,iBAAAA,EACA3G,iBAAAA,EACAwD,gBAAAA,EACAoD,WAAAA,EACAnG,YAAAA,EACAoG,eAAAA,EACAC,eAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAQ,mBAAAA,EACAP,YAAAA,EACAC,aAAAA,EACAC,kBAAAA,EACAC,iBAAAA,EACAC,sBAAAA,EACAC,gBAAAA,CACA,EACA,QAAAuI,KAAAlT,MAAAC,IAAA,CAAAd,EAAAsD,UAAA,GACA,IAAA0Q,EAAA1J,GAAAyJ,EAAAD,GACAE,GACAP,EAAAnQ,UAAA,CAAAvB,IAAA,CAAAiS,EAEA,CACA,GAAAC,EAt+BAlL,QAAA,GAAA/I,EAAAgJ,YAAA,EAs+BAhJ,EAAAE,UAAA,CACA,QAAA6T,KAAAlT,MAAAC,IAAA,CAAAd,EAAAE,UAAA,CAAAoD,UAAA,GACA,IAAA0Q,EAAA1J,GAAAyJ,EAAAD,GACAE,IACA7T,EAAAH,EAAAE,UAAA,GACA8T,CAAAA,EAAAE,QAAA,KACAT,EAAAnQ,UAAA,CAAAvB,IAAA,CAAAiS,GAEA,CAEA,CAsFA,OArFAhU,EAAAiJ,UAAA,EACAlJ,EAAAC,EAAAiJ,UAAA,GACA9I,EAAAH,EAAAiJ,UAAA,GACAwK,CAAAA,EAAAS,QAAA,KAEAT,EAAArP,IAAA,GAAA3E,EAAA8R,OAAA,EACAkC,WAAAA,EAAAtP,OAAA,EACAgQ,SA1iBAC,CAAA,CAAAC,CAAA,CAAAhJ,CAAA,MAMAiJ,EALA,IAAAC,EAAAH,EAAAI,aAAA,CACA,IAAAD,EACA,OAEA,IAAAE,EAAA,GAEA,IACAH,EAAAC,EAAAhN,QAAA,CAAA+M,UAAA,CAEA,MAAAnT,EAAA,CACA,MACA,CACA,GAAAmT,aAAAA,EAAA,CACA,IAAAI,EAAAC,WAAA,KACAF,IACAJ,IACAI,EAAA,GAEA,EAASpJ,GACT+I,EAAA9D,gBAAA,aACAsE,aAAAF,GACAD,EAAA,GACAJ,GACA,GACA,MACA,CACA,IAAAQ,EAAA,cACA,GAAAN,EAAAO,QAAA,CAAAjT,IAAA,GAAAgT,GACAT,EAAAjD,GAAA,GAAA0D,GACAT,KAAAA,EAAAjD,GAAA,CAEA,OADAwD,WAAAN,EAAA,GACAD,EAAA9D,gBAAA,QAAA+D,GAEAD,EAAA9D,gBAAA,QAAA+D,EACA,EAugBArU,EAAA,KACA,IAAA+U,EAAA/U,EAAAoR,eAAA,CACA,GAAA2D,GAAA3J,EAAA,CACA,IAAA4J,EAAA1K,GAAAyK,EAAA,CACA9N,IAAA8N,EACAvK,OAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAZ,YAAAA,EACAJ,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACAc,UAAA,GACAC,iBAAAA,EACA3G,iBAAAA,EACAwD,gBAAAA,EACAoD,WAAAA,EACAnG,YAAAA,EACAoG,eAAAA,EACAC,eAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAQ,mBAAAA,EACAP,YAAAA,EACAC,aAAAA,EACAC,kBAAAA,EACAC,iBAAAA,EACAC,sBAAAA,EACAC,gBAAAA,CACA,GACAwJ,GACA5J,EAAApL,EAAAgV,EAEA,CACA,EAAS3J,GAEToI,EAAArP,IAAA,GAAA3E,EAAA8R,OAAA,EACAkC,SAAAA,EAAAtP,OAAA,EACAsP,eAAAA,EAAAzG,UAAA,CAAAO,GAAA,EACA0H,SA/iBAC,CAAA,CAAAb,CAAA,CAAAc,CAAA,EACA,IACAC,EADAX,EAAA,GAEA,IACAW,EAAAF,EAAAzH,KAAA,CAEA,MAAAtM,EAAA,CACA,MACA,CACA,GAAAiU,EACA,OACA,IAAAV,EAAAC,WAAA,KACAF,IACAJ,IACAI,EAAA,GAEA,EAAKU,GACLD,EAAA5E,gBAAA,aACAsE,aAAAF,GACAD,EAAA,GACAJ,GACA,EACA,EAyhBArU,EAAA,KACA,GAAAsL,EAAA,CACA,IAAA+J,EAAA/K,GAAAtK,EAAA,CACAiH,IAAAA,EACAuD,OAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAZ,YAAAA,EACAJ,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACAc,UAAA,GACAC,iBAAAA,EACA3G,iBAAAA,EACAwD,gBAAAA,EACAoD,WAAAA,EACAnG,YAAAA,EACAoG,eAAAA,EACAC,eAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAQ,mBAAAA,EACAP,YAAAA,EACAC,aAAAA,EACAC,kBAAAA,EACAC,iBAAAA,EACAC,sBAAAA,EACAC,gBAAAA,CACA,GACA6J,GACA/J,EAAAtL,EAAAqV,EAEA,CACA,EAAS9J,GAETkI,CACA,CAyEA,SAAA6B,GAAAlR,CAAA,CAAAmR,CAAA,CAAAC,EAAAjO,QAAA,EACA,IAAAgD,EAAA,CAAsBkL,QAAA,GAAAC,QAAA,IAEtB,OADAF,EAAAlF,gBAAA,CAAAlM,EAAAmR,EAAAhL,GACA,IAAAiL,EAAA5F,mBAAA,CAAAxL,EAAAmR,EAAAhL,EACA,CACA,IAAAoL,GAAA,4NAKAC,GAAA,CACAC,IAAA,GACAjT,MAAAA,KACAqN,QAAA9O,KAAA,CAAAwU,IACA,IAEA3S,QAAAA,KACAiN,QAAA9O,KAAA,CAAAwU,IACA,MAEAvS,oBACA6M,QAAA9O,KAAA,CAAAwU,GACA,EACAlS,IAAAA,KACAwM,QAAA9O,KAAA,CAAAwU,IACA,IAEA3R,QACAiM,QAAA9O,KAAA,CAAAwU,GACA,CACA,EAWA,SAAAG,GAAAC,CAAA,CAAAC,CAAA,CAAAzL,EAAA,EAA4C,EAC5C,IAAA0L,EAAA,KACAC,EAAA,EACA,mBAAAC,CAAA,EACA,IAAAC,EAAAC,KAAAD,GAAA,GACAF,GAAA3L,CAAA,IAAAA,EAAA+L,OAAA,EACAJ,CAAAA,EAAAE,CAAA,EAEA,IAAAG,EAAAP,EAAAI,CAAAA,EAAAF,CAAA,EACAM,EAAA,KACAD,GAAA,GAAAA,EAAAP,GACAC,IACArB,aAAAqB,GACAA,EAAA,MAEAC,EAAAE,EACAL,EAAAU,KAAA,CAAAD,EAAAL,IAEAF,GAAA1L,CAAA,IAAAA,EAAAmM,QAAA,EACAT,CAAAA,EAAAtB,WAAA,KACAuB,EAAA3L,CAAA,IAAAA,EAAA+L,OAAA,GAAAD,KAAAD,GAAA,GACAH,EAAA,KACAF,EAAAU,KAAA,CAAAD,EAAAL,EACA,EAAaI,EAAA,CAEb,CACA,CAiBA,SAAAI,GAAAC,CAAA,CAAAnP,CAAA,CAAAoP,CAAA,EACA,IACA,IAAApP,CAAAA,KAAAmP,CAAA,EACA,WACA,EAEA,IAAAE,EAAAF,CAAA,CAAAnP,EAAA,CACAsP,EAAAF,EAAAC,GAWA,MAVA,mBAAAC,IACAA,EAAA1W,SAAA,CAAA0W,EAAA1W,SAAA,KACAD,OAAA4W,gBAAA,CAAAD,EAAA,CACAE,mBAAA,CACAC,WAAA,GACAxS,MAAAoS,CACA,CACA,IAEAF,CAAA,CAAAnP,EAAA,CAAAsP,EACA,KACAH,CAAA,CAAAnP,EAAA,CAAAqP,CACA,CACA,CACA,MAAAjU,EAAA,CACA,WACA,CACA,CACA,CA/EA,oBAAAsU,QAAAA,OAAAC,KAAA,EAAAD,OAAAE,OAAA,EACAzB,CAAAA,GAAA,IAAAwB,MAAAxB,GAAA,CACA3S,IAAAA,CAAAuS,EAAA8B,EAAAC,KACA,QAAAD,GACArH,QAAA9O,KAAA,CAAAwU,IAEA0B,QAAApU,GAAA,CAAAuS,EAAA8B,EAAAC,GAEA,EAAK,EAwEL,IAAAC,GAAAnB,KAAAD,GAAA,CAIA,SAAAqB,GAAAlD,CAAA,EACA,IAAA1R,EAAA6U,EAAAC,EAAAC,EAAAC,EAAAC,EACA,IAAA7Q,EAAAsN,EAAAhN,QAAA,CACA,OACAwQ,KAAA9Q,EAAA+Q,gBAAA,CACA/Q,EAAA+Q,gBAAA,CAAArH,UAAA,CACA4D,KAAAvI,IAAAuI,EAAA0D,WAAA,CACA1D,EAAA0D,WAAA,CACA,CAAAhR,MAAAA,EAAA,OAAAA,EAAAiR,eAAA,CAAAvH,UAAA,GACA,QAAA+G,CAAAA,EAAA,OAAA7U,CAAAA,EAAAoE,MAAAA,EAAA,OAAAA,EAAAkR,IAAA,GAAAtV,KAAA,IAAAA,EAAA,OAAAA,EAAAmH,aAAA,GAAA0N,KAAA,IAAAA,EAAA,OAAAA,EAAA/G,UAAA,GACA,QAAAgH,CAAAA,EAAA1Q,MAAAA,EAAA,OAAAA,EAAAkR,IAAA,GAAAR,KAAA,IAAAA,EAAA,OAAAA,EAAAhH,UAAA,GACA,EACAyH,IAAAnR,EAAA+Q,gBAAA,CACA/Q,EAAA+Q,gBAAA,CAAAnH,SAAA,CACA0D,KAAAvI,IAAAuI,EAAA8D,WAAA,CACA9D,EAAA8D,WAAA,CACA,CAAApR,MAAAA,EAAA,OAAAA,EAAAiR,eAAA,CAAArH,SAAA,GACA,QAAAgH,CAAAA,EAAA,OAAAD,CAAAA,EAAA3Q,MAAAA,EAAA,OAAAA,EAAAkR,IAAA,GAAAP,KAAA,IAAAA,EAAA,OAAAA,EAAA5N,aAAA,GAAA6N,KAAA,IAAAA,EAAA,OAAAA,EAAAhH,SAAA,GACA,QAAAiH,CAAAA,EAAA7Q,MAAAA,EAAA,OAAAA,EAAAkR,IAAA,GAAAL,KAAA,IAAAA,EAAA,OAAAA,EAAAjH,SAAA,GACA,CACA,CACA,CACA,SAAAyH,KACA,OAAAnB,OAAAoB,WAAA,EACAhR,SAAA2Q,eAAA,EAAA3Q,SAAA2Q,eAAA,CAAAM,YAAA,EACAjR,SAAA4Q,IAAA,EAAA5Q,SAAA4Q,IAAA,CAAAK,YAAA,CAEA,SAAAC,KACA,OAAAtB,OAAAuB,UAAA,EACAnR,SAAA2Q,eAAA,EAAA3Q,SAAA2Q,eAAA,CAAAS,WAAA,EACApR,SAAA4Q,IAAA,EAAA5Q,SAAA4Q,IAAA,CAAAQ,WAAA,CAEA,SAAAC,GAAAjV,CAAA,CAAA8G,CAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAkO,CAAA,EACA,IAAAlV,EACA,SAEA,IAAAyB,EAAAzB,EAAAoF,QAAA,GAAApF,EAAAqF,YAAA,CACArF,EACAA,EAAAqG,aAAA,CACA,IAAA5E,EACA,SACA,IAAA0T,EAAA5P,GAAAuB,EAAAC,GACA,IAAAmO,EAAA,CACA,IAAAE,EAAApO,GAAAvF,EAAAiE,OAAA,CAAAsB,GACA,OAAAmO,EAAA1T,IAAA,CAAA2T,CACA,CACA,IAAAC,EAAAtQ,GAAAtD,EAAA0T,GACAG,EAAA,SACA,CAAAD,CAAAA,EAAA,KAGArO,GACAsO,CAAAA,EAAAvQ,GAAAtD,EAAA8D,GAAA,KAAAyB,GAAA,EAEAqO,EAAA,IAAAC,EAAA,GAGAD,EAAAC,EACA,CAIA,SAAAC,GAAAlZ,CAAA,CAAAwK,CAAA,EACA,OAAAA,KAAAA,EAAA5H,KAAA,CAAA5C,EACA,CAkBA,SAAAmZ,GAAAC,CAAA,EACA,MAAA/U,CAAAA,CAAA+U,EAAAC,cAAA,CA0BA,SAAAC,GAAAtZ,CAAA,CAAAwK,CAAA,EACA,MAAAnG,CAAAA,CAAArE,CAAAA,WAAAA,EAAAuZ,QAAA,EAAA/O,EAAAzH,OAAA,CAAA/C,EAAA,CACA,CACA,SAAAwZ,GAAAxZ,CAAA,CAAAwK,CAAA,EACA,MAAAnG,CAAAA,CAAArE,CAAAA,SAAAA,EAAAuZ,QAAA,EACAvZ,EAAA+I,QAAA,GAAA/I,EAAAgJ,YAAA,EACAhJ,EAAAqF,YAAA,EACArF,eAAAA,EAAAqF,YAAA,SACAmF,EAAAzH,OAAA,CAAA/C,EAAA,CACA,CACA,SAAAyZ,GAAAzZ,CAAA,EACA,MAAAqE,CAAAA,CAAArE,CAAAA,MAAAA,EAAA,OAAAA,EAAAE,UAAA,CACA,CA5HA,iBAAqBoG,IAAA,CAAA+P,KAAAD,GAAA,GAAA9V,QAAA,KACrBkX,CAAAA,GAAA,QAAAnB,OAAAqD,OAAA,GA4HA,OAAAC,GACApX,aAAA,CACA,KAAAO,EAAA,GACA,KAAA8W,UAAA,KAAAjX,QACA,KAAAkX,UAAA,KAAApX,GACA,CACAG,MAAAwK,CAAA,EACA,IAAAvK,EACA,cAAAA,CAAAA,EAAA,KAAA+W,UAAA,CAAA3W,GAAA,CAAAmK,EAAA,GAAAvK,KAAA,IAAAA,EAAAA,EAAA,EACA,CACAY,IAAA2J,CAAA,EACA,YAAAwM,UAAA,CAAAnW,GAAA,CAAA2J,EACA,CACAxJ,IAAAwJ,CAAA,CAAAtK,CAAA,MAGAgX,SAFA,KAAArW,GAAA,CAAA2J,GACA,KAAAxK,KAAA,CAAAwK,IAGA0M,EADAhX,KAAAkJ,IAAAlJ,EACA,KAAAA,EAAA,GAGAA,EACA,KAAA8W,UAAA,CAAA9V,GAAA,CAAAsJ,EAAA0M,GACA,KAAAD,UAAA,CAAA/V,GAAA,CAAAgW,EAAA1M,GACA0M,EACA,CACAC,SAAAjX,CAAA,EACA,YAAA+W,UAAA,CAAA5W,GAAA,CAAAH,IAAA,IACA,CACAkB,OAAA,CACA,KAAA4V,UAAA,KAAAjX,QACA,KAAAkX,UAAA,KAAApX,IACA,KAAAK,EAAA,EACA,CACAkX,YAAA,CACA,YAAAlX,EAAA,EACA,CACA,CACA,SAAAmX,GAAAja,CAAA,EACA,IAAA6C,EAAA6U,EACA,IAAAwC,EAAA,KAIA,MAHA,QAAAxC,CAAAA,EAAA,OAAA7U,CAAAA,EAAA7C,EAAAma,WAAA,GAAAtX,KAAA,IAAAA,EAAA,OAAAA,EAAAtC,IAAA,CAAAP,EAAA,GAAA0X,KAAA,IAAAA,EAAA,OAAAA,EAAA3O,QAAA,IAAAqR,KAAAC,sBAAA,EACAra,EAAAma,WAAA,GAAAla,IAAA,EACAia,CAAAA,EAAAla,EAAAma,WAAA,GAAAla,IAAA,EACAia,CACA,CAeA,SAAAI,GAAAta,CAAA,EACA,IAAAiH,EAAAjH,EAAAua,aAAA,OACA,EAAAtT,GAEAA,CAAAA,EAAA2F,QAAA,CAAA5M,IAAAwa,SAXAxa,CAAA,EACA,IAAAiH,EAAAjH,EAAAua,aAAA,CACA,IAAAtT,EACA,SACA,IAAAiT,EAAAO,SAXAza,CAAA,EACA,IACAka,EADAQ,EAAA1a,EAEA,KAAAka,EAAAD,GAAAS,IACAA,EAAAR,EACA,OAAAQ,CACA,EAKA1a,GACA,OAAAiH,EAAA2F,QAAA,CAAAsN,EACA,EAKAla,EAAA,CACA,CAEA,IAAA2a,IACAtb,CADAA,EASCsb,IAAA,GARD,CAAAtb,EAAA,uCACAA,CAAA,CAAAA,EAAA,eACAA,CAAA,CAAAA,EAAA,+BACAA,CAAA,CAAAA,EAAA,6CACAA,CAAA,CAAAA,EAAA,eACAA,CAAA,CAAAA,EAAA,mBACAA,CAAA,CAAAA,EAAA,mBACAA,GAEAub,IACAtb,CADAA,EAmBCsb,IAAA,GAlBD,CAAAtb,EAAA,uBACAA,CAAA,CAAAA,EAAA,yBACAA,CAAA,CAAAA,EAAA,uCACAA,CAAA,CAAAA,EAAA,mBACAA,CAAA,CAAAA,EAAA,mCACAA,CAAA,CAAAA,EAAA,iBACAA,CAAA,CAAAA,EAAA,yBACAA,CAAA,CAAAA,EAAA,uCACAA,CAAA,CAAAA,EAAA,mCACAA,CAAA,CAAAA,EAAA,mCACAA,CAAA,CAAAA,EAAA,gBACAA,CAAA,CAAAA,EAAA,cACAA,CAAA,CAAAA,EAAA,gBACAA,CAAA,CAAAA,EAAA,wCACAA,CAAA,CAAAA,EAAA,0BACAA,CAAA,CAAAA,EAAA,0CACAA,CAAA,CAAAA,EAAA,kCACAA,GAEAub,IACAtb,CADAA,EAaCsb,IAAA,GAZD,CAAAtb,EAAA,qBACAA,CAAA,CAAAA,EAAA,yBACAA,CAAA,CAAAA,EAAA,iBACAA,CAAA,CAAAA,EAAA,6BACAA,CAAA,CAAAA,EAAA,uBACAA,CAAA,CAAAA,EAAA,iBACAA,CAAA,CAAAA,EAAA,eACAA,CAAA,CAAAA,EAAA,2BACAA,CAAA,CAAAA,EAAA,2CACAA,CAAA,CAAAA,EAAA,uBACAA,CAAA,CAAAA,EAAA,8BACAA,GAEAub,IACAtb,CADAA,EAKCsb,IAAA,GAJD,CAAAtb,EAAA,iBACAA,CAAA,CAAAA,EAAA,aACAA,CAAA,CAAAA,EAAA,iBACAA,EAMA,OAAAub,GACAxY,aAAA,CACA,KAAAd,MAAA,GACA,KAAAuZ,IAAA,MACA,KAAAC,IAAA,KACA,CACAhY,IAAAiY,CAAA,EACA,GAAAA,GAAA,KAAAzZ,MAAA,CACA,8CAEA,IAAA0Z,EAAA,KAAAH,IAAA,CACA,QAAAI,EAAA,EAA4BA,EAAAF,EAAkBE,IAC9CD,EAAA,CAAAA,MAAAA,EAAA,OAAAA,EAAAE,IAAA,QAEA,OAAAF,CACA,CACAG,QAAAtb,CAAA,EACA,IAAA2D,EAAA,CACAe,MAAA1E,EACAkW,SAAA,KACAmF,KAAA,IACA,EAEA,GADArb,EAAAub,IAAA,CAAA5X,EACA3D,EAAAmS,eAAA,EAzBA,SAyBAnS,EAAAmS,eAAA,EACA,IAAAgJ,EAAAnb,EAAAmS,eAAA,CAAAoJ,IAAA,CAAAF,IAAA,CACA1X,EAAA0X,IAAA,CAAAF,EACAxX,EAAAuS,QAAA,CAAAlW,EAAAmS,eAAA,CAAAoJ,IAAA,CACAvb,EAAAmS,eAAA,CAAAoJ,IAAA,CAAAF,IAAA,CAAA1X,EACAwX,GACAA,CAAAA,EAAAjF,QAAA,CAAAvS,CAAA,CAEA,MACA,GAAA3D,EAAAkS,WAAA,EAlCA,SAmCAlS,EAAAkS,WAAA,EACAlS,EAAAkS,WAAA,CAAAqJ,IAAA,CAAArF,QAAA,EACA,IAAAiF,EAAAnb,EAAAkS,WAAA,CAAAqJ,IAAA,CAAArF,QAAA,CACAvS,EAAAuS,QAAA,CAAAiF,EACAxX,EAAA0X,IAAA,CAAArb,EAAAkS,WAAA,CAAAqJ,IAAA,CACAvb,EAAAkS,WAAA,CAAAqJ,IAAA,CAAArF,QAAA,CAAAvS,EACAwX,GACAA,CAAAA,EAAAE,IAAA,CAAA1X,CAAA,CAEA,MAEA,KAAAqX,IAAA,EACA,MAAAA,IAAA,CAAA9E,QAAA,CAAAvS,CAAA,EAEAA,EAAA0X,IAAA,MAAAL,IAAA,CACA,KAAAA,IAAA,CAAArX,CAEA,QAAAA,EAAA0X,IAAA,EACA,MAAAJ,IAAA,CAAAtX,CAAA,EAEA,KAAAlC,MAAA,EACA,CACA+Z,WAAAxb,CAAA,EACA,IAAAmb,EAAAnb,EAAAub,IAAA,CACA,KAAAP,IAAA,GAGAG,EAAAjF,QAAA,EAUAiF,EAAAjF,QAAA,CAAAmF,IAAA,CAAAF,EAAAE,IAAA,CACAF,EAAAE,IAAA,CACAF,EAAAE,IAAA,CAAAnF,QAAA,CAAAiF,EAAAjF,QAAA,CAGA,KAAA+E,IAAA,CAAAE,EAAAjF,QAAA,GAdA,KAAA8E,IAAA,CAAAG,EAAAE,IAAA,CACA,KAAAL,IAAA,CACA,KAAAA,IAAA,CAAA9E,QAAA,MAGA,KAAA+E,IAAA,OAYAjb,EAAAub,IAAA,EACA,OAAAvb,EAAAub,IAAA,CAEA,KAAA9Z,MAAA,GACA,CACA,CACA,IAAAga,GAAA,CAAA3Y,EAAA4Y,IAAA,GAAqC5Y,EAAG,GAAG4Y,EAAS,QACpDC,GACApZ,aAAA,CACA,KAAAqZ,MAAA,IACA,KAAAC,MAAA,IACA,KAAAC,KAAA,IACA,KAAA9O,UAAA,IACA,KAAA+O,OAAA,IACA,KAAAC,UAAA,IACA,KAAAC,QAAA,IACA,KAAAC,QAAA,KAAAC,IACA,KAAAC,QAAA,KAAAD,IACA,KAAAE,UAAA,KAAAF,IACA,KAAAG,gBAAA,KACAC,EAAAhZ,OAAA,MAAAiZ,eAAA,EACA,KAAAC,IAAA,EACA,EACA,KAAAA,IAAA,MACA,QAAAb,MAAA,OAAAC,MAAA,CACA,OAEA,IAAAa,EAAA,GACAC,EAAA,IAAAR,IACAS,EAAA,IAAA7B,GACA8B,EAAA,IACA,IAAAC,EAAA9c,EACA+c,EAt6CA,GAu6CA,KAAAA,KAAAA,GAEAA,EAAAD,CADAA,EAAAA,GAAAA,EAAA5K,WAAA,GACA,KAAA1H,MAAA,CAAA5H,KAAA,CAAAka,GAEA,OAAAC,CACA,EACAC,EAAA,IACA,IAAAhd,EAAAiJ,UAAA,GAAAqR,GAAAta,GACA,OAEA,IAAA0b,EAAA3b,EAAAC,EAAAiJ,UAAA,EACA,KAAAuB,MAAA,CAAA5H,KAAA,CAAAqX,GAAAja,IACA,KAAAwK,MAAA,CAAA5H,KAAA,CAAA5C,EAAAiJ,UAAA,EACA8T,EAAAF,EAAA7c,GACA,GAAA0b,KAAAA,GAAAqB,KAAAA,EACA,OAAAH,EAAAtB,OAAA,CAAAtb,GAEA,IAAA4S,EAAAtI,GAAAtK,EAAA,CACAiH,IAAA,KAAAA,GAAA,CACAuD,OAAA,KAAAA,MAAA,CACAC,WAAA,KAAAA,UAAA,CACAC,cAAA,KAAAA,aAAA,CACAX,YAAA,KAAAA,WAAA,CACAY,gBAAA,KAAAA,eAAA,CACAhB,cAAA,KAAAA,aAAA,CACAE,gBAAA,KAAAA,eAAA,CACAD,iBAAA,KAAAA,gBAAA,CACAE,mBAAA,KAAAA,kBAAA,CACAc,UAAA,GACAa,kBAAA,GACAZ,iBAAA,KAAAA,gBAAA,CACA3G,iBAAA,KAAAA,gBAAA,CACAwD,gBAAA,KAAAA,eAAA,CACAoD,WAAA,KAAAA,UAAA,CACAnG,YAAA,KAAAA,WAAA,CACAoG,eAAA,KAAAA,cAAA,CACAC,eAAA,KAAAA,cAAA,CACAE,aAAA,KAAAA,YAAA,CACAD,aAAA,KAAAA,YAAA,CACAE,YAAA,IACAmO,GAAA2D,EAAA,KAAAzS,MAAA,GACA,KAAA0S,aAAA,CAAAC,SAAA,CAAAF,GAEAzD,GAAAyD,EAAA,KAAAzS,MAAA,GACA,KAAA4S,iBAAA,CAAAC,gBAAA,CAAAJ,GAEAxD,GAAAzZ,IACA,KAAAsd,gBAAA,CAAAC,aAAA,CAAAvd,EAAAE,UAAA,MAAA+G,GAAA,CAEA,EACAmE,aAAA,CAAAoS,EAAAC,KACA,KAAAP,aAAA,CAAAQ,YAAA,CAAAF,EAAAC,GACA,KAAAH,gBAAA,CAAAK,mBAAA,CAAAH,EACA,EACAlS,iBAAA,CAAA4J,EAAAuI,KACA,KAAAL,iBAAA,CAAAQ,iBAAA,CAAA1I,EAAAuI,EACA,CACA,GACA7K,IACA8J,EAAA3a,IAAA,EACA2Z,SAAAA,EACAqB,OAAAA,EACApZ,KAAAiP,CACA,GACA+J,EAAA/Y,GAAA,CAAAgP,EAAA9P,EAAA,EAEA,EACA,UAAAkZ,UAAA,CAAAva,MAAA,EACA,KAAA+I,MAAA,CAAApH,iBAAA,MAAA4Y,UAAA,CAAA6B,KAAA,IAEA,QAAA7d,KAAA,KAAAoc,QAAA,CACA0B,CAAAA,CAAAA,GAAA,KAAA/B,OAAA,CAAA/b,EAAA,KAAAwK,MAAA,GACA,KAAA4R,QAAA,CAAA3Y,GAAA,CAAAzD,EAAAiJ,UAAA,IAGA+T,EAAAhd,GAEA,QAAAA,KAAA,KAAAkc,QAAA,CACA,QAAAG,UAAA,CAAArc,IACA8d,GAAA,KAAA/B,OAAA,CAAA/b,EAAA,KAAAwK,MAAA,EAGAuT,GAAA,KAAA3B,QAAA,CAAApc,GACAgd,EAAAhd,GAGA,KAAAqc,UAAA,CAAAzY,GAAA,CAAA5D,GANAgd,EAAAhd,GASA,IAAAge,EAAA,KACA,KAAApB,EAAAnb,MAAA,GACA,IAAAkC,EAAA,KACA,GAAAqa,EAAA,CACA,IAAAtC,EAAA,KAAAlR,MAAA,CAAA5H,KAAA,CAAAob,EAAAtZ,KAAA,CAAAuE,UAAA,EACA8T,EAAAF,EAAAmB,EAAAtZ,KAAA,CACA,MAAAgX,GAAAqB,KAAAA,GACApZ,CAAAA,EAAAqa,CAAA,CAEA,CACA,IAAAra,EAAA,CACA,IAAAsa,EAAArB,EAAA3B,IAAA,CACA,KAAAgD,GAAA,CACA,IAAAC,EAAAD,EAEA,GADAA,EAAAA,EAAA/H,QAAA,CACAgI,EAAA,CACA,IAAAxC,EAAA,KAAAlR,MAAA,CAAA5H,KAAA,CAAAsb,EAAAxZ,KAAA,CAAAuE,UAAA,EACA8T,EAAAF,EAAAqB,EAAAxZ,KAAA,EACA,GAAAqY,KAAAA,EACA,SACA,GAAArB,KAAAA,EAAA,CACA/X,EAAAua,EACA,KACA,CACA,CACA,IAAAC,EAAAD,EAAAxZ,KAAA,CACA,GAAAyZ,EAAAlV,UAAA,EACAkV,EAAAlV,UAAA,CAAAF,QAAA,GACAqR,KAAAC,sBAAA,EACA,IAAAH,EAAAiE,EAAAlV,UAAA,CACAhJ,IAAA,CACAyb,EAAA,KAAAlR,MAAA,CAAA5H,KAAA,CAAAsX,GACA,GAAAwB,KAAAA,EAAA,CACA/X,EAAAua,EACA,KACA,CACA,CACA,CACA,CACA,CACA,CACA,IAAAva,EAAA,CACA,KAAAiZ,EAAA5B,IAAA,EACA4B,EAAApB,UAAA,CAAAoB,EAAA5B,IAAA,CAAAtW,KAAA,EAEA,KACA,CACAsZ,EAAAra,EAAAuS,QAAA,CACA0G,EAAApB,UAAA,CAAA7X,EAAAe,KAAA,EACAsY,EAAArZ,EAAAe,KAAA,CACA,CACA,IAAA0Z,EAAA,CACAtC,MAAA,KAAAA,KAAA,CACAjG,GAAA,MACA/S,GAAA,KAAA0H,MAAA,CAAA5H,KAAA,CAAAgC,EAAAjB,IAAA,EACAe,MAAAE,EAAAF,KAAA,CACA,GACA2Z,MAAA,KAAA1B,EAAAlZ,GAAA,CAAAmB,EAAA9B,EAAA,GACAub,MAAA,SAAA7T,MAAA,CAAA/G,GAAA,CAAAmB,EAAA9B,EAAA,GACAkK,WAAA,KAAAA,UAAA,CACA6I,GAAA,KACA,IAA4B7I,WAAAA,CAAA,EAAasR,EACzC,oBAAAtR,EAAAuR,KAAA,EACA,IAAAC,EAAA7c,KAAAC,SAAA,CAAA0c,EAAAG,SAAA,EACAC,EAAA/c,KAAAC,SAAA,CAAA0c,EAAAK,gBAAA,CACAH,CAAAA,EAAA/c,MAAA,CAAAuL,EAAAuR,KAAA,CAAA9c,MAAA,EACA,CAAA+c,EAAAE,CAAA,EAAAld,KAAA,SAAAC,MAAA,GACAuL,EAAAuR,KAAA,CAAA/c,KAAA,SAAAC,MAAA,EACAuL,CAAAA,EAAAuR,KAAA,CAAAD,EAAAG,SAAA,CAGA,CACA,OACA3b,GAAA,KAAA0H,MAAA,CAAA5H,KAAA,CAAA0b,EAAA3a,IAAA,EACAqJ,WAAAA,CACA,CACA,GACAqR,MAAA,KAAA1B,EAAAlZ,GAAA,CAAA6a,EAAAxb,EAAA,GACAub,MAAA,SAAA7T,MAAA,CAAA/G,GAAA,CAAA6a,EAAAxb,EAAA,GACAiZ,QAAA,KAAAA,OAAA,CACAW,KAAAA,CACA,EACA,GAAAZ,KAAA,CAAAra,MAAA,EACA2c,EAAApR,UAAA,CAAAvL,MAAA,EACA2c,EAAArC,OAAA,CAAAta,MAAA,EACA2c,EAAA1B,IAAA,CAAAjb,MAAA,IAGA,KAAAqa,KAAA,IACA,KAAA9O,UAAA,IACA,KAAA+O,OAAA,IACA,KAAAG,QAAA,KAAAC,IACA,KAAAC,QAAA,KAAAD,IACA,KAAAE,UAAA,KAAAF,IACA,KAAAF,QAAA,IACA,KAAA2C,UAAA,CAAAR,GACA,EACA,KAAA5B,eAAA,SAIAqC,EAHA,IAAA3F,GAAA4F,EAAAtJ,MAAA,MAAAhL,MAAA,GAIA,IACAqU,EAAAtX,SAAAwX,cAAA,CAAAC,kBAAA,EACA,CACA,MAAA7U,EAAA,CACA0U,EAAA,KAAA5X,GAAA,CAEA,OAAA6X,EAAA1a,IAAA,EACA,qBACA,IAAAM,EAAAoa,EAAAtJ,MAAA,CAAA7H,WAAA,CACAiL,GAAAkG,EAAAtJ,MAAA,MAAA/K,UAAA,MAAAC,aAAA,MAAAC,eAAA,MACAjG,IAAAoa,EAAAtP,QAAA,EACA,KAAAsM,KAAA,CAAA/Z,IAAA,EACA2C,MAAAgF,GAAAoV,EAAAtJ,MAAA,MAAA7L,aAAA,MAAAC,gBAAA,MAAAC,eAAA,MAAAC,kBAAA,MAAAC,WAAA,GAAArF,EACA,KAAAoG,UAAA,CACA,KAAAA,UAAA,CAAApG,GACAA,EAAAxD,OAAA,cACAwD,EACAf,KAAAmb,EAAAtJ,MAAA,GAGA,KACA,CACA,kBACA,IAAAA,EAAAsJ,EAAAtJ,MAAA,CACAyJ,EAAAH,EAAAG,aAAA,CACAva,EAAAoa,EAAAtJ,MAAA,CAAAnQ,YAAA,CAAA4Z,GACA,GAAAA,UAAAA,EAAA,CACA,IAAA7a,EAAAa,EAAAuQ,GACArR,EAAAqR,EAAArR,OAAA,CACAO,EAAAS,EAAAqQ,EAAArR,EAAAC,GACA,IAAAiO,EAAApO,EAAA,CACAC,iBAAA,KAAAA,gBAAA,CACAC,QAAAA,EACAC,KAAAA,CACA,GACAyJ,EAAAnE,GAAAoV,EAAAtJ,MAAA,MAAA7L,aAAA,MAAAC,gBAAA,MAAAC,eAAA,MAAAC,kBAAA,CAAAuI,GACA3N,EAAAH,EAAA,CACAC,SAAAqJ,EACApJ,QAAA+Q,EACA9Q,MAAAA,EACAC,YAAA,KAAAA,WAAA,EAEA,CACA,GAAAiU,GAAAkG,EAAAtJ,MAAA,MAAA/K,UAAA,MAAAC,aAAA,MAAAC,eAAA,MACAjG,IAAAoa,EAAAtP,QAAA,CACA,OAEA,IAAA0P,EAAA,KAAAlS,UAAA,CAAAM,IAAA,IAAAlG,EAAAzD,IAAA,GAAAmb,EAAAtJ,MAAA,EACA,GAAAA,WAAAA,EAAArR,OAAA,EACA8a,QAAAA,GACA,MAAAzT,eAAA,CAAA9G,GAAA,CACA,GAAA8Q,EAAApE,eAAA,CAIA,OAHA6N,EAAA,QAKA,CAeA,GAdAC,IACAA,EAAA,CACAvb,KAAAmb,EAAAtJ,MAAA,CACAxI,WAAA,GACAyR,UAAA,GACAE,iBAAA,EACA,EACA,KAAA3R,UAAA,CAAAjL,IAAA,CAAAmd,IAEA,SAAAD,GACAzJ,UAAAA,EAAArR,OAAA,EACA,cAAA2a,EAAAtP,QAAA,MAAAlL,WAAA,IACAkR,EAAA2J,YAAA,+BAEA,CAAA3W,GAAAgN,EAAArR,OAAA,CAAA8a,KACAC,EAAAlS,UAAA,CAAAiS,EAAA,CAAAzX,GAAA,KAAAP,GAAA,CAAA3C,EAAAkR,EAAArR,OAAA,EAAAG,EAAA2a,GAAAva,EAAA8Q,EAAA,KAAA9N,eAAA,EACAuX,UAAAA,GAAA,CACA,IAAAG,EAAAP,EAAAxX,aAAA,SAIA,QAAAgY,KAHAP,EAAAtP,QAAA,EACA4P,EAAAD,YAAA,SAAAL,EAAAtP,QAAA,EAEA3O,MAAAC,IAAA,CAAA0U,EAAA+I,KAAA,IACA,IAAAe,EAAA9J,EAAA+I,KAAA,CAAAgB,gBAAA,CAAAF,GACAG,EAAAhK,EAAA+I,KAAA,CAAAkB,mBAAA,CAAAJ,EACAC,CAAAA,IAAAF,EAAAb,KAAA,CAAAgB,gBAAA,CAAAF,IACAG,IAAAJ,EAAAb,KAAA,CAAAkB,mBAAA,CAAAJ,GACAG,KAAAA,EACAN,EAAAT,SAAA,CAAAY,EAAA,CAAAC,EAGAJ,EAAAT,SAAA,CAAAY,EAAA,EAAAC,EAAAE,EAAA,CAIAN,EAAAP,gBAAA,CAAAU,EAAA,EAAAC,EAAAE,EAAA,CAGA,QAAAH,KAAAxe,MAAAC,IAAA,CAAAse,EAAAb,KAAA,EACA,KAAA/I,EAAA+I,KAAA,CAAAgB,gBAAA,CAAAF,IACAH,CAAAA,EAAAT,SAAA,CAAAY,EAAA,IAGA,CAEA,KACA,CACA,gBACA,GAAAzG,GAAAkG,EAAAtJ,MAAA,MAAA/K,UAAA,MAAAC,aAAA,MAAAC,eAAA,KACA,OAEAmU,EAAAY,UAAA,CAAAnc,OAAA,SAAAoc,OAAA,CAAA3f,EAAA8e,EAAAtJ,MAAA,GACAsJ,EAAAc,YAAA,CAAArc,OAAA,KACA,IAAAsc,EAAA,KAAArV,MAAA,CAAA5H,KAAA,CAAA5C,GACA0b,EAAA3b,EAAA+e,EAAAtJ,MAAA,EACA,KAAAhL,MAAA,CAAA5H,KAAA,CAAAkc,EAAAtJ,MAAA,CAAAvV,IAAA,EACA,KAAAuK,MAAA,CAAA5H,KAAA,CAAAkc,EAAAtJ,MAAA,EACAoD,GAAAkG,EAAAtJ,MAAA,MAAA/K,UAAA,MAAAC,aAAA,MAAAC,eAAA,MACAuO,GAAAlZ,EAAA,KAAAwK,MAAA,GAxlBAA,KAAAA,IAylBA,CAAAA,MAAA,CAzlBA5H,KAAA,CAylBA5C,KAGA,KAAAkc,QAAA,CAAAzY,GAAA,CAAAzD,IACA8f,GAAA,KAAA5D,QAAA,CAAAlc,GACA,KAAAqc,UAAA,CAAAzY,GAAA,CAAA5D,IAEA,KAAAkc,QAAA,CAAAzY,GAAA,CAAAqb,EAAAtJ,MAAA,GAAAqK,KAAAA,GACAE,SA5lBAA,EAAAvK,CAAA,CAAAhL,CAAA,EACA,GAAAzK,EAAAyV,GACA,SAEA,IAAA1S,EAAA0H,EAAA5H,KAAA,CAAA4S,SACA,CAAAhL,EAAA/G,GAAA,CAAAX,IAGA0S,CAAAA,CAAAA,EAAAvM,UAAA,EACAuM,EAAAvM,UAAA,CAAAF,QAAA,GAAAyM,EAAAvJ,aAAA,KAGAuJ,EAAAvM,UAAA,EAGA8W,EAAAvK,EAAAvM,UAAA,CAAAuB,GACA,EA4kBAsU,EAAAtJ,MAAA,MAAAhL,MAAA,IACA,KAAA4R,QAAA,CAAA3Y,GAAA,CAAAzD,IACA,KAAAic,QAAA,CAAAR,GAAAoE,EAAAnE,GAAA,CACAoE,GAAA,KAAA1D,QAAA,CAAApc,GAGA,KAAA+b,OAAA,CAAAha,IAAA,EACA2Z,SAAAA,EACA5Y,GAAA+c,EACA3L,SAAAnU,EAAAA,CAAAA,EAAA+e,EAAAtJ,MAAA,GAAArV,EAAA2e,EAAAtJ,MAAA,IAEAxJ,KAAAA,CACA,IAEA,KAAAgQ,UAAA,CAAAja,IAAA,CAAA/B,GACA,EAGA,EACA,EACA,KAAA2f,OAAA,EAAA3f,EAAAwV,KACA,SAAAwK,oBAAA,CAAAC,aAAA,CAAAjgB,EAAA,QAEA,MAAAkc,QAAA,CAAAzY,GAAA,CAAAzD,IAAA,KAAAoc,QAAA,CAAA3Y,GAAA,CAAAzD,EAAA,GAEA,QAAAwK,MAAA,CAAA9G,OAAA,CAAA1D,GAAA,CACA,GAAAkZ,GAAAlZ,EAAA,KAAAwK,MAAA,EACA,OAEA,KAAA4R,QAAA,CAAAxY,GAAA,CAAA5D,GACA,IAAAkgB,EAAA,KACA1K,GAAA,KAAAhL,MAAA,CAAA9G,OAAA,CAAA8R,IACA0K,CAAAA,EAAA,KAAA1V,MAAA,CAAA5H,KAAA,CAAA4S,EAAA,EAEA0K,GAAAA,KAAAA,GACA,MAAAjE,QAAA,CAAAR,GAAA,KAAAjR,MAAA,CAAA5H,KAAA,CAAA5C,GAAAkgB,GAAA,IAEA,MAEA,KAAAhE,QAAA,CAAAtY,GAAA,CAAA5D,GACA,KAAAqc,UAAA,CAAAhZ,MAAA,CAAArD,EAEA,EAAA4Y,GAAA5Y,EAAA,KAAAyK,UAAA,MAAAC,aAAA,MAAAC,eAAA,OACA3K,EAAAsD,UAAA,CAAAC,OAAA,SAAAoc,OAAA,CAAA5L,IACA0F,GAAAzZ,IACAA,EAAAE,UAAA,CAAAoD,UAAA,CAAAC,OAAA,KACA,KAAAyc,oBAAA,CAAApc,GAAA,CAAAmQ,EAAA,MACA,KAAA4L,OAAA,CAAA5L,EAAA/T,EACA,IAGA,CACA,CACAmgB,KAAA5V,CAAA,EACA,CACA,aACA,aACA,gBACA,kBACA,cACA,gBACA,kBACA,mBACA,qBACA,mBACA,mBACA,kBACA,aACA,cACA,kBACA,eACA,eACA,iBACA,iBACA,MACA,SACA,gBACA,oBACA,mBACA,gBACA,uBACA,CAAAhH,OAAA,KACA,KAAA6c,EAAA,CAAA7V,CAAA,CAAA6V,EAAA,EAEA,CACAC,QAAA,CACA,KAAAzE,MAAA,IACA,KAAA0E,aAAA,CAAAD,MAAA,EACA,CACAE,UAAA,CACA,KAAA3E,MAAA,IACA,KAAA0E,aAAA,CAAAC,QAAA,GACA,KAAA9D,IAAA,EACA,CACA+D,UAAA,CACA,YAAA5E,MAAA,CAEA6E,MAAA,CACA,KAAA5E,MAAA,IACA,KAAAyE,aAAA,CAAAG,IAAA,EACA,CACAC,QAAA,CACA,KAAA7E,MAAA,IACA,KAAAyE,aAAA,CAAAI,MAAA,GACA,KAAAjE,IAAA,EACA,CACAzY,OAAA,CACA,KAAAsZ,gBAAA,CAAAtZ,KAAA,GACA,KAAAsc,aAAA,CAAAtc,KAAA,EACA,CACA,CACA,SAAA8b,GAAAa,CAAA,CAAA3gB,CAAA,EACA2gB,EAAAtd,MAAA,CAAArD,GACAA,EAAAsD,UAAA,CAAAC,OAAA,IAAAuc,GAAAa,EAAA5M,GACA,CACA,SAAA+J,GAAA/B,CAAA,CAAA/b,CAAA,CAAAwK,CAAA,SACA,IAAAuR,EAAAta,MAAA,EAEAmf,SAEAA,EAAA7E,CAAA,CAAA/b,CAAA,CAAAwK,CAAA,EACA,IAAYvB,WAAAA,CAAA,EAAajJ,EACzB,IAAAiJ,EACA,SAEA,IAAAyS,EAAAlR,EAAA5H,KAAA,CAAAqG,SACA,EAAA8S,EAAA/M,IAAA,IAAA6R,EAAA/d,EAAA,GAAA4Y,IAGAkF,EAAA7E,EAAA9S,EAAAuB,EACA,EAZAuR,EAAA/b,EAAAwK,EACA,CAYA,SAAAuT,GAAAja,CAAA,CAAA9D,CAAA,SACA,IAAA8D,EAAAgd,IAAA,EAEAC,SAEAA,EAAAjd,CAAA,CAAA9D,CAAA,EACA,IAAYiJ,WAAAA,CAAA,EAAajJ,QACzB,EAAAiJ,MAGAnF,EAAAL,GAAA,CAAAwF,IAGA8X,EAAAjd,EAAAmF,GACA,EAXAnF,EAAA9D,EACA,CAmBA,IAAAghB,GAAA,GACA,EAGA,IAAAC,KACA,IACA,OAAAC,KAAAD,EACA,CACA,MAAA9f,EAAA,CACA,GAAAlC,GAAAA,CAAA,IAAAA,EAAAkC,GACA,WACA,CAEA,OAAAA,CACA,CACA,EAbA+f,EAiBAC,GAAA,GACA,SAAAC,GAAAhI,CAAA,EACA,IACA,oBAAAA,EAAA,CACA,IAAAiI,EAAAjI,EAAAkI,YAAA,GACA,GAAAD,EAAA5f,MAAA,CACA,OAAA4f,CAAA,SAGA,YAAAjI,GAAAA,EAAAiI,IAAA,CAAA5f,MAAA,CACA,OAAA2X,EAAAiI,IAAA,IAGA,MAAAxe,EAAA,CACA,CACA,OAAAuW,GAAAA,EAAA5D,MAAA,CAEA,SAAA+L,GAAAhX,CAAA,CAAAiX,CAAA,EACA,IAAA3e,EAAA6U,EACA,IAAA+J,EAAA,IAAA9F,GACAwF,GAAApf,IAAA,CAAA0f,GACAA,EAAAtB,IAAA,CAAA5V,GACA,IAAAmX,EAAAvK,OAAAwK,gBAAA,EACAxK,OAAAyK,oBAAA,CACAC,EAAA,OAAAnK,CAAAA,EAAA,OAAA7U,CAAAA,EAAAsU,MAAAA,OAAA,OAAAA,OAAA2K,IAAA,GAAAjf,KAAA,IAAAA,EAAA,OAAAA,EAAAkf,UAAA,GAAArK,KAAA,IAAAA,EAAA,OAAAA,EAAAnX,IAAA,CAAAsC,EAAA,oBACAgf,GACA1K,MAAA,CAAA0K,EAAA,EACAH,CAAAA,EAAAvK,MAAA,CAAA0K,EAAA,EAEA,IAAAG,EAAA,IAAAN,EAAAV,GAAA,IACAzW,EAAA0X,UAAA,EAAA1X,CAAA,IAAAA,EAAA0X,UAAA,CAAA1F,IAGAkF,EAAAnF,gBAAA,CAAA4F,IAAA,CAAAT,GAAAlF,EACA,IASA,OARAyF,EAAAG,OAAA,CAAAX,EAAA,CACAxU,WAAA,GACAoV,kBAAA,GACAC,cAAA,GACAC,sBAAA,GACAC,UAAA,GACAC,QAAA,EACA,GACAR,CACA,CA8IA,SAAAS,GAAA,CAA8BC,SAAAA,CAAA,CAAAzb,IAAAA,CAAA,CAAAuD,OAAAA,CAAA,CAAAC,WAAAA,CAAA,CAAAC,cAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAAgY,SAAAA,CAAA,CAA8E,EAC5G,IAAAC,EAAA5B,GAAAlL,GAAAkL,GAAA,IACA,IAAAxL,EAAA4L,GAAAyB,GACA,IAAArN,GACAoD,GAAApD,EAAA/K,EAAAC,EAAAC,EAAA,IACA,OAEA,IAAA7H,EAAA0H,EAAA5H,KAAA,CAAA4S,GACA,GAAAA,IAAAvO,GAAAA,EAAA6b,WAAA,EACA,IAAAC,EAAAtL,GAAAxQ,EAAA6b,WAAA,EACAJ,EAAA,CACA5f,GAAAA,EACAsL,EAAA2U,EAAAhL,IAAA,CACAzJ,EAAAyU,EAAA3K,GAAA,EAEA,MAEAsK,EAAA,CACA5f,GAAAA,EACAsL,EAAAoH,EAAA7E,UAAA,CACArC,EAAAkH,EAAA3E,SAAA,EAGA,GAAK8R,EAAAK,MAAA,QACL,OAAA1N,GAAA,SAAAsN,EAAA3b,EACA,CAkBA,IAAAgc,GAAA,8BACAC,GAAA,IAAAvgB,QAoGA,SAAAwgB,GAAA/hB,CAAA,EAsBA,OAAAgiB,SApBAC,CAAA,CAAAzb,CAAA,EACA,0BACAyb,EAAAC,UAAA,YAAAC,iBACAC,GAAA,iBACAH,EAAAC,UAAA,YAAAG,cACAD,GAAA,oBACAH,EAAAC,UAAA,YAAAI,iBACAF,GAAA,qBACAH,EAAAC,UAAA,YAAAK,iBAAA,CACA,IAAAhjB,EAAAE,MAAAC,IAAA,CAAAuiB,EAAAC,UAAA,CAAA1iB,QAAA,EACAwa,EAAAza,EAAA6F,OAAA,CAAA6c,GACAzb,EAAAgc,OAAA,CAAAxI,EACA,MACA,GAAAiI,EAAAQ,gBAAA,EACA,IAAAljB,EAAAE,MAAAC,IAAA,CAAAuiB,EAAAQ,gBAAA,CAAAjjB,QAAA,EACAwa,EAAAza,EAAA6F,OAAA,CAAA6c,GACAzb,EAAAgc,OAAA,CAAAxI,EACA,CACA,OAAAxT,CACA,EACAxG,EArBA,GAsBA,CACA,SAAA0iB,GAAArW,CAAA,CAAAjD,CAAA,CAAAuZ,CAAA,EACA,IAAAjhB,EAAAkhB,SACA,GAEAvW,EAAAwW,SAAA,CACAnhB,EAAA0H,EAAA5H,KAAA,CAAA6K,EAAAwW,SAAA,EAEAD,EAAAD,EAAAnhB,KAAA,CAAA6K,GACA,CACAuW,QAAAA,EACAlhB,GAAAA,CACA,GARA,EASA,CA+IA,SAAAohB,GAAA,CAAyC1Z,OAAAA,CAAA,CAAA4S,kBAAAA,CAAA,CAA4B,CAAAnd,CAAA,EACrE,IAAA4C,EAAA6U,EAAAC,EACA,IAAAwM,EAAA,KAEAA,EADAlkB,cAAAA,EAAAsZ,QAAA,CACA/O,EAAA5H,KAAA,CAAA3C,GAEAuK,EAAA5H,KAAA,CAAA3C,EAAAA,IAAA,EACA,IAAAmkB,EAAAnkB,cAAAA,EAAAsZ,QAAA,CACA,OAAA1W,CAAAA,EAAA5C,EAAA6iB,WAAA,GAAAjgB,KAAA,IAAAA,EAAA,OAAAA,EAAAsJ,QAAA,CACA,OAAAwL,CAAAA,EAAA,OAAAD,CAAAA,EAAAzX,EAAAsa,aAAA,GAAA7C,KAAA,IAAAA,EAAA,OAAAA,EAAAoL,WAAA,GAAAnL,KAAA,IAAAA,EAAA,OAAAA,EAAA0M,UAAA,CACAC,EAAA,CAAAF,MAAAA,EAAA,OAAAA,EAAA/jB,SAAA,EACAD,OAAAmkB,wBAAA,CAAAH,MAAAA,EAAA,OAAAA,EAAA/jB,SAAA,uBACA2L,KAAAA,SACA,OAAAmY,GACAA,KAAAA,GACAC,GACAE,GAGAlkB,OAAAokB,cAAA,CAAAvkB,EAAA,sBACAwkB,aAAAH,EAAAG,YAAA,CACAvN,WAAAoN,EAAApN,UAAA,CACAjU,MACA,IAAAJ,EACA,cAAAA,CAAAA,EAAAyhB,EAAArhB,GAAA,GAAAJ,KAAA,IAAAA,EAAA,OAAAA,EAAAtC,IAAA,MACA,EACAuD,IAAA4gB,CAAA,EACA,IAAA7hB,EACA,IAAA8hB,EAAA,OAAA9hB,CAAAA,EAAAyhB,EAAAxgB,GAAA,GAAAjB,KAAA,IAAAA,EAAA,OAAAA,EAAAtC,IAAA,MAAAmkB,GACA,GAAAP,OAAAA,GAAAA,KAAAA,EACA,IACA/G,EAAAwH,gBAAA,CAAAF,EAAAP,EACA,CACA,MAAAha,EAAA,CACA,CAEA,OAAAwa,CACA,CACA,GACA3D,GAAA,KACA5gB,OAAAokB,cAAA,CAAAvkB,EAAA,sBACAwkB,aAAAH,EAAAG,YAAA,CACAvN,WAAAoN,EAAApN,UAAA,CACAjU,IAAAqhB,EAAArhB,GAAA,CACAa,IAAAwgB,EAAAxgB,GAAA,EAEA,IA7BA,KACA,CA6BA,CA6KA,SAAA+gB,GAAAC,CAAA,CAAAC,EAAA,EAAqC,EACrC,IAAAC,EAAAF,EAAA7d,GAAA,CAAA6b,WAAA,CACA,IAAAkC,EACA,WACA,EAEA,IAAAC,EAAA1D,GAAAuD,EAAAA,EAAA7d,GAAA,EACAie,EAAAC,SAnrBA,CAA4BC,YAAAA,CAAA,CAAAzC,SAAAA,CAAA,CAAA1b,IAAAA,CAAA,CAAAuD,OAAAA,CAAA,CAAqC,MAUjE6a,EATA,GAAA1C,CAAA,IAAAA,EAAA2C,SAAA,CACA,WACA,EAEA,IAAAC,EAAA,iBAAA5C,EAAA2C,SAAA,CAAA3C,EAAA2C,SAAA,IACAE,EAAA,iBAAA7C,EAAA8C,iBAAA,CACA9C,EAAA8C,iBAAA,CACA,IACAC,EAAA,GAEAC,EAAA7P,GAAAkL,GAAA,IACA,IAAA4E,EAAAvP,KAAAD,GAAA,GAAAiP,EACAD,EAAAM,EAAA7P,GAAA,KACAgQ,EAAAC,UAAA,EAAAF,EACAC,IACSjP,GACT8O,EAAA,GACAL,EAAA,IACA,GAAKG,GACL5C,EAAA5B,GAAAlL,GAAAkL,GAAA,IACA,IAAAxL,EAAA4L,GAAAyB,GACA,CAAgBkD,QAAAA,CAAA,CAAAC,QAAAA,CAAA,EAAmB7M,GAAA0J,GACnCA,EAAAxJ,cAAA,IACAwJ,EACAwC,GACAA,CAAAA,EAAA7N,IAAA,EAEAkO,EAAA3jB,IAAA,EACAqM,EAAA2X,EACAzX,EAAA0X,EACAljB,GAAA0H,EAAA5H,KAAA,CAAA4S,GACAsQ,WAAAtO,KAAA6N,CACA,GACAM,EAAA,oBAAAM,WAAApD,aAAAoD,UACArL,GAAAsL,IAAA,CACArD,aAAAsD,WACAvL,GAAAwL,SAAA,CACAxL,GAAAyL,SAAA,CACA,GAAKd,EAAA,CACL7O,SAAA,EACA,IACAvX,EAAA,CACAmW,GAAA,YAAAsN,EAAA3b,GACAqO,GAAA,YAAAsN,EAAA3b,GACAqO,GAAA,OAAAsN,EAAA3b,GACA,CACA,OAAA+Z,GAAA,KACA7hB,EAAAoE,OAAA,IAAA+iB,IACA,EACA,EAioBAxB,GACAyB,EAAAC,SAjoBA,CAAwCC,mBAAAA,CAAA,CAAAxf,IAAAA,CAAA,CAAAuD,OAAAA,CAAA,CAAAC,WAAAA,CAAA,CAAAC,cAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAAgY,SAAAA,CAAA,CAAwF,EAChI,GAAAA,CAAA,IAAAA,EAAA+D,gBAAA,CACA,WACA,EAEA,IAAAC,EAAAhE,CAAA,IAAAA,EAAA+D,gBAAA,EACA/D,KAAA3W,IAAA2W,EAAA+D,gBAAA,CACA,GACA/D,EAAA+D,gBAAA,CACAvnB,EAAA,GACAynB,EAAA,KACAC,EAAA,GACA,IACA,IAAArR,EAAA4L,GAAAhI,GACA,GAAAR,GAAApD,EAAA/K,EAAAC,EAAAC,EAAA,IACA,OAEA,IAAAmc,EAAA,KACAC,EAAAC,EACA,mBAAA5N,EAAA,CACA,OAAAA,EAAA0N,WAAA,EACA,YACAA,EAAAhM,GAAAmM,KAAA,CACA,KACA,aACAH,EAAAhM,GAAAoM,KAAA,CACA,KACA,WACAJ,EAAAhM,GAAAqM,GAAA,CAGAL,IAAAhM,GAAAoM,KAAA,CACArM,EAAA,CAAAmM,EAAA,GAAAnM,GAAAuM,SAAA,CACAL,EAAA,aAEAlM,EAAA,CAAAmM,EAAA,GAAAnM,GAAAwM,OAAA,EACAN,CAAAA,EAAA,YAGAjM,GAAAqM,GAAA,MAEAhO,GAAAC,IACA0N,CAAAA,EAAAhM,GAAAoM,KAAA,CAEAJ,QAAAA,GACAF,EAAAE,EACA,GAAAQ,UAAA,WACAR,IAAAhM,GAAAoM,KAAA,EACAH,EAAAO,UAAA,WACAR,IAAAhM,GAAAmM,KAAA,GACAH,CAAAA,EAAA,OAGAjM,EAAA,CAAAmM,EAAA,GAAAnM,GAAA0M,KAAA,GACAT,EAAAF,EACAA,EAAA,MAEA,IAAAzc,EAAAgP,GAAAC,GAAAA,EAAAC,cAAA,IAAAD,EACA,IAAAjP,EACA,OAEA,IAAArH,EAAA0H,EAAA5H,KAAA,CAAA4S,GACA,CAAoBuQ,QAAAA,CAAA,CAAAC,QAAAA,CAAA,EAAmB7b,EACvC6W,GAAAyF,GAAArmB,OAAAsT,MAAA,EAAgEtP,KAAAyW,EAAA,CAAAkM,EAAA,CAAAjkB,GAAAA,EAAAsL,EAAA2X,EAAAzX,EAAA0X,CAAA,EAAmEc,OAAAA,GAAA,CAA6BA,YAAAA,CAAA,GAChK,EAsBA,OApBA1mB,OAAA+C,IAAA,CAAA0X,IACAwD,MAAA,IAAAmJ,OAAAC,KAAA,CAAAD,OAAApH,KACA,CAAAA,EAAApN,QAAA,eACA2T,CAAA,IAAAA,CAAA,CAAAvG,EAAA,EACA7c,OAAA,KACA,IAAAmkB,EAAApjB,EAAA0iB,GACAW,EAAAd,EAAAG,GACA,GAAA7P,OAAAyQ,YAAA,CACA,OAAA/M,EAAA,CAAAmM,EAAA,EACA,KAAAnM,GAAAuM,SAAA,CACA,KAAAvM,GAAAwM,OAAA,CACAK,EAAAA,EAAAxmB,OAAA,oBACA,KACA,MAAA2Z,GAAAgN,UAAA,CACA,KAAAhN,GAAAiN,QAAA,CACA,MACA,CAEA3oB,EAAA4C,IAAA,CAAAuT,GAAAoS,EAAAC,EAAA1gB,GACA,GACA+Z,GAAA,KACA7hB,EAAAoE,OAAA,IAAA+iB,IACA,EACA,EAwiBAxB,GACAiD,EAAAtF,GAAAqC,GACAkD,EAAAC,SA/gBA,CAAsCC,iBAAAA,CAAA,CAAkB,EAAI3T,IAAAA,CAAA,CAAK,EACjE,IAAA4T,EAAA,GACAC,EAAA,GACAC,EAAArH,GAAAlL,GAAAkL,GAAA,KACA,IAAAzS,EAAA+J,KACAjK,EAAAoK,KACA0P,CAAAA,IAAA5Z,GAAA6Z,IAAA/Z,CAAA,IACA6Z,EAAA,CACA7Z,MAAAmZ,OAAAnZ,GACAE,OAAAiZ,OAAAjZ,EACA,GACA4Z,EAAA5Z,EACA6Z,EAAA/Z,EAEA,GAAK,MACL,OAAAiH,GAAA,SAAA+S,EAAA9T,EACA,EA+fAuQ,EAAA,CACAvQ,IAAAyQ,CACA,GACAsD,EAAAC,SA/fA,CAA6BC,QAAAA,CAAA,CAAAvhB,IAAAA,CAAA,CAAAuD,OAAAA,CAAA,CAAAC,WAAAA,CAAA,CAAAC,cAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAA8d,YAAAA,CAAA,CAAAC,eAAAA,CAAA,CAAAxkB,iBAAAA,CAAA,CAAAS,YAAAA,CAAA,CAAAge,SAAAA,CAAA,CAAAgG,qBAAAA,CAAA,CAAAhf,cAAAA,CAAA,CAAAE,gBAAAA,CAAA,CAAAD,iBAAAA,CAAA,CAAAE,mBAAAA,CAAA,CAAqO,EAClQ,SAAA8e,EAAAxP,CAAA,EACA,IAAA5D,EAAA4L,GAAAhI,GACAyP,EAAAzP,EAAA0P,SAAA,CACA3kB,EAAAqR,GAAAzQ,EAAAyQ,EAAArR,OAAA,EAGA,GAFA,WAAAA,GACAqR,CAAAA,EAAAA,EAAAxL,aAAA,EACA,CAAAwL,GACA,CAAArR,GACA8e,EAAAA,GAAAzc,OAAA,CAAArC,IACAyU,GAAApD,EAAA/K,EAAAC,EAAAC,EAAA,IACA,OAEA,IAAAvF,EAAAoQ,EACA,GAAApQ,EAAAqE,SAAA,CAAAmD,QAAA,CAAA6b,IACAC,GAAAtjB,EAAAiE,OAAA,CAAAqf,GACA,OAEA,IAAAtkB,EAAAa,EAAAuQ,GACA5Q,EAAAO,EAAAC,EAAAjB,EAAAC,GACA2kB,EAAA,GACA1W,EAAApO,EAAA,CACAC,iBAAAA,EACAC,QAAAA,EACAC,KAAAA,CACA,GACAyJ,EAAAnE,GAAA8L,EAAA7L,EAAAC,EAAAC,EAAAC,EAAAuI,GACAjO,CAAAA,UAAAA,GAAAA,aAAAA,CAAA,GACA2kB,CAAAA,EAAAvT,EAAA5H,OAAA,EAEAhJ,EAAAL,EAAA,CACAC,SAAAqJ,EACApJ,QAAA+Q,EACA9Q,MAAAE,EACAD,YAAAA,CACA,GACAqkB,EAAAxT,EAAAmT,EACA,CAAgB/jB,KAAAA,EAAAmkB,UAAAA,EAAAF,cAAAA,CAAA,EAChB,CAAgBjkB,KAAAA,EAAAmkB,UAAAA,CAAA,GAChB,IAAAthB,EAAA+N,EAAA/N,IAAA,CACA,UAAArD,GAAAqD,GAAAshB,GACA9hB,EACAgiB,gBAAA,8BAA+DxhB,EAAK,KACpElE,OAAA,KACA,GAAA6B,IAAAoQ,EAAA,CACA,IAAA5Q,EAAAL,EAAA,CACAC,SAAAqJ,EACApJ,QAAAW,EACAV,MAAAS,EAAAC,EAAAjB,EAAAC,GACAO,YAAAA,CACA,GACAqkB,EAAA5jB,EAAAujB,EACA,CAA4B/jB,KAAAA,EAAAmkB,UAAA,CAAAA,EAAAF,cAAA,IAC5B,CAA4BjkB,KAAAA,EAAAmkB,UAAA,CAAAA,CAAA,EAC5B,CACA,EAEA,CACA,SAAAC,EAAAxT,CAAA,CAAA0T,CAAA,EACA,IAAAC,EAAAjG,GAAAjgB,GAAA,CAAAuS,GACA,IAAA2T,GACAA,EAAAvkB,IAAA,GAAAskB,EAAAtkB,IAAA,EACAukB,EAAAJ,SAAA,GAAAG,EAAAH,SAAA,EACA7F,GAAApf,GAAA,CAAA0R,EAAA0T,GACA,IAAApmB,EAAA0H,EAAA5H,KAAA,CAAA4S,GACAwL,GAAAwH,GAAApoB,OAAAsT,MAAA,CAAAtT,OAAAsT,MAAA,IAAmEwV,GAAA,CAAQpmB,GAAAA,CAAA,GAC3E,CACA,CACA,IAAAsmB,EAAAzG,SAAAA,EAAA0G,KAAA,+BACAlqB,EAAAiqB,EAAAvT,GAAA,IAAAP,GAAAoS,EAAA1G,GAAA4H,GAAA3hB,IACA+d,EAAA/d,EAAA6b,WAAA,CACA,IAAAkC,EACA,WACA7lB,EAAAoE,OAAA,IAAA+iB,IACA,EAEA,IAAAgD,EAAAtE,EAAA5kB,MAAA,CAAAmkB,wBAAA,CAAAS,EAAAuE,gBAAA,CAAAlpB,SAAA,UACAmpB,EAAA,CACA,CAAAxE,EAAAuE,gBAAA,CAAAlpB,SAAA,UACA,CAAA2kB,EAAAuE,gBAAA,CAAAlpB,SAAA,YACA,CAAA2kB,EAAAyE,iBAAA,CAAAppB,SAAA,UACA,CAAA2kB,EAAA0E,mBAAA,CAAArpB,SAAA,UACA,CAAA2kB,EAAAyE,iBAAA,CAAAppB,SAAA,kBACA,CAAA2kB,EAAA2E,iBAAA,CAAAtpB,SAAA,aACA,CAWA,OAVAipB,GAAAA,EAAAxlB,GAAA,EACA3E,EAAA4C,IAAA,IAAAynB,EAAA3T,GAAA,IAAA+T,CAtrCA,SAAAA,EAAApU,CAAA,CAAA4K,CAAA,CAAAyJ,CAAA,CAAAC,CAAA,CAAAvV,EAAA4C,MAAA,EACA,IAAAL,EAAAvC,EAAAnU,MAAA,CAAAmkB,wBAAA,CAAA/O,EAAA4K,GAaA,OAZA7L,EAAAnU,MAAA,CAAAokB,cAAA,CAAAhP,EAAA4K,EAAA0J,EACAD,EACA,CACA/lB,IAAAY,CAAA,EACAiQ,WAAA,KACAkV,EAAA/lB,GAAA,CAAAvD,IAAA,MAAAmE,EACA,EAAiB,GACjBoS,GAAAA,EAAAhT,GAAA,EACAgT,EAAAhT,GAAA,CAAAvD,IAAA,MAAAmE,EAEA,CACA,GACA,IAAAklB,EAAApU,EAAA4K,EAAAtJ,GAAA,GAAuD,GACvD,GAuqCA+O,CAAA,IAAAA,CAAA,KACA/hB,MACAkd,GAAA4H,GAAA,CACApT,OAAA,KACAsT,UAAA,EACA,EACA,CACA,EAAS,GAAA9D,KAEThE,GAAA,KACA7hB,EAAAoE,OAAA,IAAA+iB,IACA,EACA,EA6ZAxB,GACAiF,EAAAC,SAtIA,CAAwCC,mBAAAA,CAAA,CAAAxf,WAAAA,CAAA,CAAAC,cAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAAH,OAAAA,CAAA,CAAAmY,SAAAA,CAAA,CAAA1b,IAAAA,CAAA,CAAwF,EAChI,IAAA0gB,EAAA3G,GAAA,GAAAlL,GAAAkL,GAAA,IACA,IAAAxL,EAAA4L,GAAAhI,GACA,IAAA5D,GACAoD,GAAApD,EAAA/K,EAAAC,EAAAC,EAAA,IACA,OAEA,IAAgB+F,YAAAA,CAAA,CAAAwZ,OAAAA,CAAA,CAAAC,MAAAA,CAAA,CAAAC,aAAAA,CAAA,EAA2C5U,EAC3DyU,EAAA,CACA7lB,KAAAA,EACAtB,GAAA0H,EAAA5H,KAAA,CAAA4S,GACA9E,YAAAA,EACAwZ,OAAAA,EACAC,MAAAA,EACAC,aAAAA,CACA,EACA,GAAKzH,EAAA1gB,KAAA,QACL9C,EAAA,CACAmW,GAAA,OAAAqS,EAAA,GAAA1gB,GACAqO,GAAA,QAAAqS,EAAA,GAAA1gB,GACAqO,GAAA,SAAAqS,EAAA,GAAA1gB,GACAqO,GAAA,eAAAqS,EAAA,GAAA1gB,GACAqO,GAAA,aAAAqS,EAAA,GAAA1gB,GACA,CACA,OAAA+Z,GAAA,KACA7hB,EAAAoE,OAAA,IAAA+iB,IACA,EACA,EA2GAxB,GACAuF,EAAAC,SAzXA,CAAkCC,iBAAAA,CAAA,CAAA/f,OAAAA,CAAA,CAAA4S,kBAAAA,CAAA,CAA6C,EAAI7I,IAAAA,CAAA,CAAK,MAmCxFrT,EAkBAspB,EApDA,IAAAjW,EAAAkW,aAAA,GAAAlW,EAAAkW,aAAA,CAAApqB,SAAA,CACA,WACA,EAEA,IAAAqqB,EAAAnW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAqqB,UAAA,CACAnW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAqqB,UAAA,KAAAtT,MAAAsT,EAAA,CACAjU,MAAAuK,GAAA,CAAAxL,EAAAmV,EAAAC,KACA,IAAAxpB,EAAAga,EAAA,CAAAwP,EACA,CAAoB9nB,GAAAA,CAAA,CAAAkhB,QAAAA,CAAA,EAAcF,GAAA6G,EAAAngB,EAAA4S,EAAA2G,WAAA,EAQlC,MAPA,IAAAjhB,KAAAA,GAAAkhB,GAAAA,KAAAA,CAAA,GACAuG,EAAA,CACAznB,GAAAA,EACAkhB,QAAAA,EACAtH,KAAA,EAA6Btb,KAAAA,EAAAga,MAAAA,CAAA,EAAa,GAG1C5F,EAAAiB,KAAA,CAAAkU,EAAAC,EACA,EACA,GACA,IAAAC,EAAAtW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAwqB,UAAA,CACAtW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAwqB,UAAA,KAAAzT,MAAAyT,EAAA,CACApU,MAAAuK,GAAA,CAAAxL,EAAAmV,EAAAC,KACA,IAAAxP,EAAA,CAAAwP,EACA,CAAoB9nB,GAAAA,CAAA,CAAAkhB,QAAAA,CAAA,EAAcF,GAAA6G,EAAAngB,EAAA4S,EAAA2G,WAAA,EAQlC,MAPA,IAAAjhB,KAAAA,GAAAkhB,GAAAA,KAAAA,CAAA,GACAuG,EAAA,CACAznB,GAAAA,EACAkhB,QAAAA,EACAjI,QAAA,EAAgCX,MAAAA,CAAA,EAAO,GAGvC5F,EAAAiB,KAAA,CAAAkU,EAAAC,EACA,EACA,GAEArW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAa,OAAA,GACAA,EAAAqT,EAAAkW,aAAA,CAAApqB,SAAA,CAAAa,OAAA,CACAqT,EAAAkW,aAAA,CAAApqB,SAAA,CAAAa,OAAA,KAAAkW,MAAAlW,EAAA,CACAuV,MAAAuK,GAAA,CAAAxL,EAAAmV,EAAAC,KACA,IAAAhmB,EAAA,CAAAgmB,EACA,CAAwB9nB,GAAAA,CAAA,CAAAkhB,QAAAA,CAAA,EAAcF,GAAA6G,EAAAngB,EAAA4S,EAAA2G,WAAA,EAQtC,MAPA,IAAAjhB,KAAAA,GAAAkhB,GAAAA,KAAAA,CAAA,GACAuG,EAAA,CACAznB,GAAAA,EACAkhB,QAAAA,EACA9iB,QAAA0D,CACA,GAEA4Q,EAAAiB,KAAA,CAAAkU,EAAAC,EACA,EACA,IAGArW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAmqB,WAAA,GACAA,EAAAjW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAmqB,WAAA,CACAjW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAmqB,WAAA,KAAApT,MAAAoT,EAAA,CACA/T,MAAAuK,GAAA,CAAAxL,EAAAmV,EAAAC,KACA,IAAAhmB,EAAA,CAAAgmB,EACA,CAAwB9nB,GAAAA,CAAA,CAAAkhB,QAAAA,CAAA,EAAcF,GAAA6G,EAAAngB,EAAA4S,EAAA2G,WAAA,EAQtC,MAPA,IAAAjhB,KAAAA,GAAAkhB,GAAAA,KAAAA,CAAA,GACAuG,EAAA,CACAznB,GAAAA,EACAkhB,QAAAA,EACAwG,YAAA5lB,CACA,GAEA4Q,EAAAiB,KAAA,CAAAkU,EAAAC,EACA,EACA,IAEA,IAAAE,EAAA,GACAC,GAAA,mBACAD,EAAAvH,eAAA,CAAAhP,EAAAgP,eAAA,EAGAwH,GAAA,iBACAD,CAAAA,EAAArH,YAAA,CAAAlP,EAAAkP,YAAA,EAEAsH,GAAA,qBACAD,CAAAA,EAAAnH,gBAAA,CAAApP,EAAAoP,gBAAA,EAEAoH,GAAA,oBACAD,CAAAA,EAAApH,eAAA,CAAAnP,EAAAmP,eAAA,GAGA,IAAAsH,EAAA,GA6CA,OA5CA5qB,OAAA6qB,OAAA,CAAAH,GAAAvnB,OAAA,GAAA2nB,EAAA9mB,EAAA,IACA4mB,CAAA,CAAAE,EAAA,EACAR,WAAAtmB,EAAA/D,SAAA,CAAAqqB,UAAA,CACAG,WAAAzmB,EAAA/D,SAAA,CAAAwqB,UAAA,EAEAzmB,EAAA/D,SAAA,CAAAqqB,UAAA,KAAAtT,MAAA4T,CAAA,CAAAE,EAAA,CAAAR,UAAA,EACAjU,MAAAuK,GAAA,CAAAxL,EAAAmV,EAAAC,KACA,IAAAxpB,EAAAga,EAAA,CAAAwP,EACA,CAAwB9nB,GAAAA,CAAA,CAAAkhB,QAAAA,CAAA,EAAcF,GAAA6G,EAAA9G,gBAAA,CAAArZ,EAAA4S,EAAA2G,WAAA,EAgBtC,MAfA,IAAAjhB,KAAAA,GAAAkhB,GAAAA,KAAAA,CAAA,GACAuG,EAAA,CACAznB,GAAAA,EACAkhB,QAAAA,EACAtH,KAAA,CACA,CACAtb,KAAAA,EACAga,MAAA,IACA+H,GAAAwH,GACAvP,GAAA,EACA,EAEA,GAGA5F,EAAAiB,KAAA,CAAAkU,EAAAC,EACA,EACA,GACAxmB,EAAA/D,SAAA,CAAAwqB,UAAA,KAAAzT,MAAA4T,CAAA,CAAAE,EAAA,CAAAL,UAAA,EACApU,MAAAuK,GAAA,CAAAxL,EAAAmV,EAAAC,KACA,IAAAxP,EAAA,CAAAwP,EACA,CAAwB9nB,GAAAA,CAAA,CAAAkhB,QAAAA,CAAA,EAAcF,GAAA6G,EAAA9G,gBAAA,CAAArZ,EAAA4S,EAAA2G,WAAA,EAUtC,MATA,IAAAjhB,KAAAA,GAAAkhB,GAAAA,KAAAA,CAAA,GACAuG,EAAA,CACAznB,GAAAA,EACAkhB,QAAAA,EACAjI,QAAA,CACA,CAA8BX,MAAA,IAAA+H,GAAAwH,GAAAvP,EAAA,EAC9B,GAGA5F,EAAAiB,KAAA,CAAAkU,EAAAC,EACA,EACA,EACA,GACA5J,GAAA,KACAzM,EAAAkW,aAAA,CAAApqB,SAAA,CAAAqqB,UAAA,CAAAA,EACAnW,EAAAkW,aAAA,CAAApqB,SAAA,CAAAwqB,UAAA,CAAAA,EACA3pB,GAAAqT,CAAAA,EAAAkW,aAAA,CAAApqB,SAAA,CAAAa,OAAA,CAAAA,CAAA,EACAspB,GAAAjW,CAAAA,EAAAkW,aAAA,CAAApqB,SAAA,CAAAmqB,WAAA,CAAAA,CAAA,EACApqB,OAAA6qB,OAAA,CAAAH,GAAAvnB,OAAA,GAAA2nB,EAAA9mB,EAAA,IACAA,EAAA/D,SAAA,CAAAqqB,UAAA,CAAAM,CAAA,CAAAE,EAAA,CAAAR,UAAA,CACAtmB,EAAA/D,SAAA,CAAAwqB,UAAA,CAAAG,CAAA,CAAAE,EAAA,CAAAL,UAAA,EAEA,EACA,EA4OA/F,EAAA,CAA2DvQ,IAAAyQ,CAAA,GAC3DmG,EAAAjH,GAAAY,EAAAA,EAAA7d,GAAA,EACAmkB,EAAAC,SA7LA,CAAwCC,mBAAAA,CAAA,CAAA9gB,OAAAA,CAAA,CAAA+gB,oBAAAA,CAAA,CAAAnO,kBAAAA,CAAA,CAAqE,EAAI7I,IAAAA,CAAA,CAAK,EACtH,IAAAiX,EAAAjX,EAAAkX,mBAAA,CAAAprB,SAAA,CAAAmrB,WAAA,CACAjX,EAAAkX,mBAAA,CAAAprB,SAAA,CAAAmrB,WAAA,KAAApU,MAAAoU,EAAA,CACA/U,MAAAuK,GAAA,CAAAxL,EAAAmV,EAAAC,KACA,IAAA/nB,EACA,IAAAuQ,EAAA1O,EAAAgnB,EAAA,CAAAd,EACA,GAAAW,EAAA9nB,GAAA,CAAA2P,GACA,OAAAoY,EAAA/U,KAAA,CAAAkU,EAAA,CAAAvX,EAAA1O,EAAAgnB,EAAA,EAEA,IAAoB5oB,GAAAA,CAAA,CAAAkhB,QAAAA,CAAA,EAAcF,GAAA,OAAAjhB,CAAAA,EAAA8nB,EAAArH,UAAA,GAAAzgB,KAAA,IAAAA,EAAA,OAAAA,EAAAghB,gBAAA,CAAArZ,EAAA4S,EAAA2G,WAAA,EAalC,MAZA,IAAAjhB,KAAAA,GAAAkhB,GAAAA,KAAAA,CAAA,GACAsH,EAAA,CACAxoB,GAAAA,EACAkhB,QAAAA,EACAlgB,IAAA,CACAsP,SAAAA,EACA1O,MAAAA,EACAgnB,SAAAA,CACA,EACAtQ,MAAA+H,GAAAwH,EAAArH,UAAA,CACA,GAEA9N,EAAAiB,KAAA,CAAAkU,EAAAC,EACA,EACA,GACA,IAAAe,EAAApX,EAAAkX,mBAAA,CAAAprB,SAAA,CAAAsrB,cAAA,CAsBA,OArBApX,EAAAkX,mBAAA,CAAAprB,SAAA,CAAAsrB,cAAA,KAAAvU,MAAAuU,EAAA,CACAlV,MAAAuK,GAAA,CAAAxL,EAAAmV,EAAAC,KACA,IAAA/nB,EACA,IAAAuQ,EAAA,CAAAwX,EACA,GAAAW,EAAA9nB,GAAA,CAAA2P,GACA,OAAAuY,EAAAlV,KAAA,CAAAkU,EAAA,CAAAvX,EAAA,EAEA,IAAoBtQ,GAAAA,CAAA,CAAAkhB,QAAAA,CAAA,EAAcF,GAAA,OAAAjhB,CAAAA,EAAA8nB,EAAArH,UAAA,GAAAzgB,KAAA,IAAAA,EAAA,OAAAA,EAAAghB,gBAAA,CAAArZ,EAAA4S,EAAA2G,WAAA,EAWlC,MAVA,IAAAjhB,KAAAA,GAAAkhB,GAAAA,KAAAA,CAAA,GACAsH,EAAA,CACAxoB,GAAAA,EACAkhB,QAAAA,EACA4H,OAAA,CACAxY,SAAAA,CACA,EACAgI,MAAA+H,GAAAwH,EAAArH,UAAA,CACA,GAEA9N,EAAAiB,KAAA,CAAAkU,EAAAC,EACA,EACA,GACA5J,GAAA,KACAzM,EAAAkX,mBAAA,CAAAprB,SAAA,CAAAmrB,WAAA,CAAAA,EACAjX,EAAAkX,mBAAA,CAAAprB,SAAA,CAAAsrB,cAAA,CAAAA,CACA,EACA,EA0IA7G,EAAA,CACAvQ,IAAAyQ,CACA,GACA6G,EAAA/G,EAAAgH,YAAA,CACAC,SAjHA,CAA4BC,OAAAA,CAAA,CAAA/kB,IAAAA,CAAA,CAAa,EACzC,IAAAsN,EAAAtN,EAAA6b,WAAA,CACA,IAAAvO,EACA,WACA,EAEA,IAAApV,EAAA,GACA8sB,EAAA,IAAAtpB,QACAupB,EAAA3X,EAAA4X,QAAA,CACA5X,EAAA4X,QAAA,UAAAC,CAAA,CAAAxV,CAAA,CAAAyV,CAAA,EACA,IAAAC,EAAA,IAAAJ,EAAAE,EAAAxV,EAAAyV,GASA,OARAJ,EAAAnoB,GAAA,CAAAwoB,EAAA,CACAF,OAAAA,EACArd,OAAA,iBAAA6H,EACAyV,YAAAA,EACAE,WAAA,iBAAA3V,EACAA,EACAjV,KAAAC,SAAA,CAAAf,MAAAC,IAAA,KAAA0rB,WAAA5V,IACA,GACA0V,CACA,EACA,IAAAG,EAAA9V,GAAA1P,EAAAylB,KAAA,gBAAA5V,CAAA,EACA,gBAAAwV,CAAA,EAQA,OAPA3X,WAAAqM,GAAA,KACA,IAAA6E,EAAAoG,EAAAhpB,GAAA,CAAAqpB,GACAzG,IACAmG,EAAAnG,GACAoG,EAAA5oB,MAAA,CAAAipB,GAEA,GAAa,GACbxV,EAAAL,KAAA,OAAA6V,EAAA,CACA,CACA,GAKA,OAJAntB,EAAA4C,IAAA,MACAwS,EAAA4X,QAAA,CAAAD,CACA,GACA/sB,EAAA4C,IAAA,CAAA0qB,GACAzL,GAAA,KACA7hB,EAAAoE,OAAA,IAAA+iB,IACA,EACA,EAyEAxB,GACA,KACA,EACA6H,EAAAC,SA3EAC,CAAA,EACA,IAAY5lB,IAAAA,CAAA,CAAAuD,OAAAA,CAAA,CAAAC,WAAAA,CAAA,CAAAC,cAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAAmiB,YAAAA,CAAA,EAAwED,EACpFE,EAAA,GACAC,EAAAhM,GAAA,KACA,IAAAiM,EAAAhmB,EAAAimB,YAAA,GACA,IAAAD,GAAAF,GAAAE,CAAAA,MAAAA,EAAA,OAAAA,EAAAE,WAAA,EACA,OACAJ,EAAAE,EAAAE,WAAA,KACA,IAAAC,EAAA,GACAC,EAAAJ,EAAAK,UAAA,IACA,QAAApgB,EAAA,EAAwBA,EAAAmgB,EAAWngB,IAAA,CACnC,IAAAqgB,EAAAN,EAAAO,UAAA,CAAAtgB,GACA,CAAoBugB,eAAAA,CAAA,CAAAC,YAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAC,UAAAA,CAAA,EAAuDL,EAC3EM,EAAAjV,GAAA6U,EAAAhjB,EAAAC,EAAAC,EAAA,KACAiO,GAAA+U,EAAAljB,EAAAC,EAAAC,EAAA,IACAkjB,GAEAT,EAAArrB,IAAA,EACA+rB,MAAAtjB,EAAA5H,KAAA,CAAA6qB,GACAC,YAAAA,EACAK,IAAAvjB,EAAA5H,KAAA,CAAA+qB,GACAC,UAAAA,CACA,EACA,CACAd,EAAA,CAAsBM,OAAAA,CAAA,EACtB,GAEA,OADAJ,IACA1X,GAAA,kBAAA0X,EACA,EA+CAlI,GACAkJ,EAAAC,SA/CA,CAAqChnB,IAAAA,CAAA,CAAAinB,gBAAAA,CAAA,CAAuB,EAC5D,IAAA3Z,EAAAtN,EAAA6b,WAAA,CACA,IAAAvO,GAAA,CAAAA,EAAAjD,cAAA,CACA,WACA,EAEA,IAAAmb,EAAA9V,GAAApC,EAAAjD,cAAA,mBAAAwF,CAAA,EACA,gBAAArP,CAAA,CAAAlF,CAAA,CAAAgI,CAAA,EACA,IACA2jB,EAAA,CACAC,OAAA,CACA1mB,KAAAA,CACA,CACA,EACA,CACA,MAAA0C,EAAA,CACA,CACA,OAAA2M,EAAAL,KAAA,OAAAhP,EAAAlF,EAAAgI,EAAA,CACA,CACA,GACA,OAAAkiB,CACA,EA0BA3H,GACA,OAAA9D,GAAA,KACAG,GAAA5d,OAAA,IAAA6qB,EAAApqB,KAAA,IACAihB,EAAAoJ,UAAA,GACAnJ,IACAqB,IACAwB,IACAC,IACAM,IACAyB,IACAM,IACAc,IACAC,IACAS,IACAc,IACAqB,GACA,EACA,CACA,SAAAxK,GAAAlM,CAAA,EACA,gBAAAH,MAAA,CAAAG,EAAA,CAEA,SAAAyT,GAAAzT,CAAA,EACA,MAAAjT,CAAAA,CAAA,UAAA8S,MAAA,CAAAG,EAAA,EACAH,MAAA,CAAAG,EAAA,CAAAjX,SAAA,EACA,eAAA8W,MAAA,CAAAG,EAAA,CAAAjX,SAAA,EACA,eAAA8W,MAAA,CAAAG,EAAA,CAAAjX,SAAA,CACA,CAEA,MAAAiuB,GACA/rB,YAAAgsB,CAAA,EACA,KAAAA,YAAA,CAAAA,EACA,KAAAC,qBAAA,KAAA7rB,QACA,KAAA8rB,qBAAA,KAAA9rB,OACA,CACAC,MAAA4a,CAAA,CAAAkR,CAAA,CAAAC,CAAA,CAAAC,CAAA,EACA,IAAAC,EAAAF,GAAA,KAAAG,kBAAA,CAAAtR,GACAuR,EAAAH,GAAA,KAAAI,kBAAA,CAAAxR,GACA1a,EAAA+rB,EAAA5rB,GAAA,CAAAyrB,GAMA,OALA5rB,IACAA,EAAA,KAAAyrB,YAAA,GACAM,EAAA/qB,GAAA,CAAA4qB,EAAA5rB,GACAisB,EAAAjrB,GAAA,CAAAhB,EAAA4rB,IAEA5rB,CACA,CACAI,OAAAsa,CAAA,CAAAkR,CAAA,EACA,IAAAG,EAAA,KAAAC,kBAAA,CAAAtR,GACAuR,EAAA,KAAAC,kBAAA,CAAAxR,GACA,OAAAkR,EAAA7Y,GAAA,SAAAjT,KAAA,CAAA4a,EAAA1a,EAAA+rB,EAAAE,GACA,CACAE,YAAAzR,CAAA,CAAA1a,CAAA,CAAA+S,CAAA,EACA,IAAAkZ,EAAAlZ,GAAA,KAAAmZ,kBAAA,CAAAxR,GACA,oBAAA1a,EACA,OAAAA,EACA,IAAA4rB,EAAAK,EAAA9rB,GAAA,CAAAH,UACA,GACA,EAEA,CACAosB,aAAA1R,CAAA,CAAA2R,CAAA,EACA,IAAAJ,EAAA,KAAAC,kBAAA,CAAAxR,GACA,OAAA2R,EAAAtZ,GAAA,SAAAoZ,WAAA,CAAAzR,EAAA1a,EAAAisB,GACA,CACA/qB,MAAAwZ,CAAA,EACA,IAAAA,EAAA,CACA,KAAAgR,qBAAA,KAAA7rB,QACA,KAAA8rB,qBAAA,KAAA9rB,QACA,MACA,CACA,KAAA6rB,qBAAA,CAAAnrB,MAAA,CAAAma,GACA,KAAAiR,qBAAA,CAAAprB,MAAA,CAAAma,EACA,CACAsR,mBAAAtR,CAAA,EACA,IAAAqR,EAAA,KAAAL,qBAAA,CAAAvrB,GAAA,CAAAua,GAKA,OAJAqR,IACAA,EAAA,IAAApsB,IACA,KAAA+rB,qBAAA,CAAA1qB,GAAA,CAAA0Z,EAAAqR,IAEAA,CACA,CACAG,mBAAAxR,CAAA,EACA,IAAAuR,EAAA,KAAAN,qBAAA,CAAAxrB,GAAA,CAAAua,GAKA,OAJAuR,IACAA,EAAA,IAAAtsB,IACA,KAAAgsB,qBAAA,CAAA3qB,GAAA,CAAA0Z,EAAAuR,IAEAA,CACA,CACA,CAEA,MAAAK,GACA7sB,aAAA,CACA,KAAA8sB,uBAAA,KAAAf,GAAA9oB,GACA,KAAA8pB,0BAAA,KAAA3sB,OACA,CACAwa,WAAA,CACA,CACAoS,iBAAA,CACA,CACA7R,cAAA,CACA,CACA,CACA,MAAA8R,GACAjtB,YAAAgI,CAAA,EACA,KAAAklB,OAAA,KAAA9sB,QACA,KAAA+sB,oBAAA,KAAA/sB,QACA,KAAA0sB,uBAAA,KAAAf,GAAA9oB,GACA,KAAA8pB,0BAAA,KAAA3sB,QACA,KAAAic,UAAA,CAAArU,EAAAqU,UAAA,CACA,KAAA+Q,WAAA,CAAAplB,EAAAolB,WAAA,CACA,KAAAvS,iBAAA,CAAA7S,EAAA6S,iBAAA,CACA,KAAAwS,wBAAA,CAAArlB,EAAAqlB,wBAAA,CACA,KAAAC,4BAAA,KAAAvB,GAAA,KAAAlR,iBAAA,CAAA2G,WAAA,CAAA/J,UAAA,CAAAkI,IAAA,MAAA9E,iBAAA,CAAA2G,WAAA,GACA,KAAAvZ,MAAA,CAAAD,EAAAC,MAAA,CACA,KAAAolB,wBAAA,EACAzY,OAAA7G,gBAAA,gBAAAwf,aAAA,CAAA5N,IAAA,OAEA,CACA/E,UAAA/I,CAAA,EACA,KAAAqb,OAAA,CAAA3rB,GAAA,CAAAsQ,EAAA,IACAA,EAAAI,aAAA,EACA,KAAAkb,oBAAA,CAAA5rB,GAAA,CAAAsQ,EAAAI,aAAA,CAAAJ,EACA,CACAmb,gBAAArO,CAAA,EACA,KAAA6O,YAAA,CAAA7O,CACA,CACAxD,aAAAtJ,CAAA,CAAAqJ,CAAA,EACA,IAAA5a,EACA,KAAA+b,UAAA,EACAlC,KAAA,CACA,CACAhB,SAAA,KAAAlR,MAAA,CAAA5H,KAAA,CAAAwR,GACA2I,OAAA,KACApZ,KAAA8Z,CACA,EACA,CACA1B,QAAA,GACAD,MAAA,GACA9O,WAAA,GACAgjB,eAAA,EACA,GACA,OAAAntB,CAAAA,EAAA,KAAAktB,YAAA,GAAAltB,KAAA,IAAAA,GAAAA,EAAAtC,IAAA,MAAA6T,GACAA,EAAAhD,eAAA,EACAgD,EAAAhD,eAAA,CAAA6e,kBAAA,EACA7b,EAAAhD,eAAA,CAAA6e,kBAAA,CAAAxuB,MAAA,IACA,KAAA2b,iBAAA,CAAAwH,gBAAA,CAAAxQ,EAAAhD,eAAA,CAAA6e,kBAAA,MAAAzlB,MAAA,CAAA5H,KAAA,CAAAwR,EAAAhD,eAAA,EACA,CACA0e,cAAAI,CAAA,EAEA,GAAAC,UAAAA,EAAArhB,IAAA,CAAA1K,IAAA,EACA+rB,EAAArqB,MAAA,GAAAqqB,EAAArhB,IAAA,CAAAhJ,MAAA,CACA,OACA,IAAAsqB,EAAAF,EAAAtZ,MAAA,CACA,IAAAwZ,EACA,OACA,IAAAhc,EAAA,KAAAsb,oBAAA,CAAAzsB,GAAA,CAAAitB,EAAAtZ,MAAA,EACA,IAAAxC,EACA,OACA,IAAAic,EAAA,KAAAC,yBAAA,CAAAlc,EAAA+b,EAAArhB,IAAA,CAAAsK,KAAA,EACAiX,GACA,KAAAV,WAAA,CAAAU,EAAAF,EAAArhB,IAAA,CAAAyhB,UAAA,CACA,CACAD,0BAAAlc,CAAA,CAAAjK,CAAA,EACA,IAAAtH,EACA,OAAAsH,EAAA/F,IAAA,EACA,KAAAuW,GAAA6V,YAAA,EACA,KAAAnB,uBAAA,CAAArrB,KAAA,CAAAoQ,GACA,KAAAyb,4BAAA,CAAA7rB,KAAA,CAAAoQ,GACA,KAAAqc,eAAA,CAAAtmB,EAAA2E,IAAA,CAAAnL,IAAA,CAAAyQ,GACA,IAAAvI,EAAA1B,EAAA2E,IAAA,CAAAnL,IAAA,CAAAb,EAAA,CAGA,OAFA,KAAAwsB,0BAAA,CAAAxrB,GAAA,CAAAsQ,EAAAvI,GACA,KAAA6kB,iBAAA,CAAAvmB,EAAA2E,IAAA,CAAAnL,IAAA,CAAAkI,GACA,CACA8kB,UAAAxmB,EAAAwmB,SAAA,CACAvsB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA,CACA8H,OAAAgE,GAAAiW,QAAA,CACAnU,KAAA,CACA,CACAhB,SAAA,KAAAlR,MAAA,CAAA5H,KAAA,CAAAwR,GACA2I,OAAA,KACApZ,KAAAwG,EAAA2E,IAAA,CAAAnL,IAAA,EAEA,CACAoY,QAAA,GACAD,MAAA,GACA9O,WAAA,GACAgjB,eAAA,EACA,CACA,CACA,CACA,KAAArV,GAAAmW,IAAA,CACA,KAAAnW,GAAAoW,IAAA,CACA,KAAApW,GAAAqW,gBAAA,CACA,KAEA,MAAArW,GAAAsW,MAAA,CACA,OAAA9mB,CAEA,MAAAwQ,GAAAuW,MAAA,CAEA,OADA,KAAAC,UAAA,CAAAhnB,EAAA2E,IAAA,CAAAsP,OAAA,CAAAhK,EAAA,yCACAjK,CAEA,MAAAwQ,GAAAiW,mBAAA,CACA,OAAAzmB,EAAA2E,IAAA,CAAA8H,MAAA,EACA,KAAAgE,GAAAiW,QAAA,CAoBA,OAnBA1mB,EAAA2E,IAAA,CAAA4N,IAAA,CAAAnZ,OAAA,KACA,KAAA4tB,UAAA,CAAAnxB,EAAAoU,EAAA,CACA,WACA,SACA,aACA,EACA,KAAAqc,eAAA,CAAAzwB,EAAA2D,IAAA,CAAAyQ,GACA,IAAAvI,EAAA,KAAAyjB,0BAAA,CAAArsB,GAAA,CAAAmR,EACAvI,CAAAA,GAAA,KAAA6kB,iBAAA,CAAA1wB,EAAA2D,IAAA,CAAAkI,EACA,GACA1B,EAAA2E,IAAA,CAAAiN,OAAA,CAAAxY,OAAA,KACA,KAAA4tB,UAAA,CAAAnxB,EAAAoU,EAAA,kBACA,GACAjK,EAAA2E,IAAA,CAAA9B,UAAA,CAAAzJ,OAAA,KACA,KAAA4tB,UAAA,CAAAnxB,EAAAoU,EAAA,OACA,GACAjK,EAAA2E,IAAA,CAAAgN,KAAA,CAAAvY,OAAA,KACA,KAAA4tB,UAAA,CAAAnxB,EAAAoU,EAAA,OACA,GACAjK,CAEA,MAAAyQ,GAAAsL,IAAA,CACA,KAAAtL,GAAAyL,SAAA,CACA,KAAAzL,GAAAwL,SAAA,CAIA,OAHAjc,EAAA2E,IAAA,CAAA4W,SAAA,CAAAniB,OAAA,KACA,KAAA4tB,UAAA,CAAAtL,EAAAzR,EAAA,OACA,GACAjK,CAEA,MAAAyQ,GAAAwW,cAAA,CACA,QAEA,MAAAxW,GAAAyW,gBAAA,CACA,KAAAzW,GAAA0W,gBAAA,CACA,KAAA1W,GAAA2W,MAAA,CACA,KAAA3W,GAAA4W,cAAA,CACA,KAAA5W,GAAA6W,KAAA,CAEA,OADA,KAAAN,UAAA,CAAAhnB,EAAA2E,IAAA,CAAAsF,EAAA,QACAjK,CAEA,MAAAyQ,GAAA8W,cAAA,CACA,KAAA9W,GAAA+W,gBAAA,CAGA,OAFA,KAAAR,UAAA,CAAAhnB,EAAA2E,IAAA,CAAAsF,EAAA,QACA,KAAAwd,eAAA,CAAAznB,EAAA2E,IAAA,CAAAsF,EAAA,aACAjK,CAEA,MAAAyQ,GAAAiX,IAAA,CACA,OAAA1nB,CAEA,MAAAyQ,GAAAkX,SAAA,CAIA,OAHA3nB,EAAA2E,IAAA,CAAAse,MAAA,CAAA7pB,OAAA,KACA,KAAA4tB,UAAA,CAAA5D,EAAAnZ,EAAA,gBACA,GACAjK,CAEA,MAAAyQ,GAAAmX,iBAAA,CAMA,OALA,KAAAZ,UAAA,CAAAhnB,EAAA2E,IAAA,CAAAsF,EAAA,QACA,KAAAwd,eAAA,CAAAznB,EAAA2E,IAAA,CAAAsF,EAAA,cACA,OAAAvR,CAAAA,EAAAsH,EAAA2E,IAAA,CAAAkjB,MAAA,GAAAnvB,KAAA,IAAAA,GAAAA,EAAAU,OAAA,KACA,KAAAquB,eAAA,CAAArT,EAAAnK,EAAA,YACA,GACAjK,CAEA,CAEA,CACA,QACA,CACAjJ,QAAA+wB,CAAA,CAAAC,CAAA,CAAA9d,CAAA,CAAAjR,CAAA,EACA,QAAAid,KAAAjd,EACA,OAAAgvB,OAAA,CAAAD,CAAA,CAAA9R,EAAA,oBAAA8R,CAAA,CAAA9R,EAAA,IAEAvf,MAAAsxB,OAAA,CAAAD,CAAA,CAAA9R,EAAA,EACA8R,CAAA,CAAA9R,EAAA,CAAA6R,EAAA/uB,MAAA,CAAAkR,EAAA8d,CAAA,CAAA9R,EAAA,EAGA8R,CAAA,CAAA9R,EAAA,CAAA6R,EAAArvB,KAAA,CAAAwR,EAAA8d,CAAA,CAAA9R,EAAA,GAGA,OAAA8R,CACA,CACAf,WAAAe,CAAA,CAAA9d,CAAA,CAAAjR,CAAA,EACA,YAAAjC,OAAA,MAAAmuB,uBAAA,CAAA6C,EAAA9d,EAAAjR,EACA,CACAyuB,gBAAAM,CAAA,CAAA9d,CAAA,CAAAjR,CAAA,EACA,YAAAjC,OAAA,MAAA2uB,4BAAA,CAAAqC,EAAA9d,EAAAjR,EACA,CACAstB,gBAAA9sB,CAAA,CAAAyQ,CAAA,EACA,KAAA+c,UAAA,CAAAxtB,EAAAyQ,EAAA,iBACA,eAAAzQ,GACAA,EAAAL,UAAA,CAAAC,OAAA,KACA,KAAAktB,eAAA,CAAA2B,EAAAhe,EACA,EAEA,CACAsc,kBAAA/sB,CAAA,CAAAkI,CAAA,EACAlI,EAAAS,IAAA,GAAA3E,EAAA0M,QAAA,EAAAxI,EAAAkI,MAAA,EACAlI,CAAAA,EAAAkI,MAAA,CAAAA,CAAA,EACA,eAAAlI,GACAA,EAAAL,UAAA,CAAAC,OAAA,KACA,KAAAmtB,iBAAA,CAAA0B,EAAAvmB,EACA,EAEA,CACA,CAEA,MAAAwmB,GACAlS,MAAA,CACA,CACA5C,eAAA,CACA,CACAI,qBAAA,CACA,CACA3Z,OAAA,CACA,CACA,CACA,MAAAsuB,GACA/vB,YAAAgI,CAAA,EACA,KAAAgoB,UAAA,KAAAC,QACA,KAAAC,eAAA,IACA,KAAA7T,UAAA,CAAArU,EAAAqU,UAAA,CACA,KAAA8D,QAAA,CAAAnY,EAAAmY,QAAA,CACA,KAAA5O,aAAA,CAAAvJ,EAAAuJ,aAAA,CACA,KAAAtJ,MAAA,CAAAD,EAAAC,MAAA,CACA,KAAA2V,IAAA,EACA,CACAA,MAAA,CACA,KAAAnc,KAAA,GACA,KAAA0uB,iBAAA,CAAAnhB,QAAAhK,SACA,CACAgW,cAAArd,CAAA,CAAA+G,CAAA,EACA,IAAA9G,EAAAD,IAEA,KAAAqyB,UAAA,CAAA9uB,GAAA,CAAAvD,GADA,OAGA,KAAAqyB,UAAA,CAAA3uB,GAAA,CAAA1D,GACA,IAAA8hB,EAAAT,GAAAnhB,OAAAsT,MAAA,CAAAtT,OAAAsT,MAAA,IAA4E,KAAAI,aAAA,GAAyB7M,IAAAA,EAAA2X,WAAA,KAAAA,UAAA,CAAApU,OAAA,KAAAA,MAAA,CAAA8S,iBAAA,OAA+Epd,GACpL,KAAAuyB,eAAA,CAAA1wB,IAAA,KAAAigB,EAAAqM,UAAA,IACA,KAAAoE,eAAA,CAAA1wB,IAAA,CAAA0gB,GAAAriB,OAAAsT,MAAA,CAAAtT,OAAAsT,MAAA,IAAmF,KAAAI,aAAA,GAAyB4O,SAAA,KAAAA,QAAA,CAAAzb,IAAA/G,EAAAsK,OAAA,KAAAA,MAAA,KAC5GmK,WAAA,KACAzU,EAAA+vB,kBAAA,EACA/vB,EAAA+vB,kBAAA,CAAAxuB,MAAA,IACA,KAAAqS,aAAA,CAAAsJ,iBAAA,CAAAwH,gBAAA,CAAA1kB,EAAA+vB,kBAAA,MAAAzlB,MAAA,CAAA5H,KAAA,CAAA1C,EAAAD,IAAA,GACA,KAAAwyB,eAAA,CAAA1wB,IAAA,CAAAmiB,GAAA,CACA1Z,OAAA,KAAAA,MAAA,CACA4S,kBAAA,KAAAtJ,aAAA,CAAAsJ,iBAAA,EACald,GACb,EAAS,EACT,CACAyd,oBAAAgV,CAAA,EACAA,EAAAne,aAAA,EAAAme,EAAAvhB,eAAA,EAEA,KAAAshB,iBAAA,CAAAC,EAAAne,aAAA,CAAAjD,OAAA,CAAAohB,EAAAvhB,eAAA,CACA,CACAshB,kBAAAjuB,CAAA,CAAAwC,CAAA,EACA,IAAA2rB,EAAA,KACA,KAAAH,eAAA,CAAA1wB,IAAA,CAAA4U,GAAAlS,EAAApE,SAAA,yBAAAyW,CAAA,EACA,gBAAA+b,CAAA,EACA,IAAA3yB,EAAA4W,EAAAvW,IAAA,MAAAsyB,GAGA,OAFA,KAAA3yB,UAAA,EAAAoa,GAAA,OACAsY,EAAArV,aAAA,MAAArd,UAAA,CAAA+G,GACA/G,CACA,CACA,GACA,CACA8D,OAAA,CACA,KAAAyuB,eAAA,CAAAlvB,OAAA,KACA,IACAokB,GACA,CACA,MAAAxd,EAAA,CACA,CACA,GACA,KAAAsoB,eAAA,IACA,KAAAF,UAAA,KAAAC,OACA,CACA,CAEA,MAAAM,GACA9uB,OAAA,CACA,CACAqc,QAAA,CACA,CACAE,UAAA,CACA,CACAE,MAAA,CACA,CACAC,QAAA,CACA,CACA,CAEA,MAAAqS,GACAxwB,YAAAgI,CAAA,EACA,KAAAyoB,mBAAA,KAAAR,QACA,KAAAzO,WAAA,KAAApK,GACA,KAAAiF,UAAA,CAAArU,EAAAqU,UAAA,CACA,KAAAqU,mBAAA,CAAA1oB,EAAA0oB,mBAAA,CAEArV,kBAAAsV,CAAA,CAAAzV,CAAA,EACA,aAAAA,EAAAzQ,UAAA,EACA,KAAA4R,UAAA,EACAlC,KAAA,GACAX,QAAA,GACAD,MAAA,GACA9O,WAAA,CACA,CACAlK,GAAA2a,EAAA3a,EAAA,CACAkK,WAAAyQ,EACAzQ,UAAA,EAEA,GAEA,KAAAqQ,gBAAA,CAAA6V,EACA,CACA7V,iBAAA6V,CAAA,EACA,KAAAF,mBAAA,CAAAvvB,GAAA,CAAAyvB,KAEA,KAAAF,mBAAA,CAAApvB,GAAA,CAAAsvB,GACA,KAAAC,4BAAA,CAAAD,GACA,CACAtO,iBAAAF,CAAA,CAAAP,CAAA,EACA,GAAAO,IAAAA,EAAAjjB,MAAA,CACA,OACA,IAAA2xB,EAAA,CACAtwB,GAAAqhB,EACAkP,SAAA,IAEArB,EAAA,GACA,QAAAvkB,KAAAiX,EAAA,CACA,IAAAV,EACA,KAAAD,WAAA,CAAAtgB,GAAA,CAAAgK,GAWAuW,EAAA,KAAAD,WAAA,CAAAnhB,KAAA,CAAA6K,IAVAuW,EAAA,KAAAD,WAAA,CAAAngB,GAAA,CAAA6J,GACAukB,EAAAjwB,IAAA,EACAiiB,QAAAA,EACArjB,MAAAE,MAAAC,IAAA,CAAA2M,EAAA9M,KAAA,EAAA2yB,QAAA,CAAAzS,EAAAzF,IAAA,EACAha,KAAAL,EAAA8f,GACAzF,MAAAA,CACA,GACA,IAIAgY,EAAAC,QAAA,CAAAtxB,IAAA,CAAAiiB,EACA,CACAgO,EAAAvwB,MAAA,IACA2xB,CAAAA,EAAApB,MAAA,CAAAA,CAAA,EACA,KAAAiB,mBAAA,CAAAG,EACA,CACApvB,OAAA,CACA,KAAA+f,WAAA,CAAA/f,KAAA,GACA,KAAAgvB,mBAAA,KAAAR,OACA,CACAW,6BAAAD,CAAA,EACA,CACA,CAEA,MAAAK,GACAhxB,aAAA,CACA,KAAAixB,OAAA,KAAA7wB,QACA,KAAA8wB,IAAA,IACA,KAAAC,iBAAA,EACA,CACAA,mBAAA,CACAC,sBAAA,KACA,KAAAC,KAAA,GACA,KAAAH,IAAA,EACA,KAAAC,iBAAA,EACA,EACA,CACAzT,cAAAtc,CAAA,CAAAkwB,CAAA,EACA,IAAAC,EAAA,KAAAN,OAAA,CAAAvwB,GAAA,CAAAU,GACA,OAAAmwB,GAAAjzB,MAAAC,IAAA,CAAAgzB,GAAA9kB,IAAA,IAAAD,IAAA8kB,EACA,CACAjwB,IAAAD,CAAA,CAAAoL,CAAA,EACA,KAAAykB,OAAA,CAAA1vB,GAAA,CAAAH,EAAA,MAAA6vB,OAAA,CAAAvwB,GAAA,CAAAU,IAAA,IAAAwY,GAAA,EAAAvY,GAAA,CAAAmL,GACA,CACA6kB,OAAA,CACA,KAAAJ,OAAA,KAAA7wB,OACA,CACAoxB,SAAA,CACA,KAAAN,IAAA,GACA,CACA,CAEA,SAAAO,GAAA7pB,CAAA,EAGA,OADA8pB,EAAAtD,SAAA,CAAAnZ,KADArN,CAGA,CAEA,IAAAK,GAjrGA,IAAAlI,EAkrGA,SAAA4xB,GAAA3pB,EAAA,EAA4B,MAkE5B4pB,EAjEA,IAAY1X,KAAAA,CAAA,CAAA2X,iBAAAA,CAAA,CAAAC,iBAAAA,CAAA,CAAA5pB,WAAAA,EAAA,WAAAC,cAAAA,EAAA,KAAAC,gBAAAA,EAAA,KAAA8d,YAAAA,EAAA,YAAAC,eAAAA,EAAA,KAAA3e,YAAAA,EAAA,GAAAJ,cAAAA,EAAA,UAAAE,gBAAAA,EAAA,KAAAD,iBAAAA,EAAA,KAAAE,mBAAAA,EAAA,KAAAe,iBAAAA,EAAA,GAAAypB,cAAAA,CAAA,CAAApwB,iBAAAqwB,CAAA,CAAAxpB,eAAAypB,CAAA,CAAA9sB,gBAAAA,CAAA,CAAA/C,YAAAA,CAAA,CAAAmG,WAAAA,CAAA,CAAA2pB,OAAAA,CAAA,CAAA9R,SAAAA,EAAA,EAA4c,CAAA3X,eAAAA,EAAA,EAAqB,CAAA0pB,cAAAA,CAAA,CAAAxpB,aAAAA,EAAA,GAAA0kB,yBAAAA,EAAA,GAAA+E,YAAAA,EAAApqB,qBAAAA,EAAAoqB,WAAA,CAC7epqB,EAAAoqB,WAAA,CACA,OAAAhM,qBAAAA,EAAA,GAAAmD,aAAAA,EAAA,GAAA7gB,aAAAA,EAAA,GAAAO,gBAAAA,EAAA,OAAA+f,oBAAAA,EAAA,IAAApP,IAAA,IAAAld,aAAAA,CAAA,CAAAgjB,WAAAA,CAAA,CAAA2S,iBAAAA,CAAA,EAA4MrqB,EA9vC5MtL,EA+vCAA,EACA,IAAA41B,EAAAjF,CAAAA,GACAzY,OAAA2d,MAAA,GAAA3d,OAEA4d,EAAA,GACA,IAAAF,EACA,IACA1d,OAAA2d,MAAA,CAAAvtB,QAAA,EACAwtB,CAAAA,EAAA,GAEA,CACA,MAAA5qB,EAAA,CACA4qB,EAAA,EACA,CAEA,GAAAF,GAAA,CAAApY,EACA,wCAEAzQ,MAAAA,IAAA0oB,GAAA/R,KAAA3W,IAAA2W,EAAA2C,SAAA,EACA3C,CAAAA,EAAA2C,SAAA,CAAAoP,CAAA,EAEAlqB,GAAAxG,KAAA,GACA,IAAAE,EAAAowB,CAAA,IAAAA,EACA,CACAU,MAAA,GACAC,KAAA,GACA,oBACAC,MAAA,GACAC,MAAA,GACAC,OAAA,GACA7H,MAAA,GACA8H,OAAA,GACAC,IAAA,GACA1wB,KAAA,GACA2wB,KAAA,GACAhvB,IAAA,GACAivB,KAAA,GACApjB,SAAA,GACAqjB,OAAA,GACAC,MAAA,GACAC,SAAA,EACA,EACApB,KAAAvoB,IAAAuoB,EACAA,EACA,GACAxpB,EAAAypB,CAAA,IAAAA,GAAAA,QAAAA,EACA,CACA1hB,OAAA,GACAD,QAAA,GACAI,YAAA,GACAY,eAAA,GACAV,eAAA,GACAE,eAAA,GACAC,kBAAA,GACAE,qBAAA,GACAD,mBAAAihB,QAAAA,EACAthB,qBAAAshB,QAAAA,CACA,EACAA,GAEA,IACAoB,SAzhEArhB,EAAA4C,MAAA,EACA,aAAA5C,GAAA,CAAAA,EAAAshB,QAAA,CAAAx1B,SAAA,CAAAkD,OAAA,EACAgR,CAAAA,EAAAshB,QAAA,CAAAx1B,SAAA,CAAAkD,OAAA,CAAA1C,MAAAR,SAAA,CACAkD,OAAA,EAEA,iBAAAgR,GAAA,CAAAA,EAAAuhB,YAAA,CAAAz1B,SAAA,CAAAkD,OAAA,EACAgR,CAAAA,EAAAuhB,YAAA,CAAAz1B,SAAA,CAAAkD,OAAA,CAAA1C,MAAAR,SAAA,CACAkD,OAAA,EAEA6W,KAAA/Z,SAAA,CAAAuM,QAAA,EACAwN,CAAAA,KAAA/Z,SAAA,CAAAuM,QAAA,KAAAuJ,KACA,IAAAxS,EAAAwS,CAAA,IACA,UAAAA,CAAA,EACA,0CAEA,GACA,UAAAxS,EACA,eAEcA,EAAAA,GAAAA,EAAAsF,UAAA,EACd,QACA,EAEA,IAogEA,IAAA8sB,EAAA,EACAC,EAAA,IACAvB,GACA,CAAAM,GACA5qB,CAAAA,EAAAsqB,EAAAtqB,EAAA,EAEAA,GAEAwlB,EAAA,CAAAxlB,EAAAomB,KACA,IAAA1tB,EAOA,GANA,QAAAA,CAAAA,EAAAse,EAAA,MAAAte,KAAA,IAAAA,EAAA,OAAAA,EAAA2d,QAAA,KACArW,EAAA/F,IAAA,GAAAuW,GAAA6V,YAAA,EACA,CAAArmB,CAAAA,EAAA/F,IAAA,GAAAuW,GAAAiW,mBAAA,EACAzmB,EAAA2E,IAAA,CAAA8H,MAAA,GAAAgE,GAAAiW,QAAA,GACA1P,GAAA5d,OAAA,IAAA0yB,EAAA1V,QAAA,IAEAsU,EACApY,MAAAA,GAAAA,EAAAuZ,EAAA7rB,GAAAomB,QAEA,GAAAwE,EAAA,CACA,IAAA7E,EAAA,CACA9rB,KAAA,QACAgV,MAAA4c,EAAA7rB,GACArE,OAAAqR,OAAArC,QAAA,CAAAhP,MAAA,CACAyqB,WAAAA,CACA,EACApZ,OAAA2d,MAAA,CAAAoB,WAAA,CAAAhG,EAAA,IACA,CACA,GAAA/lB,EAAA/F,IAAA,GAAAuW,GAAA6V,YAAA,CACA2D,EAAAhqB,EACA4rB,EAAA,OAEA,GAAA5rB,EAAA/F,IAAA,GAAAuW,GAAAiW,mBAAA,EACA,GAAAzmB,EAAA2E,IAAA,CAAA8H,MAAA,GAAAgE,GAAAiW,QAAA,EACA1mB,EAAA2E,IAAA,CAAAkhB,cAAA,CACA,MAEA+F,CAAAA,IACA,IAAAI,EAAA9B,GAAA0B,GAAA1B,EACA+B,EAAAhC,GACAjqB,EAAAwmB,SAAA,CAAAwD,EAAAxD,SAAA,CAAAyD,EACA+B,CAAAA,GAAAC,CAAA,GACAC,GAAA,GAEA,CACA,EACAC,EAAA,IACA3G,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAAkCkD,OAAAgE,GAAAiW,QAAA,EAAoC/R,EACtE,GACA,EACAyX,EAAA,GAAA5G,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA8BkD,OAAAgE,GAAA2W,MAAA,EAAkC1L,EAChE,IACA2Q,EAAA,GAAA7G,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA8BkD,OAAAgE,GAAA4W,cAAA,EAA0C3L,EACxE,IAKAzI,EAAA,IAAA2V,GAAA,CACAnU,WAAA0X,EACArD,oBANA,GAAAtD,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA8BkD,OAAAgE,GAAAmX,iBAAA,EAA6C3qB,EAC3E,GAIA,GACA8V,EAAA,kBAAAuZ,0BAAAA,yBACA,IAAArH,GACA,IAAAI,GAAA,CACAhlB,OAAAA,GACAoU,WAAA0X,EACAlZ,kBAAAA,EACAwS,yBAAAA,EACAD,YAAAA,CACA,GACA3P,EAAA,IAAAuT,GACAjT,EAAAsU,EACAA,EAAA,CACA1pB,aAAAA,EACAT,WAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAgY,SAAAA,EAAA,OACA3X,eAAAA,CACA,GACA,IAAA8nB,GACAxV,GAAA,kBAAAoZ,8BACAA,6BACA,IAAArE,GACA,IAAAC,GAAA,CACA1T,WAAA0X,EACA5T,SAAA6T,EACAziB,cAAA,CACAmO,WAAAA,EACAxX,WAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAZ,YAAAA,EACAJ,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACAe,iBAAAA,EACA3G,iBAAAA,EACA8G,eAAAA,EACAtD,gBAAAA,EACAoD,WAAAA,EACAnG,YAAAA,EACAuG,aAAAA,EACAD,aAAAA,EACA0X,SAAAA,EACA5X,eAAAA,EACAmS,cAAAA,EACAE,kBAAAA,EACAkD,cAAAA,EACA9U,gBAAAA,EACAwU,qBAAAA,CACA,EACAxV,OAAAA,EACA,GACA6rB,GAAA,CAAA9F,EAAA,MACAZ,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAmW,IAAA,CACAhiB,KAAA,CACAjN,KAAAsV,OAAArC,QAAA,CAAAjT,IAAA,CACAwM,MAAAoK,KACAlK,OAAA+J,IACA,CACA,GAASiY,GACTnT,EAAApZ,KAAA,GACAsZ,GAAA6C,IAAA,GACAgB,GAAA5d,OAAA,IAAA0yB,EAAAxV,IAAA,IACA,IAAA9c,EAAAgzB,SAj7EA32B,CAAA,CAAAuK,CAAA,EACA,IAAYC,OAAAA,EAAA,IAAAlI,CAAA,CAAAmI,WAAAA,EAAA,WAAAC,cAAAA,EAAA,KAAAC,gBAAAA,EAAA,KAAAZ,YAAAA,EAAA,GAAAJ,cAAAA,EAAA,UAAAE,gBAAAA,EAAA,KAAAD,iBAAAA,EAAA,KAAAE,mBAAAA,EAAA,KAAAe,iBAAAA,EAAA,GAAAI,aAAAA,EAAA,GAAAC,aAAAA,EAAA,GAAAopB,cAAAA,EAAA,GAAA5sB,gBAAAA,CAAA,CAAAoD,WAAAA,CAAA,CAAAnG,YAAAA,CAAA,CAAAiyB,QAAAA,EAAA,GAAA5rB,eAAAA,CAAA,CAAAU,mBAAAA,CAAA,CAAAP,YAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAC,kBAAAA,CAAA,CAAAC,iBAAAA,CAAA,CAAAC,sBAAAA,CAAA,CAAAC,gBAAAA,EAAA,QAA6gBjB,GAAA,GACzhBrG,EAAAowB,CAAA,IAAAA,EACA,CACAU,MAAA,GACAC,KAAA,GACA,oBACAC,MAAA,GACAC,MAAA,GACAC,OAAA,GACA7H,MAAA,GACA8H,OAAA,GACAC,IAAA,GACA1wB,KAAA,GACA2wB,KAAA,GACAhvB,IAAA,GACAivB,KAAA,GACApjB,SAAA,GACAqjB,OAAA,EACA,EACAnB,CAAA,IAAAA,EACA,GACAA,EACAvpB,EAAA6rB,CAAA,IAAAA,GAAAA,QAAAA,EAEA,CACA9jB,OAAA,GACAD,QAAA,GACAI,YAAA,GACAY,eAAA,GACAX,qBAAA0jB,QAAAA,EACAzjB,eAAA,GACAE,eAAA,GACAC,kBAAA,GACAC,mBAAA,GACAC,qBAAA,EACA,EACAojB,CAAA,IAAAA,EACA,GACAA,EACA,OAAAtsB,GAAAtK,EAAA,CACAiH,IAAAjH,EACAwK,OAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAZ,YAAAA,EACAJ,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACAc,UAAA,GACAC,iBAAAA,EACA3G,iBAAAA,EACAwD,gBAAAA,EACAoD,WAAAA,EACAnG,YAAAA,EACAoG,eAAAA,EACAC,eAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAQ,mBAAAA,EACAP,YAAAA,EACAC,aAAAA,EACAC,kBAAAA,EACAC,iBAAAA,EACAC,sBAAAA,EACAC,gBAAAA,EACAC,kBAAA,EACA,EACA,EA22EAlE,SAAA,CACAiD,OAAAA,GACAC,WAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAZ,YAAAA,EACAJ,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACAe,iBAAAA,EACAypB,cAAApwB,EACAwD,gBAAAA,EACA/C,YAAAA,EACAmG,WAAAA,EACA8rB,QAAA7rB,EACAC,eAAAA,EACAE,aAAAA,EACAD,aAAAA,EACAE,YAAA,IACAmO,GAAAtZ,EAAAwK,KACA0S,EAAAC,SAAA,CAAAnd,GAEAwZ,GAAAxZ,EAAAwK,KACA4S,EAAAC,gBAAA,CAAArd,GAEAyZ,GAAAzZ,IACAsd,GAAAC,aAAA,CAAAvd,EAAAE,UAAA,CAAAqH,SAEA,EACA6D,aAAA,CAAAoS,EAAAC,KACAP,EAAAQ,YAAA,CAAAF,EAAAC,GACAH,GAAAK,mBAAA,CAAAH,EACA,EACAlS,iBAAA,CAAA4nB,EAAAzV,KACAL,EAAAQ,iBAAA,CAAAsV,EAAAzV,EACA,EACAjS,gBAAAA,CACA,GACA,IAAA7H,EACA,OAAAsM,QAAAC,IAAA,oCAEAyf,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAA6V,YAAA,CACA1hB,KAAA,CACAnL,KAAAA,EACAkzB,cAAApf,GAAAN,OACA,CACA,GAASoZ,GACTpP,GAAA5d,OAAA,IAAA0yB,EAAAvV,MAAA,IACAnZ,SAAA0oB,kBAAA,EAAA1oB,SAAA0oB,kBAAA,CAAAxuB,MAAA,IACA2b,EAAAwH,gBAAA,CAAArd,SAAA0oB,kBAAA,CAAAzlB,GAAA5H,KAAA,CAAA2E,UACA,EACArI,EAAAm3B,GACA,IACA,IAAAl3B,EAAA,GACAgjB,EAAA,GACAnB,GAAA6D,IAAA,CACA5C,WAAAA,EACArD,WAAA0X,EACAlR,YAAA,CAAAM,EAAA9O,IAAA+Y,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA,CACA8H,OAAAA,EACA8O,UAAAA,CACA,CACA,IACAe,mBAAA,GAAAkJ,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA0CkD,OAAAgE,GAAA0W,gBAAA,EAA4CzH,EACtF,IACAnH,SAAA6T,EACArO,iBAAA,GAAAyH,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA0CkD,OAAAgE,GAAAwW,cAAA,EAA0CvH,EACpF,IACArB,QAAA,GAAAmH,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA0CkD,OAAAgE,GAAA6W,KAAA,EAAiCvI,EAC3E,IACAe,mBAAA,GAAA0F,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA0CkD,OAAAgE,GAAAyW,gBAAA,EAA4CxL,EACtF,IACA0E,iBAAA,GAAAoF,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA0CkD,OAAAgE,GAAA8W,cAAA,EAA0C7Q,EACpF,IACAyK,mBAAA,GAAAqE,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA0CkD,OAAAgE,GAAA+W,gBAAA,EAA4C9Q,EACtF,IACAiW,iBAAAN,EACAxK,OAAA,GAAA2D,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA0CkD,OAAAgE,GAAAiX,IAAA,EAAgChM,EAC1E,IACAiH,YAAA,IACA6C,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA8CkD,OAAAgE,GAAAkX,SAAA,EAAqCjM,EACnF,GACA,EACAqI,gBAAA,IACAyB,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAiW,mBAAA,CACA9hB,KAAA1O,OAAAsT,MAAA,EAA8CkD,OAAAgE,GAAAmc,aAAA,EAAyCzuB,EACvF,GACA,EACAmC,WAAAA,EACAge,YAAAA,EACAC,eAAAA,EACA3e,YAAAA,EACAJ,cAAAA,EACAE,gBAAAA,EACAD,iBAAAA,EACAE,mBAAAA,EACA5F,iBAAAA,EACA2G,iBAAAA,EACA8X,SAAAA,EACAzX,aAAAA,EACAD,aAAAA,EACA0d,qBAAAA,EACAmD,aAAAA,EACA7kB,IAAAA,EACAS,gBAAAA,EACA/C,YAAAA,EACAmG,WAAAA,EACAU,gBAAAA,EACAd,cAAAA,EACAC,gBAAAA,EACAI,eAAAA,EACAC,eAAAA,EACAR,OAAAA,GACA0S,cAAAA,EACAE,kBAAAA,EACAE,iBAAAA,GACA0C,qBAAAA,EACAM,cAAAA,EACAiL,oBAAAA,EACAyL,QAAA,IACa,IAEb9Z,EAAAqS,eAAA,KACA,IACApwB,EAAA4C,IAAA,CAAAogB,EAAA/N,EAAAhD,eAAA,EACA,CACA,MAAAjQ,EAAA,CACA8O,QAAAC,IAAA,CAAA/O,EACA,CACA,GACA,IAAAgf,EAAA,KACAkW,KACAl3B,EAAA4C,IAAA,CAAAogB,EAAA5a,UACA,EAuBA,MAtBAA,gBAAAA,SAAA+M,UAAA,EACA/M,aAAAA,SAAA+M,UAAA,CACA6L,KAGAhhB,EAAA4C,IAAA,CAAAuT,GAAA,wBACAqa,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAqW,gBAAA,CACAliB,KAAA,EACA,IACA,qBAAA6lB,GACAxU,GACA,IACAhhB,EAAA4C,IAAA,CAAAuT,GAAA,YACAqa,EAAAqE,GAAA,CACA5vB,KAAAuW,GAAAoW,IAAA,CACAjiB,KAAA,EACA,IACA,SAAA6lB,GACAxU,GACA,EAAahJ,UAEb,KACAhY,EAAAoE,OAAA,IAAA+iB,KACAtG,EAAA+T,OAAA,GACA70B,EAAA8M,KAAAA,EArnDA/M,EAAA+M,KAAAA,CAunDA,CACA,CACA,MAAA7K,EAAA,CACA8O,QAAAC,IAAA,CAAA/O,EACA,CACA,CAgBA,SAAA81B,GAAAtG,CAAA,EAEA,OAAAuG,EADA,WACAvG,EAAAA,IAAAA,CACA,CAKA,SAAAwG,GAAAxG,CAAA,EAEA,OAAAuG,EADA,WACAvG,EAAA,IAAAA,CACA,CAKA,SAAAyG,GAAAC,CAAA,CAAAC,CAAA,EACA,uBAAAA,EAAAC,QAAA,GAIA,wBAAAt2B,QAAA,CAAAq2B,EAAAC,QAAA,EACAF,EAAAG,mBAAA,GAEAH,EAAAI,4BAAA,GAGAJ,EAAAK,SAAA,MACAL,EAAAM,iBAAA,EACAvzB,KAAAuW,GAAAuW,MAAA,CAGAP,UAAA,IAAA2G,CAAAA,EAAA3G,SAAA,KACA7hB,KAAA,CACA8oB,IAAA,aAEAxZ,QAAiB,GAAAyZ,EAAAC,EAAA,EAASR,EAAA,OAC1B,CACA,GAGAA,YAAAA,EAAAC,QAAA,GAEA,CAKA,SAAAQ,GAAAtzB,CAAA,EACA,IAAAuzB,EAAAvzB,EAAAwzB,OAAA,CAJA,YAKA,OAAAD,GAAAvzB,CACA,CAQA,SAAAyzB,GAAA9e,CAAA,EACA,IAAA5D,EAAA2iB,GAAA/e,UAEA,GAAA5D,aAAAjE,QAIAwmB,GAAAviB,GAHAA,CAIA,CAGA,SAAA2iB,GAAA/e,CAAA,QACA,UAQA,OARAA,GAAAA,GAQA,WARAA,EACAA,EAAA5D,MAAA,CAGA4D,CACA,CArFA8a,GAAA1pB,MAAA,CAAAA,GACA0pB,GAAAmC,gBAAA,CAPA,SAAA9F,CAAA,EACA,IAAArxB,EACA,+DAEAA,EAAAqxB,EACA,CAyIA,OAAA6H,GAGA71B,YACA80B,CAAA,CACAgB,CAAA,CAEAC,EAAAlB,EAAA,CACA,CACA,KAAAmB,aAAA,GACA,KAAAC,WAAA,GACA,KAAAC,OAAA,IAGA,KAAAC,QAAA,CAAAL,EAAApiB,OAAA,KACA,KAAA0iB,UAAA,CAAAN,EAAA9S,SAAA,KACA,KAAAqT,aAAA,CAAAP,EAAAQ,aAAA,KACA,KAAAC,OAAA,CAAAzB,EACA,KAAA0B,eAAA,CAAAV,EAAA3P,cAAA,CACA,KAAA4P,mBAAA,CAAAA,CACA,CAGAU,cAAA,KA9DA9X,EA+DA,IAAA+X,GA/DA/X,EA+DA,KAEA,KAAAqX,aAAA,CAAAW,IACA,EAhEA/5B,IACAA,EAAA,GAeE,GAAAg6B,EAAAC,EAAA,EAAI15B,EAAA,gBAAA25B,CAAA,EACN,mBAAAljB,CAAA,EACA,GAAAhX,EACA,IACAA,EAAAoE,OAAA,CAAAokB,GAAAA,IACA,CAAU,MAAAxd,EAAA,CAEV,CAGA,OAAAkvB,EAAA5iB,KAAA,CAAA/W,EAAAyW,EACA,CACA,IAvBAhX,EAAA4C,IAAA,CAAAmf,GAEA,KACA,IAAAtZ,EAAAzI,EAAAA,EAAAqH,OAAA,CAAA0a,GAAA,GACAtZ,EAAA,IACA,EAAA0xB,MAAA,CAAA1xB,EAAA,EAEA,EAsDA,MAAA2xB,SAAA,MACAN,IAEA,KAAAR,OAAA,IACA,KAAAF,aAAA,GACA,KAAAC,WAAA,EACA,CACA,CAGAgB,iBAAA,CACA,KAAAD,SAAA,EACA,KAAAA,SAAA,GAGA,KAAAE,kBAAA,EACA7kB,aAAA,KAAA6kB,kBAAA,CAEA,CAGAC,YAAApC,CAAA,CAAA3zB,CAAA,MAkKA+kB,EAjKA,GAAAiR,EAAA,KAAAZ,eAAA,CAkKA,CAAAa,GAAA34B,QAAA,CAAA0C,EAAAQ,OAAA,GAKAR,UAAAA,EAAAQ,OAAA,uBAAAlD,QAAA,CAAA0C,EAAA0B,YAAA,eAQA1B,MAAAA,EAAAQ,OAAA,EACAR,CAAAA,EAAAuB,YAAA,cAAAvB,EAAAuB,YAAA,YAAAvB,UAAAA,EAAA0B,YAAA,aAKAqjB,GAAA/kB,EAAA0F,OAAA,CAAAqf,IAQA,CAAA4O,CAAAA,EAAAxoB,IAAA,mBAAAwoB,EAAAxoB,IAAA,CAAA+Q,MAAA,EAAAyX,EAAA3G,SAAA,EA5LA,OAGA,IAAAkJ,EAAA,CACAlJ,UAAAwG,GAAAG,EAAA3G,SAAA,EACAmJ,gBAAAxC,EAEAyC,WAAA,EACAp2B,KAAAA,CACA,EAIA,KAAA80B,OAAA,CAAAzpB,IAAA,CAAAgrB,GAAAA,EAAAr2B,IAAA,GAAAk2B,EAAAl2B,IAAA,EAAAiL,EAAAA,KAAAqrB,GAAA,CAAAD,EAAArJ,SAAA,CAAAkJ,EAAAlJ,SAAA,KAKA,KAAA8H,OAAA,CAAA12B,IAAA,CAAA83B,GAGA,SAAApB,OAAA,CAAAh3B,MAAA,EACA,KAAAy4B,oBAAA,GAEA,CAGAC,iBAAAxJ,EAAAta,KAAAD,GAAA,IACA,KAAAmiB,aAAA,CAAApB,GAAAxG,EACA,CAGAyJ,eAAAzJ,EAAAta,KAAAD,GAAA,IACA,KAAAoiB,WAAA,CAAArB,GAAAxG,EACA,CAGA0J,cAAA51B,CAAA,EACA,IAAAd,EAAAo0B,GAAAtzB,GACA,KAAA61B,iBAAA,CAAA32B,EACA,CAGA22B,kBAAA32B,CAAA,EACA,KAAA42B,UAAA,CAAA52B,GAAAJ,OAAA,CAAAy2B,IACAA,EAAAD,UAAA,EACA,EACA,CAGAQ,WAAA52B,CAAA,EACA,YAAA80B,OAAA,CAAApa,MAAA,CAAA2b,GAAAA,EAAAr2B,IAAA,GAAAA,EACA,CAGA62B,cAAA,CACA,IAAAC,EAAA,GAEArkB,EAAA8iB,KAiBA,QAAAc,KAfA,KAAAvB,OAAA,CAAAl1B,OAAA,CAAAy2B,IACA,CAAAA,EAAAU,aAAA,OAAAnC,aAAA,EACAyB,CAAAA,EAAAU,aAAA,CAAAV,EAAArJ,SAAA,OAAA4H,aAAA,MAAAA,aAAA,CAAAyB,EAAArJ,SAAA,CAAA3kB,KAAAA,CAAA,EAEA,CAAAguB,EAAAW,WAAA,OAAAnC,WAAA,EACAwB,CAAAA,EAAAW,WAAA,CAAAX,EAAArJ,SAAA,OAAA6H,WAAA,MAAAA,WAAA,CAAAwB,EAAArJ,SAAA,CAAA3kB,KAAAA,CAAA,EAIAguB,EAAArJ,SAAA,MAAA+H,QAAA,EAAAtiB,GACAqkB,EAAA14B,IAAA,CAAAi4B,EAEA,GAGAS,GAAA,CACA,IAAA7yB,EAAA,KAAA6wB,OAAA,CAAAjyB,OAAA,CAAAwzB,GAEApyB,EAAA,KACA,KAAAgzB,oBAAA,CAAAZ,GACA,KAAAvB,OAAA,CAAAa,MAAA,CAAA1xB,EAAA,GAEA,CAGA,KAAA6wB,OAAA,CAAAh3B,MAAA,EACA,KAAAy4B,oBAAA,EAEA,CAGAU,qBAAAZ,CAAA,EACA,IAAA3C,EAAA,KAAAyB,OAAA,CACA+B,EAAAb,EAAAW,WAAA,EAAAX,EAAAW,WAAA,OAAA/B,aAAA,CACAkC,EAAAd,EAAAU,aAAA,EAAAV,EAAAU,aAAA,OAAA/B,UAAA,CAGA,CAAYoB,WAAAA,CAAA,CAAAD,gBAAAA,CAAA,EAA8BE,EAG1C,GAJA,CAAAa,GAAA,CAAAC,EAIA,CAGA,IAAAC,EAAAnsB,IAAAA,KAAAC,GAAA,CAAAmrB,EAAAU,aAAA,OAAAhC,QAAA,MAAAA,QAAA,EACAsC,EAAAD,EAAA,SAAArC,QAAA,sBAEApB,EAAA,CACAlzB,KAAA,UACA8rB,QAAA4J,EAAA5J,OAAA,CACAS,UAAAmJ,EAAAnJ,SAAA,CACA4G,SAAA,uBACAzoB,KAAA,CACA,GAAAgrB,EAAAhrB,IAAA,CACAvI,IAAA7G,EAAAoV,QAAA,CAAAjT,IAAA,CACAo5B,MAAA5D,EAAA6D,eAAA,GACAH,iBAAAA,EACAC,UAAAA,EAGAjB,WAAAA,GAAA,CACA,CACA,EAEA,KAAAzB,mBAAA,CAAAjB,EAAAC,GACA,MACA,CAGA,GAAAyC,EAAA,GACA,IAAAzC,EAAA,CACAlzB,KAAA,UACA8rB,QAAA4J,EAAA5J,OAAA,CACAS,UAAAmJ,EAAAnJ,SAAA,CACA4G,SAAA,gBACAzoB,KAAA,CACA,GAAAgrB,EAAAhrB,IAAA,CACAvI,IAAA7G,EAAAoV,QAAA,CAAAjT,IAAA,CACAo5B,MAAA5D,EAAA6D,eAAA,GACAnB,WAAAA,EACAoB,OAAA,EACA,CACA,EAEA,KAAA7C,mBAAA,CAAAjB,EAAAC,EACA,CACA,CAGA4C,sBAAA,CACA,KAAAT,kBAAA,EACA7kB,aAAA,KAAA6kB,kBAAA,EAGA,KAAAA,kBAAA,CAAA9kB,WAAA,SAAA6lB,YAAA,OACA,CACA,CAEA,IAAAZ,GAAA,uBAmCA,SAAAV,KACA,OAAA7iB,KAAAD,GAAA,MACA,CAoDA,SAAAglB,GACA9D,CAAA,EAEA,OACA3G,UAAAta,KAAAD,GAAA,OACAhS,KAAA,UACA,GAAAkzB,CAAA,CAEA,CAIAl4B,CADAA,EAOCA,GAAAA,CAAAA,EAAA,IAND,CAAAA,EAAA,uBACAA,CAAA,CAAAA,EAAA,+BACAA,CAAA,CAAAA,EAAA,qBACAA,CAAA,CAAAA,EAAA,eACAA,CAAA,CAAAA,EAAA,iBACAA,CAAA,CAAAA,EAAA,qBAKA,IAAAi8B,GAAA,IAAAlf,IAAA,CACA,KACA,QACA,aACA,OACA,OACA,MACA,QACA,eACA,cACA,WACA,gBACA,EAsBAmf,GAAA,GAGA,IACA,IAAAjE,EAAAkE,SAAA,GACA,OAGA,IAAA5W,EAAA6W,SA4DAC,CAAA,EACA,IAAUjmB,OAAAA,CAAA,CAAA0a,QAAAA,CAAA,EAAkBwL,SAQ5BD,CAAA,MAGAvL,EAFA,IAAAyL,EAAAF,UAAAA,EAAAh0B,IAAA,CAGA+N,EAAA,KAGA,IACAA,EAAAmmB,EAAAzD,GAAAuD,EAAAriB,KAAA,EAAA+e,GAAAsD,EAAAriB,KAAA,EACA8W,EAAc,GAAA0L,EAAAC,EAAA,EAAgBrmB,EAAA,CAAWsmB,gBAAA,OAAsB,WAC/D,CAAI,MAAA3xB,EAAA,CACJ+lB,EAAA,WACA,CAEA,OAAW1a,OAAAA,EAAA0a,QAAAA,CAAA,CACX,EAvB4BuL,GAE5B,OAAAL,GAAA,CACA7D,SAAA,MAAoBkE,EAAAh0B,IAAA,CAAiB,EACrC,GAAAs0B,GAAAvmB,EAAA0a,EAAA,EAEA,EAnEAuL,GAEA,IAAA9W,EACA,OAGA,IAAAgX,EAAAF,UAAAA,EAAAh0B,IAAA,CACA2R,EAAAuiB,GAAAF,EAAAriB,KAAA,EAGAuiB,IACAtE,EAAA2E,aAAA,GACA5iB,GACAA,EAAA6iB,MAAA,EACA7iB,EAAA8iB,OAAA,EACA9iB,EAAA+iB,OAAA,EACA/iB,EAAAgjB,QAAA,EAEA1C,SAjYAsC,CAAA,CAAAlC,CAAA,CAAAn2B,CAAA,EACAq4B,EAAAtC,WAAA,CAAAI,EAAAn2B,EACA,EAgYA0zB,EAAA2E,aAAA,CACArX,EACAuT,GAAAuD,EAAAriB,KAAA,GAIAge,GAAAC,EAAA1S,EACA,EAIA,SAAAoX,GAAAvmB,CAAA,CAAA0a,CAAA,EACA,IAAArQ,EAAAqU,GAAA1pB,MAAA,CAAA5H,KAAA,CAAA4S,GACA7R,EAAAkc,GAAAqU,GAAA1pB,MAAA,CAAAxH,OAAA,CAAA6c,GACAhc,EAAAF,GAAAuwB,GAAA1pB,MAAA,CAAAzH,OAAA,CAAAY,GACAc,EAAAZ,GAqDAF,EAAAS,IAAA,GAAAhF,EAAAmS,OAAA,CArDA1N,EAAA,KAEA,OACAqsB,QAAAA,EACAphB,KAAArK,EACA,CACAob,OAAAA,EACAlc,KAAA,CACAb,GAAA+c,EACA1b,QAAAM,EAAAN,OAAA,CACAwJ,YAAA9M,MAAAC,IAAA,CAAA2D,EAAAnB,UAAA,EACAuS,GAAA,IAAAlS,EAAAS,IAAA,GAAAhF,EAAAkT,IAAA,EAAA3O,EAAAgK,WAAA,EACA0Q,MAAA,CAAAha,SACAwR,GAAA,CAAAjR,GAAA,EAAAuC,IAAA,IACAnG,IAAA,KACAgM,WAAAqvB,SA1EArvB,CAAA,EACA,IAAAklB,EAAA,GACA,QAAA9R,KAAApT,EACA,GAAAquB,GAAA53B,GAAA,CAAA2c,GAAA,CACA,IAAAkc,EAAAlc,EAEAA,CAAAA,gBAAAA,GAAAA,iBAAAA,CAAA,GACAkc,CAAAA,EAAA,UAGApK,CAAA,CAAAoK,EAAA,CAAAtvB,CAAA,CAAAoT,EAAA,CAIA,OAAA8R,CACA,EA2DAztB,EAAAuI,UAAA,CACA,CACA,EACA,EACA,CACA,CAiGA,IAAAuvB,GAEA,CAEAC,SAuFA,SACAC,CAAA,EAEA,IACAC,UAAAA,CAAA,CACAC,cAAAA,CAAA,CACAl1B,KAAAA,CAAA,CACAm1B,YAAAA,CAAA,CACAC,UAAAA,CAAA,CACAC,gBAAAA,CAAA,CACAC,gBAAAA,CAAA,CACAC,eAAAA,CAAA,CACAC,aAAAA,CAAA,CACA,CAAIR,QAGJ,2BAAAx7B,QAAA,CAAA07B,GACA,KAGA,CACAv4B,KAAA,GAAas4B,EAAU,GAAGC,EAAc,EACxC7O,MAAAoP,GAAAL,GACA9O,IAAAmP,GAAAN,GACAn1B,KAAAA,EACAqH,KAAA,CACAgS,KAAAmc,EACAE,WAAAH,EACAF,gBAAAA,EACAC,gBAAAA,CACA,CACA,CACA,EAtHAK,MA4BA,SAAAX,CAAA,EACA,IAAUY,SAAAA,CAAA,CAAAX,UAAAA,CAAA,CAAAj1B,KAAAA,CAAA,CAAAo1B,UAAAA,CAAA,EAAuCJ,EAEjD3O,EAAAoP,GAAAL,GACA,OACAz4B,KAAAs4B,EACAj1B,KAAAA,EACAqmB,MAAAA,EACAC,IAAAD,EAAAuP,EACAvuB,KAAA9C,KAAAA,CACA,CACA,EArCAsxB,WAuCA,SAAAb,CAAA,EACA,IACAC,UAAAA,CAAA,CACAj1B,KAAAA,CAAA,CACAq1B,gBAAAA,CAAA,CACAO,SAAAA,CAAA,CACAE,YAAAA,CAAA,CACAR,gBAAAA,CAAA,CACAS,2BAAAA,CAAA,CACAC,yBAAAA,CAAA,CACAC,eAAAA,CAAA,CACAC,eAAAA,CAAA,CACAC,aAAAA,CAAA,CACAC,cAAAA,CAAA,CACAhB,UAAAA,CAAA,CACAI,aAAAA,CAAA,CACA74B,KAAAA,CAAA,CACA,CAAIq4B,SAGJ,IAAAY,EACA,KAGA,CACAj5B,KAAA,GAAas4B,EAAU,GAAGt4B,EAAK,EAC/B0pB,MAAAoP,GAAAL,GACA9O,IAAAmP,GAAAK,GACA91B,KAAAA,EACAqH,KAAA,CACAgS,KAAAmc,EACAH,gBAAAA,EACAC,gBAAAA,EACAM,SAAAA,EACAK,eAAAA,EACAF,2BAAAA,EACAC,yBAAAA,EACAE,eAAAA,EACAC,aAAAA,EACAL,YAAAA,EACAM,cAAAA,CACA,CACA,CACA,CAjFA,EAWA,SAAAC,GAAArB,CAAA,SACA,GAAAA,EAAAC,SAAA,EAIAH,EAAA,CAAAE,EAAAC,SAAA,EAAAD,GAHA,IAIA,CAEA,SAAAS,GAAA3H,CAAA,EAGA,QAAWwI,EAAAC,EAA4B,EAAAt+B,EAAAu+B,WAAA,CAAAC,UAAA,EAAA3I,CAAA,KACvC,CAoKA,SAAA4I,GAAAjO,CAAA,CAAAkO,CAAA,EACA,qBAAAC,kBAAAA,gBAAA,IAIEC,EAAAC,EAAM,CAAAC,IAAA,CAAAtO,GAERkO,GACAK,GAAAvO,GAEA,CAMA,SAAAwO,GAAAxO,CAAA,CAAAkO,CAAA,EACA,qBAAAC,kBAAAA,gBAAA,IAIEC,EAAAC,EAAM,CAAAC,IAAA,CAAAtO,GAERkO,GAGAzpB,WAAA,KACA8pB,GAAAvO,EACA,EAAK,GAEL,CAEA,SAAAuO,GAAAvO,CAAA,EACA,IAAAyO,EAAc,GAAAC,EAAAC,EAAA,IACdF,EAAAF,aAAA,CACA,CACAlH,SAAA,UACAzoB,KAAA,CACAgwB,OAAA,QACA,EACAC,MAAA,OACA7O,QAAAA,CACA,EACA,CAAM6O,MAAA,QAEN,CAGA,MAAAC,WAAAC,MACA18B,aAAA,CACA,wDACA,CACA,CAMA,MAAA28B,GAKA38B,aAAA,CACA,KAAA6mB,MAAA,IACA,KAAA+V,UAAA,GACA,KAAAC,WAAA,GACA,CAGA,IAAAC,WAAA,CACA,YAAAjW,MAAA,CAAA3nB,MAAA,EACA,CAGA,IAAA2C,MAAA,CACA,YACA,CAGA2vB,SAAA,CACA,KAAA3K,MAAA,IAIA,MAAAkW,SAAAlmB,CAAA,EACA,IAAAmmB,EAAA59B,KAAAC,SAAA,CAAAwX,GAAA3X,MAAA,CAEA,GADA,KAAA09B,UAAA,EAAAI,EACA,KAAAJ,UAAA,CApnJA,IAqnJA,UAAAH,GAGA,KAAA5V,MAAA,CAAArnB,IAAA,CAAAqX,EACA,CAGAomB,QAAA,CACA,WAAAC,QAAAC,IAIA,IAAAC,EAAA,KAAAvW,MAAA,CACA,KAAAwK,KAAA,GACA8L,EAAA/9B,KAAAC,SAAA,CAAA+9B,GACA,EACA,CAGA/L,OAAA,CACA,KAAAxK,MAAA,IACA,KAAA+V,UAAA,GACA,KAAAC,WAAA,GACA,CAGAQ,sBAAA,CACA,IAAAjP,EAAA,KAAAvH,MAAA,CAAAvT,GAAA,CAAAuD,GAAAA,EAAAuX,SAAA,EAAAkP,IAAA,aAEA,EAIA5I,GAAAtG,GAHA,IAIA,CACA,CAMA,MAAAmP,GAEAv9B,YAAAw9B,CAAA,EACA,KAAAC,OAAA,CAAAD,EACA,KAAAz6B,GAAA,EACA,CAMA26B,aAAA,QAEA,KAAAC,mBAAA,EAIA,MAAAA,mBAAA,KAAAT,QAAA,CAAAC,EAAAS,KACA,KAAAH,OAAA,CAAA1vB,gBAAA,CACA,UACA,EAAWxB,KAAAA,CAAA,CAAM,IACjB,EAAAsxB,OAAA,CACAV,IAEAS,GAEA,EACA,CAAUE,KAAA,KAGV,KAAAL,OAAA,CAAA1vB,gBAAA,CACA,QACAnP,IACAg/B,EAAAh/B,EACA,EACA,CAAUk/B,KAAA,IAEV,EAAK,EAvBL,KAAAH,mBAAA,CA+BAnM,SAAA,CACAoK,GAAA,0CACA,KAAA6B,OAAA,CAAAM,SAAA,EACA,CAKApK,YAAAqK,CAAA,CAAAC,CAAA,EACA,IAAA19B,EAAA,KAAA29B,kBAAA,GAEA,WAAAhB,QAAA,CAAAC,EAAAS,KACA,IAAA9rB,EAAA,EAA0BvF,KAAAA,CAAA,CAAM,IAEhC,GAAA4xB,EAAAH,MAAA,GAAAA,GAMAG,EAAA59B,EAAA,GAAAA,GAOA,GAFA,KAAAk9B,OAAA,CAAApwB,mBAAA,WAAAyE,GAEA,CAAAqsB,EAAAN,OAAA,EAEA,qBAAA/B,kBAAAA,gBAAA,GAA2EC,EAAAC,EAAM,CAAAp9B,KAAA,YAAAu/B,EAAAA,QAAA,EAEjFP,EAAA,sCACA,MACA,CAEAT,EAAAgB,EAAAA,QAAA,EACA,EAIA,KAAAV,OAAA,CAAA1vB,gBAAA,WAAA+D,GACA,KAAA2rB,OAAA,CAAA9J,WAAA,EAAiCpzB,GAAAA,EAAAy9B,OAAAA,EAAAC,IAAAA,CAAA,EACjC,EACA,CAGAC,oBAAA,CACA,YAAAn7B,GAAA,EACA,CACA,CAMA,MAAAq7B,GAGAp+B,YAAAw9B,CAAA,EACA,KAAAC,OAAA,KAAAF,GAAAC,GACA,KAAAa,kBAAA,MACA,KAAAzB,UAAA,GACA,KAAAC,WAAA,GACA,CAGA,IAAAC,WAAA,CACA,aAAAuB,kBAAA,CAIA,IAAAx8B,MAAA,CACA,cACA,CAMA67B,aAAA,CACA,YAAAD,OAAA,CAAAC,WAAA,EACA,CAKAlM,SAAA,CACA,KAAAiM,OAAA,CAAAjM,OAAA,EACA,CAOAuL,SAAAlmB,CAAA,EACA,IAAAuX,EAAAsG,GAAA7d,EAAAuX,SAAA,EACA,OAAAiQ,kBAAA,EAAAjQ,EAAA,KAAAiQ,kBAAA,GACA,MAAAA,kBAAA,CAAAjQ,CAAA,EAGA,IAAA7hB,EAAAnN,KAAAC,SAAA,CAAAwX,SAGA,CAFA,KAAA+lB,UAAA,EAAArwB,EAAArN,MAAA,CAEA,KAAA09B,UAAA,CAnzJA,KAozJAM,QAAAU,MAAA,KAAAnB,IAGA,KAAA6B,kBAAA,CAAA/xB,EACA,CAKA0wB,QAAA,CACA,YAAAsB,cAAA,EACA,CAGAlN,OAAA,CACA,KAAAgN,kBAAA,MACA,KAAAzB,UAAA,GACA,KAAAC,WAAA,IAGA,KAAAY,OAAA,CAAA9J,WAAA,SACA,CAGA0J,sBAAA,CACA,YAAAgB,kBAAA,CAMAC,mBAAA/xB,CAAA,EACA,YAAAkxB,OAAA,CAAA9J,WAAA,YAAApnB,EACA,CAKA,MAAAgyB,gBAAA,CACA,IAAAJ,EAAA,WAAAV,OAAA,CAAA9J,WAAA,WAKA,OAHA,KAAA0K,kBAAA,MACA,KAAAzB,UAAA,GAEAuB,CACA,CACA,CAOA,MAAAK,GAEAx+B,YAAAw9B,CAAA,EACA,KAAAiB,SAAA,KAAA9B,GACA,KAAA+B,YAAA,KAAAN,GAAAZ,GACA,KAAAmB,KAAA,MAAAF,SAAA,CAEA,KAAAG,4BAAA,MAAAC,qBAAA,EACA,CAGA,IAAAh9B,MAAA,CACA,YAAA88B,KAAA,CAAA98B,IAAA,CAIA,IAAAi7B,WAAA,CACA,YAAA6B,KAAA,CAAA7B,SAAA,CAIA,IAAAD,aAAA,CACA,YAAA8B,KAAA,CAAA9B,WAAA,CAGA,IAAAA,YAAA16B,CAAA,EACA,KAAAw8B,KAAA,CAAA9B,WAAA,CAAA16B,CACA,CAGAqvB,SAAA,CACA,KAAAiN,SAAA,CAAAjN,OAAA,GACA,KAAAkN,YAAA,CAAAlN,OAAA,EACA,CAGAH,OAAA,CACA,YAAAsN,KAAA,CAAAtN,KAAA,EACA,CAGAgM,sBAAA,CACA,YAAAsB,KAAA,CAAAtB,oBAAA,EACA,CAOAN,SAAAlmB,CAAA,EACA,YAAA8nB,KAAA,CAAA5B,QAAA,CAAAlmB,EACA,CAGA,MAAAomB,QAAA,CAIA,OAFA,WAAA6B,oBAAA,GAEA,KAAAH,KAAA,CAAA1B,MAAA,EACA,CAGA6B,sBAAA,CACA,YAAAF,4BAAA,CAIA,MAAAC,uBAAA,CACA,IACA,WAAAH,YAAA,CAAAhB,WAAA,EACA,CAAM,MAAA9+B,EAAA,CAGNg9B,GAAA,iFACA,MACA,CAGA,WAAAmD,0BAAA,EACA,CAGA,MAAAA,4BAAA,CACA,IAAYlY,OAAAA,CAAA,CAAAgW,YAAAA,CAAA,EAAsB,KAAA4B,SAAA,CAElCO,EAAA,GACA,QAAAnoB,KAAAgQ,EACAmY,EAAAx/B,IAAA,MAAAk/B,YAAA,CAAA3B,QAAA,CAAAlmB,GAGA,MAAA6nB,YAAA,CAAA7B,WAAA,CAAAA,EAIA,KAAA8B,KAAA,MAAAD,YAAA,CAGA,IACA,MAAAxB,QAAA+B,GAAA,CAAAD,EACA,CAAM,MAAApgC,EAAA,CACN,qBAAAk9B,kBAAAA,gBAAA,GAAuEC,EAAAC,EAAM,CAAAruB,IAAA,yDAAA/O,EAC7E,CACA,CACA,CAmDA,SAAAsgC,KACA,IAEA,yBAAA/hC,GAAA,EAAAA,EAAAgiC,cAAA,CACI,MAAAv3B,EAAA,CACJ,QACA,CACA,CA+BA,SAAAw3B,GAAAC,CAAA,SACA,KAAA51B,IAAA41B,GAKAhzB,KAAAizB,MAAA,GAAAD,CACA,CAKA,SAAAE,GAAAC,CAAA,EACA,GAAAN,KAIA,IACA/hC,EAAAgiC,cAAA,CAAAM,OAAA,CAAAniC,EAAA8B,KAAAC,SAAA,CAAAmgC,GACA,CAAI,MAAA53B,EAAA,CAEJ,CACA,CAKA,SAAA83B,GAAAF,CAAA,EACA,IAAA3rB,EAAAC,KAAAD,GAAA,GACAtT,EAAAi/B,EAAAj/B,EAAA,EAA2B,GAAAo/B,EAAAC,EAAA,IAE3BC,EAAAL,EAAAK,OAAA,EAAAhsB,EACAisB,EAAAN,EAAAM,YAAA,EAAAjsB,EACAksB,EAAAP,EAAAO,SAAA,IACAC,EAAAR,EAAAQ,OAAA,CACAC,EAAAT,EAAAS,iBAAA,CAEA,OACA1/B,GAAAA,EACAs/B,QAAAA,EACAC,aAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,kBAAAA,CACA,CACA,CAcA,SAAAC,GACA,CAAIC,kBAAAA,CAAA,CAAAC,eAAAA,CAAA,CAAAC,cAAAA,EAAA,GAA0D,CAC9D,CAAIJ,kBAAAA,CAAA,EAAoB,EAAI,EAE5B,IAAAD,EAZAZ,GAYAe,GAZA,UAAAC,EAYAA,GAZA,SAaAZ,EAAAE,GAAA,CACAM,QAAAA,EACAC,kBAAAA,CACA,GAMA,OAJAI,GACAd,GAAAC,GAGAA,CACA,CAgCA,SAAAc,GACAC,CAAA,CACAC,CAAA,CACAC,EAAA,KAAA3sB,IAAA,SAGA,OAAAysB,GAAAC,KAAA/2B,IAAA+2B,GAAAA,EAAA,GAKA,IAAAA,GAIAD,EAAAC,GAAAC,CACA,CAKA,SAAAC,GACAlB,CAAA,CACA,CACAmB,kBAAAA,CAAA,CACAC,kBAAAA,CAAA,CACAH,WAAAA,EAAA3sB,KAAAD,GAAA,GACG,EAEH,OAEAysB,GAAAd,EAAAK,OAAA,CAAAc,EAAAF,IAGAH,GAAAd,EAAAM,YAAA,CAAAc,EAAAH,EAEA,CAGA,SAAAI,GACArB,CAAA,CACA,CAAIoB,kBAAAA,CAAA,CAAAD,kBAAAA,CAAA,CAAsC,UAG1CD,GAAAlB,EAAA,CAAmCoB,kBAAAA,EAAAD,kBAAAA,CAAA,IAKnCnB,CAAAA,WAAAA,EAAAQ,OAAA,EAAAR,IAAAA,EAAAO,SAAA,CAKA,CAMA,SAAAe,GACA,CACAC,eAAAA,CAAA,CACAH,kBAAAA,CAAA,CACAD,kBAAAA,CAAA,CACAV,kBAAAA,CAAA,CACA,CAGAe,CAAA,EAEA,IAAAC,EAAAD,EAAAX,aAAA,EAAAa,SAlGAH,CAAA,EACA,IAAA7B,KACA,YAGA,IAEA,IAAAiC,EAAAhkC,EAAAgiC,cAAA,CAAAiC,OAAA,CAAA9jC,GAEA,IAAA6jC,EACA,YAGA,IAAAE,EAAAjiC,KAAAkiC,KAAA,CAAAH,GAIA,OAFAhF,GAAA,oCAAA4E,GAEArB,GAAA2B,EACA,CAAI,MAAAz5B,EAAA,CACJ,WACA,CACA,EA6EAm5B,UAGA,EAKAF,GAAAI,EAAA,CAA+CL,kBAAAA,EAAAD,kBAAAA,CAAA,IAI/CxE,GAAA,sEACA+D,GAAAc,EAAA,CAAyCf,kBAAAgB,EAAA1gC,EAAA,IAJzC0gC,GALA9E,GAAA,gCAAA4E,GACAb,GAAAc,EAAA,CAA2Cf,kBAAAA,CAAA,GAS3C,CAcA,SAAAsB,GAAAzM,CAAA,CAAAje,CAAA,CAAAmX,CAAA,QACA,EAAAwT,GAAA1M,EAAAje,KAIA4qB,GAAA3M,EAAAje,EAAAmX,GAEA,GACA,CAoBA,eAAAyT,GACA3M,CAAA,CACAje,CAAA,CACAmX,CAAA,EAEA,IAAA8G,EAAA4M,WAAA,CACA,YAGA,IACA1T,GAAA8G,WAAAA,EAAA6M,aAAA,EACA7M,EAAA4M,WAAA,CAAArQ,KAAA,GAGArD,GACA8G,CAAAA,EAAA4M,WAAA,CAAA7E,WAAA,KAGA,IAAA+E,EAAA9M,EAAA+M,UAAA,GAEAC,EAAAC,SAkDAlrB,CAAA,CACAmrB,CAAA,EAEA,IACA,sBAAAA,GAjHAnrB,EAAAhV,IAAA,GAAAuW,GAAAuW,MAAA,CAkHA,OAAAqT,EAAAnrB,EAEA,CAAI,MAAAjY,EAAA,CAGJ,MAFA,qBAAAk9B,kBAAAA,gBAAA,GACMC,EAAAC,EAAM,CAAAp9B,KAAA,8FAAAA,GACZ,IACA,CAEA,OAAAiY,CACA,EAhEAA,EAAA+qB,EAAAK,uBAAA,EAEA,IAAAH,EACA,OAGA,aAAAhN,EAAA4M,WAAA,CAAA3E,QAAA,CAAA+E,EACA,CAAI,MAAAljC,EAAA,CACJ,IAAAsjC,EAAAtjC,GAAAA,aAAA69B,GAAA,iCAEA,sBAAAX,kBAAAA,gBAAA,GAAqEC,EAAAC,EAAM,CAAAp9B,KAAA,CAAAA,GAC3E,MAAAk2B,EAAAqN,IAAA,EAAwBD,OAAAA,CAAA,GAExB,IAAAE,EAAmB,GAAA/F,EAAAC,EAAA,IAAa+F,SAAA,GAEhCD,GACAA,EAAAE,kBAAA,+BAEA,CACA,CAGA,SAAAd,GAAA1M,CAAA,CAAAje,CAAA,EACA,IAAAie,EAAA4M,WAAA,EAAA5M,EAAAyN,QAAA,KAAAzN,EAAAkE,SAAA,GACA,SAGA,IAAAwJ,EAAA9N,GAAA7d,EAAAuX,SAAA,QAMA,CAAAoU,CAAAA,EAAA1N,EAAA2N,QAAA,CAAAC,gBAAA,CAAA5uB,KAAAD,GAAA,OAKA2uB,CAAAA,EAAA1N,EAAAlpB,UAAA,GAAA+2B,gBAAA,CAAA7N,EAAA+M,UAAA,GAAAlB,iBAAA,IACA/E,GACA,0CAAgD4G,EAAA,sCAAe,EAC/D1N,EAAA+M,UAAA,GAAAe,YAAA,CAAA7B,cAAA,EAEA,IAIA,CAyBA,SAAA8B,GAAAhsB,CAAA,EACA,MAAAA,gBAAAA,EAAAhV,IAAA,CAWA,SAAAihC,GAAAhO,CAAA,EAGA,IAAAiO,EAAAC,WAmEA,IAAAZ,EAAiB,GAAA/F,EAAAC,EAAA,IAAa+F,SAAA,GAC9B,IAAAD,EACA,SAGA,IAAAa,EAAAb,EAAAc,YAAA,SACA,EAAAD,GAKA,GAAAE,IAAA,CAAAC,yBAAA,KAEA,IA9EA,OAAAvsB,EAAAwsB,KACA,IAAAvO,EAAAkE,SAAA,MAtBAn3B,IAAA,EAsBA,CAAAghC,GAAAhsB,GACA,OAGA,IAAA+jB,EAAAyI,GAAAA,EAAAzI,UAAA,CAKA,GAAAmI,CAAAA,GAAA,IAAAnI,CAAAA,EAAA,OAAAA,CAAAA,GAAA,MAIA,GAAAiI,GAAAhsB,GAAA,EACAysB,SAQAxO,CAAA,CAAAje,CAAA,EACA,IAAA0sB,EAAAzO,EAAAlpB,UAAA,EAKAiL,CAAAA,EAAA2sB,QAAA,EAAA3sB,EAAA2sB,QAAA,CAAAC,KAAA,EAAA5sB,EAAA2sB,QAAA,CAAAC,KAAA,CAAAC,QAAA,EAAAH,EAAAI,QAAA,CAAAplB,IAAA,MACAglB,EAAAI,QAAA,CAAAtiC,GAAA,CAAAwV,EAAA2sB,QAAA,CAAAC,KAAA,CAAAC,QAAA,CAEA,EAjBA5O,EAAAje,GACA,MACA,EAEA+sB,SAeA9O,CAAA,CAAAje,CAAA,EACA,IAAA0sB,EAAAzO,EAAAlpB,UAAA,GAcA,GANAiL,EAAAgtB,QAAA,EAAAN,EAAAO,QAAA,CAAAvlB,IAAA,MACAglB,EAAAO,QAAA,CAAAziC,GAAA,CAAAwV,EAAAgtB,QAAA,EAKA/O,WAAAA,EAAA6M,aAAA,GAAA9qB,EAAAktB,IAAA,GAAAltB,EAAAktB,IAAA,CAAAC,QAAA,CACA,OAGA,IAAUC,oBAAAA,CAAA,EAAsBnP,EAAA+M,UAAA,GAChC,oBAAAoC,GAAAA,EAAAptB,EAAA,GAIAzE,WAAA,KAEA0iB,EAAAoP,yBAAA,EACA,EACA,EA3CApP,EAAAje,GACA,CACA,CAyKA,SAAAstB,GACArP,CAAA,CACApM,CAAA,EAEA,OAAAA,EAAApV,GAAA,GAAwBzR,KAAAA,CAAA,CAAA0pB,MAAAA,CAAA,CAAAC,IAAAA,CAAA,CAAAtmB,KAAAA,CAAA,CAAAqH,KAAAA,CAAA,CAA8B,IACtD,IAAA4xB,EAAArJ,EAAAM,iBAAA,EACAvzB,KAAAuW,GAAAuW,MAAA,CACAP,UAAA7C,EACAhf,KAAA,CACA8oB,IAAA,kBACAxZ,QAAA,CACAuoB,GAAAviC,EACAwiC,YAAAn/B,EACAo/B,eAAA/Y,EACAgZ,aAAA/Y,EACAjf,KAAAA,CACA,CACA,CACA,GAGA,uBAAA4xB,EAAAjB,QAAAC,OAAA,OAAAgB,CACA,EACA,CA2DA,SAAAqG,GACA1P,CAAA,CACA1S,CAAA,MAZApe,EAcA8wB,EAAAkE,SAAA,IAIA5W,OAAAA,IAlBApe,EAsBAoe,EAAAld,IAAA,CApBA,uBAAA42B,kBAAAA,gBAAA,IAAAhH,EAAA+M,UAAA,GAAAe,YAAA,CAAA7B,cAAA,GAIS,GAAA0D,EAAAC,CAAA,EAAkB1gC,EAAM,GAAAq4B,EAAAC,EAAA,MAoBjCxH,EAAAK,SAAA,MACAgP,GAAArP,EAAA,CAAA1S,EAAA,EAIA,KAEA,CAqFA,SAAAuiB,GACA/uB,CAAA,CACAgvB,CAAA,EAEA,GAAAhvB,EAIA,IACA,oBAAAA,EACA,OAAAgvB,EAAAC,MAAA,CAAAjvB,GAAA1W,MAAA,CAGA,GAAA0W,aAAAkvB,gBACA,OAAAF,EAAAC,MAAA,CAAAjvB,EAAA7X,QAAA,IAAAmB,MAAA,CAGA,GAAA0W,aAAAmvB,SAAA,CACA,IAAAC,EAAAC,GAAArvB,GACA,OAAAgvB,EAAAC,MAAA,CAAAG,GAAA9lC,MAAA,CAGA,GAAA0W,aAAAsvB,KACA,OAAAtvB,EAAA2I,IAAA,CAGA,GAAA3I,aAAAuvB,YACA,OAAAvvB,EAAAwvB,UAAA,CAII,MAAAx9B,EAAA,CAEJ,CAGA,CAGA,SAAAy9B,GAAAC,CAAA,EACA,IAAAA,EACA,OAGA,IAAA/mB,EAAAgnB,SAAAD,EAAA,IACA,OAAApgB,MAAA3G,GAAA9U,KAAAA,EAAA8U,CACA,CAGA,SAAAinB,GAAA5vB,CAAA,QACA,iBAAAA,EACAA,EAGAA,aAAAkvB,gBACAlvB,EAAA7X,QAAA,GAGA6X,aAAAmvB,SACAE,GAAArvB,SAIA,CAGA,SAAA6vB,GACA5jC,CAAA,CACA0K,CAAA,EAEA,IAAAA,EACA,YAGA,IAAU+3B,eAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAvgC,IAAAA,CAAA,CAAAg6B,OAAAA,CAAA,CAAApD,WAAAA,CAAA,CAAA8K,QAAAA,CAAA,CAAAvH,SAAAA,CAAA,EAA2E5xB,EAErF6V,EAAA,CACAvgB,KAAAA,EACA0pB,MAAA+Y,EAAA,IACA9Y,IAAA+Y,EAAA,IACAr/B,KAAAlB,EACAuI,KAAU,GAAAqqB,EAAA+O,EAAA,EAAiB,CAC3B3H,OAAAA,EACApD,WAAAA,EACA8K,QAAAA,EACAvH,SAAAA,CACA,EACA,EAEA,OAAA/b,CACA,CAGA,SAAAwjB,GAAAC,CAAA,EACA,OACAC,QAAA,GACAvnB,KAAAsnB,EACAE,MAAA,CACAC,SAAA,gBAEA,CACA,CAGA,SAAAC,GACAH,CAAA,CACAD,CAAA,CACAjwB,CAAA,EAEA,IAAAiwB,GAAAhoC,IAAAA,OAAA+C,IAAA,CAAAklC,GAAA5mC,MAAA,CACA,OAGA,IAAA2mC,EACA,OACAC,QAAAA,CACA,EAGA,IAAAlwB,EACA,OACAkwB,QAAAA,EACAvnB,KAAAsnB,CACA,EAGA,IAAA5J,EAAA,CACA6J,QAAAA,EACAvnB,KAAAsnB,CACA,EAEA,CAAUjwB,KAAAswB,CAAA,CAAAF,SAAAA,CAAA,EAAiCG,SA8B3CvwB,CAAA,EAGA,IAAAA,GAAA,iBAAAA,EACA,OACAA,KAAAA,CACA,EAGA,IAAAwwB,EAAAxwB,EAAA1W,MAAA,CAj7LA,KAm7LAmnC,EAAAC,SAkCA/jC,CAAA,EACA,IAAAgkC,EAAAhkC,CAAA,IACAikC,EAAAjkC,CAAA,CAAAA,EAAArD,MAAA,IAGA,YAAAqnC,GAAAC,MAAAA,GAAAD,MAAAA,GAAyDC,MAAAA,CACzD,EAxCA5wB,GAEA,GAAAwwB,EAAA,CACA,IAAAK,EAAA7wB,EAAA1R,KAAA,GAt7LA,aAw7LA,EACA,CACA0R,KAAA6wB,EACAT,SAAA,0BAIA,CACApwB,KAAA,GAAe6wB,EAAc,GAC7BT,SAAA,mBAEA,CAEA,GAAAK,EACA,IACA,IAAAK,EAAAtnC,KAAAkiC,KAAA,CAAA1rB,GACA,OACAA,KAAA8wB,CACA,CACA,CAAM,MAAAC,EAAA,CAEN,CAGA,OACA/wB,KAAAA,CACA,CACA,EAzE2CA,GAQ3C,OAPAqmB,EAAArmB,IAAA,CAAAswB,EACAF,GAAAA,EAAA9mC,MAAA,IACA+8B,CAAAA,EAAA8J,KAAA,EACAC,SAAAA,CACA,GAGA/J,CACA,CAGA,SAAA2K,GAAAd,CAAA,CAAAe,CAAA,EACA,OAAAhpC,OAAA+C,IAAA,CAAAklC,GAAAgB,MAAA,EAAAC,EAAAlpB,KACA,IAAAkc,EAAAlc,EAAA9b,WAAA,GAKA,OAHA8kC,EAAAnoC,QAAA,CAAAq7B,IAAA+L,CAAA,CAAAjoB,EAAA,EACAkpB,CAAAA,CAAA,CAAAhN,EAAA,CAAA+L,CAAA,CAAAjoB,EAAA,EAEAkpB,CACA,EAAG,GACH,CAEA,SAAA9B,GAAA+B,CAAA,EAIA,WAAAlC,gBAAAkC,GAAAjpC,QAAA,EACA,CAwDA,SAAAkpC,GAAAjjC,CAAA,CAAAkjC,CAAA,EACA,IAAAC,EAAAC,SAMApjC,CAAA,CAAAqjC,EAAAlqC,EAAA6H,QAAA,CAAAqiC,OAAA,EAEA,GAAArjC,EAAA+gB,UAAA,aAAA/gB,EAAA+gB,UAAA,cAAA/gB,EAAA+gB,UAAA,CAAA5nB,EAAAoV,QAAA,CAAAhP,MAAA,EACA,OAAAS,EAEA,IAAAsjC,EAAA,IAAAC,IAAAvjC,EAAAqjC,GAGA,GAAAC,EAAA/jC,MAAA,OAAAgkC,IAAAF,GAAA9jC,MAAA,CACA,OAAAS,EAGA,IAAAmjC,EAAAG,EAAAhoC,IAAA,OAGA,CAAA0E,EAAAyM,QAAA,OAAA02B,EAAA12B,QAAA,MACA02B,EAAAjjC,KAAA,OAGAijC,CACA,EA1BAnjC,GAEA,MAAS,GAAAwjC,EAAAC,EAAA,EAAwBN,EAAAD,EACjC,CA6BA,eAAAQ,GACA3S,CAAA,CACA4S,CAAA,CACA3/B,CAAA,EAIA,IACA,IAAAuE,EAAA,MAAAq7B,GAAA7S,EAAA4S,EAAA3/B,GAGAoa,EAAAqjB,GAAA,iBAAAl5B,GACAi4B,GAAAx8B,EAAA8sB,MAAA,CAAA1S,EACA,CAAI,MAAAxjB,EAAA,CACJ,qBAAAk9B,kBAAAA,gBAAA,GAAqEC,EAAAC,EAAM,CAAAp9B,KAAA,+CAAAA,EAC3E,CACA,CA2BA,eAAAgpC,GACA7S,CAAA,CACA4S,CAAA,CACA3/B,CAAA,EAIA,IAAUs8B,eAAAA,CAAA,CAAAC,aAAAA,CAAA,EAA+BoD,EAEzC,CACA3jC,IAAAA,CAAA,CACAg6B,OAAAA,CAAA,CACA6J,YAAAjN,EAAA,EACAkN,kBAAAC,CAAA,CACAC,mBAAAC,CAAA,CACA,CAAIlT,EAAAxoB,IAAA,CAEJ27B,EACAjB,GAAAjjC,EAAAgE,EAAAmgC,sBAAA,IAAAlB,GAAAjjC,EAAAgE,EAAAogC,qBAAA,EAEA1C,EAAAwC,EACAG,SAgBA,CAAIC,qBAAAA,CAAA,CAAAC,sBAAAA,CAAA,CAA6C,CACjDzhB,CAAA,CACAihB,CAAA,EAEA,IAAAjC,EA0FA,IAAA0C,EAAAtpC,MAAA,mBAAAspC,CAAA,IACAC,GAAAD,CAAA,IA3FAD,GA8FAC,IAAAA,EAAAtpC,MAAA,CACAupC,GAAAD,CAAA,IA/FAD,GAkGA,GAhGA,IAAAD,EACA,OAAArC,GAAAH,EAAAiC,EAAAt+B,KAAAA,GAIA,IAAAi/B,EAAAC,GAAA7hB,GACA8hB,EAAApD,GAAAkD,GACA,OAAAzC,GAAAH,EAAAiC,EAAAa,EACA,EA9BA5gC,EAAA2/B,EAAA7gB,KAAA,CAAAihB,GACAnC,GAAAmC,GACA5J,EAAA,MAAA0K,GAAAX,EAAAlgC,EAAA2/B,EAAAxJ,QAAA,CAAA8J,GAEA,OACA3D,eAAAA,EACAC,aAAAA,EACAvgC,IAAAA,EACAg6B,OAAAA,EACApD,WAAAA,EACA8K,QAAAA,EACAvH,SAAAA,CACA,CACA,CAmBA,eAAA0K,GACAX,CAAA,CACA,CACAI,qBAAAA,CAAA,CACA1D,YAAAA,CAAA,CACAkE,uBAAAA,CAAA,CACA,CAGA3K,CAAA,CACA8J,CAAA,EAEA,IAAAC,GAAAD,KAAAx+B,IAAAw+B,EACA,OAAArC,GAAAqC,GAGA,IAAAnC,EAAAiD,GAAA5K,EAAA2H,OAAA,CAAAgD,GAEA,IAAAR,GAAAL,KAAAx+B,IAAAw+B,EACA,OAAAhC,GAAAH,EAAAmC,EAAAx+B,KAAAA,GAIA,IAEA,IAAAu/B,EAAA7K,EAAA8K,KAAA,GACAC,EAAA,MAAAC,GAAAH,GAEAzqB,EACA2qB,GAAAA,EAAAhqC,MAAA,EAAA+oC,KAAAx+B,IAAAw+B,EACAtD,GAAAuE,EAAAtE,GACAqD,EAEA,IAAAC,EACA,OAAAtC,GAAArnB,GAGA,GAAA+pB,EACA,OAAArC,GAAAH,EAAAvnB,EAAA2qB,GAGA,OAAAjD,GAAAH,EAAAvnB,EAAA9U,KAAAA,EACA,CAAI,MAAA7B,EAAA,CAEJ,OAAAq+B,GAAAH,EAAAmC,EAAAx+B,KAAAA,EACA,CACA,CAEA,eAAA0/B,GAAAhL,CAAA,EACA,IACA,aAAAA,EAAA97B,IAAA,EACA,CAAI,MAAA+mC,EAAA,CACJ,MACA,CACA,CAEA,SAAAT,GAAAH,EAAA,IAEA,GAAAA,IAAAA,EAAAtpC,MAAA,mBAAAspC,CAAA,IAIA,YAAA5yB,IAAA,CAGA,SAAAmzB,GAAAjD,CAAA,CAAAe,CAAA,EACA,IAAAwC,EAAA,GAQA,OANAxC,EAAA7lC,OAAA,CAAAskC,IACAQ,EAAAplC,GAAA,CAAA4kC,IACA+D,CAAAA,CAAA,CAAA/D,EAAA,CAAAQ,EAAAplC,GAAA,CAAA4kC,EAAA,CAEA,GAEA+D,CACA,CAcA,SAAAZ,GACA3hB,CAAA,CACA+f,CAAA,EAEA,IAAA/f,EACA,SAGA,IAAAgf,EAAAhf,EAAAgf,OAAA,QAEA,EAIAA,aAAAwD,QACAP,GAAAjD,EAAAe,GAIAvoC,MAAAsxB,OAAA,CAAAkW,GACA,GAGAc,GAAAd,EAAAe,GAZA,EAaA,CAMA,eAAA0C,GACAxU,CAAA,CACA4S,CAAA,CACA3/B,CAAA,EAEA,IACA,IAAAuE,EAAAi9B,SAoCAzU,CAAA,CACA4S,CAAA,CACA3/B,CAAA,EAEA,IAAUs8B,eAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAzd,MAAAA,CAAA,CAAA2iB,IAAAA,CAAA,EAA2C9B,EAErD,CACA3jC,IAAAA,CAAA,CACAg6B,OAAAA,CAAA,CACA6J,YAAAjN,EAAA,EACAkN,kBAAAC,CAAA,CACAC,mBAAAC,CAAA,CACA,CAAIlT,EAAAxoB,IAAA,CAEJ,IAAAvI,EACA,YAGA,IAAAijC,GAAAjjC,EAAAgE,EAAAmgC,sBAAA,GAAAlB,GAAAjjC,EAAAgE,EAAAogC,qBAAA,GACA,IAAA1C,EAAAE,GAAAmC,GACA5J,EAAAyH,GAAAqC,GACA,OACA3D,eAAAA,EACAC,aAAAA,EACAvgC,IAAAA,EACAg6B,OAAAA,EACApD,WAAAA,EACA8K,QAAAA,EACAvH,SAAAA,CACA,CACA,CAEA,IAAAuL,EAAAD,CAAA,CAAsBE,EAAAC,EAAmB,EACzCrB,EAAAmB,EACA9C,GAAA8C,EAAAG,eAAA,CAAA7hC,EAAAugC,qBAAA,EACA,GACAO,EAAAlC,GAAAkD,SAwBAL,CAAA,EACA,IAAA3D,EAAA2D,EAAAM,qBAAA,UAEA,EAIAjE,EAAA7mC,KAAA,SAAA6nC,MAAA,EAAAkD,EAAAC,KACA,IAAApsB,EAAA1b,EAAA,CAAA8nC,EAAAhrC,KAAA,OAEA,OADA+qC,CAAA,CAAAnsB,EAAA9b,WAAA,IAAAI,EACA6nC,CACA,EAAG,IAPH,EAQA,EApCAP,GAAAzhC,EAAA8gC,sBAAA,EAEApD,EAAAO,GACAsC,EACAR,EACA//B,EAAAsgC,oBAAA,CAAA9C,GAAA1e,GAAArd,KAAAA,GAEA00B,EAAA8H,GACA6C,EACAb,EACAjgC,EAAAsgC,oBAAA,CAAAX,EAAA8B,GAAA,CAAAS,YAAA,CAAAzgC,KAAAA,GAGA,OACA66B,eAAAA,EACAC,aAAAA,EACAvgC,IAAAA,EACAg6B,OAAAA,EACApD,WAAAA,EACA8K,QAAAA,EACAvH,SAAAA,CACA,CACA,EA9FApJ,EAAA4S,EAAA3/B,GAGAoa,EAAAqjB,GAAA,eAAAl5B,GACAi4B,GAAAx8B,EAAA8sB,MAAA,CAAA1S,EACA,CAAI,MAAAxjB,EAAA,CACJ,qBAAAk9B,kBAAAA,gBAAA,GAAqEC,EAAAC,EAAM,CAAAp9B,KAAA,6CAAAA,EAC3E,CACA,CAiMA,IAAAurC,GAAA,KAMAC,GACA,GACA,IACA,IAAAtV,EAAAkE,SAAA,GACA,OAGA,IAAA5W,EAAAioB,SAYAC,CAAA,EAKA,IAAAC,EAAAD,EAAAE,iBAAA,EAAAF,EAAAE,iBAAA,UAIA,KAAAD,GAAAA,EAMA,CAFAJ,GAAAI,EAGA,CAtCAxV,EAAAC,QAAA,EAuCA,oDAAAt2B,QAAA,CAAA6rC,EAAAvV,QAAA,GACAuV,EAAAvV,QAAA,CAAAjQ,UAAA,SAEA,KAGAwlB,YAAAA,EAAAvV,QAAA,CACAyV,SAQA1V,CAAA,EAEA,IAAAnhB,EAAAmhB,EAAAxoB,IAAA,EAAAwoB,EAAAxoB,IAAA,CAAAm+B,SAAA,CAEA,IAAApsC,MAAAsxB,OAAA,CAAAhc,IAAAA,IAAAA,EAAA1U,MAAA,CACA,OAAA25B,GAAA9D,GAGA,IAAA4V,EAAA,GAGAC,EAAAh3B,EAAAN,GAAA,CAAA2qB,IACA,IAAAA,EACA,OAAAA,EAEA,oBAAAA,SACA,EAAA/+B,MAAA,CA3+MA,KA4+MAyrC,EAAA,GACA,GAAkB1M,EAAA/5B,KAAA,GA7+MlB,KA6+MqD,IAGrD+5B,EAEA,oBAAAA,EACA,IACA,IAAA4M,EAA8B,GAAAvV,EAAAC,EAAA,EAAS0I,EAAA,GACvC6M,EAAA1rC,KAAAC,SAAA,CAAAwrC,GACA,GAAAC,EAAA5rC,MAAA,CAt/MA,IAy/MA,OAFAyrC,EAAA,GAEA,GAAoBvrC,KAAAC,SAAA,CAAAwrC,EAAA,QAAA3mC,KAAA,GAz/MpB,KAy/M0F,GAE1F,OAAA2mC,CACA,CAAQ,MAAAjjC,EAAA,CAER,CAGA,OAAAq2B,CACA,GAEA,OAAApF,GAAA,CACA,GAAA9D,CAAA,CACAxoB,KAAA,CACA,GAAAwoB,EAAAxoB,IAAA,CACAm+B,UAAAE,EACA,GAAAD,EAAA,CAA0B5E,MAAA,CAASC,SAAA,4BAAwC,EAAI,CAE/E,EACA,EAzDAuE,GAGA1R,GAAA0R,GAjBA,IAkBA,EAxCAD,GAEAloB,GAIAyS,GAAAC,EAAA1S,EACA,EAkJA,eAAA2oB,GAAAjW,CAAA,EAEA,IACA,OAAAoI,QAAA+B,GAAA,CACAkF,GAAArP,EAAA,CAEAkW,SASAC,CAAA,EACA,IAAUC,gBAAAA,CAAA,CAAAC,gBAAAA,CAAA,CAAAC,eAAAA,CAAA,EAAmDH,EAG7DjY,EAAAlf,KAAAD,GAAA,OACA,OACAhS,KAAA,SACAqD,KAAA,SACAqmB,MAAAyH,EACAxH,IAAAwH,EACAzmB,KAAA,CACA8+B,OAAA,CACAH,gBAAAA,EACAC,gBAAAA,EACAC,eAAAA,CACA,CACA,CACA,CACA,EA3BAjuC,EAAAu+B,WAAA,CAAA2P,MAAA,EACA,EAEA,CAAI,MAAAzsC,EAAA,CAEJ,SAEA,CA6RA,eAAA0sC,GAAA,CACAlJ,OAAAA,CAAA,CACAkI,MAAAA,CAAA,CACAtG,SAAAH,CAAA,CACAhtB,MAAAA,CAAA,CACA,EAGA,IAAA00B,EACA,iBAAAnJ,EAAAoJ,aAAA,EAAApJ,OAAAA,EAAAoJ,aAAA,EAAAltC,MAAAsxB,OAAA,CAAAwS,EAAAoJ,aAAA,EAEA/hC,KAAAA,EADA5L,OAAA+C,IAAA,CAAAwhC,EAAAoJ,aAAA,EAGAC,EAAA,CAAsB5H,SAAAA,EAAA0H,aAAAA,CAAA,CAEtBnJ,CAAAA,EAAAloB,IAAA,EACAkoB,EAAAloB,IAAA,mBAAArD,EAAA40B,GAGA,IAAAC,EAAA,MAA+B,GAAAC,EAAAC,CAAA,EAC/BxJ,EAAAP,UAAA,GACAhrB,EACA40B,EACAnB,EACAlI,GAIA,IAAAsJ,EACA,WAMAA,CAAAA,EAAAG,QAAA,CAAAH,EAAAG,QAAA,eAGA,IAAAC,EAAA1J,EAAA2J,cAAA,EAAA3J,EAAA2J,cAAA,GACA,CAAU7mC,KAAAA,CAAA,CAAA8mC,QAAAA,CAAA,EAAgB,GAAAF,EAAAG,GAAA,KAQ1B,OANAP,EAAAO,GAAA,EACA,GAAAP,EAAAO,GAAA,CACA/mC,KAAAA,GAAA,4BACA8mC,QAAAA,GAAA,OACA,EAEAN,CACA,CAKA,eAAAQ,GAAA,CACAC,cAAAA,CAAA,CACAnI,SAAAA,CAAA,CACAjE,UAAAqM,CAAA,CACAC,aAAAA,CAAA,CACAje,UAAAA,CAAA,CACAoR,QAAAA,CAAA,CACC,MAlHD8M,MAqMAnO,EAlFA,IAAAoO,EAAAC,SA3FA,CACAL,cAAAA,CAAA,CACArG,QAAAA,CAAA,CACA,MAGA2G,EAGA,IAAAC,EAAA,GAA2BttC,KAAAC,SAAA,CAAAymC,GAAA;AAC3B,EAEA,oBAAAqG,EACAM,EAAA,GAA6BC,EAAc,EAAEP,EAAc,MACvD,CACJ,IAAAQ,EAAA,IAAAC,YAEAC,EAAAF,EAAA9H,MAAA,CAAA6H,GAGAD,CADAA,EAAA,IAAAxiB,WAAA4iB,EAAA3tC,MAAA,CAAAitC,EAAAjtC,MAAA,GACAqC,GAAA,CAAAsrC,GACAJ,EAAAlrC,GAAA,CAAA4qC,EAAAU,EAAA3tC,MAAA,CACA,CAEA,OAAAutC,CACA,EAkEA,CACAN,cAAAA,EACArG,QAAA,CACAsG,WAAAA,CACA,CACA,GAEA,CAAUlF,KAAAA,CAAA,CAAApD,SAAAA,CAAA,CAAAH,SAAAA,CAAA,CAAAhB,iBAAAA,CAAA,EAA6C0J,EAEvDjQ,EAAc,GAAAC,EAAAC,EAAA,IACd8F,EAAAhG,EAAAiG,SAAA,GACAiI,EAAAlO,EAAA0Q,QAAA,GACA7J,EAAAb,GAAAA,EAAAc,YAAA,GACA6J,EAAA3K,GAAAA,EAAA4K,MAAA,GAEA,IAAA5K,GAAA,CAAAa,GAAA,CAAA8J,GAAA,CAAAvN,EAAAQ,OAAA,CACA,OAGA,IAAAiN,EAAA,CACAprC,KA59NA,eA69NAqrC,uBAAAvK,EAAA,IACAvU,UAAAA,EAAA,IACA+e,UAAArJ,EACAsJ,UAAAzJ,EACAuD,KAAAA,EACAmG,UAAArJ,EACAoI,WAAAA,EACAkB,YAAA9N,EAAAQ,OAAA,EAGAuN,EAAA,MAAAjC,GAAA,CAAiDhB,MAAAA,EAAAlI,OAAAA,EAAA4B,SAAAA,EAAAntB,MAAAo2B,CAAA,GAEjD,IAAAM,EAAA,CAEAnL,EAAAE,kBAAA,4BAAA2K,GACArR,GAAA,4DACA,MACA,CAwCA,OAAA2R,EAAAC,qBAAA,CAEA,IAAAC,GAnMAnB,EAmMAlK,EAAAP,UAAA,GAAAyK,MAAA,CAjMS,GAAAoB,EAAAC,EAAA,EACL,GAAAD,EAAAE,EAAA,EAgMJL,EAhM4C,GAAAG,EAAAG,EAAA,EAgM5CN,GAhM2EjB,EAgM3ES,GA/LA,CACA,EAASlrC,KAAA,gBA8LT0rC,EA9L+B,CAC/B,CACA,CACA1rC,KAAA,mBAIA3C,OACA,iBAsLAqtC,EAtLA,IAAAK,cAAA/H,MAAA,CAsLA0H,GAtLArtC,MAAA,CAAAitC,EAAAjtC,MAAA,EAsLAqtC,EAnLA,CACA,GAsLA,IACApO,EAAA,MAAA8E,EAAAE,IAAA,CAAAsK,EACA,CAAI,MAAAhgC,EAAA,CACJ,IAAA7O,EAAA,MAAArB,GAEA,IAGAqB,EAAAkvC,KAAA,CAAArgC,CACA,CAAM,MAAA7F,EAAA,CAEN,CACA,MAAAhJ,CACA,CAGA,IAAAu/B,EACA,OAAAA,EAIA,oBAAAA,EAAAvD,UAAA,EAAAuD,CAAAA,EAAAvD,UAAA,MAAAuD,EAAAvD,UAAA,OACA,UAAAmT,GAAA5P,EAAAvD,UAAA,EAGA,IAAAoT,EAAqB,GAAAC,EAAAC,EAAA,EAAgB,GAAG/P,GACxC,GAAM,GAAA8P,EAAAE,CAAA,EAAaH,EAAA,UACnB,UAAAI,GAAAJ,GAGA,OAAA7P,CACA,CAKA,MAAA4P,WAAArR,MACA18B,YAAA46B,CAAA,EACA,wCAA4CA,EAAW,EACvD,CACA,CAKA,MAAAwT,WAAA1R,MAEA18B,YAAAguC,CAAA,EACA,wBACA,KAAAA,UAAA,CAAAA,CACA,CACA,CAKA,eAAAK,GACAC,CAAA,CACAC,EAAA,CACAzjB,MAAA,EACA0jB,SAtkOA,GAukOA,CAAG,EAEH,IAAUrC,cAAAA,CAAA,CAAAnkC,QAAAA,CAAA,EAAyBsmC,EAGnC,GAAAnC,EAAAjtC,MAAA,CAIA,IAEA,OADA,MAAAgtC,GAAAoC,GACA,EACA,CAAI,MAAA7gC,EAAA,CACJ,GAAAA,aAAAsgC,IAAAtgC,aAAA2gC,GACA,MAAA3gC,EAcA,GAVI,GAAAghC,EAAA9nB,CAAA,EAAU,WACd+nB,YAAAH,EAAAzjB,KAAA,GAGA,qBAAAgR,kBAAAA,gBAAA,GAAA9zB,EAAA46B,YAAA,EAAA56B,EAAA46B,YAAA,CAAA+L,iBAAA,EACM,GAAAF,EAAAG,EAAA,EAAgBnhC,GAKtB8gC,EAAAzjB,KAAA,EAlmOA,EAkmOA,CACA,IAAAlsB,EAAA,SAAiCrB,EAAA,uBAAuB,GAExD,IAGAqB,EAAAkvC,KAAA,CAAArgC,CACA,CAAQ,MAAA7F,EAAA,CAER,CAEA,MAAAhJ,CACA,CAKA,OAFA2vC,EAAAC,QAAA,IAAAD,EAAAzjB,KAAA,CAEA,IAAAoS,QAAA,CAAAC,EAAAS,KACAxrB,WAAA,UACA,IACA,MAAAi8B,GAAAC,EAAAC,GACApR,EAAA,GACA,CAAU,MAAA1vB,EAAA,CACVmwB,EAAAnwB,EACA,CACA,EAAO8gC,EAAAC,QAAA,CACP,EACA,CACA,CAEA,IAAAK,GAAA,aA6DA,OAAAC,GA+CA9uC,YAAA,CACAgI,QAAAA,CAAA,CACA+mC,iBAAAA,CAAA,CACA,CAEA,CAAGD,GAAAhxC,SAAA,CAAAkxC,MAAA,CAAAhxC,IAAA,OAA4C8wC,GAAAhxC,SAAA,CAAAmxC,OAAA,CAAAjxC,IAAA,OAA6C8wC,GAAAhxC,SAAA,CAAAoxC,OAAA,CAAAlxC,IAAA,OAA6C8wC,GAAAhxC,SAAA,CAAAqxC,OAAA,CAAAnxC,IAAA,OAA6C8wC,GAAAhxC,SAAA,CAAAsxC,OAAA,CAAApxC,IAAA,OAA6C8wC,GAAAhxC,SAAA,CAAAuxC,OAAA,CAAArxC,IAAA,OACnO,KAAA0jC,WAAA,MACA,KAAA4N,kBAAA,IACA,KAAAC,wBAAA,IACA,KAAA5N,aAAA,WACA,KAAAc,QAAA,EACAC,iBAtwOA,IAuwOA9B,kBApwOA,GAqwOA,EACA,KAAA4O,aAAA,CAAA17B,KAAAD,GAAA,GACA,KAAA47B,UAAA,IACA,KAAAC,SAAA,IACA,KAAAC,4BAAA,IACA,KAAAC,QAAA,EACA9L,SAAA,IAAAlqB,IACA+pB,SAAA,IAAA/pB,IACAstB,KAAA,GACAvE,iBAAA7uB,KAAAD,GAAA,GACAg8B,WAAA,EACA,EAEA,KAAAC,iBAAA,CAAAf,EACA,KAAAgB,QAAA,CAAA/nC,EAEA,KAAAgoC,eAAA,CAAAC,SAtoBAz8B,CAAA,CAAAC,CAAA,CAAAzL,CAAA,MACAkoC,EAEAC,EACAC,EAEA,IAAAC,EAAAroC,GAAAA,EAAAqoC,OAAA,CAAAhkC,KAAAikC,GAAA,CAAAtoC,EAAAqoC,OAAA,CAAA58B,GAAA,EAEA,SAAA88B,IAGA,OAFAC,IACAN,EAAA18B,GAEA,CAEA,SAAAg9B,IACAL,KAAA1mC,IAAA0mC,GAAA99B,aAAA89B,GACAC,KAAA3mC,IAAA2mC,GAAA/9B,aAAA+9B,GACAD,EAAAC,EAAA3mC,KAAAA,CACA,CASA,SAAAgnC,IAUA,OATAN,GACA99B,aAAA89B,GAEAA,EAAA/9B,WAAAm+B,EAAA98B,GAEA48B,GAAAD,KAAA3mC,IAAA2mC,GACAA,CAAAA,EAAAh+B,WAAAm+B,EAAAF,EAAA,EAGAH,CACA,CAIA,OAFAO,EAAAC,MAAA,CAAAF,EACAC,EAAAE,KAAA,CArBA,kBACA,KAAAlnC,IAAA0mC,GAAAC,KAAA3mC,IAAA2mC,EACAG,IAEAL,CACA,EAiBAO,CACA,EA2lBA,SAAAG,MAAA,QAAAb,QAAA,CAAAc,aAAA,EACAR,QAAA,KAAAN,QAAA,CAAAe,aAAA,GAGA,KAAAC,kBAAA,CAAAC,SAhIAh+B,CAAA,CACAi+B,CAAA,CACAC,CAAA,EAEA,IAAAC,EAAA,IAAAjxC,IAEAkxC,EAAA,IACA,IAAApuB,EAAAnP,EA8HA,EA7HAs9B,EAAAnwC,OAAA,EAAAkF,EAAA2X,KACAA,EAAAmF,GACAmuB,EAAArwC,MAAA,CAAA+c,EAEA,EACA,EAEAwzB,EAAA,IACA,IAAAF,EAAAG,MAAA,IAAAxK,MAAA,EAAAjiC,EAAAgnB,IAAAhnB,EAAAgnB,EAAA,GAGA0lB,EAAA,GAEA,UAAA7yB,KAEA,IAAA7K,EAAAxH,KAAAmlC,KAAA,CAAA19B,KAAAD,GAAA,QAMA,GAHAu9B,EAAAv9B,GAGAw9B,KAsGA,IAtGA,CACA,IAAAI,EAAAF,EAEA,OADAA,EAAA,GACAE,EA5CA,YA4CA5C,EACA,CAEA0C,EAAA,GACA,IAAAzmB,EAAAqmB,EAAAzwC,GAAA,CAAAmT,IAAA,EAGA,OAFAs9B,EAAA5vC,GAAA,CAAAsS,EAAAiX,EAAA,GAEA9X,KAAA0L,EACA,CACA,EAwFA,CAAA7H,EAAAmX,IAp/DA,GAo/DA,KAAAnX,GAh/DA4qB,GAg/DA,KAAA5qB,EAAAmX,GAn/DAkP,QAAAC,OAAA,OAq/DA,EAEA,GAGA,IAAYuU,iBAAAA,CAAA,CAAAC,yBAAAA,CAAA,EAA6C,KAAA9P,UAAA,GAEzD/L,EAAA4b,EACA,CACA1uB,UAAA3W,KAAAC,GAAA,CAhxOA,IAgxOAolC,GACAh+B,QAAAg+B,EACApb,cAhxOA,IAixOAnQ,eAAAwrB,EAAAA,EAAAlzC,IAAA,QACA,EACAgL,KAAAA,EAEAqsB,GACA,MAAA2D,aAAA,KAAA5D,GAAA,KAAAC,EAAA,CAEA,CAGAlqB,YAAA,CACA,YAAAgkC,QAAA,CAIA5W,WAAA,CACA,YAAAyW,UAAA,CAIAlN,UAAA,CACA,YAAAmN,SAAA,CAIA7N,YAAA,CACA,YAAAkO,QAAA,CAOA6B,mBAAA3R,CAAA,EACA,IAAY4R,gBAAAA,CAAA,CAAA1R,kBAAAA,CAAA,EAAqC,KAAA4P,QAAA,CAIjD,GAAA8B,CAAAA,CAAAA,GAAA,KAAA1R,CAAAA,GAAA,IAQA,GAFA,KAAA2R,6BAAA,CAAA7R,GAEA,MAAAT,OAAA,EAEA,KAAAuS,gBAAA,mDACA,MACA,CAEA,UAAAvS,OAAA,CAAAQ,OAAA,GAQA,KAAA2B,aAAA,iBAAAnC,OAAA,CAAAQ,OAAA,WAAAR,OAAA,CAAAO,SAAA,oBAEA5D,GACA,+BAAqC,KAAAwF,aAAA,MAAoB,EACzD,KAAAoO,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAGA,KAAAiR,oBAAA,IACA,CASAzmB,OAAA,CACA,QAAAkkB,UAAA,mBAAA9N,aAAA,CACA,uDAGA,QAAA8N,UAAA,kBAAA9N,aAAA,CACA,kFAGAxF,GAAA,gDAAA4T,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAEA,IAAAvB,EAAAsB,GACA,CACAH,kBAAA,KAAAoP,QAAA,CAAApP,iBAAA,CACAC,kBAAA,KAAA6B,QAAA,CAAA7B,iBAAA,CACAG,eAAA,KAAAgP,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAEA,CACAV,cAAA,KAAA0P,QAAA,CAAA1P,aAAA,CAEAF,kBAAA,EACAC,eAAA,EACA,EAGA,MAAAZ,OAAA,CAAAA,EAEA,KAAAwS,oBAAA,EACA,CAMAC,gBAAA,CACA,QAAAxC,UAAA,CACA,uDAGAtT,GAAA,+CAAA4T,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAEA,IAAAvB,EAAAsB,GACA,CACAF,kBAAA,KAAA6B,QAAA,CAAA7B,iBAAA,CACAD,kBAAA,KAAAoP,QAAA,CAAApP,iBAAA,CACAI,eAAA,KAAAgP,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAEA,CACAV,cAAA,KAAA0P,QAAA,CAAA1P,aAAA,CACAF,kBAAA,EACAC,eAAA,EACA,EAGA,MAAAZ,OAAA,CAAAA,EAEA,KAAAmC,aAAA,UACA,KAAAqQ,oBAAA,EACA,CAOAE,gBAAA,CACA,QAtvBApd,MACAqd,CAsvBA,MAAAC,cAAA,CAAAzgB,GAAA,CACA,QAAAme,iBAAA,CAIA,mBAAAnO,aAAA,GAAiD9P,iBAp7OjD,GAo7OiD,CAAwC,CACzF3X,IAAA,EA7vBA4a,EA6vBA,KA5vBAqd,EAAA,GAEA,CAAAt7B,EAAAw7B,KAEA,IAAAvd,EAAAI,4BAAA,IACA,qBAAA4G,kBAAAA,gBAAA,GAAuEC,EAAAC,EAAM,CAAAruB,IAAA,0DAE7E,MACA,CAIA,IAAAqgB,EAAAqkB,GAAA,CAAAF,EACAA,EAAA,GAEArd,EAAA2E,aAAA,EACA6Y,SAvmFA7Y,CAAA,CAAA5iB,CAAA,EACA,IASA,GA2BAA,IAAAA,EAAAhV,IAAA,CA1BA,OAGA,IAAYwS,OAAAA,CAAA,EAASwC,EAAAtK,IAAA,CASrB,GARA8H,IAAAgE,GAAAiW,QAAA,EACAmL,EAAA7B,gBAAA,CAAA/gB,EAAAuX,SAAA,EAGA/Z,IAAAgE,GAAA2W,MAAA,EACAyK,EAAA5B,cAAA,CAAAhhB,EAAAuX,SAAA,EAuBAvX,EAAAtK,IAAA,CAAA8H,MAAA,GAAAgE,GAAA0W,gBAAA,CApBA,CACA,IAAcltB,KAAAA,CAAA,CAAAtB,GAAAA,CAAA,EAAWsW,EAAAtK,IAAA,CACzBnL,EAAAuwB,GAAA1pB,MAAA,CAAAxH,OAAA,CAAAF,GAEAa,aAAAmxC,aAAA1wC,IAAAyW,GAAA0M,KAAA,EACAyU,EAAA3B,aAAA,CAAA12B,EAEA,CACA,CAAI,MAAAwG,EAAA,CAEJ,CACA,EAqkFAktB,EAAA2E,aAAA,CAAA5iB,GAIAie,EAAAK,SAAA,MAYA,GANA,WAAAL,EAAA6M,aAAA,EAAA3T,GACA8G,EAAA0d,eAAA,GAKA,CAAAjR,GAAAzM,EAAAje,EAAAmX,GAEA,SAKA,IAAAA,EACA,SAiBA,GARAA,GA4EA8G,EAAA0K,OAAA,EAAA1K,IAAAA,EAAA0K,OAAA,CAAAO,SAAA,EAIAwB,GAhFAzM,EAgFA2d,SAlCA3d,CAAA,EACA,IAAA9sB,EAAA8sB,EAAA+M,UAAA,GACA,OACAhgC,KAAAuW,GAAAuW,MAAA,CACAP,UAAAta,KAAAD,GAAA,GACAtH,KAAA,CACA8oB,IAAA,UACAxZ,QAAA,CACAskB,kBAAAn4B,EAAAm4B,iBAAA,CACA0R,gBAAA7pC,EAAA6pC,eAAA,CACAa,qBAAA1qC,EAAA2qC,cAAA,CACAC,cAAA5qC,EAAA4qC,aAAA,CACAprC,YAAAQ,EAAAR,WAAA,CACAuqB,cAAA/pB,EAAA+pB,aAAA,CACA4gB,eAAA7d,EAAAA,EAAA4M,WAAA,EAAA5M,WAAAA,EAAA4M,WAAA,CAAA7/B,IAAA,CACAgxC,qBAAA7qC,EAAAmgC,sBAAA,CAAAjpC,MAAA,GACAopC,qBAAAtgC,EAAAsgC,oBAAA,CACAwK,yBAAA9qC,EAAAugC,qBAAA,CAAArpC,MAAA,GACA6zC,0BAAA/qC,EAAA8gC,sBAAA,CAAA5pC,MAAA,EACA,CACA,CACA,CACA,EApEA41B,GAgFA,IAxEAA,EAAA0K,OAAA,EAAA1K,EAAA0K,OAAA,CAAAS,iBAAA,CACA,SAKA,GAAAnL,WAAAA,EAAA6M,aAAA,EAAA7M,EAAA0K,OAAA,EAAA1K,EAAA4M,WAAA,EACA,IAAAsR,EAAAle,EAAA4M,WAAA,CAAArE,oBAAA,GACA2V,IACApX,GACA,uEAAmF,IAAA9nB,KAAAk/B,GAAwB,EAC3Gle,EAAA+M,UAAA,GAAAe,YAAA,CAAA7B,cAAA,EAGAjM,EAAA0K,OAAA,CAAAK,OAAA,CAAAmT,EAEAle,EAAA+M,UAAA,GAAAxB,aAAA,EACAd,GAAAzK,EAAA0K,OAAA,EAGA,CAUA,MARA,YAAA1K,EAAA6M,aAAA,EAKA7M,EAAA6b,KAAA,GAGA,EACA,EACA,GAoqBAjxB,WAAA,KAAAuzB,kBAAA,EAEA,CAAM,MAAAxlC,EAAA,CACN,KAAAskC,gBAAA,CAAAtkC,EACA,CACA,CAQAylC,eAAA,CACA,IAMA,OALA,KAAAd,cAAA,GACA,KAAAA,cAAA,GACA,KAAAA,cAAA,CAAA3oC,KAAAA,GAGA,EACA,CAAM,MAAAgE,EAAA,CAEN,OADA,KAAAskC,gBAAA,CAAAtkC,GACA,EACA,CACA,CAMA,MAAA00B,KAAA,CAAgBgR,WAAAA,EAAA,GAAAjR,OAAAA,CAAA,EAA6B,EAAI,EACjD,QAAAuN,UAAA,EAMA,KAAAA,UAAA,IAEA,IACA7T,GACA,2BAAmCsG,EAAA,iBAA0BA,EAAO,KAAO,EAC3E,KAAA6N,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAGA,KAAAqS,gBAAA,GACA,KAAAF,aAAA,GAEA,KAAAlD,eAAA,CAAAU,MAAA,GAGAyC,GACA,WAAAvC,MAAA,EAA4ByC,MAAA,KAI5B,KAAA3R,WAAA,OAAAA,WAAA,CAAAlQ,OAAA,GACA,KAAAkQ,WAAA,MA98EA4R,WAQA,GAAApU,KAIA,IACA/hC,EAAAgiC,cAAA,CAAAoU,UAAA,CAAAj2C,EACA,CAAI,MAAAsK,EAAA,CAEJ,CACA,IAhBAktB,IAi9EA,CAj9EA0K,OAAA,CAAA/1B,KAAAA,CAk9EA,CAAM,MAAAgE,EAAA,CACN,KAAAskC,gBAAA,CAAAtkC,EACA,EACA,CAOA+lC,OAAA,CACA,KAAA9D,SAAA,GAIA,KAAAA,SAAA,IACA,KAAAwD,aAAA,GAEAtX,GAAA,+BAAAmU,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EACA,CAQA0S,QAAA,CACA,KAAA/D,SAAA,OAAAgE,aAAA,KAIA,KAAAhE,SAAA,IACA,KAAAwC,cAAA,GAEAtW,GAAA,gCAAAmU,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EACA,CASA,MAAAmD,0BAAA,CAAqCyP,kBAAAA,EAAA,IAA2B,EAAI,EACpE,oBAAAhS,aAAA,CACA,YAAAiS,cAAA,GAGA,IAAAC,EAAA//B,KAAAD,GAAA,GAEA+nB,GAAA,6CAAAmU,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAMA,WAAA6S,cAAA,GAEA,IAAAE,EAAA,KAAAZ,aAAA,GAEAS,GAAAG,GAKA,iBAAAnS,aAAA,GAKA,KAAAA,aAAA,WAGA,KAAAnC,OAAA,GACA,KAAAuU,mBAAA,CAAAF,GACA,KAAAG,sBAAA,CAAAH,GACA,KAAAI,iBAAA,IAGA,KAAA/B,cAAA,GACA,CAUA/c,UAAAxW,CAAA,EAEA,IAAAu1B,EAAAv1B,GAIA,iBAAAgjB,aAAA,EAMAuS,CAAA,IAAAA,GAMA,KAAAlE,eAAA,EACA,CAOA/a,qBAAA,CAKA,GAJA,KAAA8e,mBAAA,GAIA,MAAA3B,cAAA,EAGA,SAAAsB,aAAA,GACA,OAIA,KAAAD,MAAA,GACA,MACA,CAGA,KAAAve,4BAAA,GAEA,KAAA8e,sBAAA,EACA,CASAG,oBAAA,CACA,KAAAJ,mBAAA,GACA,KAAAC,sBAAA,EACA,CAKAI,kBAAA,OACA,gBAAAzS,aAAA,CACAzE,QAAAC,OAAA,GAGA,KAAAyW,cAAA,EACA,CAKAjD,OAAA,CACA,YAAAX,eAAA,EACA,CAOA4D,gBAAA,CAGA,OAFA,KAAA5D,eAAA,GAEA,KAAAA,eAAA,CAAAW,KAAA,EACA,CAKA0D,aAAA,CACA,KAAArE,eAAA,CAAAU,MAAA,EACA,CAGA4D,cAAA,CACA,YAAA9U,OAAA,OAAAA,OAAA,CAAAj/B,EAAA,CAWA20B,8BAAA,CAKA,GACA,KAAAsa,aAAA,EACAlP,GAAA,KAAAkP,aAAA,MAAA/M,QAAA,CAAAC,gBAAA,GACA,KAAAlD,OAAA,EACA,iBAAAA,OAAA,CAAAQ,OAAA,CACA,CAKA,KAAAwT,KAAA,GACA,MACA,SAIA,KAAAE,aAAA,EAMA,CAOAlB,iBAAA,CACA,IAAA+B,EAAA,GAAuBp3C,EAAAoV,QAAA,CAAAiiC,QAAA,CAAyB,EAAEr3C,EAAAoV,QAAA,CAAAkiC,IAAA,CAAqB,EAAEt3C,EAAAoV,QAAA,CAAAugB,MAAA,CAAuB,EAChG9uB,EAAA,GAAmB7G,EAAAoV,QAAA,CAAAhP,MAAA,CAAuB,EAAEgxC,EAAQ,EAEpD,KAAAjF,kBAAA,IACA,KAAAC,wBAAA,IAGA,KAAAmF,aAAA,GAEA,KAAA9E,QAAA,CAAAC,UAAA,CAAA7rC,EACA,KAAA4rC,QAAA,CAAAjN,gBAAA,CAAA7uB,KAAAD,GAAA,GACA,KAAA+7B,QAAA,CAAA1I,IAAA,CAAA1nC,IAAA,CAAAwE,EACA,CAMAoxB,kBACAve,CAAA,CACAmX,CAAA,CACA,CACA,IAAAgb,EAAA,KAAA+H,kBAAA,CAAAl6B,EAAAmX,GAIA,GAAAgb,IAAA6F,GAAA,CACA,IAAA9Z,EAAA8D,GAAA,CACA7D,SAAA,kBACA,GAEA,KAAAG,SAAA,KAEA,CAAAoM,GAAA,MACA1/B,KA/hIA,EAgiIAusB,UAAA2G,EAAA3G,SAAA,IACA7hB,KAAA,CACA8oB,IAAA,aACAxZ,QAAAkZ,EACA6D,OAAA,EACA,CACA,GAEA,CAEA,OAAAoQ,CACA,CAMArQ,iBAAA,CACA,IAAAgc,EAAA,KAAAA,eAAA,EAAoD,GAAAtY,EAAAC,EAAA,IAAawQ,QAAA,GAAA8H,cAAA,GACjE,yBAAAl2C,QAAA,CAAAi2C,EAAA7I,QAAA,CAAAz3B,MAAA,EAIA,OAAAsgC,EAAAzvC,IAAA,CAOA8sC,sBAAA,CACA,KAAAQ,eAAA,GAIA,KAAAwB,sBAAA,GAEA,KAAAtS,WAAA,CAAAmT,SAn0FA,CACAlC,eAAAA,CAAA,CACAmC,UAAAC,CAAA,CACC,EACD,GACApC,GAEA/9B,OAAAogC,MAAA,CACA,CACA,IAAAxX,EAAAyX,SAWAF,CAAA,EACA,IACA,IAAAD,EAAAC,GAgBA,qBAAAG,kCAAAA,iCAIA,GAHAttC,WAtea,IAAAA,EAAA,IAAAs9B,KAAA,CAFb,gjUAEa,EAAsB,OAAAqC,IAAA4N,eAAA,CAAAvtC,EAAA,GAuenC,EAhBA,IAAAktC,EACA,OAGAlZ,GAAA,oCAAgDmZ,EAAA,SAA2BA,EAAgB,KAAO,GAClG,IAAAvX,EAAA,IAAAwX,OAAAF,GACA,WAAAtW,GAAAhB,EACA,CAAI,MAAA5+B,EAAA,CACJg9B,GAAA,+CAEA,CACA,EA1BAmZ,GAEA,GAAAvX,EACA,OAAAA,CAEA,CAGA,OADA5B,GAAA,gCACA,IAAAe,EACA,EAizFA,CACAgW,eAAA,KAAA5C,QAAA,CAAA4C,cAAA,CACAmC,UAAA,KAAA/E,QAAA,CAAA+E,SAAA,GAGA,KAAA1B,gBAAA,GACA,KAAAgC,aAAA,GAGA,KAAA3F,UAAA,IACA,KAAAC,SAAA,IAEA,KAAAwC,cAAA,EACA,CAGAH,iBAAAnzC,CAAA,EACA,qBAAAk9B,kBAAAA,gBAAA,GAAqEC,EAAAC,EAAM,CAAAp9B,KAAA,YAAAA,GAE3E,qBAAAk9B,kBAAAA,gBAAA,QAAAiU,QAAA,CAAAnN,YAAA,OAAAmN,QAAA,CAAAnN,YAAA,CAAA+L,iBAAA,EACM,GAAAF,EAAAG,EAAA,EAAgBhwC,EAEtB,CAKAkzC,8BAAA7R,CAAA,EAGA,IAAAG,EAAA,KAAA2P,QAAA,CAAA8B,eAAA,GAEArS,EAAAsB,GACA,CACAF,kBAAA,KAAA6B,QAAA,CAAA7B,iBAAA,CACAD,kBAAA,KAAAoP,QAAA,CAAApP,iBAAA,CACAI,eAAA,KAAAgP,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,CACAd,kBAAAA,CACA,EACA,CACAI,cAAA,KAAA0P,QAAA,CAAA1P,aAAA,CACAF,kBAAA,KAAA4P,QAAA,CAAA5P,iBAAA,CACAC,eAAAA,CACA,EAGA,MAAAZ,OAAA,CAAAA,CACA,CAMAkU,eAAA,CAGA,SAAAlU,OAAA,CACA,SAGA,IAAA6V,EAAA,KAAA7V,OAAA,OAEA,CACAqB,GAAAwU,EAAA,CACAzU,kBAAA,KAAA6B,QAAA,CAAA7B,iBAAA,CACAD,kBAAA,KAAAoP,QAAA,CAAApP,iBAAA,KAGA,KAAA2U,eAAA,CAAAD,GACA,GAIA,CAOA,MAAAC,gBAAA9V,CAAA,EACA,KAAAiQ,UAAA,GAGA,WAAAtN,IAAA,EAAsBD,OAAA,oBACtB,KAAA0P,kBAAA,CAAApS,EAAAj/B,EAAA,EACA,CAKA60C,eAAA,CACA,IACAj4C,EAAA6H,QAAA,CAAA+I,gBAAA,yBAAAwnC,uBAAA,EACAp4C,EAAA4Q,gBAAA,aAAAynC,iBAAA,EACAr4C,EAAA4Q,gBAAA,cAAA0nC,kBAAA,EACAt4C,EAAA4Q,gBAAA,gBAAA2nC,oBAAA,EAEA,KAAAjc,aAAA,EACA,KAAAA,aAAA,CAAAhD,YAAA,GAIA,KAAAkZ,4BAAA,GACAgG,SAx3CA7gB,CAAA,EAEA,IAAAwV,EAAgB,GAAAjO,EAAAC,EAAA,IAAawQ,QAAA,GAC7B1K,EAAiB,GAAA/F,EAAAC,EAAA,IAAa+F,SAAA,GAE9BiI,EAAAsL,gBAAA,CAAAxL,GAAAtV,IACE,GAAA6U,EAAAkM,EAAA,EAAyB,MAAA9c,GAAAjE,IACzB,GAAA6U,EAAAkM,EAAA,EAAyB,UAr6B3B,IACA,IAAA/gB,EAAAkE,SAAA,GACA,OAGA,IAAA5W,EAAA0zB,SAzBA5c,CAAA,EACA,IAAU36B,KAAAA,CAAA,CAAAw3C,GAAAA,CAAA,EAAW7c,EAErBrlB,EAAAC,KAAAD,GAAA,OAEA,OACAhS,KAAA,kBACA0pB,MAAA1X,EACA2X,IAAA3X,EACA3O,KAAA6wC,EACAxpC,KAAA,CACAoH,SAAApV,CACA,CACA,CACA,EAWA26B,EAEA,QAAA9W,IAKA0S,EAAAlpB,UAAA,GAAAs7B,IAAA,CAAA1nC,IAAA,CAAA4iB,EAAAld,IAAA,EACA4vB,EAAAG,mBAAA,GAEAH,EAAAK,SAAA,MACAgP,GAq5B2BrP,EAr5B3B,CAAA1S,EAAA,EAEA,KAEA,GAk5BA4zB,SA5MAlhB,CAAA,EACA,IAAAsN,EAAiB,GAAA/F,EAAAC,EAAA,IAAa+F,SAAA,GAE9B,IACA,IAAAuC,EAAA,IAAAgI,YAEA,CACAzE,uBAAAA,CAAA,CACAC,sBAAAA,CAAA,CACAE,qBAAAA,CAAA,CACAC,sBAAAA,CAAA,CACAO,uBAAAA,CAAA,CACA,CAAMhU,EAAA+M,UAAA,GAEN75B,EAAA,CACA8sB,OAAAA,EACA8P,YAAAA,EACAuD,uBAAAA,EACAC,sBAAAA,EACAE,qBAAAA,EACAC,sBAAAA,EACAO,uBAAAA,CACA,CAEA1G,CAAAA,GAAAA,EAAArvB,EAAA,CACAqvB,EAAArvB,EAAA,wBAAAgiB,EAAA4S,IAAAsO,CAYA,SACAjuC,CAAA,CACA+sB,CAAA,CACA4S,CAAA,EAEA,GAAA5S,EAAAxoB,IAAA,CAIA,QA+BAo7B,EAIAA,CAlCAuO,CAuBA,QAAAnhB,EAAAC,QAAA,GAOA2S,EA9BAA,IA+BAA,EAAA8B,GAAA,GA3BA0M,SAvJAphB,CAAA,CACA4S,CAAA,CACA3/B,CAAA,EAEA,IAAUyhC,IAAAA,CAAA,CAAA3iB,MAAAA,CAAA,EAAa6gB,EAEvByO,EAAAzR,GAAA7d,EAAA9e,EAAA48B,WAAA,EACAyR,EAAA5M,EAAA6M,iBAAA,mBACAjR,GAAAoE,EAAA6M,iBAAA,oBACA3R,GAAA8E,EAAAtL,QAAA,CAAAn2B,EAAA48B,WAAA,CAEAn7B,MAAAA,IAAA2sC,GACArhB,CAAAA,EAAAxoB,IAAA,CAAAu7B,iBAAA,CAAAsO,CAAA,EAEA3sC,KAAAA,IAAA4sC,GACAthB,CAAAA,EAAAxoB,IAAA,CAAAy7B,kBAAA,CAAAqO,CAAA,CAEA,EAsIAthB,EAAA4S,EAAA3/B,GAEAuhC,GAAAxU,EAAA4S,EAAA3/B,IAGAuuC,UAkBAxhB,EAAAC,QAAA,GAOA2S,EAzBAA,IA0BAA,EAAAxJ,QAAA,GAtBAqY,SArXAzhB,CAAA,CACA4S,CAAA,CACA3/B,CAAA,EAEA,IAAU8e,MAAAA,CAAA,CAAAqX,SAAAA,CAAA,EAAkBwJ,EAE5B/xB,EAAA+yB,GAAA7hB,GACAsvB,EAAAzR,GAAA/uB,EAAA5N,EAAA48B,WAAA,EAEAyR,EAAAlY,EAAAkH,GAAAlH,EAAA2H,OAAA,CAAAplC,GAAA,oBAAA+I,KAAAA,CAEAA,MAAAA,IAAA2sC,GACArhB,CAAAA,EAAAxoB,IAAA,CAAAu7B,iBAAA,CAAAsO,CAAA,EAEA3sC,KAAAA,IAAA4sC,GACAthB,CAAAA,EAAAxoB,IAAA,CAAAy7B,kBAAA,CAAAqO,CAAA,CAEA,EAoWAthB,EAAA4S,EAAA3/B,GAEA0/B,GAAA3S,EAAA4S,EAAA3/B,GAEA,CAAI,MAAAJ,EAAA,CACJ,qBAAAk0B,kBAAAA,gBAAA,GAAqEC,EAAAC,EAAM,CAAAruB,IAAA,2CAC3E,CACA,GA1CA3F,EAAA+sB,EAAA4S,KAGM,GAAAgC,EAAAkM,EAAA,EAAyB,QA7pB/B,IACA,IAAA/gB,EAAAkE,SAAA,GACA,OAGA,IAAA5W,EAAAq0B,SA/BAvd,CAAA,EACA,IAAUoL,eAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAmS,UAAAA,CAAA,CAAAvY,SAAAA,CAAA,EAAoDjF,EAE9D,IAAAqL,EACA,YAIA,IAAUvG,OAAAA,CAAA,CAAAh6B,IAAAA,CAAA,EAAc0yC,EAExB,OACA70C,KAAA,iBACA0pB,MAAA+Y,EAAA,IACA9Y,IAAA+Y,EAAA,IACAr/B,KAAAlB,EACAuI,KAAA,CACAyxB,OAAAA,EACApD,WAAAuD,EAAA,EAAAwY,MAAA,CAAAltC,KAAAA,CACA,CACA,CACA,EAWAyvB,GAEAsL,GAspB+B1P,EAtpB/B1S,EACA,GAspBM,GAAAunB,EAAAkM,EAAA,EAAyB,MAlnB/B,IACA,IAAA/gB,EAAAkE,SAAA,GACA,OAGA,IAAA5W,EAAAw0B,SArCA1d,CAAA,EACA,IAAUoL,eAAAA,CAAA,CAAAC,aAAAA,CAAA,CAAAkF,IAAAA,CAAA,EAAoCvQ,EAE9C2d,EAAApN,CAAA,CAA4BE,EAAAC,EAAmB,EAE/C,IAAAtF,GAAA,CAAAC,GAAA,CAAAsS,EACA,YAIA,IAAU7Y,OAAAA,CAAA,CAAAh6B,IAAAA,CAAA,CAAA6jC,YAAAjN,CAAA,EAAuCic,SAEjD,KAAAptC,IAAAzF,EACA,KAGA,CACAnC,KAAA,eACAqD,KAAAlB,EACAunB,MAAA+Y,EAAA,IACA9Y,IAAA+Y,EAAA,IACAh4B,KAAA,CACAyxB,OAAAA,EACApD,WAAAA,CACA,CACA,CACA,EAWA1B,GAEAsL,GA2mB+B1P,EA3mB/B1S,EACA,GA4mBA,CAAI,MAAAgnB,EAAA,CAEJ,CACA,EA0KAtU,GAIA,IAAArB,EAAAqjB,SAzhCAhiB,CAAA,CACAiiB,EAAA,IAEA,IAAAC,EAAAD,EAAAjU,GAAAhO,GAAArrB,KAAAA,EAEA,OAAA5L,OAAAsT,MAAA,CACA,CAAA0F,EAAA8wB,KAEA,IAAA7S,EAAAkE,SAAA,GACA,OAAAniB,EAGA,GAnJAA,iBAAAA,EAAAhV,IAAA,CAuJA,OADA,OAAAgV,EAAAogC,WAAA,CACApgC,EAIA,KArKAhV,IAAA,EAqKA,CAAAghC,GAAAhsB,GACA,OAAAA,EAIA,IAAAqgC,EAAApiB,EAAAI,4BAAA,GACA,IAAAgiB,EACA,OAAArgC,EAKA,IAxEAA,EAAAhV,IAAA,EAAAgV,EAAAsgC,SAAA,EAAAtgC,EAAAsgC,SAAA,CAAA7F,MAAA,EAAAz6B,EAAAsgC,SAAA,CAAA7F,MAAA,CAAApyC,MAAA,EAKAyoC,EAAAyP,iBAAA,EAAAzP,EAAAyP,iBAAA,CAAAC,SAAA,EAmEA,CAAAviB,EAAA+M,UAAA,GAAAe,YAAA,CAAA+L,iBAAA,CAEA,MADA,qBAAA7S,kBAAAA,gBAAA,GAAyEC,EAAAC,EAAM,CAAAsb,GAAA,gDAAAzgC,GAC/E,KAMA,IAAA0gC,EA9DA,WAAAziB,EAAA6M,aAAA,EAMA9qB,EAAA8W,OAAA,GAAApwB,IAKA,CAAAsZ,EAAAsgC,SAAA,GAAAtgC,EAAAhV,IAAA,EAIAu9B,GAAAtK,EAAA+M,UAAA,GAAAgQ,eAAA,EAmDA2F,EAAAD,GAAAziB,YAAAA,EAAA6M,aAAA,CAaA,OAXA6V,GACA3gC,CAAAA,EAAAktB,IAAA,EAAuB,GAAAltB,EAAAktB,IAAA,CAAAC,SAAAlP,EAAAwf,YAAA,KAKvB0C,GAEAA,EAAAngC,EAAA,CAAkC+jB,WAAA,MAGlC/jB,CACA,EACA,CAAMtW,GAAA,UAEN,EA49BAu0B,EAoCA,CAAAsN,CAAAA,GAAAA,EAAArvB,EAAA,EAnCAqvB,CAAAA,GAAAA,EAAAqV,iBAAA,CACArV,EAAAqV,iBAAA,CAAAhkB,GAEI,GAAAikB,EAAAC,EAAA,EAAuBlkB,GAI3B2O,GA4BAA,EAAArvB,EAAA,GA3BAqvB,EAAArvB,EAAA,kBAAA+vB,GAAAhO,IACAsN,EAAArvB,EAAA,iBACA,IAAAixB,EAAAlP,EAAAwf,YAAA,GAEA,GAAAtQ,GAAAlP,EAAAkE,SAAA,IAAAlE,YAAAA,EAAA6M,aAAA,EAEA,IAAAuV,EAAApiB,EAAAI,4BAAA,GACAgiB,GACAU,CAAAA,EAAAvK,SAAA,CAAArJ,CAAA,CAEA,CACA,GAEA5B,EAAArvB,EAAA,oBAAA8kC,IACA/iB,EAAA6f,eAAA,CAAAkD,CACA,GAIAzV,EAAArvB,EAAA,qBAAA8kC,IACA/iB,EAAA6f,eAAA,CAAAkD,CACA,GAEA,EA40CA,MAEA,KAAAlI,4BAAA,IAEA,CAAM,MAAAliC,EAAA,CACN,KAAAskC,gBAAA,CAAAtkC,EACA,CAEA,KAAAqqC,2BAAA,CAAAC,SAl5GAjjB,CAAA,EACA,SAAAkjB,EAAA9d,CAAA,EAEApF,EAAAwa,kBAAA,CAAA5wC,QAAA,CAAAw7B,IACApF,EAAAwa,kBAAA,CAAA9vC,IAAA,CAAA06B,EAEA,CAEA,SAAA+d,EAAA,CAAuBvvB,QAAAA,CAAA,CAAS,EAChCA,EAAA1nB,OAAA,CAAAg3C,EACA,CAEA,IAAAE,EAAA,GAaA,MAXA,kCAAAl3C,OAAA,CAAAa,IACAq2C,EAAA14C,IAAA,CAAwB,GAAA24C,EAAAC,EAAA,EAAoCv2C,EAAAo2C,GAC5D,GAEAC,EAAA14C,IAAA,CACI,GAAA24C,EAAAE,EAAA,EAA4B,EAAIzf,OAAAA,CAAA,CAAQ,IAC5C9D,EAAAya,wBAAA,CAAA/vC,IAAA,CAAA84C,SAlDA1f,CAAA,EAGA,IAAAlQ,EAAAkQ,EAAAlQ,OAAA,CACA6vB,EAAA7vB,CAAA,CAAAA,EAAAxpB,MAAA,IACAgD,EAAAq2C,EAAAA,EAAAr2C,OAAA,CAAAuH,KAAAA,EAEAtH,EAAAy2B,EAAAz2B,KAAA,CAEAqpB,EAAAmP,GAAAx4B,GAEAoK,EAAA,CACA1K,KAAA,2BACAqD,KAAA,2BACAqmB,MAAAC,EACAA,IAAAA,EACAjf,KAAA,CACApK,MAAAA,EACAoc,KAAApc,EACAmb,OAAApb,EAAAyvB,GAAA1pB,MAAA,CAAA5H,KAAA,CAAA6B,GAAAuH,KAAAA,CACA,CACA,EAEA,OAAA8C,CACA,EA0BAqsB,GACA,IAIA,KACAsf,EAAAl3C,OAAA,CAAAw3C,GAAAA,IACA,CACA,EAs3GA,KACA,CAKApF,kBAAA,CACA,IACAj2C,EAAA6H,QAAA,CAAAqI,mBAAA,yBAAAkoC,uBAAA,EAEAp4C,EAAAkQ,mBAAA,aAAAmoC,iBAAA,EACAr4C,EAAAkQ,mBAAA,cAAAooC,kBAAA,EACAt4C,EAAAkQ,mBAAA,gBAAAqoC,oBAAA,EAEA,KAAAjc,aAAA,EACA,KAAAA,aAAA,CAAAxC,eAAA,GAGA,KAAA6gB,2BAAA,EACA,KAAAA,2BAAA,EAEA,CAAM,MAAArqC,EAAA,CACN,KAAAskC,gBAAA,CAAAtkC,EACA,CACA,CAQAuhC,QAAA,CAAa,KAAAuG,uBAAA,MACbp4C,YAAAA,EAAA6H,QAAA,CAAAyzC,eAAA,CACA,KAAAC,0BAAA,GAEA,KAAAC,0BAAA,EAEA,EAKA1J,SAAA,CAAc,KAAAuG,iBAAA,MACd,IAAAzgB,EAAA8D,GAAA,CACA7D,SAAA,SACA,GAIA,KAAA2jB,0BAAA,CAAA5jB,EACA,EAKAma,SAAA,CAAc,KAAAuG,kBAAA,MACd,IAAA1gB,EAAA8D,GAAA,CACA7D,SAAA,UACA,GAIA,KAAA0jB,0BAAA,CAAA3jB,EACA,EAGAoa,SAAA,CAAc,KAAAuG,oBAAA,MACdkD,SAhrHA9jB,CAAA,CAAAje,CAAA,EACA,IAAAie,EAAAkE,SAAA,GACA,OAMAlE,EAAAqf,kBAAA,GAEA,IAAApf,EAAA8jB,SAUAhiC,CAAA,MAmCA5D,EAlCA,IAAU0mB,QAAAA,CAAA,CAAAE,SAAAA,CAAA,CAAAD,QAAAA,CAAA,CAAAF,OAAAA,CAAA,CAAA7b,IAAAA,CAAA,CAAA5K,OAAAA,CAAA,EAAkD4D,EAG5D,IAAA5D,GAgCAA,UAAAA,CADAA,EA/BAA,GAgCArR,OAAA,EAAAqR,aAAAA,EAAArR,OAAA,EAAAqR,EAAA6lC,iBAAA,EAhCA,CAAAj7B,EACA,YAKA,IAAAk7B,EAAAl7B,IAAAA,EAAA3e,MAAA,CAIA,IALAy6B,CAAAA,GAAAC,GAAAF,CAAA,GAKAqf,EACA,YAGA,IAAAprB,EAAkB,GAAA0L,EAAAC,EAAA,EAAgBrmB,EAAA,CAAWsmB,gBAAA,OAAsB,YACnEyf,EAAAxf,GAAAvmB,EAAA0a,GAEA,OAAAkL,GAAA,CACA7D,SAAA,aACArH,QAAAA,EACAphB,KAAA,CACA,GAAAysC,EAAAzsC,IAAA,CACAotB,QAAAA,EACAE,SAAAA,EACAD,QAAAA,EACAF,OAAAA,EACA7b,IAAAA,CACA,CACA,EACA,EA3CAhH,GAEAke,GAIAF,GAAAC,EAAAC,EACA,EA+pHA,KAAAle,EACA,EAKA8hC,2BAAA5jB,CAAA,EACA,SAAAyK,OAAA,CACA,OAGA,IAAAyZ,EAAAvY,GAAA,KAAAlB,OAAA,EACAmB,kBAAA,KAAAoP,QAAA,CAAApP,iBAAA,CACAC,kBAAA,KAAA6B,QAAA,CAAA7B,iBAAA,GAGAqY,IAIAlkB,GACA,KAAAmkB,uBAAA,CAAAnkB,GAMA,KAAAqf,gBAAA,GACA,CAKAsE,2BAAA3jB,CAAA,EACA,SAAAyK,OAAA,CACA,OAGA,IAAA0X,EAAA,KAAAhiB,4BAAA,GAEA,IAAAgiB,EAAA,CAIAtb,GAAA,gEACA,MACA,CAEA7G,GACA,KAAAmkB,uBAAA,CAAAnkB,EAEA,CAKAgf,oBAAAvE,EAAA17B,KAAAD,GAAA,IACA,KAAA27B,aAAA,CAAAA,CACA,CAKAwE,uBAAAxE,EAAA17B,KAAAD,GAAA,IACA,KAAA2rB,OAAA,GACA,KAAAA,OAAA,CAAAM,YAAA,CAAA0P,EACA,KAAAyE,iBAAA,GAEA,CAKAiF,wBAAAnkB,CAAA,EACA,KAAAI,SAAA,MACA,KAAAC,iBAAA,EACAvzB,KAAAuW,GAAAuW,MAAA,CACAP,UAAA2G,EAAA3G,SAAA,IACA7hB,KAAA,CACA8oB,IAAA,aACAxZ,QAAAkZ,CACA,CACA,EACA,EACA,CAMAokB,wBAAA,CACA,IAAA7J,EAAA8J,IAAA,CAAA9J,kBAAA,CA/rHAh8B,GAAA,CAAAioB,IAAAzf,MAAA,CAAAha,SA+rHAu3C,MAAA,MAAA9J,wBAAA,EAKA,OAHA,KAAAD,kBAAA,IACA,KAAAC,wBAAA,IAEArS,QAAA+B,GAAA,CAAAkF,GAAA,KAAAmL,GACA,CAKAoF,eAAA,CAEA,KAAA9E,QAAA,CAAA9L,QAAA,CAAAzS,KAAA,GACA,KAAAue,QAAA,CAAAjM,QAAA,CAAAtS,KAAA,GACA,KAAAue,QAAA,CAAA1I,IAAA,IAIAoS,wCAAA,CACA,IAAY9Z,QAAAA,CAAA,CAAAkC,YAAAA,CAAA,EAAuB,KACnC,IAAAlC,GAAA,CAAAkC,GAKAlC,EAAAO,SAAA,CAJA,OAQA,IAAAiT,EAAAtR,EAAArE,oBAAA,GACA2V,GAAAA,EAAA,KAAApD,QAAA,CAAAjN,gBAAA,EACA,MAAAiN,QAAA,CAAAjN,gBAAA,CAAAqQ,CAAA,CAEA,CAKAuG,kBAAA,CACA,IAAA3J,EAAA,CACAjN,iBAAA,KAAAiN,QAAA,CAAAjN,gBAAA,CACAkN,WAAA,KAAAD,QAAA,CAAAC,UAAA,CACA/L,SAAAxlC,MAAAC,IAAA,MAAAqxC,QAAA,CAAA9L,QAAA,EACAH,SAAArlC,MAAAC,IAAA,MAAAqxC,QAAA,CAAAjM,QAAA,EACAuD,KAAA,KAAA0I,QAAA,CAAA1I,IAAA,EAKA,OAFA,KAAAwN,aAAA,GAEA9E,CACA,CAUA,MAAA4J,WAAA,CACA,IAAAxV,EAAA,KAAAsQ,YAAA,GAEA,SAAA9U,OAAA,QAAAkC,WAAA,GAAAsC,EAAA,CACA,qBAAAlI,kBAAAA,gBAAA,GAAuEC,EAAAC,EAAM,CAAAp9B,KAAA,uDAC7E,MACA,CAKA,GAHA,WAAAu6C,sBAAA,GAGA,KAAAzX,WAAA,OAAAA,WAAA,CAAA5E,SAAA,GAKA,MAAAiO,GAAA,MAGA,KAAArJ,WAAA,EAKAsC,IAAA,KAAAsQ,YAAA,IAIA,IAEA,KAAAgF,sCAAA,GAEA,IAAAlrB,EAAAta,KAAAD,GAAA,GAKA,GAAAua,EAAA,KAAAwhB,QAAA,CAAAjN,gBAAA,MAAAoN,QAAA,CAAApP,iBAAA,KACA,uDAGA,IAAA0L,EAAA,KAAAkN,gBAAA,GAEAxZ,EAAA,KAAAP,OAAA,CAAAO,SAAA,GACA,KAAAkU,iBAAA,GAGA,IAAA9H,EAAA,WAAAzK,WAAA,CAAAzE,MAAA,EAEA,OAAAoR,GAAA,CACArK,SAAAA,EACAmI,cAAAA,EACApM,UAAAA,EACAsM,aAAAA,EACA7M,QAAA,KAAAA,OAAA,CACAx3B,QAAA,KAAA65B,UAAA,GACAzT,UAAAA,CACA,EACA,CAAM,MAAA3gB,EAAA,CACN,KAAAskC,gBAAA,CAAAtkC,GAKA,KAAA00B,IAAA,EAAuBD,OAAA,eAEvB,IAAAE,EAAqB,GAAA/F,EAAAC,EAAA,IAAa+F,SAAA,GAElCD,GACAA,EAAAE,kBAAA,uBAEA,CACA,CAMA8M,SAAA,CAAc,KAAAwB,MAAA,QACdyC,MAAAA,EAAA,GACA,CAEA,EAAK,IACL,SAAA5D,UAAA,GAAA4D,EAEA,OAGA,SAAAne,4BAAA,IACA,qBAAA4G,kBAAAA,gBAAA,GAAuEC,EAAAC,EAAM,CAAAp9B,KAAA,sEAC7E,MACA,CAEA,SAAA4gC,OAAA,CAEA,OAGA,IAAAjU,EAAA,KAAAiU,OAAA,CAAAK,OAAA,CACAhsB,EAAAC,KAAAD,GAAA,GACAinB,EAAAjnB,EAAA0X,EAGA,KAAAykB,eAAA,CAAAU,MAAA,GAIA,IAAA+I,EAAA3e,EAAA,KAAAiV,QAAA,CAAA2J,iBAAA,CACAC,EAAA7e,EAAA,KAAAiV,QAAA,CAAApP,iBAAA,KACA,GAAA8Y,GAAAE,EAAA,CACA/d,GACA,8BAAsCvvB,KAAAmlC,KAAA,CAAA1W,EAAA,KAA4B,YAClE2e,EAAA,eACS,uBACT,KAAA1J,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAGA0Y,GACA,KAAAzJ,eAAA,GAEA,MACA,CAEA,IAAAtO,EAAA,KAAAA,WAAA,CAQA,GAPAA,GAAA,SAAAlC,OAAA,CAAAO,SAAA,GAAA2B,EAAA7E,WAAA,EACAjB,GAAA,2DAAAmU,QAAA,CAAAnN,YAAA,CAAA7B,cAAA,EAMA,MAAA6Y,UAAA,EACA,KAAAA,UAAA,MAAAJ,SAAA,GACA,WAAAI,UAAA,CACA,KAAAA,UAAA,CAAAnwC,KAAAA,EACA,MACA,CAQA,IACA,WAAAmwC,UAAA,CACM,MAAAnsC,EAAA,CACN,qBAAAquB,kBAAAA,gBAAA,GAAuEC,EAAAC,EAAM,CAAAp9B,KAAA,CAAA6O,EAC7E,QAAM,CACN,KAAAuiC,eAAA,EACA,CACA,EAGAiE,mBAAA,CACA,KAAAzU,OAAA,OAAAuQ,QAAA,CAAA1P,aAAA,EACAd,GAAA,KAAAC,OAAA,CAEA,CAGA6P,SAAA,CAAc,KAAA4D,kBAAA,KACd,IAAAnoB,EAAA9Q,EAAA9a,MAAA,CAEA26C,EAAA,KAAA9J,QAAA,CAAA8J,aAAA,CACAC,EAAA,KAAA/J,QAAA,CAAA+J,uBAAA,CACAC,EAAAF,GAAA/uB,EAAA+uB,EAIA,GAAA/uB,EAAAgvB,GAAAC,EAAA,CACA,IAAAhlB,EAAA8D,GAAA,CACA7D,SAAA,mBACAzoB,KAAA,CACAue,MAAAA,EACAzkB,MAAA0zC,CACA,CACA,GACA,KAAAb,uBAAA,CAAAnkB,EACA,OAGA,CAAAglB,IACA,KAAA5X,IAAA,EAAuBD,OAAA,gBAAAiR,WAAA,iBAAAxR,aAAA,GACvB,GAKA,EACA,CAEA,SAAAqY,GACAC,CAAA,CACAC,CAAA,CACAC,CAAA,CACAC,CAAA,EAEA,IAAAC,EAAA,iBAAAD,EAAAA,EAAAn7C,KAAA,SAEAq7C,EAAA,IACAL,KAEAI,KAGAH,EACA,CAeA,OAZA,SAAAC,IAEA,iBAAAA,GACAG,EAAA96C,IAAA,KAA4B26C,EAAsB,GAIlDzsC,QAAAC,IAAA,CACA,4IAIA2sC,EAAA77C,IAAA,KACA,CAuFA,IAAA87C,GACA,mGAEAC,GAAA,2CAEAC,GAAA,EAKA,OAAAC,GAIA,OAAAC,cAAA,CAA0B,KAAAp6C,EAAA,UAkB1BP,YAAA,CACA6wC,cAAAA,EAn9QA,GAm9QA,CACAC,cAAAA,EAj9QA,IAi9QA,CACA4I,kBAAAA,EA37QA,IA27QA,CACA/Y,kBAAAA,EAv7QA,IAu7QA,CACAN,cAAAA,EAAA,GACAsS,eAAAA,EAAA,GACAmC,UAAAA,CAAA,CACAlS,aAAAA,EAAA,EAAqB,CACrBzC,kBAAAA,CAAA,CACA0R,gBAAAA,CAAA,CACArqC,YAAAA,EAAA,GACAuqB,cAAAA,EAAA,GACA6gB,cAAAA,EAAA,GAEAkH,wBAAAA,EAAA,IACAD,cAAAA,EAAA,IAEAnI,iBAAAA,EAAA,IACAC,yBAAAA,EAAA,GAEAxJ,uBAAAA,EAAA,GACAC,sBAAAA,EAAA,GACAE,qBAAAA,EAAA,GACAC,sBAAAA,EAAA,GACAO,uBAAAA,EAAA,GAEA8R,KAAAA,EAAA,GACAC,eAAAA,EAAA,wBACAC,OAAAA,EAAA,GACAC,MAAAA,EAAA,GACAC,QAAAA,EAAA,GACAC,OAAAA,EAAA,GACAC,OAAAA,CAAA,CAEAjZ,wBAAAA,CAAA,CACAgC,oBAAAA,CAAA,CAGA/7B,WAAAA,CAAA,CAEAC,cAAAA,CAAA,CAEAxG,iBAAAA,CAAA,CAEAyF,cAAAA,CAAA,CAEAC,iBAAAA,CAAA,CAEA6e,YAAAA,CAAA,CACA,CAAI,EAAI,EACR,KAAAhhB,IAAA,CAAAw1C,GAAAn6C,EAAA,CAEA,IAAA46C,EAAAC,SAvKA,CACAR,KAAAA,CAAA,CACAE,OAAAA,CAAA,CACAC,MAAAA,CAAA,CACAC,QAAAA,CAAA,CACAC,OAAAA,CAAA,CAGA/yC,WAAAA,CAAA,CAEAC,cAAAA,CAAA,CAEAf,cAAAA,CAAA,CAEAC,iBAAAA,CAAA,CAEA6e,YAAAA,CAAA,CACC,EAGD,IAAAm1B,EAAArB,GAAAY,EAAA,sCAAAxzC,EAAAC,GACAi0C,EAAAtB,GAAAc,EAAA,2CAEA9yC,EAAA,CAEAX,iBAAAg0C,EACA9zC,mBAAA+zC,EAEAnzC,cAAA6xC,GACAe,EACA,uCAZA,iBAYA,CACA7yC,EACAC,GAEAC,gBAAA4xC,GAAAgB,EAAA,6CACA70B,eAAA6zB,GAAAiB,EAAA,+DAAA/0B,EACA,EAUA,OARAhe,aAAAqzC,QACAvzC,CAAAA,EAAAE,UAAA,CAAAA,CAAA,EAGAd,aAAAm0C,QACAvzC,CAAAA,EAAAZ,aAAA,CAAAA,CAAA,EAGAY,CACA,EAwHA,CACA4yC,KAAAA,EACAE,OAAAA,EACAC,MAAAA,EACAC,QAAAA,EACAC,OAAAA,EACA/yC,WAAAA,EACAC,cAAAA,EACAf,cAAAA,EACAC,iBAAAA,EACA6e,YAAAA,CACA,GAkGA,GAhGA,KAAA4pB,iBAAA,EACA/d,cAAAA,EACAvqB,YAAAA,EACA7F,iBAAA,CAA0B,GAAAA,GAAA,EAA0B,CAAA65C,SAAA,IACpDjzC,WAAA2yC,EACA94C,YAAA84C,EACA/1C,gBAAA,CAAA0Y,EAAA1b,EAAAU,IACA44C,CAvIA,UACA54C,GAAAA,CAAA,CACAgb,IAAAA,CAAA,CACAg9B,eAAAA,CAAA,CACArzC,YAAAA,CAAA,CACA2zC,eAAAA,CAAA,CACAh5C,MAAAA,CAAA,CACC,QAED,CAAAqF,GAKA2zC,EAAA5zC,kBAAA,EAAA1E,EAAAiE,OAAA,CAAAq0C,EAAA5zC,kBAAA,EAJApF,EASA04C,EAAAn8C,QAAA,CAAAmf,IAGAA,UAAAA,GAAAhb,UAAAA,EAAAjB,OAAA,sBAAAlD,QAAA,CAAAmE,EAAAC,YAAA,cAEAX,EAAAxD,OAAA,cAGAwD,CACA,GA2GA,CACA04C,eAAAA,EACArzC,YAAAA,EACA2zC,eAAAA,EACAt9B,IAAAA,EACA1b,MAAAA,EACAU,GAAAA,CACA,GAEA,GAAAs4C,CAAA,CAGA3yC,eAAA,MACAF,iBAAA,GAEAI,aAAA,GAGA6gB,aAAA,GACA7sB,aAAA,IACA,IACA+Q,EAAA4pC,SAAA,GACA,CAAU,MAAAz4C,EAAA,CAGV,CACA,CACA,EAEA,KAAA88C,eAAA,EACA7K,cAAAA,EACAC,cAAAA,EACA4I,kBAAArtC,KAAAC,GAAA,CAAAotC,EA/hRA,MAgiRA/Y,kBAAAt0B,KAAAC,GAAA,CAAAq0B,EA7hRA,MA8hRAN,cAAAA,EACAF,kBAAAA,EACA0R,gBAAAA,EACAc,eAAAA,EACAmC,UAAAA,EACAlC,cAAAA,EACA7gB,cAAAA,EACAvqB,YAAAA,EACAsyC,wBAAAA,EACAD,cAAAA,EACAnI,iBAAAA,EACAC,yBAAAA,EACAxJ,uBAAAA,EACAC,sBAAAA,EACAE,qBAAAA,EACAC,sBAAAoT,GAAApT,GACAO,uBAAA6S,GAAA7S,GACA7G,wBAAAA,EACAgC,oBAAAA,EAEArB,aAAAA,CACA,EAEA,iBAAAzC,IAEAzyB,QAAAC,IAAA,CACA;;;wCAGc,EAA4BwyB,EAAA,GAAoB,GAG9D,KAAAub,eAAA,CAAAvb,iBAAA,CAAAA,GAGA,iBAAA0R,IAEAnkC,QAAAC,IAAA,CACA;;;wCAGc,EAA4BkkC,EAAA,GAAkB,GAG5D,KAAA6J,eAAA,CAAA7J,eAAA,CAAAA,GAGA,KAAA6J,eAAA,CAAA9I,aAAA,EAGA,MAAA9C,iBAAA,CAAA3nC,aAAA,MAAA2nC,iBAAA,CAAA3nC,aAAA,CAEA,GAAa,KAAA2nC,iBAAA,CAAA3nC,aAAA,CAAqC,GAAGoyC,GAAgB,EADrEA,EACqE,EAGrE,KAAAqB,cAAA,EAA+B,GAAAC,EAAAC,CAAA,IAC/B,yEAGA,MAAAF,cAAA,GACA,CAGA,IAAAA,gBAAA,CACA,OAAAnB,EACA,CAGA,IAAAmB,eAAAz5C,CAAA,EACAs4C,GAAAt4C,CACA,CAKA45C,WAAA,CACS,GAAAF,EAAAC,CAAA,MAIT,KAAAE,MAAA,GAUA5pC,WAAA,SAAA6pC,WAAA,IACA,CASA1wB,OAAA,CACA,KAAAgL,OAAA,EAIA,KAAAA,OAAA,CAAAhL,KAAA,EACA,CAMA0mB,gBAAA,CACA,KAAA1b,OAAA,EAIA,KAAAA,OAAA,CAAA0b,cAAA,EACA,CAMA9P,MAAA,QACA,KAAA5L,OAAA,CAIA,KAAAA,OAAA,CAAA4L,IAAA,EAA+BgR,WAAA,iBAAA5c,OAAA,CAAAoL,aAAA,GAH/BzE,QAAAC,OAAA,EAIA,CASAwT,MAAA3oC,CAAA,SACA,KAAAuuB,OAAA,OAAAA,OAAA,CAAAyC,SAAA,GAIA,KAAAzC,OAAA,CAAA2N,yBAAA,CAAAl8B,GAHAk1B,QAAAC,OAAA,EAIA,CAKA+e,aAAA,CACA,QAAA3lB,OAAA,OAAAA,OAAA,CAAAyC,SAAA,GAIA,YAAAzC,OAAA,CAAA+d,YAAA,EACA,CAIA2H,aAAA,CACA,KAAA1lB,OAAA,EAIA,KAAAA,OAAA,CAAAqb,kBAAA,EACA,CAGAoK,QAAA,CAEA,IAAAG,EAAAC,SAUAC,CAAA,EACA,IAAAja,EAAiB,GAAA/F,EAAAC,EAAA,IAAa+F,SAAA,GAC9Bia,EAAAla,GAAAA,EAAAP,UAAA,GAEAsa,EAAA,CAAyBhc,kBAAA,EAAA0R,gBAAA,KAA6C,GAAAjb,EAAA+O,EAAA,EAAiB0W,EAAA,SAEvFC,GAOA,MAAAD,EAAAlc,iBAAA,EACAkc,MAAAA,EAAAxK,eAAA,EACAyK,MAAAA,EAAAC,wBAAA,EACAD,MAAAA,EAAAE,wBAAA,EAGA9uC,QAAAC,IAAA,CACA,yGAIA,iBAAA2uC,EAAAC,wBAAA,EACAJ,CAAAA,EAAAhc,iBAAA,CAAAmc,EAAAC,wBAAA,EAGA,iBAAAD,EAAAE,wBAAA,EACAL,CAAAA,EAAAtK,eAAA,CAAAyK,EAAAE,wBAAA,GArBA9uC,QAAAC,IAAA,iCACAwuC,CAwBA,EA3CA,KAAAT,eAAA,CAEA,MAAAnlB,OAAA,KAAAuY,GAAA,CACA9mC,QAAAm0C,EACApN,iBAAA,KAAAe,iBAAA,EAEA,CACA,CAsCA,SAAA6L,GAAA7V,CAAA,EACA,UAAA0U,MAAA1U,EAAAxyB,GAAA,CAAAgyB,GAAAA,EAAAvjC,WAAA,KAvCE24C,GAAAC,YAAA","sources":["webpack://_N_E/./node_modules/@sentry/replay/esm/index.js?cebc","webpack://_N_E/"],"sourcesContent":["import { getCurrentHub, isSentryRequestUrl, addGlobalEventProcessor, prepareEvent, setContext, captureException } from '@sentry/core';\nimport { GLOBAL_OBJ, normalize, fill, htmlTreeAsString, browserPerformanceTimeOrigin, logger, uuid4, SENTRY_XHR_DATA_KEY, dropUndefinedKeys, stringMatchesSomePattern, addInstrumentationHandler, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, updateRateLimits, isRateLimited, isBrowser } from '@sentry/utils';\nimport { addPerformanceInstrumentationHandler, addLcpInstrumentationHandler } from '@sentry-internal/tracing';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nconst WINDOW = GLOBAL_OBJ ;\n\nconst REPLAY_SESSION_KEY = 'sentryReplaySession';\nconst REPLAY_EVENT_NAME = 'replay_event';\nconst UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nconst SESSION_IDLE_PAUSE_DURATION = 300000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nconst SESSION_IDLE_EXPIRE_DURATION = 900000; // 15 minutes in ms\n\n/** Default flush delays */\nconst DEFAULT_FLUSH_MIN_DELAY = 5000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\n\n/* How long to wait for error checkouts */\nconst BUFFER_CHECKOUT_TIME = 60000;\n\nconst RETRY_BASE_INTERVAL = 5000;\nconst RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nconst NETWORK_BODY_MAX_SIZE = 150000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nconst CONSOLE_ARG_MAX_SIZE = 5000;\n\n/* Min. time to wait before we consider something a slow click. */\nconst SLOW_CLICK_THRESHOLD = 3000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 20000000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nconst MIN_REPLAY_DURATION = 4999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nconst MIN_REPLAY_DURATION_LIMIT = 15000;\n\n/** The max. length of a replay. */\nconst MAX_REPLAY_DURATION = 3600000; // 60 minutes in ms;\n\nvar NodeType$1;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType$1 || (NodeType$1 = {}));\n\nfunction isElement$1(n) {\n return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n const host = n === null || n === void 0 ? void 0 : n.host;\n return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(' background-clip: text;') &&\n !cssText.includes(' -webkit-background-clip: text;')) {\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\n }\n return cssText;\n}\nfunction escapeImportStatement(rule) {\n const { cssText } = rule;\n if (cssText.split('\"').length < 3)\n return cssText;\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n if (rule.layerName === '') {\n statement.push(`layer`);\n }\n else if (rule.layerName) {\n statement.push(`layer(${rule.layerName})`);\n }\n if (rule.supportsText) {\n statement.push(`supports(${rule.supportsText})`);\n }\n if (rule.media.length) {\n statement.push(rule.media.mediaText);\n }\n return statement.join(' ') + ';';\n}\nfunction stringifyStylesheet(s) {\n try {\n const rules = s.rules || s.cssRules;\n return rules\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\n : null;\n }\n catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule) {\n let importStringified;\n if (isCSSImportRule(rule)) {\n try {\n importStringified =\n stringifyStylesheet(rule.styleSheet) ||\n escapeImportStatement(rule);\n }\n catch (error) {\n }\n }\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n return fixSafariColons(rule.cssText);\n }\n return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, '$1\\\\$2');\n}\nfunction isCSSImportRule(rule) {\n return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n return 'selectorText' in rule;\n}\nclass Mirror {\n constructor() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n getId(n) {\n var _a;\n if (!n)\n return -1;\n const id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\n return id !== null && id !== void 0 ? id : -1;\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n) {\n return this.nodeMetaMap.get(n) || null;\n }\n removeNodeFromMap(n) {\n const id = this.getId(n);\n this.idNodeMap.delete(id);\n if (n.childNodes) {\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node) {\n return this.nodeMetaMap.has(node);\n }\n add(n, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n);\n this.nodeMetaMap.set(n, meta);\n }\n replace(id, n) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta)\n this.nodeMetaMap.set(n, meta);\n }\n this.idNodeMap.set(id, n);\n }\n reset() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n}\nfunction createMirror() {\n return new Mirror();\n}\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\n if (tagName === 'OPTION') {\n tagName = 'SELECT';\n }\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\n (type && maskInputOptions[type]) ||\n type === 'password' ||\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\n}\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\n let text = value || '';\n if (!isMasked) {\n return text;\n }\n if (maskInputFn) {\n text = maskInputFn(text, element);\n }\n return '*'.repeat(text.length);\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext('2d');\n if (!ctx)\n return true;\n const chunkSize = 50;\n for (let x = 0; x < canvas.width; x += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n : getImageData;\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some((pixel) => pixel !== 0))\n return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ?\n toLowerCase(type)\n : null;\n}\nfunction getInputValue(el, tagName, type) {\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n return el.getAttribute('value') || '';\n }\n return el.value;\n}\n\nlet _id = 1;\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName(element) {\n if (element instanceof HTMLFormElement) {\n return 'form';\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return 'div';\n }\n return processedTagName;\n}\nfunction extractOrigin(url) {\n let origin = '';\n if (url.indexOf('//') > -1) {\n origin = url.split('/').slice(0, 3).join('/');\n }\n else {\n origin = url.split('/')[0];\n }\n origin = origin.split('?')[0];\n return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || '';\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === '/') {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split('/');\n const parts = filePath.split('/');\n stack.pop();\n for (const part of parts) {\n if (part === '.') {\n continue;\n }\n else if (part === '..') {\n stack.pop();\n }\n else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n });\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === '') {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars = match[0];\n pos += chars.length;\n return chars;\n }\n return '';\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === ',') {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n }\n else {\n let descriptorsStr = '';\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c = attributeValue.charAt(pos);\n if (c === '') {\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (!inParens) {\n if (c === ',') {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (c === '(') {\n inParens = true;\n }\n }\n else {\n if (c === ')') {\n inParens = false;\n }\n }\n descriptorsStr += c;\n pos += 1;\n }\n }\n }\n return output.join(', ');\n}\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === '') {\n return attributeValue;\n }\n const a = doc.createElement('a');\n a.href = attributeValue;\n return a.href;\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref() {\n const a = document.createElement('a');\n a.href = '';\n return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n if (!value) {\n return value;\n }\n if (name === 'src' ||\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'xlink:href' && value[0] !== '#') {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'background' &&\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'srcset') {\n return getAbsoluteSrcsetString(doc, value);\n }\n else if (name === 'style') {\n return absoluteToStylesheet(value, getHref());\n }\n else if (tagName === 'object' && name === 'data') {\n return absoluteToDoc(doc, value);\n }\n if (typeof maskAttributeFn === 'function') {\n return maskAttributeFn(name, value, element);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n try {\n if (unblockSelector && element.matches(unblockSelector)) {\n return false;\n }\n if (typeof blockClass === 'string') {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n }\n else {\n for (let eIndex = element.classList.length; eIndex--;) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n }\n catch (e) {\n }\n return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n for (let eIndex = el.classList.length; eIndex--;) {\n const className = el.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n if (!node)\n return -1;\n if (node.nodeType !== node.ELEMENT_NODE)\n return -1;\n if (distance > limit)\n return -1;\n if (matchPredicate(node))\n return distance;\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n return (node) => {\n const el = node;\n if (el === null)\n return false;\n if (className) {\n if (typeof className === 'string') {\n if (el.matches(`.${className}`))\n return true;\n }\n else if (elementClassMatchesRegex(el, className)) {\n return true;\n }\n }\n if (selector && el.matches(selector))\n return true;\n return false;\n };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n try {\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n if (el === null)\n return false;\n let maskDistance = -1;\n let unmaskDistance = -1;\n if (maskAllText) {\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\n if (unmaskDistance < 0) {\n return true;\n }\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\n }\n else {\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\n if (maskDistance < 0) {\n return false;\n }\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\n }\n return maskDistance >= 0\n ? unmaskDistance >= 0\n ? maskDistance <= unmaskDistance\n : true\n : unmaskDistance >= 0\n ? false\n : !!maskAllText;\n }\n catch (e) {\n }\n return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n }\n catch (error) {\n return;\n }\n if (readyState !== 'complete') {\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener('load', () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = 'about:blank';\n if (win.location.href !== blankUrl ||\n iframeEl.src === blankUrl ||\n iframeEl.src === '') {\n setTimeout(listener, 0);\n return iframeEl.addEventListener('load', listener);\n }\n iframeEl.addEventListener('load', listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n }\n catch (error) {\n return;\n }\n if (styleSheetLoaded)\n return;\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener('load', () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\n const rootId = getRootId(doc, mirror);\n switch (n.nodeType) {\n case n.DOCUMENT_NODE:\n if (n.compatMode !== 'CSS1Compat') {\n return {\n type: NodeType$1.Document,\n childNodes: [],\n compatMode: n.compatMode,\n };\n }\n else {\n return {\n type: NodeType$1.Document,\n childNodes: [],\n };\n }\n case n.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$1.DocumentType,\n name: n.name,\n publicId: n.publicId,\n systemId: n.systemId,\n rootId,\n };\n case n.ELEMENT_NODE:\n return serializeElementNode(n, {\n doc,\n blockClass,\n blockSelector,\n unblockSelector,\n inlineStylesheet,\n maskAttributeFn,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n });\n case n.TEXT_NODE:\n return serializeTextNode(n, {\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskTextFn,\n maskInputOptions,\n maskInputFn,\n rootId,\n });\n case n.CDATA_SECTION_NODE:\n return {\n type: NodeType$1.CDATA,\n textContent: '',\n rootId,\n };\n case n.COMMENT_NODE:\n return {\n type: NodeType$1.Comment,\n textContent: n.textContent || '',\n rootId,\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror) {\n if (!mirror.hasNode(doc))\n return undefined;\n const docId = mirror.getId(doc);\n return docId === 1 ? undefined : docId;\n}\nfunction serializeTextNode(n, options) {\n var _a;\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\n const parentTagName = n.parentNode && n.parentNode.tagName;\n let textContent = n.textContent;\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\n if (isStyle && textContent) {\n try {\n if (n.nextSibling || n.previousSibling) {\n }\n else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\n textContent = stringifyStylesheet(n.parentNode.sheet);\n }\n }\n catch (err) {\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\n }\n textContent = absoluteToStylesheet(textContent, getHref());\n }\n if (isScript) {\n textContent = 'SCRIPT_PLACEHOLDER';\n }\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n textContent = maskTextFn\n ? maskTextFn(textContent)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n textContent = maskInputFn\n ? maskInputFn(textContent, n.parentNode)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (parentTagName === 'OPTION' && textContent) {\n const isInputMasked = shouldMaskInput({\n type: null,\n tagName: parentTagName,\n maskInputOptions,\n });\n textContent = maskInputValue({\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\n element: n,\n value: textContent,\n maskInputFn,\n });\n }\n return {\n type: NodeType$1.Text,\n textContent: textContent || '',\n isStyle,\n rootId,\n };\n}\nfunction serializeElementNode(n, options) {\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\n const tagName = getValidTagName(n);\n let attributes = {};\n const len = n.attributes.length;\n for (let i = 0; i < len; i++) {\n const attr = n.attributes[i];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\n }\n }\n if (tagName === 'link' && inlineStylesheet) {\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\n return s.href === n.href;\n });\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n }\n }\n if (tagName === 'style' &&\n n.sheet &&\n !(n.innerText || n.textContent || '').trim().length) {\n const cssText = stringifyStylesheet(n.sheet);\n if (cssText) {\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\n }\n }\n if (tagName === 'input' ||\n tagName === 'textarea' ||\n tagName === 'select' ||\n tagName === 'option') {\n const el = n;\n const type = getInputType(el);\n const value = getInputValue(el, toUpperCase(tagName), type);\n const checked = el.checked;\n if (type !== 'submit' && type !== 'button' && value) {\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\n type,\n tagName: toUpperCase(tagName),\n maskInputOptions,\n }));\n attributes.value = maskInputValue({\n isMasked: forceMask,\n element: el,\n value,\n maskInputFn,\n });\n }\n if (checked) {\n attributes.checked = checked;\n }\n }\n if (tagName === 'option') {\n if (n.selected && !maskInputOptions['select']) {\n attributes.selected = true;\n }\n else {\n delete attributes.selected;\n }\n }\n if (tagName === 'canvas' && recordCanvas) {\n if (n.__context === '2d') {\n if (!is2DCanvasBlank(n)) {\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n }\n else if (!('__context' in n)) {\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n const blankCanvas = document.createElement('canvas');\n blankCanvas.width = n.width;\n blankCanvas.height = n.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === 'img' && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement('canvas');\n canvasCtx = canvasService.getContext('2d');\n }\n const image = n;\n const oldValue = image.crossOrigin;\n image.crossOrigin = 'anonymous';\n const recordInlineImage = () => {\n image.removeEventListener('load', recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n catch (err) {\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\n }\n oldValue\n ? (attributes.crossOrigin = oldValue)\n : image.removeAttribute('crossorigin');\n };\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener('load', recordInlineImage);\n }\n if (tagName === 'audio' || tagName === 'video') {\n attributes.rr_mediaState = n.paused\n ? 'paused'\n : 'played';\n attributes.rr_mediaCurrentTime = n.currentTime;\n }\n if (!newlyAddedElement) {\n if (n.scrollLeft) {\n attributes.rr_scrollLeft = n.scrollLeft;\n }\n if (n.scrollTop) {\n attributes.rr_scrollTop = n.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n.getBoundingClientRect();\n attributes = {\n class: attributes.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`,\n };\n }\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\n if (!n.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName))\n isCustomElement = true;\n }\n catch (e) {\n }\n return {\n type: NodeType$1.Element,\n tagName,\n attributes,\n childNodes: [],\n isSVG: isSVGElement(n) || undefined,\n needBlock,\n rootId,\n isCustom: isCustomElement,\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === undefined || maybeAttr === null) {\n return '';\n }\n else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$1.Comment) {\n return true;\n }\n else if (sn.type === NodeType$1.Element) {\n if (slimDOMOptions.script &&\n (sn.tagName === 'script' ||\n (sn.tagName === 'link' &&\n (sn.attributes.rel === 'preload' ||\n sn.attributes.rel === 'modulepreload') &&\n sn.attributes.as === 'script') ||\n (sn.tagName === 'link' &&\n sn.attributes.rel === 'prefetch' &&\n typeof sn.attributes.href === 'string' &&\n sn.attributes.href.endsWith('.js')))) {\n return true;\n }\n else if (slimDOMOptions.headFavicon &&\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n (sn.tagName === 'meta' &&\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n lowerIfExists(sn.attributes.name) === 'application-name' ||\n lowerIfExists(sn.attributes.rel) === 'icon' ||\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n return true;\n }\n else if (sn.tagName === 'meta') {\n if (slimDOMOptions.headMetaDescKeywords &&\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n }\n else if (slimDOMOptions.headMetaSocial &&\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\n return true;\n }\n else if (slimDOMOptions.headMetaRobots &&\n (lowerIfExists(sn.attributes.name) === 'robots' ||\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\n return true;\n }\n else if (slimDOMOptions.headMetaHttpEquiv &&\n sn.attributes['http-equiv'] !== undefined) {\n return true;\n }\n else if (slimDOMOptions.headMetaAuthorship &&\n (lowerIfExists(sn.attributes.name) === 'author' ||\n lowerIfExists(sn.attributes.name) === 'generator' ||\n lowerIfExists(sn.attributes.name) === 'framework' ||\n lowerIfExists(sn.attributes.name) === 'publisher' ||\n lowerIfExists(sn.attributes.name) === 'progid' ||\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n }\n else if (slimDOMOptions.headMetaVerification &&\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n lowerIfExists(sn.attributes.name) === 'verification' ||\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\n let { preserveWhiteSpace = true } = options;\n const _serializedNode = serializeNode(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n });\n if (!_serializedNode) {\n console.warn(n, 'not serialized');\n return null;\n }\n let id;\n if (mirror.hasNode(n)) {\n id = mirror.getId(n);\n }\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n (!preserveWhiteSpace &&\n _serializedNode.type === NodeType$1.Text &&\n !_serializedNode.isStyle &&\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n id = IGNORED_NODE;\n }\n else {\n id = genId();\n }\n const serializedNode = Object.assign(_serializedNode, { id });\n mirror.add(n, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n);\n }\n let recordChild = !skipChild;\n if (serializedNode.type === NodeType$1.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n const shadowRoot = n.shadowRoot;\n if (shadowRoot && isNativeShadowDom(shadowRoot))\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$1.Document ||\n serializedNode.type === NodeType$1.Element) &&\n recordChild) {\n if (slimDOMOptions.headWhitespace &&\n serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'head') {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n };\n for (const childN of Array.from(n.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n if (isElement$1(n) && n.shadowRoot) {\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(n.shadowRoot) &&\n (serializedChildNode.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n if (n.parentNode &&\n isShadowRoot(n.parentNode) &&\n isNativeShadowDom(n.parentNode)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'iframe') {\n onceIframeLoaded(n, () => {\n const iframeDoc = n.contentDocument;\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedIframeNode) {\n onIframeLoad(n, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'link' &&\n serializedNode.attributes.rel === 'stylesheet') {\n onceStylesheetLoaded(n, () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n, options) {\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n }\n : maskAllInputs === false\n ? {}\n : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\n ?\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === 'all',\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true,\n }\n : slimDOM === false\n ? {}\n : slimDOM;\n return serializeNodeWithId(n, {\n doc: n,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false,\n });\n}\n\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\n '\\r\\n' +\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n '\\r\\n' +\n 'or you can use record.mirror to access the mirror instance during recording.';\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === 'map') {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n}\nfunction throttle$1(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function (...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n }\n else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked\n ? d\n : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n },\n });\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === 'function') {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original,\n },\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n }\n catch (_a) {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\n nowTimestamp = () => new Date().getTime();\n}\nfunction getWindowScroll(win) {\n var _a, _b, _c, _d, _e, _f;\n const doc = win.document;\n return {\n left: doc.scrollingElement\n ? doc.scrollingElement.scrollLeft\n : win.pageXOffset !== undefined\n ? win.pageXOffset\n : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollLeft) ||\n ((_b = (_a = doc === null || doc === void 0 ? void 0 : doc.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\n ((_c = doc === null || doc === void 0 ? void 0 : doc.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\n 0,\n top: doc.scrollingElement\n ? doc.scrollingElement.scrollTop\n : win.pageYOffset !== undefined\n ? win.pageYOffset\n : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollTop) ||\n ((_e = (_d = doc === null || doc === void 0 ? void 0 : doc.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\n ((_f = doc === null || doc === void 0 ? void 0 : doc.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\n 0,\n };\n}\nfunction getWindowHeight() {\n return (window.innerHeight ||\n (document.documentElement && document.documentElement.clientHeight) ||\n (document.body && document.body.clientHeight));\n}\nfunction getWindowWidth() {\n return (window.innerWidth ||\n (document.documentElement && document.documentElement.clientWidth) ||\n (document.body && document.body.clientWidth));\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n if (!node) {\n return false;\n }\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n if (!el)\n return false;\n const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n if (!checkAncestors) {\n const isUnblocked = unblockSelector && el.matches(unblockSelector);\n return blockedPredicate(el) && !isUnblocked;\n }\n const blockDistance = distanceToMatch(el, blockedPredicate);\n let unblockDistance = -1;\n if (blockDistance < 0) {\n return false;\n }\n if (unblockSelector) {\n unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\n }\n if (blockDistance > -1 && unblockDistance < 0) {\n return true;\n }\n return blockDistance < unblockDistance;\n}\nfunction isSerialized(n, mirror) {\n return mirror.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror) {\n return mirror.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror.getId(target);\n if (!mirror.has(id)) {\n return true;\n }\n if (target.parentNode &&\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!target.parentNode) {\n return true;\n }\n return isAncestorRemoved(target.parentNode, mirror);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype\n .forEach;\n }\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype\n .forEach;\n }\n if (!Node.prototype.contains) {\n Node.prototype.contains = (...args) => {\n let node = args[0];\n if (!(0 in args)) {\n throw new TypeError('1 argument is required');\n }\n do {\n if (this === node) {\n return true;\n }\n } while ((node = node && node.parentNode));\n return false;\n };\n }\n}\nfunction isSerializedIframe(n, mirror) {\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror) {\n return Boolean(n.nodeName === 'LINK' &&\n n.nodeType === n.ELEMENT_NODE &&\n n.getAttribute &&\n n.getAttribute('rel') === 'stylesheet' &&\n mirror.getMeta(n));\n}\nfunction hasShadowRoot(n) {\n return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\n}\nclass StyleSheetMirror {\n constructor() {\n this.id = 1;\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n }\n getId(stylesheet) {\n var _a;\n return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n add(stylesheet, id) {\n if (this.has(stylesheet))\n return this.getId(stylesheet);\n let newId;\n if (id === undefined) {\n newId = this.id++;\n }\n else\n newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n) {\n var _a, _b;\n let shadowHost = null;\n if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\n n.getRootNode().host)\n shadowHost = n.getRootNode().host;\n return shadowHost;\n}\nfunction getRootShadowHost(n) {\n let rootShadowHost = n;\n let shadowHost;\n while ((shadowHost = getShadowHost(rootShadowHost)))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n const shadowHost = getRootShadowHost(n);\n return doc.contains(shadowHost);\n}\nfunction inDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n return doc.contains(n) || shadowHostInDom(n);\n}\n\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\n\nfunction isNodeInLinkedList(n) {\n return '__ln' in n;\n}\nclass DoubleLinkedList {\n constructor() {\n this.length = 0;\n this.head = null;\n this.tail = null;\n }\n get(position) {\n if (position >= this.length) {\n throw new Error('Position outside of list range');\n }\n let current = this.head;\n for (let index = 0; index < position; index++) {\n current = (current === null || current === void 0 ? void 0 : current.next) || null;\n }\n return current;\n }\n addNode(n) {\n const node = {\n value: n,\n previous: null,\n next: null,\n };\n n.__ln = node;\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\n const current = n.previousSibling.__ln.next;\n node.next = current;\n node.previous = n.previousSibling.__ln;\n n.previousSibling.__ln.next = node;\n if (current) {\n current.previous = node;\n }\n }\n else if (n.nextSibling &&\n isNodeInLinkedList(n.nextSibling) &&\n n.nextSibling.__ln.previous) {\n const current = n.nextSibling.__ln.previous;\n node.previous = current;\n node.next = n.nextSibling.__ln;\n n.nextSibling.__ln.previous = node;\n if (current) {\n current.next = node;\n }\n }\n else {\n if (this.head) {\n this.head.previous = node;\n }\n node.next = this.head;\n this.head = node;\n }\n if (node.next === null) {\n this.tail = node;\n }\n this.length++;\n }\n removeNode(n) {\n const current = n.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n }\n else {\n this.tail = null;\n }\n }\n else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n }\n else {\n this.tail = current.previous;\n }\n }\n if (n.__ln) {\n delete n.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n this.frozen = false;\n this.locked = false;\n this.texts = [];\n this.attributes = [];\n this.removes = [];\n this.mapRemoves = [];\n this.movedMap = {};\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.processMutations = (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n };\n this.emit = () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n) => {\n let ns = n;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n) => {\n if (!n.parentNode || !inDom(n)) {\n return;\n }\n const parentId = isShadowRoot(n.parentNode)\n ? this.mirror.getId(getShadowHost(n))\n : this.mirror.getId(n.parentNode);\n const nextId = getNextId(n);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n);\n }\n const sn = serializeNodeWithId(n, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskAllText: this.maskAllText,\n unblockSelector: this.unblockSelector,\n maskTextClass: this.maskTextClass,\n unmaskTextClass: this.unmaskTextClass,\n maskTextSelector: this.maskTextSelector,\n unmaskTextSelector: this.unmaskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskAttributeFn: this.maskAttributeFn,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n)) {\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n this.iframeManager.attachIframe(iframe, childSn);\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n },\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn,\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n of this.movedSet) {\n if (isParentRemoved(this.removes, n, this.mirror) &&\n !this.movedSet.has(n.parentNode)) {\n continue;\n }\n pushAdd(n);\n }\n for (const n of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n) &&\n !isParentRemoved(this.removes, n, this.mirror)) {\n pushAdd(n);\n }\n else if (isAncestorInSet(this.movedSet, n)) {\n pushAdd(n);\n }\n else {\n this.droppedSet.add(n);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node = null;\n if (candidate) {\n const parentId = this.mirror.getId(candidate.value.parentNode);\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node = candidate;\n }\n }\n if (!node) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(_node.value.parentNode);\n const nextId = getNextId(_node.value);\n if (nextId === -1)\n continue;\n else if (parentId !== -1) {\n node = _node;\n break;\n }\n else {\n const unhandledNode = _node.value;\n if (unhandledNode.parentNode &&\n unhandledNode.parentNode.nodeType ===\n Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = unhandledNode.parentNode\n .host;\n const parentId = this.mirror.getId(shadowHost);\n if (parentId !== -1) {\n node = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node.previous;\n addList.removeNode(node.value);\n pushAdd(node.value);\n }\n const payload = {\n texts: this.texts\n .map((text) => ({\n id: this.mirror.getId(text.node),\n value: text.value,\n }))\n .filter((text) => !addedIds.has(text.id))\n .filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes\n .map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === 'string') {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\n attributes.style.split('var(').length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes: attributes,\n };\n })\n .filter((attribute) => !addedIds.has(attribute.id))\n .filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds,\n };\n if (!payload.texts.length &&\n !payload.attributes.length &&\n !payload.removes.length &&\n !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.removes = [];\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n };\n this.processMutation = (m) => {\n if (isIgnored(m.target, this.mirror)) {\n return;\n }\n let unattachedDoc;\n try {\n unattachedDoc = document.implementation.createHTMLDocument();\n }\n catch (e) {\n unattachedDoc = this.doc;\n }\n switch (m.type) {\n case 'characterData': {\n const value = m.target.textContent;\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\n value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\n ? this.maskTextFn\n ? this.maskTextFn(value)\n : value.replace(/[\\S]/g, '*')\n : value,\n node: m.target,\n });\n }\n break;\n }\n case 'attributes': {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === 'value') {\n const type = getInputType(target);\n const tagName = target.tagName;\n value = getInputValue(target, tagName, type);\n const isInputMasked = shouldMaskInput({\n maskInputOptions: this.maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\n value = maskInputValue({\n isMasked: forceMask,\n element: target,\n value,\n maskInputFn: this.maskInputFn,\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n value === m.oldValue) {\n return;\n }\n let item = this.attributes.find((a) => a.node === m.target);\n if (target.tagName === 'IFRAME' &&\n attributeName === 'src' &&\n !this.keepIframeSrcFn(value)) {\n if (!target.contentDocument) {\n attributeName = 'rr_src';\n }\n else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {},\n };\n this.attributes.push(item);\n }\n if (attributeName === 'type' &&\n target.tagName === 'INPUT' &&\n (m.oldValue || '').toLowerCase() === 'password') {\n target.setAttribute('data-rr-is-password', 'true');\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\n if (attributeName === 'style') {\n const old = unattachedDoc.createElement('span');\n if (m.oldValue) {\n old.setAttribute('style', m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) ||\n newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === '') {\n item.styleDiff[pname] = newValue;\n }\n else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n }\n else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === '') {\n item.styleDiff[pname] = false;\n }\n }\n }\n }\n break;\n }\n case 'childList': {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\n return;\n }\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\n m.removedNodes.forEach((n) => {\n const nodeId = this.mirror.getId(n);\n const parentId = isShadowRoot(m.target)\n ? this.mirror.getId(m.target.host)\n : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n isIgnored(n, this.mirror) ||\n !isSerialized(n, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n)) {\n deepDelete(this.addedSet, n);\n this.droppedSet.add(n);\n }\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, this.mirror)) ;\n else if (this.movedSet.has(n) &&\n this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n);\n }\n else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\n ? true\n : undefined,\n });\n }\n this.mapRemoves.push(n);\n });\n break;\n }\n }\n };\n this.genAdds = (n, target) => {\n if (this.processedNodeManager.inOtherBuffer(n, this))\n return;\n if (this.addedSet.has(n) || this.movedSet.has(n))\n return;\n if (this.mirror.hasNode(n)) {\n if (isIgnored(n, this.mirror)) {\n return;\n }\n this.movedSet.add(n);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\n }\n }\n else {\n this.addedSet.add(n);\n this.droppedSet.delete(n);\n }\n if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n n.childNodes.forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n)) {\n n.shadowRoot.childNodes.forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n);\n });\n }\n }\n };\n }\n init(options) {\n [\n 'mutationCb',\n 'blockClass',\n 'blockSelector',\n 'unblockSelector',\n 'maskAllText',\n 'maskTextClass',\n 'unmaskTextClass',\n 'maskTextSelector',\n 'unmaskTextSelector',\n 'inlineStylesheet',\n 'maskInputOptions',\n 'maskAttributeFn',\n 'maskTextFn',\n 'maskInputFn',\n 'keepIframeSrcFn',\n 'recordCanvas',\n 'inlineImages',\n 'slimDOMOptions',\n 'dataURLOptions',\n 'doc',\n 'mirror',\n 'iframeManager',\n 'stylesheetManager',\n 'shadowDomManager',\n 'canvasManager',\n 'processedNodeManager',\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n) {\n addsSet.delete(n);\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n, mirror) {\n if (removes.length === 0)\n return false;\n return _isParentRemoved(removes, n, mirror);\n}\nfunction _isParentRemoved(removes, n, mirror) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n const parentId = mirror.getId(parentNode);\n if (removes.some((r) => r.id === parentId)) {\n return true;\n }\n return _isParentRemoved(removes, parentNode, mirror);\n}\nfunction isAncestorInSet(set, n) {\n if (set.size === 0)\n return false;\n return _isAncestorInSet(set, n);\n}\nfunction _isAncestorInSet(set, n) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n if (set.has(parentNode)) {\n return true;\n }\n return _isAncestorInSet(set, parentNode);\n}\n\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = undefined;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = ((...rest) => {\n try {\n return cb(...rest);\n }\n catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return () => {\n };\n }\n throw error;\n }\n });\n return rrwebWrapped;\n};\n\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if ('composedPath' in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n }\n else if ('path' in event && event.path.length) {\n return event.path[0];\n }\n }\n catch (_a) {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n var _a, _b;\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n let mutationObserverCtor = window.MutationObserver ||\n window.__rrMutationObserver;\n const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\n if (angularZoneSymbol &&\n window[angularZoneSymbol]) {\n mutationObserverCtor = window[angularZoneSymbol];\n }\n const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\n if (options.onMutation && options.onMutation(mutations) === false) {\n return;\n }\n mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n }));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n });\n return observer;\n}\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\n ? sampling.mousemoveCallback\n : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle$1(callbackWrapper((source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt)\n ? evt.changedTouches[0]\n : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror.getId(target),\n timeOffset: nowTimestamp() - timeBaseline,\n });\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\n ? IncrementalSource.Drag\n : evt instanceof MouseEvent\n ? IncrementalSource.MouseMove\n : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false,\n }));\n const handlers = [\n on('mousemove', updatePosition, doc),\n on('touchmove', updatePosition, doc),\n on('drag', updatePosition, doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true ||\n sampling.mouseInteraction === undefined\n ? {}\n : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if ('pointerType' in event) {\n switch (event.pointerType) {\n case 'mouse':\n pointerType = PointerTypes.Mouse;\n break;\n case 'touch':\n pointerType = PointerTypes.Touch;\n break;\n case 'pen':\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = 'TouchStart';\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = 'TouchEnd';\n }\n }\n else if (pointerType === PointerTypes.Pen) ;\n }\n else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if ((thisEventKey.startsWith('Touch') &&\n pointerType === PointerTypes.Touch) ||\n (thisEventKey.startsWith('Mouse') &&\n pointerType === PointerTypes.Mouse)) {\n pointerType = null;\n }\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e) {\n return;\n }\n const id = mirror.getId(target);\n const { clientX, clientY } = e;\n callbackWrapper(mouseInteractionCb)(Object.assign({ type: MouseInteractions[thisEventKey], id, x: clientX, y: clientY }, (pointerType !== null && { pointerType })));\n };\n };\n Object.keys(MouseInteractions)\n .filter((key) => Number.isNaN(Number(key)) &&\n !key.endsWith('_Departed') &&\n disableMap[key] !== false)\n .forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace('mouse', 'pointer');\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const id = mirror.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top,\n });\n }\n else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop,\n });\n }\n }), sampling.scroll || 100));\n return on('scroll', updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(throttle$1(callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height),\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on('resize', updateDimension, win);\n}\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst lastInputValueMap = new WeakMap();\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && toUpperCase(target.tagName);\n if (tagName === 'OPTION')\n target = target.parentElement;\n if (!target ||\n !tagName ||\n INPUT_TAGS.indexOf(tagName) < 0 ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const el = target;\n if (el.classList.contains(ignoreClass) ||\n (ignoreSelector && el.matches(ignoreSelector))) {\n return;\n }\n const type = getInputType(target);\n let text = getInputValue(el, tagName, type);\n let isChecked = false;\n const isInputMasked = shouldMaskInput({\n maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\n if (type === 'radio' || type === 'checkbox') {\n isChecked = target.checked;\n }\n text = maskInputValue({\n isMasked: forceMask,\n element: target,\n value: text,\n maskInputFn,\n });\n cbWithDedup(target, userTriggeredOnInput\n ? { text, isChecked, userTriggered }\n : { text, isChecked });\n const name = target.name;\n if (type === 'radio' && name && isChecked) {\n doc\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\n .forEach((el) => {\n if (el !== target) {\n const text = maskInputValue({\n isMasked: forceMask,\n element: el,\n value: getInputValue(el, tagName, type),\n maskInputFn,\n });\n cbWithDedup(el, userTriggeredOnInput\n ? { text, isChecked: !isChecked, userTriggered: false }\n : { text, isChecked: !isChecked });\n }\n });\n }\n }\n function cbWithDedup(target, v) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue ||\n lastInputValue.text !== v.text ||\n lastInputValue.isChecked !== v.isChecked) {\n lastInputValueMap.set(target, v);\n const id = mirror.getId(target);\n callbackWrapper(inputCb)(Object.assign(Object.assign({}, v), { id }));\n }\n }\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, 'value'],\n [currentWindow.HTMLInputElement.prototype, 'checked'],\n [currentWindow.HTMLSelectElement.prototype, 'value'],\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false,\n });\n },\n }, false, currentWindow)));\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule) {\n const positions = [];\n function recurse(childRule, pos) {\n if ((hasNestedCSSRule('CSSGroupingRule') &&\n childRule.parentRule instanceof CSSGroupingRule) ||\n (hasNestedCSSRule('CSSMediaRule') &&\n childRule.parentRule instanceof CSSMediaRule) ||\n (hasNestedCSSRule('CSSSupportsRule') &&\n childRule.parentRule instanceof CSSSupportsRule) ||\n (hasNestedCSSRule('CSSConditionRule') &&\n childRule.parentRule instanceof CSSConditionRule)) {\n const rules = Array.from(childRule.parentRule.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n else if (childRule.parentStyleSheet) {\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n return pos;\n }\n return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\n let id, styleId;\n if (!sheet)\n return {};\n if (sheet.ownerNode)\n id = mirror.getId(sheet.ownerNode);\n else\n styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id,\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule, index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n }\n else {\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n insertRule: type.prototype.insertRule,\n deleteRule: type.prototype.deleteRule,\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index || 0,\n ],\n },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index] },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\n var _a, _b, _c;\n let hostId = null;\n if (host.nodeName === '#document')\n hostId = mirror.getId(host);\n else\n hostId = mirror.getId(host.host);\n const patchTarget = host.nodeName === '#document'\n ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\n : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\n const originalPropertyDescriptor = (patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype)\n ? Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets')\n : undefined;\n if (hostId === null ||\n hostId === -1 ||\n !patchTarget ||\n !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n var _a;\n return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\n },\n set(sheets) {\n var _a;\n const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n }\n catch (e) {\n }\n }\n return result;\n },\n });\n return callbackWrapper(() => {\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: originalPropertyDescriptor.get,\n set: originalPropertyDescriptor.set,\n });\n });\n}\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n var _a;\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n var _a;\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\n const handler = callbackWrapper((type) => throttle$1(callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate } = target;\n mediaInteractionCb({\n type,\n id: mirror.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n });\n }), sampling.media || 500));\n const handlers = [\n on('play', handler(0), doc),\n on('pause', handler(1), doc),\n on('seeked', handler(2), doc),\n on('volumechange', handler(3), doc),\n on('ratechange', handler(4), doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== 'string',\n descriptors,\n fontSource: typeof source === 'string'\n ? source\n : JSON.stringify(Array.from(new Uint8Array(source))),\n });\n return fontFace;\n };\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\n return function (fontFace) {\n setTimeout(callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [fontFace]);\n };\n });\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\n return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i = 0; i < count; i++) {\n const range = selection.getRangeAt(i);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\n isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\n if (blocked)\n continue;\n ranges.push({\n start: mirror.getId(startContainer),\n startOffset,\n end: mirror.getId(endContainer),\n endOffset,\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on('selectionchange', updateSelection);\n}\nfunction initCustomElementObserver({ doc, customElementCb, }) {\n const win = doc.defaultView;\n if (!win || !win.customElements) {\n return () => {\n };\n }\n const restoreHandler = patch(win.customElements, 'define', function (original) {\n return function (name, constructor, options) {\n try {\n customElementCb({\n define: {\n name,\n },\n });\n }\n catch (e) {\n }\n return original.apply(this, [name, constructor, options]);\n };\n });\n return restoreHandler;\n}\nfunction initObservers(o, _hooks = {}) {\n const currentWindow = o.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n const mutationObserver = initMutationObserver(o, o.doc);\n const mousemoveHandler = initMoveObserver(o);\n const mouseInteractionHandler = initMouseInteractionObserver(o);\n const scrollHandler = initScrollObserver(o);\n const viewportResizeHandler = initViewportResizeObserver(o, {\n win: currentWindow,\n });\n const inputHandler = initInputObserver(o);\n const mediaInteractionHandler = initMediaInteractionObserver(o);\n const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n const styleDeclarationObserver = initStyleDeclarationObserver(o, {\n win: currentWindow,\n });\n const fontObserver = o.collectFonts\n ? initFontObserver(o)\n : () => {\n };\n const selectionObserver = initSelectionObserver(o);\n const customElementObserver = initCustomElementObserver(o);\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== 'undefined';\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== 'undefined' &&\n window[prop].prototype &&\n 'insertRule' in window[prop].prototype &&\n 'deleteRule' in window[prop].prototype);\n}\n\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n this.generateIdFn = generateIdFn;\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== 'number')\n return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId)\n return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\n\nclass IframeManagerNoop {\n constructor() {\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n }\n addIframe() {\n }\n addLoadListener() {\n }\n attachIframe() {\n }\n}\nclass IframeManager {\n constructor(options) {\n this.iframes = new WeakMap();\n this.crossOriginIframeMap = new WeakMap();\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n var _a;\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n });\n (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\n if (iframeEl.contentDocument &&\n iframeEl.contentDocument.adoptedStyleSheets &&\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow)\n return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl)\n return;\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent)\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n }\n transformCrossOriginEvent(iframeEl, e) {\n var _a;\n switch (e.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e.data.node, iframeEl);\n const rootId = e.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e.data.node, rootId);\n return {\n timestamp: e.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e.data.node,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n },\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e;\n }\n case EventType.Custom: {\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\n return e;\n }\n case EventType.IncrementalSnapshot: {\n switch (e.data.source) {\n case IncrementalSource.Mutation: {\n e.data.adds.forEach((n) => {\n this.replaceIds(n, iframeEl, [\n 'parentId',\n 'nextId',\n 'previousId',\n ]);\n this.replaceIdOnNode(n.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n.node, rootId);\n });\n e.data.removes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\n });\n e.data.attributes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n e.data.texts.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e.data, iframeEl, ['id']);\n return e;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\n return e;\n }\n case IncrementalSource.Font: {\n return e;\n }\n case IncrementalSource.Selection: {\n e.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, ['start', 'end']);\n });\n return e;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\n (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\n this.replaceStyleIds(style, iframeEl, ['styleId']);\n });\n return e;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\n continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n }\n else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node, iframeEl) {\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node, rootId) {\n if (node.type !== NodeType$1.Document && !node.rootId)\n node.rootId = rootId;\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\n\nclass ShadowDomManagerNoop {\n init() {\n }\n addShadowRoot() {\n }\n observeAttachShadow() {\n }\n reset() {\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n this.shadowDoms = new WeakSet();\n this.restoreHandlers = [];\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot, doc) {\n if (!isNativeShadowDom(shadowRoot))\n return;\n if (this.shadowDoms.has(shadowRoot))\n return;\n this.shadowDoms.add(shadowRoot);\n const observer = initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror })));\n setTimeout(() => {\n if (shadowRoot.adoptedStyleSheets &&\n shadowRoot.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager,\n }, shadowRoot));\n }, 0);\n }\n observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\n return;\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n }\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\n return function (option) {\n const shadowRoot = original.call(this, option);\n if (this.shadowRoot && inDom(this))\n manager.addShadowRoot(this.shadowRoot, doc);\n return shadowRoot;\n };\n }));\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n }\n catch (e) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = new WeakSet();\n }\n}\n\nclass CanvasManagerNoop {\n reset() {\n }\n freeze() {\n }\n unfreeze() {\n }\n lock() {\n }\n unlock() {\n }\n}\n\nclass StylesheetManager {\n constructor(options) {\n this.trackedLinkElements = new WeakSet();\n this.styleMirror = new StyleSheetMirror();\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if ('_cssText' in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn\n .attributes,\n },\n ],\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl))\n return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0)\n return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: [],\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\n rule: stringifyRule(r),\n index,\n })),\n });\n }\n else\n styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0)\n adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = new WeakSet();\n }\n trackStylesheetInLinkElement(linkEl) {\n }\n}\n\nclass ProcessedNodeManager {\n constructor() {\n this.nodeMap = new WeakMap();\n this.loop = true;\n this.periodicallyClear();\n }\n periodicallyClear() {\n requestAnimationFrame(() => {\n this.clear();\n if (this.loop)\n this.periodicallyClear();\n });\n }\n inOtherBuffer(node, thisBuffer) {\n const buffers = this.nodeMap.get(node);\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\n }\n add(node, buffer) {\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\n }\n clear() {\n this.nodeMap = new WeakMap();\n }\n destroy() {\n this.loop = false;\n }\n}\n\nfunction wrapEvent(e) {\n const eWithTime = e;\n eWithTime.timestamp = nowTimestamp();\n return eWithTime;\n}\nlet _takeFullSnapshot;\nconst mirror = createMirror();\nfunction record(options = {}) {\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\n ? options.recordAfter\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\n registerErrorHandler(errorHandler);\n const inEmittingFrame = recordCrossOriginIframes\n ? window.parent === window\n : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n }\n catch (e) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error('emit function is required');\n }\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n radio: true,\n checkbox: true,\n }\n : _maskInputOptions !== undefined\n ? _maskInputOptions\n : {};\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\n ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n headMetaAuthorship: _slimDOMOptions === 'all',\n headMetaDescKeywords: _slimDOMOptions === 'all',\n }\n : _slimDOMOptions\n ? _slimDOMOptions\n : {};\n polyfill();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e) => {\n if (packFn &&\n !passEmitsToParent) {\n e = packFn(e);\n }\n return e;\n };\n const wrappedEmit = (e, isCheckout) => {\n var _a;\n if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\n e.type !== EventType.FullSnapshot &&\n !(e.type === EventType.IncrementalSnapshot &&\n e.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\n }\n else if (passEmitsToParent) {\n const message = {\n type: 'rrweb',\n event: eventProcessor(e),\n origin: window.location.origin,\n isCheckout,\n };\n window.parent.postMessage(message, '*');\n }\n if (e.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e;\n incrementalSnapshotCount = 0;\n }\n else if (e.type === EventType.IncrementalSnapshot) {\n if (e.data.source === IncrementalSource.Mutation &&\n e.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms &&\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.Mutation }, m),\n }));\n };\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.Scroll }, p),\n }));\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\n }));\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\n }));\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\n });\n const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\n ? new IframeManagerNoop()\n : new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit,\n });\n const processedNodeManager = new ProcessedNodeManager();\n const canvasManager = getCanvasManager\n ? getCanvasManager({\n recordCanvas,\n blockClass,\n blockSelector,\n unblockSelector,\n sampling: sampling['canvas'],\n dataURLOptions,\n })\n : new CanvasManagerNoop();\n const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\n __RRWEB_EXCLUDE_SHADOW_DOM__\n ? new ShadowDomManagerNoop()\n : new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n onMutation,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager,\n },\n mirror,\n });\n const takeFullSnapshot = (isCheckout = false) => {\n wrappedEmit(wrapEvent({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight(),\n },\n }), isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n) => {\n if (isSerializedIframe(n, mirror)) {\n iframeManager.addIframe(n);\n }\n if (isSerializedStylesheet(n, mirror)) {\n stylesheetManager.trackLinkElement(n);\n }\n if (hasShadowRoot(n)) {\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn,\n });\n if (!node) {\n return console.warn('Failed to snapshot the document');\n }\n wrappedEmit(wrapEvent({\n type: EventType.FullSnapshot,\n data: {\n node,\n initialOffset: getWindowScroll(window),\n },\n }), isCheckout);\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n _takeFullSnapshot = takeFullSnapshot;\n try {\n const handlers = [];\n const observe = (doc) => {\n return callbackWrapper(initObservers)({\n onMutation,\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions,\n },\n })),\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\n })),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\n })),\n inputCb: (v) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.Input }, v),\n })),\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\n })),\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\n })),\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\n })),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.Font }, p),\n })),\n selectionCb: (p) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.Selection }, p),\n }));\n },\n customElementCb: (c) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: Object.assign({ source: IncrementalSource.CustomElement }, c),\n }));\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n unblockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: [],\n }, {});\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n }\n catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot();\n handlers.push(observe(document));\n };\n if (document.readyState === 'interactive' ||\n document.readyState === 'complete') {\n init();\n }\n else {\n handlers.push(on('DOMContentLoaded', () => {\n wrappedEmit(wrapEvent({\n type: EventType.DomContentLoaded,\n data: {},\n }));\n if (recordAfter === 'DOMContentLoaded')\n init();\n }));\n handlers.push(on('load', () => {\n wrappedEmit(wrapEvent({\n type: EventType.Load,\n data: {},\n }));\n if (recordAfter === 'load')\n init();\n }, window));\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n _takeFullSnapshot = undefined;\n unregisterErrorHandler();\n };\n }\n catch (error) {\n console.warn(error);\n }\n}\nfunction takeFullSnapshot(isCheckout) {\n if (!_takeFullSnapshot) {\n throw new Error('please take full snapshot after start recording');\n }\n _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\n/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nfunction timestampToMs(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nfunction timestampToS(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Add a breadcrumb event to replay.\n */\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n if (breadcrumb.category === 'sentry.transaction') {\n return;\n }\n\n if (['ui.click', 'ui.input'].includes(breadcrumb.category )) {\n replay.triggerUserActivity();\n } else {\n replay.checkAndHandleExpiredSession();\n }\n\n replay.addUpdate(() => {\n void replay.throttledAddEvent({\n type: EventType.Custom,\n // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n // but maybe we should just keep them as milliseconds\n timestamp: (breadcrumb.timestamp || 0) * 1000,\n data: {\n tag: 'breadcrumb',\n // normalize to max. 10 depth and 1_000 properties per object\n payload: normalize(breadcrumb, 10, 1000),\n },\n });\n\n // Do not flush after console log messages\n return breadcrumb.category === 'console';\n });\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nfunction getClosestInteractive(element) {\n const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in ,\n * The target will be the image, not the button, which we don't want here\n */\nfunction getClickTargetNode(event) {\n const target = getTargetNode(event);\n\n if (!target || !(target instanceof Element)) {\n return target;\n }\n\n return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nfunction getTargetNode(event) {\n if (isEventWithTarget(event)) {\n return event.target ;\n }\n\n return event;\n}\n\nfunction isEventWithTarget(event) {\n return typeof event === 'object' && !!event && 'target' in event;\n}\n\nlet handlers;\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nfunction onWindowOpen(cb) {\n // Ensure to only register this once\n if (!handlers) {\n handlers = [];\n monkeyPatchWindowOpen();\n }\n\n handlers.push(cb);\n\n return () => {\n const pos = handlers ? handlers.indexOf(cb) : -1;\n if (pos > -1) {\n (handlers ).splice(pos, 1);\n }\n };\n}\n\nfunction monkeyPatchWindowOpen() {\n fill(WINDOW, 'open', function (originalWindowOpen) {\n return function (...args) {\n if (handlers) {\n try {\n handlers.forEach(handler => handler());\n } catch (e) {\n // ignore errors in here\n }\n }\n\n return originalWindowOpen.apply(WINDOW, args);\n };\n });\n}\n\n/** Handle a click. */\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nclass ClickDetector {\n // protected for testing\n\n constructor(\n replay,\n slowClickConfig,\n // Just for easier testing\n _addBreadcrumbEvent = addBreadcrumbEvent,\n ) {\n this._lastMutation = 0;\n this._lastScroll = 0;\n this._clicks = [];\n\n // We want everything in s, but options are in ms\n this._timeout = slowClickConfig.timeout / 1000;\n this._threshold = slowClickConfig.threshold / 1000;\n this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n this._replay = replay;\n this._ignoreSelector = slowClickConfig.ignoreSelector;\n this._addBreadcrumbEvent = _addBreadcrumbEvent;\n }\n\n /** Register click detection handlers on mutation or scroll. */\n addListeners() {\n const cleanupWindowOpen = onWindowOpen(() => {\n // Treat window.open as mutation\n this._lastMutation = nowInSeconds();\n });\n\n this._teardown = () => {\n cleanupWindowOpen();\n\n this._clicks = [];\n this._lastMutation = 0;\n this._lastScroll = 0;\n };\n }\n\n /** Clean up listeners. */\n removeListeners() {\n if (this._teardown) {\n this._teardown();\n }\n\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n }\n\n /** @inheritDoc */\n handleClick(breadcrumb, node) {\n if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n return;\n }\n\n const newClick = {\n timestamp: timestampToS(breadcrumb.timestamp),\n clickBreadcrumb: breadcrumb,\n // Set this to 0 so we know it originates from the click breadcrumb\n clickCount: 0,\n node,\n };\n\n // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n if (\n this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n ) {\n return;\n }\n\n this._clicks.push(newClick);\n\n // If this is the first new click, set a timeout to check for multi clicks\n if (this._clicks.length === 1) {\n this._scheduleCheckClicks();\n }\n }\n\n /** @inheritDoc */\n registerMutation(timestamp = Date.now()) {\n this._lastMutation = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerScroll(timestamp = Date.now()) {\n this._lastScroll = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerClick(element) {\n const node = getClosestInteractive(element);\n this._handleMultiClick(node );\n }\n\n /** Count multiple clicks on elements. */\n _handleMultiClick(node) {\n this._getClicks(node).forEach(click => {\n click.clickCount++;\n });\n }\n\n /** Get all pending clicks for a given node. */\n _getClicks(node) {\n return this._clicks.filter(click => click.node === node);\n }\n\n /** Check the clicks that happened. */\n _checkClicks() {\n const timedOutClicks = [];\n\n const now = nowInSeconds();\n\n this._clicks.forEach(click => {\n if (!click.mutationAfter && this._lastMutation) {\n click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n }\n if (!click.scrollAfter && this._lastScroll) {\n click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n }\n\n // All of these are in seconds!\n if (click.timestamp + this._timeout <= now) {\n timedOutClicks.push(click);\n }\n });\n\n // Remove \"old\" clicks\n for (const click of timedOutClicks) {\n const pos = this._clicks.indexOf(click);\n\n if (pos > -1) {\n this._generateBreadcrumbs(click);\n this._clicks.splice(pos, 1);\n }\n }\n\n // Trigger new check, unless no clicks left\n if (this._clicks.length) {\n this._scheduleCheckClicks();\n }\n }\n\n /** Generate matching breadcrumb(s) for the click. */\n _generateBreadcrumbs(click) {\n const replay = this._replay;\n const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n const isSlowClick = !hadScroll && !hadMutation;\n const { clickCount, clickBreadcrumb } = click;\n\n // Slow click\n if (isSlowClick) {\n // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n // If not, it means we just timed out without scroll & mutation\n const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.slowClickDetected',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n timeAfterClickMs,\n endReason,\n // If clickCount === 0, it means multiClick was not correctly captured here\n // - we still want to send 1 in this case\n clickCount: clickCount || 1,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n return;\n }\n\n // Multi click\n if (clickCount > 1) {\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.multiClick',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n clickCount,\n metric: true,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n }\n }\n\n /** Schedule to check current clicks. */\n _scheduleCheckClicks() {\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n\n this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nfunction ignoreElement(node, ignoreSelector) {\n if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n return true;\n }\n\n // If tag, we only want to consider input[type='submit'] & input[type='button']\n if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n return true;\n }\n\n // If tag, detect special variants that may not lead to an action\n // If target !== _self, we may open the link somewhere else, which would lead to no action\n // Also, when downloading a file, we may not leave the page, but still not trigger an action\n if (\n node.tagName === 'A' &&\n (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n ) {\n return true;\n }\n\n if (ignoreSelector && node.matches(ignoreSelector)) {\n return true;\n }\n\n return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb) {\n return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds() {\n return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n try {\n // note: We only consider incremental snapshots here\n // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n if (!isIncrementalEvent(event)) {\n return;\n }\n\n const { source } = event.data;\n if (source === IncrementalSource.Mutation) {\n clickDetector.registerMutation(event.timestamp);\n }\n\n if (source === IncrementalSource.Scroll) {\n clickDetector.registerScroll(event.timestamp);\n }\n\n if (isIncrementalMouseInteraction(event)) {\n const { type, id } = event.data;\n const node = record.mirror.getNode(id);\n\n if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n clickDetector.registerClick(node);\n }\n }\n } catch (e) {\n // ignore errors here, e.g. if accessing something that does not exist\n }\n}\n\nfunction isIncrementalEvent(event) {\n return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n event,\n) {\n return event.data.source === IncrementalSource.MouseInteraction;\n}\n\n/**\n * Create a breadcrumb for a replay.\n */\nfunction createBreadcrumb(\n breadcrumb,\n) {\n return {\n timestamp: Date.now() / 1000,\n type: 'default',\n ...breadcrumb,\n };\n}\n\nvar NodeType;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\n// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n 'id',\n 'class',\n 'aria-label',\n 'role',\n 'name',\n 'alt',\n 'title',\n 'data-test-id',\n 'data-testid',\n 'disabled',\n 'aria-disabled',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nfunction getAttributesToRecord(attributes) {\n const obj = {};\n for (const key in attributes) {\n if (ATTRIBUTES_TO_RECORD.has(key)) {\n let normalizedKey = key;\n\n if (key === 'data-testid' || key === 'data-test-id') {\n normalizedKey = 'testId';\n }\n\n obj[normalizedKey] = attributes[key];\n }\n }\n\n return obj;\n}\n\nconst handleDomListener = (\n replay,\n) => {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleDom(handlerData);\n\n if (!result) {\n return;\n }\n\n const isClick = handlerData.name === 'click';\n const event = isClick && (handlerData.event );\n // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n if (\n isClick &&\n replay.clickDetector &&\n event &&\n !event.altKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n handleClick(\n replay.clickDetector,\n result ,\n getClickTargetNode(handlerData.event) ,\n );\n }\n\n addBreadcrumbEvent(replay, result);\n };\n};\n\n/** Get the base DOM breadcrumb. */\nfunction getBaseDomBreadcrumb(target, message) {\n const nodeId = record.mirror.getId(target);\n const node = nodeId && record.mirror.getNode(nodeId);\n const meta = node && record.mirror.getMeta(node);\n const element = meta && isElement(meta) ? meta : null;\n\n return {\n message,\n data: element\n ? {\n nodeId,\n node: {\n id: nodeId,\n tagName: element.tagName,\n textContent: Array.from(element.childNodes)\n .map((node) => node.type === NodeType.Text && node.textContent)\n .filter(Boolean) // filter out empty values\n .map(text => (text ).trim())\n .join(''),\n attributes: getAttributesToRecord(element.attributes),\n },\n }\n : {},\n };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nfunction handleDom(handlerData) {\n const { target, message } = getDomTarget(handlerData);\n\n return createBreadcrumb({\n category: `ui.${handlerData.name}`,\n ...getBaseDomBreadcrumb(target, message),\n });\n}\n\nfunction getDomTarget(handlerData) {\n const isClick = handlerData.name === 'click';\n\n let message;\n let target = null;\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = isClick ? getClickTargetNode(handlerData.event) : getTargetNode(handlerData.event);\n message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n } catch (e) {\n message = '';\n }\n\n return { target, message };\n}\n\nfunction isElement(node) {\n return node.type === NodeType.Element;\n}\n\n/** Handle keyboard events & create breadcrumbs. */\nfunction handleKeyboardEvent(replay, event) {\n if (!replay.isEnabled()) {\n return;\n }\n\n // Update user activity, but do not restart recording as it can create\n // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n // session with a single \"keydown\" breadcrumb is created)\n replay.updateUserActivity();\n\n const breadcrumb = getKeyboardBreadcrumb(event);\n\n if (!breadcrumb) {\n return;\n }\n\n addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nfunction getKeyboardBreadcrumb(event) {\n const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n // never capture for input fields\n if (!target || isInputElement(target ) || !key) {\n return null;\n }\n\n // Note: We do not consider shift here, as that means \"uppercase\"\n const hasModifierKey = metaKey || ctrlKey || altKey;\n const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n // Do not capture breadcrumb if only a word key is pressed\n // This could leak e.g. user input\n if (!hasModifierKey && isCharacterKey) {\n return null;\n }\n\n const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n const baseBreadcrumb = getBaseDomBreadcrumb(target , message);\n\n return createBreadcrumb({\n category: 'ui.keyDown',\n message,\n data: {\n ...baseBreadcrumb.data,\n metaKey,\n shiftKey,\n ctrlKey,\n altKey,\n key,\n },\n });\n}\n\nfunction isInputElement(target) {\n return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES\n\n = {\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n resource: createResourceEntry,\n paint: createPaintEntry,\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n navigation: createNavigationEntry,\n};\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nfunction createPerformanceEntries(\n entries,\n) {\n return entries.map(createPerformanceEntry).filter(Boolean) ;\n}\n\nfunction createPerformanceEntry(entry) {\n if (!ENTRY_TYPES[entry.entryType]) {\n return null;\n }\n\n return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time) {\n // browserPerformanceTimeOrigin can be undefined if `performance` or\n // `performance.now` doesn't exist, but this is already checked by this integration\n return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry) {\n const { duration, entryType, name, startTime } = entry;\n\n const start = getAbsoluteTime(startTime);\n return {\n type: entryType,\n name,\n start,\n end: start + duration,\n data: undefined,\n };\n}\n\nfunction createNavigationEntry(entry) {\n const {\n entryType,\n name,\n decodedBodySize,\n duration,\n domComplete,\n encodedBodySize,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n domInteractive,\n loadEventStart,\n loadEventEnd,\n redirectCount,\n startTime,\n transferSize,\n type,\n } = entry;\n\n // Ignore entries with no duration, they do not seem to be useful and cause dupes\n if (duration === 0) {\n return null;\n }\n\n return {\n type: `${entryType}.${type}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(domComplete),\n name,\n data: {\n size: transferSize,\n decodedBodySize,\n encodedBodySize,\n duration,\n domInteractive,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n loadEventStart,\n loadEventEnd,\n domComplete,\n redirectCount,\n },\n };\n}\n\nfunction createResourceEntry(\n entry,\n) {\n const {\n entryType,\n initiatorType,\n name,\n responseEnd,\n startTime,\n decodedBodySize,\n encodedBodySize,\n responseStatus,\n transferSize,\n } = entry;\n\n // Core SDK handles these\n if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n return null;\n }\n\n return {\n type: `${entryType}.${initiatorType}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(responseEnd),\n name,\n data: {\n size: transferSize,\n statusCode: responseStatus,\n decodedBodySize,\n encodedBodySize,\n },\n };\n}\n\n/**\n * Add a LCP event to the replay based on an LCP metric.\n */\nfunction getLargestContentfulPaint(metric\n\n) {\n const entries = metric.entries;\n const lastEntry = entries[entries.length - 1] ;\n const element = lastEntry ? lastEntry.element : undefined;\n\n const value = metric.value;\n\n const end = getAbsoluteTime(value);\n\n const data = {\n type: 'largest-contentful-paint',\n name: 'largest-contentful-paint',\n start: end,\n end,\n data: {\n value,\n size: value,\n nodeId: element ? record.mirror.getId(element) : undefined,\n },\n };\n\n return data;\n}\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nfunction setupPerformanceObserver(replay) {\n function addPerformanceEntry(entry) {\n // It is possible for entries to come up multiple times\n if (!replay.performanceEntries.includes(entry)) {\n replay.performanceEntries.push(entry);\n }\n }\n\n function onEntries({ entries }) {\n entries.forEach(addPerformanceEntry);\n }\n\n const clearCallbacks = [];\n\n (['navigation', 'paint', 'resource'] ).forEach(type => {\n clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n });\n\n clearCallbacks.push(\n addLcpInstrumentationHandler(({ metric }) => {\n replay.replayPerformanceEntries.push(getLargestContentfulPaint(metric));\n }),\n );\n\n // A callback to cleanup all handlers\n return () => {\n clearCallbacks.forEach(clearCallback => clearCallback());\n };\n}\n\nconst r = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a>h]=l}else for(o=new n(i),a=0;a>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;ad&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<e))break;p+=m-(1<>=y;p>0;){var M=o[a].s;g[M]=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;Pnt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,a=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),s=a.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(a,n),O(a,s-8,r.d()),O(a,s-4,e),a}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(r){for(var e=new t(n.length),i=0;i>1)),o=0,f=function(t){s[o++]=t};for(i=0;is.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(let r=0,e=t.length;r{this._deflatedData.push(t)},this.stream=new J(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&\"function\"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e(){const e=new Blob([r]);return URL.createObjectURL(e)}\n\n/**\n * Log a message in debug mode, and add a breadcrumb when _experiment.traceInternals is enabled.\n */\nfunction logInfo(message, shouldAddBreadcrumb) {\n if (!(typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n return;\n }\n\n logger.info(message);\n\n if (shouldAddBreadcrumb) {\n addBreadcrumb(message);\n }\n}\n\n/**\n * Log a message, and add a breadcrumb in the next tick.\n * This is necessary when the breadcrumb may be added before the replay is initialized.\n */\nfunction logInfoNextTick(message, shouldAddBreadcrumb) {\n if (!(typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n return;\n }\n\n logger.info(message);\n\n if (shouldAddBreadcrumb) {\n // Wait a tick here to avoid race conditions for some initial logs\n // which may be added before replay is initialized\n setTimeout(() => {\n addBreadcrumb(message);\n }, 0);\n }\n}\n\nfunction addBreadcrumb(message) {\n const hub = getCurrentHub();\n hub.addBreadcrumb(\n {\n category: 'console',\n data: {\n logger: 'replay',\n },\n level: 'info',\n message,\n },\n { level: 'info' },\n );\n}\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nclass EventBufferSizeExceededError extends Error {\n constructor() {\n super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n }\n}\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nclass EventBufferArray {\n /** All the events that are buffered to be sent. */\n\n /** @inheritdoc */\n\n constructor() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return this.events.length > 0;\n }\n\n /** @inheritdoc */\n get type() {\n return 'sync';\n }\n\n /** @inheritdoc */\n destroy() {\n this.events = [];\n }\n\n /** @inheritdoc */\n async addEvent(event) {\n const eventSize = JSON.stringify(event).length;\n this._totalSize += eventSize;\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n throw new EventBufferSizeExceededError();\n }\n\n this.events.push(event);\n }\n\n /** @inheritdoc */\n finish() {\n return new Promise(resolve => {\n // Make a copy of the events array reference and immediately clear the\n // events member so that we do not lose new events while uploading\n // attachment.\n const eventsRet = this.events;\n this.clear();\n resolve(JSON.stringify(eventsRet));\n });\n }\n\n /** @inheritdoc */\n clear() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n if (!timestamp) {\n return null;\n }\n\n return timestampToMs(timestamp);\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass WorkerHandler {\n\n constructor(worker) {\n this._worker = worker;\n this._id = 0;\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n ensureReady() {\n // Ensure we only check once\n if (this._ensureReadyPromise) {\n return this._ensureReadyPromise;\n }\n\n this._ensureReadyPromise = new Promise((resolve, reject) => {\n this._worker.addEventListener(\n 'message',\n ({ data }) => {\n if ((data ).success) {\n resolve();\n } else {\n reject();\n }\n },\n { once: true },\n );\n\n this._worker.addEventListener(\n 'error',\n error => {\n reject(error);\n },\n { once: true },\n );\n });\n\n return this._ensureReadyPromise;\n }\n\n /**\n * Destroy the worker.\n */\n destroy() {\n logInfo('[Replay] Destroying compression worker');\n this._worker.terminate();\n }\n\n /**\n * Post message to worker and wait for response before resolving promise.\n */\n postMessage(method, arg) {\n const id = this._getAndIncrementId();\n\n return new Promise((resolve, reject) => {\n const listener = ({ data }) => {\n const response = data ;\n if (response.method !== method) {\n return;\n }\n\n // There can be multiple listeners for a single method, the id ensures\n // that the response matches the caller.\n if (response.id !== id) {\n return;\n }\n\n // At this point, we'll always want to remove listener regardless of result status\n this._worker.removeEventListener('message', listener);\n\n if (!response.success) {\n // TODO: Do some error handling, not sure what\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('[Replay]', response.response);\n\n reject(new Error('Error in compression worker'));\n return;\n }\n\n resolve(response.response );\n };\n\n // Note: we can't use `once` option because it's possible it needs to\n // listen to multiple messages\n this._worker.addEventListener('message', listener);\n this._worker.postMessage({ id, method, arg });\n });\n }\n\n /** Get the current ID and increment it for the next call. */\n _getAndIncrementId() {\n return this._id++;\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass EventBufferCompressionWorker {\n /** @inheritdoc */\n\n constructor(worker) {\n this._worker = new WorkerHandler(worker);\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return !!this._earliestTimestamp;\n }\n\n /** @inheritdoc */\n get type() {\n return 'worker';\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n ensureReady() {\n return this._worker.ensureReady();\n }\n\n /**\n * Destroy the event buffer.\n */\n destroy() {\n this._worker.destroy();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfuly received and processed by worker.\n */\n addEvent(event) {\n const timestamp = timestampToMs(event.timestamp);\n if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n this._earliestTimestamp = timestamp;\n }\n\n const data = JSON.stringify(event);\n this._totalSize += data.length;\n\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n return Promise.reject(new EventBufferSizeExceededError());\n }\n\n return this._sendEventToWorker(data);\n }\n\n /**\n * Finish the event buffer and return the compressed data.\n */\n finish() {\n return this._finishRequest();\n }\n\n /** @inheritdoc */\n clear() {\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n\n // We do not wait on this, as we assume the order of messages is consistent for the worker\n void this._worker.postMessage('clear');\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._earliestTimestamp;\n }\n\n /**\n * Send the event to the worker.\n */\n _sendEventToWorker(data) {\n return this._worker.postMessage('addEvent', data);\n }\n\n /**\n * Finish the request and return the compressed data from the worker.\n */\n async _finishRequest() {\n const response = await this._worker.postMessage('finish');\n\n this._earliestTimestamp = null;\n this._totalSize = 0;\n\n return response;\n }\n}\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nclass EventBufferProxy {\n\n constructor(worker) {\n this._fallback = new EventBufferArray();\n this._compression = new EventBufferCompressionWorker(worker);\n this._used = this._fallback;\n\n this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n }\n\n /** @inheritdoc */\n get type() {\n return this._used.type;\n }\n\n /** @inheritDoc */\n get hasEvents() {\n return this._used.hasEvents;\n }\n\n /** @inheritdoc */\n get hasCheckout() {\n return this._used.hasCheckout;\n }\n /** @inheritdoc */\n set hasCheckout(value) {\n this._used.hasCheckout = value;\n }\n\n /** @inheritDoc */\n destroy() {\n this._fallback.destroy();\n this._compression.destroy();\n }\n\n /** @inheritdoc */\n clear() {\n return this._used.clear();\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._used.getEarliestTimestamp();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfully added.\n */\n addEvent(event) {\n return this._used.addEvent(event);\n }\n\n /** @inheritDoc */\n async finish() {\n // Ensure the worker is loaded, so the sent event is compressed\n await this.ensureWorkerIsLoaded();\n\n return this._used.finish();\n }\n\n /** Ensure the worker has loaded. */\n ensureWorkerIsLoaded() {\n return this._ensureWorkerIsLoadedPromise;\n }\n\n /** Actually check if the worker has been loaded. */\n async _ensureWorkerIsLoaded() {\n try {\n await this._compression.ensureReady();\n } catch (error) {\n // If the worker fails to load, we fall back to the simple buffer.\n // Nothing more to do from our side here\n logInfo('[Replay] Failed to load the compression worker, falling back to simple buffer');\n return;\n }\n\n // Now we need to switch over the array buffer to the compression worker\n await this._switchToCompressionWorker();\n }\n\n /** Switch the used buffer to the compression worker. */\n async _switchToCompressionWorker() {\n const { events, hasCheckout } = this._fallback;\n\n const addEventPromises = [];\n for (const event of events) {\n addEventPromises.push(this._compression.addEvent(event));\n }\n\n this._compression.hasCheckout = hasCheckout;\n\n // We switch over to the new buffer immediately - any further events will be added\n // after the previously buffered ones\n this._used = this._compression;\n\n // Wait for original events to be re-added before resolving\n try {\n await Promise.all(addEventPromises);\n } catch (error) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('[Replay] Failed to add events when switching buffers.', error);\n }\n }\n}\n\n/**\n * Create an event buffer for replays.\n */\nfunction createEventBuffer({\n useCompression,\n workerUrl: customWorkerUrl,\n}) {\n if (\n useCompression &&\n // eslint-disable-next-line no-restricted-globals\n window.Worker\n ) {\n const worker = _loadWorker(customWorkerUrl);\n\n if (worker) {\n return worker;\n }\n }\n\n logInfo('[Replay] Using simple buffer');\n return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl) {\n try {\n const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n if (!workerUrl) {\n return;\n }\n\n logInfo(`[Replay] Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n const worker = new Worker(workerUrl);\n return new EventBufferProxy(worker);\n } catch (error) {\n logInfo('[Replay] Failed to create compression worker');\n // Fall back to use simple event buffer array\n }\n}\n\nfunction _getWorkerUrl() {\n if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n return e();\n }\n\n return '';\n}\n\n/** If sessionStorage is available. */\nfunction hasSessionStorage() {\n try {\n // This can throw, e.g. when being accessed in a sandboxed iframe\n return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nfunction clearSession(replay) {\n deleteSession();\n replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession() {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nfunction isSampled(sampleRate) {\n if (sampleRate === undefined) {\n return false;\n }\n\n // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n return Math.random() < sampleRate;\n}\n\n/**\n * Save a session to session storage.\n */\nfunction saveSession(session) {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Get a session with defaults & applied sampling.\n */\nfunction makeSession(session) {\n const now = Date.now();\n const id = session.id || uuid4();\n // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n const started = session.started || now;\n const lastActivity = session.lastActivity || now;\n const segmentId = session.segmentId || 0;\n const sampled = session.sampled;\n const previousSessionId = session.previousSessionId;\n\n return {\n id,\n started,\n lastActivity,\n segmentId,\n sampled,\n previousSessionId,\n };\n}\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nfunction createSession(\n { sessionSampleRate, allowBuffering, stickySession = false },\n { previousSessionId } = {},\n) {\n const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n const session = makeSession({\n sampled,\n previousSessionId,\n });\n\n if (stickySession) {\n saveSession(session);\n }\n\n return session;\n}\n\n/**\n * Fetches a session from storage\n */\nfunction fetchSession(traceInternals) {\n if (!hasSessionStorage()) {\n return null;\n }\n\n try {\n // This can throw if cookies are disabled\n const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n if (!sessionStringFromStorage) {\n return null;\n }\n\n const sessionObj = JSON.parse(sessionStringFromStorage) ;\n\n logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n return makeSession(sessionObj);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nfunction isExpired(\n initialTime,\n expiry,\n targetTime = +new Date(),\n) {\n // Always expired if < 0\n if (initialTime === null || expiry === undefined || expiry < 0) {\n return true;\n }\n\n // Never expires if == 0\n if (expiry === 0) {\n return false;\n }\n\n return initialTime + expiry <= targetTime;\n}\n\n/**\n * Checks to see if session is expired\n */\nfunction isSessionExpired(\n session,\n {\n maxReplayDuration,\n sessionIdleExpire,\n targetTime = Date.now(),\n },\n) {\n return (\n // First, check that maximum session length has not been exceeded\n isExpired(session.started, maxReplayDuration, targetTime) ||\n // check that the idle timeout has not been exceeded (i.e. user has\n // performed an action within the last `sessionIdleExpire` ms)\n isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n );\n}\n\n/** If the session should be refreshed or not. */\nfunction shouldRefreshSession(\n session,\n { sessionIdleExpire, maxReplayDuration },\n) {\n // If not expired, all good, just keep the session\n if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n return false;\n }\n\n // If we are buffering & haven't ever flushed yet, always continue\n if (session.sampled === 'buffer' && session.segmentId === 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nfunction loadOrCreateSession(\n {\n traceInternals,\n sessionIdleExpire,\n maxReplayDuration,\n previousSessionId,\n }\n\n,\n sessionOptions,\n) {\n const existingSession = sessionOptions.stickySession && fetchSession(traceInternals);\n\n // No session exists yet, just create a new one\n if (!existingSession) {\n logInfoNextTick('[Replay] Creating new session', traceInternals);\n return createSession(sessionOptions, { previousSessionId });\n }\n\n if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n return existingSession;\n }\n\n logInfoNextTick('[Replay] Session in sessionStorage is expired, creating new one...');\n return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEventSync(replay, event, isCheckout) {\n if (!shouldAddEvent(replay, event)) {\n return false;\n }\n\n void _addEvent(replay, event, isCheckout);\n\n return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!shouldAddEvent(replay, event)) {\n return Promise.resolve(null);\n }\n\n return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!replay.eventBuffer) {\n return null;\n }\n\n try {\n if (isCheckout && replay.recordingMode === 'buffer') {\n replay.eventBuffer.clear();\n }\n\n if (isCheckout) {\n replay.eventBuffer.hasCheckout = true;\n }\n\n const replayOptions = replay.getOptions();\n\n const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n if (!eventAfterPossibleCallback) {\n return;\n }\n\n return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n } catch (error) {\n const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error(error);\n await replay.stop({ reason });\n\n const client = getCurrentHub().getClient();\n\n if (client) {\n client.recordDroppedEvent('internal_sdk_error', 'replay');\n }\n }\n}\n\n/** Exported only for tests. */\nfunction shouldAddEvent(replay, event) {\n if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n return false;\n }\n\n const timestampInMs = timestampToMs(event.timestamp);\n\n // Throw out events that happen more than 5 minutes ago. This can happen if\n // page has been left open and idle for a long period of time and user\n // comes back to trigger a new session. The performance entries rely on\n // `performance.timeOrigin`, which is when the page first opened.\n if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n return false;\n }\n\n // Throw out events that are +60min from the initial timestamp\n if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n logInfo(\n `[Replay] Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`,\n replay.getOptions()._experiments.traceInternals,\n );\n return false;\n }\n\n return true;\n}\n\nfunction maybeApplyCallback(\n event,\n callback,\n) {\n try {\n if (typeof callback === 'function' && isCustomEvent(event)) {\n return callback(event);\n }\n } catch (error) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.error('[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...', error);\n return null;\n }\n\n return event;\n}\n\n/** If the event is an error event */\nfunction isErrorEvent(event) {\n return !event.type;\n}\n\n/** If the event is a transaction event */\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nfunction isReplayEvent(event) {\n return event.type === 'replay_event';\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleAfterSendEvent(replay) {\n // Custom transports may still be returning `Promise`, which means we cannot expect the status code to be available there\n // TODO (v8): remove this check as it will no longer be necessary\n const enforceStatusCode = isBaseTransportSend();\n\n return (event, sendResponse) => {\n if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n return;\n }\n\n const statusCode = sendResponse && sendResponse.statusCode;\n\n // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n // If we do use the base transport, we skip if we encountered an non-OK status code\n if (enforceStatusCode && (!statusCode || statusCode < 200 || statusCode >= 300)) {\n return;\n }\n\n if (isTransactionEvent(event)) {\n handleTransactionEvent(replay, event);\n return;\n }\n\n handleErrorEvent(replay, event);\n };\n}\n\nfunction handleTransactionEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Collect traceIds in _context regardless of `recordingMode`\n // In error mode, _context gets cleared on every checkout\n // We limit to max. 100 transactions linked\n if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n replayContext.traceIds.add(event.contexts.trace.trace_id );\n }\n}\n\nfunction handleErrorEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Add error to list of errorIds of replay. This is ok to do even if not\n // sampled because context will get reset at next checkout.\n // XXX: There is also a race condition where it's possible to capture an\n // error to Sentry before Replay SDK has loaded, but response returns after\n // it was loaded, and this gets called.\n // We limit to max. 100 errors linked\n if (event.event_id && replayContext.errorIds.size < 100) {\n replayContext.errorIds.add(event.event_id);\n }\n\n // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n // Need to be very careful that this does not cause an infinite loop\n if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n return;\n }\n\n const { beforeErrorSampling } = replay.getOptions();\n if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n return;\n }\n\n setTimeout(() => {\n // Capture current event buffer as new replay\n void replay.sendBufferedReplayOrFlush();\n });\n}\n\nfunction isBaseTransportSend() {\n const client = getCurrentHub().getClient();\n if (!client) {\n return false;\n }\n\n const transport = client.getTransport();\n if (!transport) {\n return false;\n }\n\n return (\n (transport.send ).__sentry__baseTransport__ || false\n );\n}\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nfunction isRrwebError(event, hint) {\n if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n return false;\n }\n\n // @ts-expect-error this may be set by rrweb when it finds errors\n if (hint.originalException && hint.originalException.__rrweb__) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nfunction shouldSampleForBufferEvent(replay, event) {\n if (replay.recordingMode !== 'buffer') {\n return false;\n }\n\n // ignore this error because otherwise we could loop indefinitely with\n // trying to capture replay and failing\n if (event.message === UNABLE_TO_SEND_REPLAY) {\n return false;\n }\n\n // Require the event to be an error event & to have an exception\n if (!event.exception || event.type) {\n return false;\n }\n\n return isSampled(replay.getOptions().errorSampleRate);\n}\n\n/**\n * Returns a listener to be added to `addGlobalEventProcessor(listener)`.\n */\nfunction handleGlobalEventListener(\n replay,\n includeAfterSendEventHandling = false,\n) {\n const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n return Object.assign(\n (event, hint) => {\n // Do nothing if replay has been disabled\n if (!replay.isEnabled()) {\n return event;\n }\n\n if (isReplayEvent(event)) {\n // Replays have separate set of breadcrumbs, do not include breadcrumbs\n // from core SDK\n delete event.breadcrumbs;\n return event;\n }\n\n // We only want to handle errors & transactions, nothing else\n if (!isErrorEvent(event) && !isTransactionEvent(event)) {\n return event;\n }\n\n // Ensure we do not add replay_id if the session is expired\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (!isSessionActive) {\n return event;\n }\n\n // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Replay] Ignoring error from rrweb internals', event);\n return null;\n }\n\n // When in buffer mode, we decide to sample here.\n // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n // And convert the buffer session to a full session\n const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n // Tag errors if it has been sampled in buffer mode, or if it is session mode\n // Only tag transactions if in session mode\n const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n if (shouldTagReplayId) {\n event.tags = { ...event.tags, replayId: replay.getSessionId() };\n }\n\n // In cases where a custom client is used that does not support the new hooks (yet),\n // we manually call this hook method here\n if (afterSendHandler) {\n // Pretend the error had a 200 response so we always capture it\n afterSendHandler(event, { statusCode: 200 });\n }\n\n return event;\n },\n { id: 'Replay' },\n );\n}\n\n/**\n * Create a \"span\" for each performance entry.\n */\nfunction createPerformanceSpans(\n replay,\n entries,\n) {\n return entries.map(({ type, start, end, name, data }) => {\n const response = replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: start,\n data: {\n tag: 'performanceSpan',\n payload: {\n op: type,\n description: name,\n startTimestamp: start,\n endTimestamp: end,\n data,\n },\n },\n });\n\n // If response is a string, it means its either THROTTLED or SKIPPED\n return typeof response === 'string' ? Promise.resolve(null) : response;\n });\n}\n\nfunction handleHistory(handlerData) {\n const { from, to } = handlerData;\n\n const now = Date.now() / 1000;\n\n return {\n type: 'navigation.push',\n start: now,\n end: now,\n name: to,\n data: {\n previous: from,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addInstrumentationHandler('history', listener)`.\n */\nfunction handleHistorySpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleHistory(handlerData);\n\n if (result === null) {\n return;\n }\n\n // Need to collect visited URLs\n replay.getContext().urls.push(result.name);\n replay.triggerUserActivity();\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning false to flush\n return false;\n });\n };\n}\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nfunction shouldFilterRequest(replay, url) {\n // If we enabled the `traceInternals` experiment, we want to trace everything\n if ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && replay.getOptions()._experiments.traceInternals) {\n return false;\n }\n\n return isSentryRequestUrl(url, getCurrentHub());\n}\n\n/** Add a performance entry breadcrumb */\nfunction addNetworkBreadcrumb(\n replay,\n result,\n) {\n if (!replay.isEnabled()) {\n return;\n }\n\n if (result === null) {\n return;\n }\n\n if (shouldFilterRequest(replay, result.name)) {\n return;\n }\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning true will cause `addUpdate` to not flush\n // We do not want network requests to cause a flush. This will prevent\n // recurring/polling requests from keeping the replay session alive.\n return true;\n });\n}\n\n/** only exported for tests */\nfunction handleFetch(handlerData) {\n const { startTimestamp, endTimestamp, fetchData, response } = handlerData;\n\n if (!endTimestamp) {\n return null;\n }\n\n // This is only used as a fallback, so we know the body sizes are never set here\n const { method, url } = fetchData;\n\n return {\n type: 'resource.fetch',\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: {\n method,\n statusCode: response ? (response ).status : undefined,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addInstrumentationHandler('fetch', listener)`.\n */\nfunction handleFetchSpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleFetch(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n\n/** only exported for tests */\nfunction handleXhr(handlerData) {\n const { startTimestamp, endTimestamp, xhr } = handlerData;\n\n const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return null;\n }\n\n // This is only used as a fallback, so we know the body sizes are never set here\n const { method, url, status_code: statusCode } = sentryXhrData;\n\n if (url === undefined) {\n return null;\n }\n\n return {\n type: 'resource.xhr',\n name: url,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n data: {\n method,\n statusCode,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addInstrumentationHandler('xhr', listener)`.\n */\nfunction handleXhrSpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleXhr(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n\n/** Get the size of a body. */\nfunction getBodySize(\n body,\n textEncoder,\n) {\n if (!body) {\n return undefined;\n }\n\n try {\n if (typeof body === 'string') {\n return textEncoder.encode(body).length;\n }\n\n if (body instanceof URLSearchParams) {\n return textEncoder.encode(body.toString()).length;\n }\n\n if (body instanceof FormData) {\n const formDataStr = _serializeFormData(body);\n return textEncoder.encode(formDataStr).length;\n }\n\n if (body instanceof Blob) {\n return body.size;\n }\n\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n\n // Currently unhandled types: ArrayBufferView, ReadableStream\n } catch (e) {\n // just return undefined\n }\n\n return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined. */\nfunction parseContentLengthHeader(header) {\n if (!header) {\n return undefined;\n }\n\n const size = parseInt(header, 10);\n return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nfunction getBodyString(body) {\n if (typeof body === 'string') {\n return body;\n }\n\n if (body instanceof URLSearchParams) {\n return body.toString();\n }\n\n if (body instanceof FormData) {\n return _serializeFormData(body);\n }\n\n return undefined;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nfunction makeNetworkReplayBreadcrumb(\n type,\n data,\n) {\n if (!data) {\n return null;\n }\n\n const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n const result = {\n type,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: dropUndefinedKeys({\n method,\n statusCode,\n request,\n response,\n }),\n };\n\n return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n return {\n headers: {},\n size: bodySize,\n _meta: {\n warnings: ['URL_SKIPPED'],\n },\n };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nfunction buildNetworkRequestOrResponse(\n headers,\n bodySize,\n body,\n) {\n if (!bodySize && Object.keys(headers).length === 0) {\n return undefined;\n }\n\n if (!bodySize) {\n return {\n headers,\n };\n }\n\n if (!body) {\n return {\n headers,\n size: bodySize,\n };\n }\n\n const info = {\n headers,\n size: bodySize,\n };\n\n const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n info.body = normalizedBody;\n if (warnings && warnings.length > 0) {\n info._meta = {\n warnings,\n };\n }\n\n return info;\n}\n\n/** Filter a set of headers */\nfunction getAllowedHeaders(headers, allowedHeaders) {\n return Object.keys(headers).reduce((filteredHeaders, key) => {\n const normalizedKey = key.toLowerCase();\n // Avoid putting empty strings into the headers\n if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n filteredHeaders[normalizedKey] = headers[key];\n }\n return filteredHeaders;\n }, {});\n}\n\nfunction _serializeFormData(formData) {\n // This is a bit simplified, but gives us a decent estimate\n // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n // @ts-expect-error passing FormData to URLSearchParams actually works\n return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body)\n\n {\n if (!body || typeof body !== 'string') {\n return {\n body,\n };\n }\n\n const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n\n const isProbablyJson = _strIsProbablyJson(body);\n\n if (exceedsSizeLimit) {\n const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n if (isProbablyJson) {\n return {\n body: truncatedBody,\n warnings: ['MAYBE_JSON_TRUNCATED'],\n };\n }\n\n return {\n body: `${truncatedBody}…`,\n warnings: ['TEXT_TRUNCATED'],\n };\n }\n\n if (isProbablyJson) {\n try {\n const jsonBody = JSON.parse(body);\n return {\n body: jsonBody,\n };\n } catch (e3) {\n // fall back to just send the body as string\n }\n }\n\n return {\n body,\n };\n}\n\nfunction _strIsProbablyJson(str) {\n const first = str[0];\n const last = str[str.length - 1];\n\n // Simple check: If this does not start & end with {} or [], it's not JSON\n return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nfunction urlMatches(url, urls) {\n const fullUrl = getFullUrl(url);\n\n return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n // Short circuit for common cases:\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n return url;\n }\n const fixedUrl = new URL(url, baseURI);\n\n // If these do not match, we are not dealing with a relative URL, so just return it\n if (fixedUrl.origin !== new URL(baseURI).origin) {\n return url;\n }\n\n const fullUrl = fixedUrl.href;\n\n // Remove trailing slashes, if they don't match the original URL\n if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n return fullUrl.slice(0, -1);\n }\n\n return fullUrl;\n}\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureFetchBreadcrumbToReplay(\n breadcrumb,\n hint,\n options\n\n,\n) {\n try {\n const data = await _prepareFetchData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('[Replay] Failed to capture fetch breadcrumb', error);\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichFetchBreadcrumb(\n breadcrumb,\n hint,\n options,\n) {\n const { input, response } = hint;\n\n const body = _getFetchRequestArgBody(input);\n const reqSize = getBodySize(body, options.textEncoder);\n\n const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nasync function _prepareFetchData(\n breadcrumb,\n hint,\n options\n\n,\n) {\n const { startTimestamp, endTimestamp } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n const captureDetails =\n urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n const request = captureDetails\n ? _getRequestInfo(options, hint.input, requestBodySize)\n : buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n}\n\nfunction _getRequestInfo(\n { networkCaptureBodies, networkRequestHeaders },\n input,\n requestBodySize,\n) {\n const headers = getRequestHeaders(input, networkRequestHeaders);\n\n if (!networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n }\n\n // We only want to transmit string or string-like bodies\n const requestBody = _getFetchRequestArgBody(input);\n const bodyStr = getBodyString(requestBody);\n return buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n}\n\nasync function _getResponseInfo(\n captureDetails,\n {\n networkCaptureBodies,\n textEncoder,\n networkResponseHeaders,\n }\n\n,\n response,\n responseBodySize,\n) {\n if (!captureDetails && responseBodySize !== undefined) {\n return buildSkippedNetworkRequestOrResponse(responseBodySize);\n }\n\n const headers = getAllHeaders(response.headers, networkResponseHeaders);\n\n if (!networkCaptureBodies && responseBodySize !== undefined) {\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n\n // Only clone the response if we need to\n try {\n // We have to clone this, as the body can only be read once\n const res = response.clone();\n const bodyText = await _parseFetchBody(res);\n\n const size =\n bodyText && bodyText.length && responseBodySize === undefined\n ? getBodySize(bodyText, textEncoder)\n : responseBodySize;\n\n if (!captureDetails) {\n return buildSkippedNetworkRequestOrResponse(size);\n }\n\n if (networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, size, bodyText);\n }\n\n return buildNetworkRequestOrResponse(headers, size, undefined);\n } catch (e) {\n // fallback\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n}\n\nasync function _parseFetchBody(response) {\n try {\n return await response.text();\n } catch (e2) {\n return undefined;\n }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs = []) {\n // We only support getting the body from the fetch options\n if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n return undefined;\n }\n\n return (fetchArgs[1] ).body;\n}\n\nfunction getAllHeaders(headers, allowedHeaders) {\n const allHeaders = {};\n\n allowedHeaders.forEach(header => {\n if (headers.get(header)) {\n allHeaders[header] = headers.get(header) ;\n }\n });\n\n return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n return getHeadersFromOptions(fetchArgs[0] , allowedHeaders);\n }\n\n if (fetchArgs.length === 2) {\n return getHeadersFromOptions(fetchArgs[1] , allowedHeaders);\n }\n\n return {};\n}\n\nfunction getHeadersFromOptions(\n input,\n allowedHeaders,\n) {\n if (!input) {\n return {};\n }\n\n const headers = input.headers;\n\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n return getAllHeaders(headers, allowedHeaders);\n }\n\n // We do not support this, as it is not really documented (anymore?)\n if (Array.isArray(headers)) {\n return {};\n }\n\n return getAllowedHeaders(headers, allowedHeaders);\n}\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureXhrBreadcrumbToReplay(\n breadcrumb,\n hint,\n options,\n) {\n try {\n const data = _prepareXhrData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('[Replay] Failed to capture xhr breadcrumb', error);\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichXhrBreadcrumb(\n breadcrumb,\n hint,\n options,\n) {\n const { xhr, input } = hint;\n\n const reqSize = getBodySize(input, options.textEncoder);\n const resSize = xhr.getResponseHeader('content-length')\n ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n : getBodySize(xhr.response, options.textEncoder);\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nfunction _prepareXhrData(\n breadcrumb,\n hint,\n options,\n) {\n const { startTimestamp, endTimestamp, input, xhr } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n if (!url) {\n return null;\n }\n\n if (!urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n }\n\n const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n const networkRequestHeaders = xhrInfo\n ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n : {};\n const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n const request = buildNetworkRequestOrResponse(\n networkRequestHeaders,\n requestBodySize,\n options.networkCaptureBodies ? getBodyString(input) : undefined,\n );\n const response = buildNetworkRequestOrResponse(\n networkResponseHeaders,\n responseBodySize,\n options.networkCaptureBodies ? hint.xhr.responseText : undefined,\n );\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n}\n\nfunction getResponseHeaders(xhr) {\n const headers = xhr.getAllResponseHeaders();\n\n if (!headers) {\n return {};\n }\n\n return headers.split('\\r\\n').reduce((acc, line) => {\n const [key, value] = line.split(': ');\n acc[key.toLowerCase()] = value;\n return acc;\n }, {});\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n * (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nfunction handleNetworkBreadcrumbs(replay) {\n const client = getCurrentHub().getClient();\n\n try {\n const textEncoder = new TextEncoder();\n\n const {\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n } = replay.getOptions();\n\n const options = {\n replay,\n textEncoder,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n };\n\n if (client && client.on) {\n client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n } else {\n // Fallback behavior\n addInstrumentationHandler('fetch', handleFetchSpanListener(replay));\n addInstrumentationHandler('xhr', handleXhrSpanListener(replay));\n }\n } catch (e2) {\n // Do nothing\n }\n}\n\n/** just exported for tests */\nfunction beforeAddNetworkBreadcrumb(\n options,\n breadcrumb,\n hint,\n) {\n if (!breadcrumb.data) {\n return;\n }\n\n try {\n if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichXhrBreadcrumb(breadcrumb, hint, options);\n\n void captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n }\n\n if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichFetchBreadcrumb(breadcrumb, hint, options);\n\n void captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n }\n } catch (e) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Error when enriching network breadcrumb');\n }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint) {\n return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint) {\n return hint && hint.response;\n}\n\nlet _LAST_BREADCRUMB = null;\n\nfunction isBreadcrumbWithCategory(breadcrumb) {\n return !!breadcrumb.category;\n}\n\nconst handleScopeListener =\n (replay) =>\n (scope) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleScope(scope);\n\n if (!result) {\n return;\n }\n\n addBreadcrumbEvent(replay, result);\n };\n\n/**\n * An event handler to handle scope changes.\n */\nfunction handleScope(scope) {\n // TODO (v8): Remove this guard. This was put in place because we introduced\n // Scope.getLastBreadcrumb mid-v7 which caused incompatibilities with older SDKs.\n // For now, we'll just return null if the method doesn't exist but we should eventually\n // get rid of this guard.\n const newBreadcrumb = scope.getLastBreadcrumb && scope.getLastBreadcrumb();\n\n // Listener can be called when breadcrumbs have not changed, so we store the\n // reference to the last crumb and only return a crumb if it has changed\n if (_LAST_BREADCRUMB === newBreadcrumb || !newBreadcrumb) {\n return null;\n }\n\n _LAST_BREADCRUMB = newBreadcrumb;\n\n if (\n !isBreadcrumbWithCategory(newBreadcrumb) ||\n ['fetch', 'xhr', 'sentry.event', 'sentry.transaction'].includes(newBreadcrumb.category) ||\n newBreadcrumb.category.startsWith('ui.')\n ) {\n return null;\n }\n\n if (newBreadcrumb.category === 'console') {\n return normalizeConsoleBreadcrumb(newBreadcrumb);\n }\n\n return createBreadcrumb(newBreadcrumb);\n}\n\n/** exported for tests only */\nfunction normalizeConsoleBreadcrumb(\n breadcrumb,\n) {\n const args = breadcrumb.data && breadcrumb.data.arguments;\n\n if (!Array.isArray(args) || args.length === 0) {\n return createBreadcrumb(breadcrumb);\n }\n\n let isTruncated = false;\n\n // Avoid giant args captures\n const normalizedArgs = args.map(arg => {\n if (!arg) {\n return arg;\n }\n if (typeof arg === 'string') {\n if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n\n return arg;\n }\n if (typeof arg === 'object') {\n try {\n const normalizedArg = normalize(arg, 7);\n const stringified = JSON.stringify(normalizedArg);\n if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n // We use the pretty printed JSON string here as a base\n return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n return normalizedArg;\n } catch (e) {\n // fall back to default\n }\n }\n\n return arg;\n });\n\n return createBreadcrumb({\n ...breadcrumb,\n data: {\n ...breadcrumb.data,\n arguments: normalizedArgs,\n ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n },\n });\n}\n\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n // Listeners from core SDK //\n const scope = getCurrentHub().getScope();\n const client = getCurrentHub().getClient();\n\n scope.addScopeListener(handleScopeListener(replay));\n addInstrumentationHandler('dom', handleDomListener(replay));\n addInstrumentationHandler('history', handleHistorySpanListener(replay));\n handleNetworkBreadcrumbs(replay);\n\n // Tag all (non replay) events that get sent to Sentry with the current\n // replay ID so that we can reference them later in the UI\n const eventProcessor = handleGlobalEventListener(replay, !hasHooks(client));\n if (client && client.addEventProcessor) {\n client.addEventProcessor(eventProcessor);\n } else {\n addGlobalEventProcessor(eventProcessor);\n }\n\n // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n if (hasHooks(client)) {\n client.on('afterSendEvent', handleAfterSendEvent(replay));\n client.on('createDsc', (dsc) => {\n const replayId = replay.getSessionId();\n // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n // Ensure to check that the session is still active - it could have expired in the meanwhile\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (isSessionActive) {\n dsc.replay_id = replayId;\n }\n }\n });\n\n client.on('startTransaction', transaction => {\n replay.lastTransaction = transaction;\n });\n\n // We may be missing the initial startTransaction due to timing issues,\n // so we capture it on finish again.\n client.on('finishTransaction', transaction => {\n replay.lastTransaction = transaction;\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasHooks(client) {\n return !!(client && client.on);\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nasync function addMemoryEntry(replay) {\n // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n try {\n return Promise.all(\n createPerformanceSpans(replay, [\n // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n createMemoryEntry(WINDOW.performance.memory),\n ]),\n );\n } catch (error) {\n // Do nothing\n return [];\n }\n}\n\nfunction createMemoryEntry(memoryEntry) {\n const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n // we don't want to use `getAbsoluteTime` because it adds the event time to the\n // time origin, so we get the current timestamp instead\n const time = Date.now() / 1000;\n return {\n type: 'memory',\n name: 'memory',\n start: time,\n end: time,\n data: {\n memory: {\n jsHeapSizeLimit,\n totalJSHeapSize,\n usedJSHeapSize,\n },\n },\n };\n}\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n * debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n * was already invoked in the meantime, return @param func's return value.\n * The debounced function has two additional properties:\n * - `flush`: Invokes the debounced function immediately and returns its return value\n * - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n let callbackReturnValue;\n\n let timerId;\n let maxTimerId;\n\n const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n function invokeFunc() {\n cancelTimers();\n callbackReturnValue = func();\n return callbackReturnValue;\n }\n\n function cancelTimers() {\n timerId !== undefined && clearTimeout(timerId);\n maxTimerId !== undefined && clearTimeout(maxTimerId);\n timerId = maxTimerId = undefined;\n }\n\n function flush() {\n if (timerId !== undefined || maxTimerId !== undefined) {\n return invokeFunc();\n }\n return callbackReturnValue;\n }\n\n function debounced() {\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(invokeFunc, wait);\n\n if (maxWait && maxTimerId === undefined) {\n maxTimerId = setTimeout(invokeFunc, maxWait);\n }\n\n return callbackReturnValue;\n }\n\n debounced.cancel = cancelTimers;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nfunction getHandleRecordingEmit(replay) {\n let hadFirstEvent = false;\n\n return (event, _isCheckout) => {\n // If this is false, it means session is expired, create and a new session and wait for checkout\n if (!replay.checkAndHandleExpiredSession()) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('[Replay] Received replay event after session expired.');\n\n return;\n }\n\n // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n // We also want to treat the first event as a checkout, so we handle this specifically here\n const isCheckout = _isCheckout || !hadFirstEvent;\n hadFirstEvent = true;\n\n if (replay.clickDetector) {\n updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n }\n\n // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n replay.addUpdate(() => {\n // The session is always started immediately on pageload/init, but for\n // error-only replays, it should reflect the most recent checkout\n // when an error occurs. Clear any state that happens before this current\n // checkout. This needs to happen before `addEvent()` which updates state\n // dependent on this reset.\n if (replay.recordingMode === 'buffer' && isCheckout) {\n replay.setInitialState();\n }\n\n // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n // Skip all further steps\n if (!addEventSync(replay, event, isCheckout)) {\n // Return true to skip scheduling a debounced flush\n return true;\n }\n\n // Different behavior for full snapshots (type=2), ignore other event types\n // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n if (!isCheckout) {\n return false;\n }\n\n // Additionally, create a meta event that will capture certain SDK settings.\n // In order to handle buffer mode, this needs to either be done when we\n // receive checkout events or at flush time.\n //\n // `isCheckout` is always true, but want to be explicit that it should\n // only be added for checkouts\n addSettingsEvent(replay, isCheckout);\n\n // If there is a previousSessionId after a full snapshot occurs, then\n // the replay session was started due to session expiration. The new session\n // is started before triggering a new checkout and contains the id\n // of the previous session. Do not immediately flush in this case\n // to avoid capturing only the checkout and instead the replay will\n // be captured if they perform any follow-up actions.\n if (replay.session && replay.session.previousSessionId) {\n return true;\n }\n\n // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n // this should usually be the timestamp of the checkout event, but to be safe...\n if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n if (earliestEvent) {\n logInfo(\n `[Replay] Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`,\n replay.getOptions()._experiments.traceInternals,\n );\n\n replay.session.started = earliestEvent;\n\n if (replay.getOptions().stickySession) {\n saveSession(replay.session);\n }\n }\n }\n\n if (replay.recordingMode === 'session') {\n // If the full snapshot is due to an initial load, we will not have\n // a previous session ID. In this case, we want to buffer events\n // for a set amount of time before flushing. This can help avoid\n // capturing replays of users that immediately close the window.\n void replay.flush();\n }\n\n return true;\n });\n };\n}\n\n/**\n * Exported for tests\n */\nfunction createOptionsEvent(replay) {\n const options = replay.getOptions();\n return {\n type: EventType.Custom,\n timestamp: Date.now(),\n data: {\n tag: 'options',\n payload: {\n sessionSampleRate: options.sessionSampleRate,\n errorSampleRate: options.errorSampleRate,\n useCompressionOption: options.useCompression,\n blockAllMedia: options.blockAllMedia,\n maskAllText: options.maskAllText,\n maskAllInputs: options.maskAllInputs,\n useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n networkCaptureBodies: options.networkCaptureBodies,\n networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n },\n },\n };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay, isCheckout) {\n // Only need to add this event when sending the first segment\n if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n return;\n }\n\n addEventSync(replay, createOptionsEvent(replay), false);\n}\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nfunction createReplayEnvelope(\n replayEvent,\n recordingData,\n dsn,\n tunnel,\n) {\n return createEnvelope(\n createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n [\n [{ type: 'replay_event' }, replayEvent],\n [\n {\n type: 'replay_recording',\n // If string then we need to encode to UTF8, otherwise will have\n // wrong size. TextEncoder has similar browser support to\n // MutationObserver, although it does not accept IE11.\n length:\n typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n },\n recordingData,\n ],\n ],\n );\n}\n\n/**\n * Prepare the recording data ready to be sent.\n */\nfunction prepareRecordingData({\n recordingData,\n headers,\n}\n\n) {\n let payloadWithSequence;\n\n // XXX: newline is needed to separate sequence id from events\n const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n if (typeof recordingData === 'string') {\n payloadWithSequence = `${replayHeaders}${recordingData}`;\n } else {\n const enc = new TextEncoder();\n // XXX: newline is needed to separate sequence id from events\n const sequence = enc.encode(replayHeaders);\n // Merge the two Uint8Arrays\n payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n payloadWithSequence.set(sequence);\n payloadWithSequence.set(recordingData, sequence.length);\n }\n\n return payloadWithSequence;\n}\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nasync function prepareReplayEvent({\n client,\n scope,\n replayId: event_id,\n event,\n}\n\n) {\n const integrations =\n typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n ? Object.keys(client._integrations)\n : undefined;\n\n const eventHint = { event_id, integrations };\n\n if (client.emit) {\n client.emit('preprocessEvent', event, eventHint);\n }\n\n const preparedEvent = (await prepareEvent(\n client.getOptions(),\n event,\n eventHint,\n scope,\n client,\n )) ;\n\n // If e.g. a global event processor returned null\n if (!preparedEvent) {\n return null;\n }\n\n // This normally happens in browser client \"_prepareEvent\"\n // but since we do not use this private method from the client, but rather the plain import\n // we need to do this manually.\n preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n const metadata = client.getSdkMetadata && client.getSdkMetadata();\n const { name, version } = (metadata && metadata.sdk) || {};\n\n preparedEvent.sdk = {\n ...preparedEvent.sdk,\n name: name || 'sentry.javascript.unknown',\n version: version || '0.0.0',\n };\n\n return preparedEvent;\n}\n\n/**\n * Send replay attachment using `fetch()`\n */\nasync function sendReplayRequest({\n recordingData,\n replayId,\n segmentId: segment_id,\n eventContext,\n timestamp,\n session,\n}) {\n const preparedRecordingData = prepareRecordingData({\n recordingData,\n headers: {\n segment_id,\n },\n });\n\n const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n const hub = getCurrentHub();\n const client = hub.getClient();\n const scope = hub.getScope();\n const transport = client && client.getTransport();\n const dsn = client && client.getDsn();\n\n if (!client || !transport || !dsn || !session.sampled) {\n return;\n }\n\n const baseEvent = {\n type: REPLAY_EVENT_NAME,\n replay_start_timestamp: initialTimestamp / 1000,\n timestamp: timestamp / 1000,\n error_ids: errorIds,\n trace_ids: traceIds,\n urls,\n replay_id: replayId,\n segment_id,\n replay_type: session.sampled,\n };\n\n const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n if (!replayEvent) {\n // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n logInfo('An event processor returned `null`, will not send event.');\n return;\n }\n\n /*\n For reference, the fully built event looks something like this:\n {\n \"type\": \"replay_event\",\n \"timestamp\": 1670837008.634,\n \"error_ids\": [\n \"errorId\"\n ],\n \"trace_ids\": [\n \"traceId\"\n ],\n \"urls\": [\n \"https://example.com\"\n ],\n \"replay_id\": \"eventId\",\n \"segment_id\": 3,\n \"replay_type\": \"error\",\n \"platform\": \"javascript\",\n \"event_id\": \"eventId\",\n \"environment\": \"production\",\n \"sdk\": {\n \"integrations\": [\n \"BrowserTracing\",\n \"Replay\"\n ],\n \"name\": \"sentry.javascript.browser\",\n \"version\": \"7.25.0\"\n },\n \"sdkProcessingMetadata\": {},\n \"contexts\": {\n },\n }\n */\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete replayEvent.sdkProcessingMetadata;\n\n const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n let response;\n\n try {\n response = await transport.send(envelope);\n } catch (err) {\n const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n throw error;\n }\n\n // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n if (!response) {\n return response;\n }\n\n // If the status code is invalid, we want to immediately stop & not retry\n if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n throw new TransportStatusCodeError(response.statusCode);\n }\n\n const rateLimits = updateRateLimits({}, response);\n if (isRateLimited(rateLimits, 'replay')) {\n throw new RateLimitError(rateLimits);\n }\n\n return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nclass TransportStatusCodeError extends Error {\n constructor(statusCode) {\n super(`Transport returned status code ${statusCode}`);\n }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nclass RateLimitError extends Error {\n\n constructor(rateLimits) {\n super('Rate limit hit');\n this.rateLimits = rateLimits;\n }\n}\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nasync function sendReplay(\n replayData,\n retryConfig = {\n count: 0,\n interval: RETRY_BASE_INTERVAL,\n },\n) {\n const { recordingData, options } = replayData;\n\n // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n if (!recordingData.length) {\n return;\n }\n\n try {\n await sendReplayRequest(replayData);\n return true;\n } catch (err) {\n if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n throw err;\n }\n\n // Capture error for every failed replay\n setContext('Replays', {\n _retryCount: retryConfig.count,\n });\n\n if ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && options._experiments && options._experiments.captureExceptions) {\n captureException(err);\n }\n\n // If an error happened here, it's likely that uploading the attachment\n // failed, we'll can retry with the same events payload\n if (retryConfig.count >= RETRY_MAX_COUNT) {\n const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n\n throw error;\n }\n\n // will retry in intervals of 5, 10, 30\n retryConfig.interval *= ++retryConfig.count;\n\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n try {\n await sendReplay(replayData, retryConfig);\n resolve(true);\n } catch (err) {\n reject(err);\n }\n }, retryConfig.interval);\n });\n }\n}\n\nconst THROTTLED = '__THROTTLED';\nconst SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction throttle(\n fn,\n maxCount,\n durationSeconds,\n) {\n const counter = new Map();\n\n const _cleanup = (now) => {\n const threshold = now - durationSeconds;\n counter.forEach((_value, key) => {\n if (key < threshold) {\n counter.delete(key);\n }\n });\n };\n\n const _getTotalCount = () => {\n return [...counter.values()].reduce((a, b) => a + b, 0);\n };\n\n let isThrottled = false;\n\n return (...rest) => {\n // Date in second-precision, which we use as basis for the throttling\n const now = Math.floor(Date.now() / 1000);\n\n // First, make sure to delete any old entries\n _cleanup(now);\n\n // If already over limit, do nothing\n if (_getTotalCount() >= maxCount) {\n const wasThrottled = isThrottled;\n isThrottled = true;\n return wasThrottled ? SKIPPED : THROTTLED;\n }\n\n isThrottled = false;\n const count = counter.get(now) || 0;\n counter.set(now, count + 1);\n\n return fn(...rest);\n };\n}\n\n/* eslint-disable max-lines */ // TODO: We might want to split this file up\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nclass ReplayContainer {\n\n /**\n * Recording can happen in one of three modes:\n * - session: Record the whole session, sending it continuously\n * - buffer: Always keep the last 60s of recording, requires:\n * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n * - or calling `flush()` to send the replay\n */\n\n /**\n * The current or last active transcation.\n * This is only available when performance is enabled.\n */\n\n /**\n * These are here so we can overwrite them in tests etc.\n * @hidden\n */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Timestamp of the last user activity. This lives across sessions.\n */\n\n /**\n * Is the integration currently active?\n */\n\n /**\n * Paused is a state where:\n * - DOM Recording is not listening at all\n * - Nothing will be added to event buffer (e.g. core SDK events)\n */\n\n /**\n * Have we attached listeners to the core SDK?\n * Note we have to track this as there is no way to remove instrumentation handlers.\n */\n\n /**\n * Function to stop recording\n */\n\n constructor({\n options,\n recordingOptions,\n }\n\n) {ReplayContainer.prototype.__init.call(this);ReplayContainer.prototype.__init2.call(this);ReplayContainer.prototype.__init3.call(this);ReplayContainer.prototype.__init4.call(this);ReplayContainer.prototype.__init5.call(this);ReplayContainer.prototype.__init6.call(this);\n this.eventBuffer = null;\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n this.recordingMode = 'session';\n this.timeouts = {\n sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n } ;\n this._lastActivity = Date.now();\n this._isEnabled = false;\n this._isPaused = false;\n this._hasInitializedCoreListeners = false;\n this._context = {\n errorIds: new Set(),\n traceIds: new Set(),\n urls: [],\n initialTimestamp: Date.now(),\n initialUrl: '',\n };\n\n this._recordingOptions = recordingOptions;\n this._options = options;\n\n this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n maxWait: this._options.flushMaxDelay,\n });\n\n this._throttledAddEvent = throttle(\n (event, isCheckout) => addEvent(this, event, isCheckout),\n // Max 300 events...\n 300,\n // ... per 5s\n 5,\n );\n\n const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n const slowClickConfig = slowClickTimeout\n ? {\n threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n timeout: slowClickTimeout,\n scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n }\n : undefined;\n\n if (slowClickConfig) {\n this.clickDetector = new ClickDetector(this, slowClickConfig);\n }\n }\n\n /** Get the event context. */\n getContext() {\n return this._context;\n }\n\n /** If recording is currently enabled. */\n isEnabled() {\n return this._isEnabled;\n }\n\n /** If recording is currently paused. */\n isPaused() {\n return this._isPaused;\n }\n\n /** Get the replay integration options. */\n getOptions() {\n return this._options;\n }\n\n /**\n * Initializes the plugin based on sampling configuration. Should not be\n * called outside of constructor.\n */\n initializeSampling(previousSessionId) {\n const { errorSampleRate, sessionSampleRate } = this._options;\n\n // If neither sample rate is > 0, then do nothing - user will need to call one of\n // `start()` or `startBuffering` themselves.\n if (errorSampleRate <= 0 && sessionSampleRate <= 0) {\n return;\n }\n\n // Otherwise if there is _any_ sample rate set, try to load an existing\n // session, or create a new one.\n this._initializeSessionForSampling(previousSessionId);\n\n if (!this.session) {\n // This should not happen, something wrong has occurred\n this._handleException(new Error('Unable to initialize and create session'));\n return;\n }\n\n if (this.session.sampled === false) {\n // This should only occur if `errorSampleRate` is 0 and was unsampled for\n // session-based replay. In this case there is nothing to do.\n return;\n }\n\n // If segmentId > 0, it means we've previously already captured this session\n // In this case, we still want to continue in `session` recording mode\n this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n logInfoNextTick(\n `[Replay] Starting replay in ${this.recordingMode} mode`,\n this._options._experiments.traceInternals,\n );\n\n this._initializeRecording();\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will throw an error if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * _performanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (this._isEnabled && this.recordingMode === 'session') {\n throw new Error('Replay recording is already in progress');\n }\n\n if (this._isEnabled && this.recordingMode === 'buffer') {\n throw new Error('Replay buffering is in progress, call `flush()` to save the replay');\n }\n\n logInfoNextTick('[Replay] Starting replay in session mode', this._options._experiments.traceInternals);\n\n const session = loadOrCreateSession(\n {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n traceInternals: this._options._experiments.traceInternals,\n },\n {\n stickySession: this._options.stickySession,\n // This is intentional: create a new session-based replay when calling `start()`\n sessionSampleRate: 1,\n allowBuffering: false,\n },\n );\n\n this.session = session;\n\n this._initializeRecording();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, an error occurs.\n */\n startBuffering() {\n if (this._isEnabled) {\n throw new Error('Replay recording is already in progress');\n }\n\n logInfoNextTick('[Replay] Starting replay in buffer mode', this._options._experiments.traceInternals);\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n traceInternals: this._options._experiments.traceInternals,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: 0,\n allowBuffering: true,\n },\n );\n\n this.session = session;\n\n this.recordingMode = 'buffer';\n this._initializeRecording();\n }\n\n /**\n * Start recording.\n *\n * Note that this will cause a new DOM checkout\n */\n startRecording() {\n try {\n this._stopRecording = record({\n ...this._recordingOptions,\n // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n // Without this, it would record forever, until an error happens, which we don't want\n // instead, we'll always keep the last 60 seconds of replay before an error happened\n ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n emit: getHandleRecordingEmit(this),\n onMutation: this._onMutationHandler,\n });\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Stops the recording, if it was running.\n *\n * Returns true if it was previously stopped, or is now stopped,\n * otherwise false.\n */\n stopRecording() {\n try {\n if (this._stopRecording) {\n this._stopRecording();\n this._stopRecording = undefined;\n }\n\n return true;\n } catch (err) {\n this._handleException(err);\n return false;\n }\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n async stop({ forceFlush = false, reason } = {}) {\n if (!this._isEnabled) {\n return;\n }\n\n // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n // enter into an infinite loop when `stop()` is called while flushing.\n this._isEnabled = false;\n\n try {\n logInfo(\n `[Replay] Stopping Replay${reason ? ` triggered by ${reason}` : ''}`,\n this._options._experiments.traceInternals,\n );\n\n this._removeListeners();\n this.stopRecording();\n\n this._debouncedFlush.cancel();\n // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n // `_isEnabled` state of the plugin since it was disabled above.\n if (forceFlush) {\n await this._flush({ force: true });\n }\n\n // After flush, destroy event buffer\n this.eventBuffer && this.eventBuffer.destroy();\n this.eventBuffer = null;\n\n // Clear session from session storage, note this means if a new session\n // is started after, it will not have `previousSessionId`\n clearSession(this);\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Pause some replay functionality. See comments for `_isPaused`.\n * This differs from stop as this only stops DOM recording, it is\n * not as thorough of a shutdown as `stop()`.\n */\n pause() {\n if (this._isPaused) {\n return;\n }\n\n this._isPaused = true;\n this.stopRecording();\n\n logInfo('[Replay] Pausing replay', this._options._experiments.traceInternals);\n }\n\n /**\n * Resumes recording, see notes for `pause().\n *\n * Note that calling `startRecording()` here will cause a\n * new DOM checkout.`\n */\n resume() {\n if (!this._isPaused || !this._checkSession()) {\n return;\n }\n\n this._isPaused = false;\n this.startRecording();\n\n logInfo('[Replay] Resuming replay', this._options._experiments.traceInternals);\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n if (this.recordingMode === 'session') {\n return this.flushImmediate();\n }\n\n const activityTime = Date.now();\n\n logInfo('[Replay] Converting buffer to session', this._options._experiments.traceInternals);\n\n // Allow flush to complete before resuming as a session recording, otherwise\n // the checkout from `startRecording` may be included in the payload.\n // Prefer to keep the error replay as a separate (and smaller) segment\n // than the session replay.\n await this.flushImmediate();\n\n const hasStoppedRecording = this.stopRecording();\n\n if (!continueRecording || !hasStoppedRecording) {\n return;\n }\n\n // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n if ((this.recordingMode ) === 'session') {\n return;\n }\n\n // Re-start recording in session-mode\n this.recordingMode = 'session';\n\n // Once this session ends, we do not want to refresh it\n if (this.session) {\n this._updateUserActivity(activityTime);\n this._updateSessionActivity(activityTime);\n this._maybeSaveSession();\n }\n\n this.startRecording();\n }\n\n /**\n * We want to batch uploads of replay events. Save events only if\n * `` milliseconds have elapsed since the last event\n * *OR* if `` milliseconds have elapsed.\n *\n * Accepts a callback to perform side-effects and returns true to stop batch\n * processing and hand back control to caller.\n */\n addUpdate(cb) {\n // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n const cbResult = cb();\n\n // If this option is turned on then we will only want to call `flush`\n // explicitly\n if (this.recordingMode === 'buffer') {\n return;\n }\n\n // If callback is true, we do not want to continue with flushing -- the\n // caller will need to handle it.\n if (cbResult === true) {\n return;\n }\n\n // addUpdate is called quite frequently - use _debouncedFlush so that it\n // respects the flush delays and does not flush immediately\n this._debouncedFlush();\n }\n\n /**\n * Updates the user activity timestamp and resumes recording. This should be\n * called in an event handler for a user action that we consider as the user\n * being \"active\" (e.g. a mouse click).\n */\n triggerUserActivity() {\n this._updateUserActivity();\n\n // This case means that recording was once stopped due to inactivity.\n // Ensure that recording is resumed.\n if (!this._stopRecording) {\n // Create a new session, otherwise when the user action is flushed, it\n // will get rejected due to an expired session.\n if (!this._checkSession()) {\n return;\n }\n\n // Note: This will cause a new DOM checkout\n this.resume();\n return;\n }\n\n // Otherwise... recording was never suspended, continue as normalish\n this.checkAndHandleExpiredSession();\n\n this._updateSessionActivity();\n }\n\n /**\n * Updates the user activity timestamp *without* resuming\n * recording. Some user events (e.g. keydown) can be create\n * low-value replays that only contain the keypress as a\n * breadcrumb. Instead this would require other events to\n * create a new replay after a session has expired.\n */\n updateUserActivity() {\n this._updateUserActivity();\n this._updateSessionActivity();\n }\n\n /**\n * Only flush if `this.recordingMode === 'session'`\n */\n conditionalFlush() {\n if (this.recordingMode === 'buffer') {\n return Promise.resolve();\n }\n\n return this.flushImmediate();\n }\n\n /**\n * Flush using debounce flush\n */\n flush() {\n return this._debouncedFlush() ;\n }\n\n /**\n * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n * cases of mulitple flushes happening closely together.\n */\n flushImmediate() {\n this._debouncedFlush();\n // `.flush` is provided by the debounced function, analogously to lodash.debounce\n return this._debouncedFlush.flush() ;\n }\n\n /**\n * Cancels queued up flushes.\n */\n cancelFlush() {\n this._debouncedFlush.cancel();\n }\n\n /** Get the current sesion (=replay) ID */\n getSessionId() {\n return this.session && this.session.id;\n }\n\n /**\n * Checks if recording should be stopped due to user inactivity. Otherwise\n * check if session is expired and create a new session if so. Triggers a new\n * full snapshot on new session.\n *\n * Returns true if session is not expired, false otherwise.\n * @hidden\n */\n checkAndHandleExpiredSession() {\n // Prevent starting a new session if the last user activity is older than\n // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n // session+recording. This creates noisy replays that do not have much\n // content in them.\n if (\n this._lastActivity &&\n isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n this.session &&\n this.session.sampled === 'session'\n ) {\n // Pause recording only for session-based replays. Otherwise, resuming\n // will create a new replay and will conflict with users who only choose\n // to record error-based replays only. (e.g. the resumed replay will not\n // contain a reference to an error)\n this.pause();\n return;\n }\n\n // --- There is recent user activity --- //\n // This will create a new session if expired, based on expiry length\n if (!this._checkSession()) {\n // Check session handles the refreshing itself\n return false;\n }\n\n return true;\n }\n\n /**\n * Capture some initial state that can change throughout the lifespan of the\n * replay. This is required because otherwise they would be captured at the\n * first flush.\n */\n setInitialState() {\n const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n const url = `${WINDOW.location.origin}${urlPath}`;\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n // Reset _context as well\n this._clearContext();\n\n this._context.initialUrl = url;\n this._context.initialTimestamp = Date.now();\n this._context.urls.push(url);\n }\n\n /**\n * Add a breadcrumb event, that may be throttled.\n * If it was throttled, we add a custom breadcrumb to indicate that.\n */\n throttledAddEvent(\n event,\n isCheckout,\n ) {\n const res = this._throttledAddEvent(event, isCheckout);\n\n // If this is THROTTLED, it means we have throttled the event for the first time\n // In this case, we want to add a breadcrumb indicating that something was skipped\n if (res === THROTTLED) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.throttled',\n });\n\n this.addUpdate(() => {\n // Return `false` if the event _was_ added, as that means we schedule a flush\n return !addEventSync(this, {\n type: ReplayEventTypeCustom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n metric: true,\n },\n });\n });\n }\n\n return res;\n }\n\n /**\n * This will get the parametrized route name of the current page.\n * This is only available if performance is enabled, and if an instrumented router is used.\n */\n getCurrentRoute() {\n const lastTransaction = this.lastTransaction || getCurrentHub().getScope().getTransaction();\n if (!lastTransaction || !['route', 'custom'].includes(lastTransaction.metadata.source)) {\n return undefined;\n }\n\n return lastTransaction.name;\n }\n\n /**\n * Initialize and start all listeners to varying events (DOM,\n * Performance Observer, Recording, Sentry SDK, etc)\n */\n _initializeRecording() {\n this.setInitialState();\n\n // this method is generally called on page load or manually - in both cases\n // we should treat it as an activity\n this._updateSessionActivity();\n\n this.eventBuffer = createEventBuffer({\n useCompression: this._options.useCompression,\n workerUrl: this._options.workerUrl,\n });\n\n this._removeListeners();\n this._addListeners();\n\n // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n this._isEnabled = true;\n this._isPaused = false;\n\n this.startRecording();\n }\n\n /** A wrapper to conditionally capture exceptions. */\n _handleException(error) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('[Replay]', error);\n\n if ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && this._options._experiments && this._options._experiments.captureExceptions) {\n captureException(error);\n }\n }\n\n /**\n * Loads (or refreshes) the current session.\n */\n _initializeSessionForSampling(previousSessionId) {\n // Whenever there is _any_ error sample rate, we always allow buffering\n // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n const allowBuffering = this._options.errorSampleRate > 0;\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n traceInternals: this._options._experiments.traceInternals,\n previousSessionId,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: this._options.sessionSampleRate,\n allowBuffering,\n },\n );\n\n this.session = session;\n }\n\n /**\n * Checks and potentially refreshes the current session.\n * Returns false if session is not recorded.\n */\n _checkSession() {\n // If there is no session yet, we do not want to refresh anything\n // This should generally not happen, but to be safe....\n if (!this.session) {\n return false;\n }\n\n const currentSession = this.session;\n\n if (\n shouldRefreshSession(currentSession, {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n })\n ) {\n void this._refreshSession(currentSession);\n return false;\n }\n\n return true;\n }\n\n /**\n * Refresh a session with a new one.\n * This stops the current session (without forcing a flush, as that would never work since we are expired),\n * and then does a new sampling based on the refreshed session.\n */\n async _refreshSession(session) {\n if (!this._isEnabled) {\n return;\n }\n await this.stop({ reason: 'refresh session' });\n this.initializeSampling(session.id);\n }\n\n /**\n * Adds listeners to record events for the replay\n */\n _addListeners() {\n try {\n WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n WINDOW.addEventListener('blur', this._handleWindowBlur);\n WINDOW.addEventListener('focus', this._handleWindowFocus);\n WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.addListeners();\n }\n\n // There is no way to remove these listeners, so ensure they are only added once\n if (!this._hasInitializedCoreListeners) {\n addGlobalListeners(this);\n\n this._hasInitializedCoreListeners = true;\n }\n } catch (err) {\n this._handleException(err);\n }\n\n this._performanceCleanupCallback = setupPerformanceObserver(this);\n }\n\n /**\n * Cleans up listeners that were created in `_addListeners`\n */\n _removeListeners() {\n try {\n WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n WINDOW.removeEventListener('blur', this._handleWindowBlur);\n WINDOW.removeEventListener('focus', this._handleWindowFocus);\n WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.removeListeners();\n }\n\n if (this._performanceCleanupCallback) {\n this._performanceCleanupCallback();\n }\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Handle when visibility of the page content changes. Opening a new tab will\n * cause the state to change to hidden because of content of current page will\n * be hidden. Likewise, moving a different window to cover the contents of the\n * page will also trigger a change to a hidden state.\n */\n __init() {this._handleVisibilityChange = () => {\n if (WINDOW.document.visibilityState === 'visible') {\n this._doChangeToForegroundTasks();\n } else {\n this._doChangeToBackgroundTasks();\n }\n };}\n\n /**\n * Handle when page is blurred\n */\n __init2() {this._handleWindowBlur = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.blur',\n });\n\n // Do not count blur as a user action -- it's part of the process of them\n // leaving the page\n this._doChangeToBackgroundTasks(breadcrumb);\n };}\n\n /**\n * Handle when page is focused\n */\n __init3() {this._handleWindowFocus = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.focus',\n });\n\n // Do not count focus as a user action -- instead wait until they focus and\n // interactive with page\n this._doChangeToForegroundTasks(breadcrumb);\n };}\n\n /** Ensure page remains active when a key is pressed. */\n __init4() {this._handleKeyboardEvent = (event) => {\n handleKeyboardEvent(this, event);\n };}\n\n /**\n * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n */\n _doChangeToBackgroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const expired = isSessionExpired(this.session, {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n });\n\n if (expired) {\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Send replay when the page/tab becomes hidden. There is no reason to send\n // replay if it becomes visible, since no actions we care about were done\n // while it was hidden\n void this.conditionalFlush();\n }\n\n /**\n * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n */\n _doChangeToForegroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const isSessionActive = this.checkAndHandleExpiredSession();\n\n if (!isSessionActive) {\n // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n // ms, we will re-use the existing session, otherwise create a new\n // session\n logInfo('[Replay] Document has become active, but session has expired');\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n }\n\n /**\n * Update user activity (across session lifespans)\n */\n _updateUserActivity(_lastActivity = Date.now()) {\n this._lastActivity = _lastActivity;\n }\n\n /**\n * Updates the session's last activity timestamp\n */\n _updateSessionActivity(_lastActivity = Date.now()) {\n if (this.session) {\n this.session.lastActivity = _lastActivity;\n this._maybeSaveSession();\n }\n }\n\n /**\n * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n */\n _createCustomBreadcrumb(breadcrumb) {\n this.addUpdate(() => {\n void this.throttledAddEvent({\n type: EventType.Custom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n },\n });\n });\n }\n\n /**\n * Observed performance events are added to `this.performanceEntries`. These\n * are included in the replay event before it is finished and sent to Sentry.\n */\n _addPerformanceEntries() {\n const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n return Promise.all(createPerformanceSpans(this, performanceEntries));\n }\n\n /**\n * Clear _context\n */\n _clearContext() {\n // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n this._context.errorIds.clear();\n this._context.traceIds.clear();\n this._context.urls = [];\n }\n\n /** Update the initial timestamp based on the buffer content. */\n _updateInitialTimestampFromEventBuffer() {\n const { session, eventBuffer } = this;\n if (!session || !eventBuffer) {\n return;\n }\n\n // we only ever update this on the initial segment\n if (session.segmentId) {\n return;\n }\n\n const earliestEvent = eventBuffer.getEarliestTimestamp();\n if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n this._context.initialTimestamp = earliestEvent;\n }\n }\n\n /**\n * Return and clear _context\n */\n _popEventContext() {\n const _context = {\n initialTimestamp: this._context.initialTimestamp,\n initialUrl: this._context.initialUrl,\n errorIds: Array.from(this._context.errorIds),\n traceIds: Array.from(this._context.traceIds),\n urls: this._context.urls,\n };\n\n this._clearContext();\n\n return _context;\n }\n\n /**\n * Flushes replay event buffer to Sentry.\n *\n * Performance events are only added right before flushing - this is\n * due to the buffered performance observer events.\n *\n * Should never be called directly, only by `flush`\n */\n async _runFlush() {\n const replayId = this.getSessionId();\n\n if (!this.session || !this.eventBuffer || !replayId) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('[Replay] No session or eventBuffer found to flush.');\n return;\n }\n\n await this._addPerformanceEntries();\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n return;\n }\n\n // Only attach memory event if eventBuffer is not empty\n await addMemoryEntry(this);\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer) {\n return;\n }\n\n // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n if (replayId !== this.getSessionId()) {\n return;\n }\n\n try {\n // This uses the data from the eventBuffer, so we need to call this before `finish()\n this._updateInitialTimestampFromEventBuffer();\n\n const timestamp = Date.now();\n\n // Check total duration again, to avoid sending outdated stuff\n // We leave 30s wiggle room to accomodate late flushing etc.\n // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30000) {\n throw new Error('Session is too long, not sending replay');\n }\n\n const eventContext = this._popEventContext();\n // Always increment segmentId regardless of outcome of sending replay\n const segmentId = this.session.segmentId++;\n this._maybeSaveSession();\n\n // Note this empties the event buffer regardless of outcome of sending replay\n const recordingData = await this.eventBuffer.finish();\n\n await sendReplay({\n replayId,\n recordingData,\n segmentId,\n eventContext,\n session: this.session,\n options: this.getOptions(),\n timestamp,\n });\n } catch (err) {\n this._handleException(err);\n\n // This means we retried 3 times and all of them failed,\n // or we ran into a problem we don't want to retry, like rate limiting.\n // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n void this.stop({ reason: 'sendReplay' });\n\n const client = getCurrentHub().getClient();\n\n if (client) {\n client.recordDroppedEvent('send_error', 'replay');\n }\n }\n }\n\n /**\n * Flush recording data to Sentry. Creates a lock so that only a single flush\n * can be active at a time. Do not call this directly.\n */\n __init5() {this._flush = async ({\n force = false,\n }\n\n = {}) => {\n if (!this._isEnabled && !force) {\n // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n return;\n }\n\n if (!this.checkAndHandleExpiredSession()) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('[Replay] Attempting to finish replay event after session expired.');\n return;\n }\n\n if (!this.session) {\n // should never happen, as we would have bailed out before\n return;\n }\n\n const start = this.session.started;\n const now = Date.now();\n const duration = now - start;\n\n // A flush is about to happen, cancel any queued flushes\n this._debouncedFlush.cancel();\n\n // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n const tooShort = duration < this._options.minReplayDuration;\n const tooLong = duration > this._options.maxReplayDuration + 5000;\n if (tooShort || tooLong) {\n logInfo(\n `[Replay] Session duration (${Math.floor(duration / 1000)}s) is too ${\n tooShort ? 'short' : 'long'\n }, not sending replay.`,\n this._options._experiments.traceInternals,\n );\n\n if (tooShort) {\n this._debouncedFlush();\n }\n return;\n }\n\n const eventBuffer = this.eventBuffer;\n if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n logInfo('[Replay] Flushing initial segment without checkout.', this._options._experiments.traceInternals);\n // TODO FN: Evaluate if we want to stop here, or remove this again?\n }\n\n // this._flushLock acts as a lock so that future calls to `_flush()`\n // will be blocked until this promise resolves\n if (!this._flushLock) {\n this._flushLock = this._runFlush();\n await this._flushLock;\n this._flushLock = undefined;\n return;\n }\n\n // Wait for previous flush to finish, then call the debounced `_flush()`.\n // It's possible there are other flush requests queued and waiting for it\n // to resolve. We want to reduce all outstanding requests (as well as any\n // new flush requests that occur within a second of the locked flush\n // completing) into a single flush.\n\n try {\n await this._flushLock;\n } catch (err) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error(err);\n } finally {\n this._debouncedFlush();\n }\n };}\n\n /** Save the session, if it is sticky */\n _maybeSaveSession() {\n if (this.session && this._options.stickySession) {\n saveSession(this.session);\n }\n }\n\n /** Handler for rrweb.record.onMutation */\n __init6() {this._onMutationHandler = (mutations) => {\n const count = mutations.length;\n\n const mutationLimit = this._options.mutationLimit;\n const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n const overMutationLimit = mutationLimit && count > mutationLimit;\n\n // Create a breadcrumb if a lot of mutations happen at the same time\n // We can show this in the UI as an information with potential performance improvements\n if (count > mutationBreadcrumbLimit || overMutationLimit) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.mutations',\n data: {\n count,\n limit: overMutationLimit,\n },\n });\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Stop replay if over the mutation limit\n if (overMutationLimit) {\n void this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n return false;\n }\n\n // `true` means we use the regular mutation handling by rrweb\n return true;\n };}\n}\n\nfunction getOption(\n selectors,\n defaultSelectors,\n deprecatedClassOption,\n deprecatedSelectorOption,\n) {\n const deprecatedSelectors = typeof deprecatedSelectorOption === 'string' ? deprecatedSelectorOption.split(',') : [];\n\n const allSelectors = [\n ...selectors,\n // @deprecated\n ...deprecatedSelectors,\n\n // sentry defaults\n ...defaultSelectors,\n ];\n\n // @deprecated\n if (typeof deprecatedClassOption !== 'undefined') {\n // NOTE: No support for RegExp\n if (typeof deprecatedClassOption === 'string') {\n allSelectors.push(`.${deprecatedClassOption}`);\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n '[Replay] You are using a deprecated configuration item for privacy. Read the documentation on how to use the new privacy configuration.',\n );\n }\n\n return allSelectors.join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n\n // eslint-disable-next-line deprecation/deprecation\n blockClass,\n // eslint-disable-next-line deprecation/deprecation\n blockSelector,\n // eslint-disable-next-line deprecation/deprecation\n maskTextClass,\n // eslint-disable-next-line deprecation/deprecation\n maskTextSelector,\n // eslint-disable-next-line deprecation/deprecation\n ignoreClass,\n}) {\n const defaultBlockedElements = ['base[href=\"/\"]'];\n\n const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]'], maskTextClass, maskTextSelector);\n const unmaskSelector = getOption(unmask, ['.sentry-unmask', '[data-sentry-unmask]']);\n\n const options = {\n // We are making the decision to make text and input selectors the same\n maskTextSelector: maskSelector,\n unmaskTextSelector: unmaskSelector,\n\n blockSelector: getOption(\n block,\n ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements],\n blockClass,\n blockSelector,\n ),\n unblockSelector: getOption(unblock, ['.sentry-unblock', '[data-sentry-unblock]']),\n ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]'], ignoreClass),\n };\n\n if (blockClass instanceof RegExp) {\n options.blockClass = blockClass;\n }\n\n if (maskTextClass instanceof RegExp) {\n options.maskTextClass = maskTextClass;\n }\n\n return options;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nfunction maskAttribute({\n el,\n key,\n maskAttributes,\n maskAllText,\n privacyOptions,\n value,\n}) {\n // We only mask attributes if `maskAllText` is true\n if (!maskAllText) {\n return value;\n }\n\n // unmaskTextSelector takes precendence\n if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n return value;\n }\n\n if (\n maskAttributes.includes(key) ||\n // Need to mask `value` attribute for `` if it's a button-like\n // type\n (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n ) {\n return value.replace(/[\\S]/g, '*');\n }\n\n return value;\n}\n\nconst MEDIA_SELECTORS =\n 'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\n/**\n * The main replay integration class, to be passed to `init({ integrations: [] })`.\n */\nclass Replay {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'Replay';}\n\n /**\n * @inheritDoc\n */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Initial options passed to the replay integration, merged with default values.\n * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n * can only be finally set when setupOnce() is called.\n *\n * @private\n */\n\n constructor({\n flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n minReplayDuration = MIN_REPLAY_DURATION,\n maxReplayDuration = MAX_REPLAY_DURATION,\n stickySession = true,\n useCompression = true,\n workerUrl,\n _experiments = {},\n sessionSampleRate,\n errorSampleRate,\n maskAllText = true,\n maskAllInputs = true,\n blockAllMedia = true,\n\n mutationBreadcrumbLimit = 750,\n mutationLimit = 10000,\n\n slowClickTimeout = 7000,\n slowClickIgnoreSelectors = [],\n\n networkDetailAllowUrls = [],\n networkDetailDenyUrls = [],\n networkCaptureBodies = true,\n networkRequestHeaders = [],\n networkResponseHeaders = [],\n\n mask = [],\n maskAttributes = ['title', 'placeholder'],\n unmask = [],\n block = [],\n unblock = [],\n ignore = [],\n maskFn,\n\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n // eslint-disable-next-line deprecation/deprecation\n blockClass,\n // eslint-disable-next-line deprecation/deprecation\n blockSelector,\n // eslint-disable-next-line deprecation/deprecation\n maskInputOptions,\n // eslint-disable-next-line deprecation/deprecation\n maskTextClass,\n // eslint-disable-next-line deprecation/deprecation\n maskTextSelector,\n // eslint-disable-next-line deprecation/deprecation\n ignoreClass,\n } = {}) {\n this.name = Replay.id;\n\n const privacyOptions = getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n ignoreClass,\n });\n\n this._recordingOptions = {\n maskAllInputs,\n maskAllText,\n maskInputOptions: { ...(maskInputOptions || {}), password: true },\n maskTextFn: maskFn,\n maskInputFn: maskFn,\n maskAttributeFn: (key, value, el) =>\n maskAttribute({\n maskAttributes,\n maskAllText,\n privacyOptions,\n key,\n value,\n el,\n }),\n\n ...privacyOptions,\n\n // Our defaults\n slimDOMOptions: 'all',\n inlineStylesheet: true,\n // Disable inline images as it will increase segment/replay size\n inlineImages: false,\n // collect fonts, but be aware that `sentry.io` needs to be an allowed\n // origin for playback\n collectFonts: true,\n errorHandler: (err) => {\n try {\n err.__rrweb__ = true;\n } catch (error) {\n // ignore errors here\n // this can happen if the error is frozen or does not allow mutation for other reasons\n }\n },\n };\n\n this._initialOptions = {\n flushMinDelay,\n flushMaxDelay,\n minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n stickySession,\n sessionSampleRate,\n errorSampleRate,\n useCompression,\n workerUrl,\n blockAllMedia,\n maskAllInputs,\n maskAllText,\n mutationBreadcrumbLimit,\n mutationLimit,\n slowClickTimeout,\n slowClickIgnoreSelectors,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n _experiments,\n };\n\n if (typeof sessionSampleRate === 'number') {\n // eslint-disable-next-line\n console.warn(\n `[Replay] You are passing \\`sessionSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysSessionSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysSessionSampleRate: ${sessionSampleRate} })`,\n );\n\n this._initialOptions.sessionSampleRate = sessionSampleRate;\n }\n\n if (typeof errorSampleRate === 'number') {\n // eslint-disable-next-line\n console.warn(\n `[Replay] You are passing \\`errorSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysOnErrorSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysOnErrorSampleRate: ${errorSampleRate} })`,\n );\n\n this._initialOptions.errorSampleRate = errorSampleRate;\n }\n\n if (this._initialOptions.blockAllMedia) {\n // `blockAllMedia` is a more user friendly option to configure blocking\n // embedded media elements\n this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n ? MEDIA_SELECTORS\n : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n }\n\n if (this._isInitialized && isBrowser()) {\n throw new Error('Multiple Sentry Session Replay instances are not supported');\n }\n\n this._isInitialized = true;\n }\n\n /** If replay has already been initialized */\n get _isInitialized() {\n return _initialized;\n }\n\n /** Update _isInitialized */\n set _isInitialized(value) {\n _initialized = value;\n }\n\n /**\n * Setup and initialize replay container\n */\n setupOnce() {\n if (!isBrowser()) {\n return;\n }\n\n this._setup();\n\n // Once upon a time, we tried to create a transaction in `setupOnce` and it would\n // potentially create a transaction before some native SDK integrations have run\n // and applied their own global event processor. An example is:\n // https://github.com/getsentry/sentry-javascript/blob/b47ceafbdac7f8b99093ce6023726ad4687edc48/packages/browser/src/integrations/useragent.ts\n //\n // So we call `this._initialize()` in next event loop as a workaround to wait for other\n // global event processors to finish. This is no longer needed, but keeping it\n // here to avoid any future issues.\n setTimeout(() => this._initialize());\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will throw an error if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * PerformanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (!this._replay) {\n return;\n }\n\n this._replay.start();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, until an error occurs.\n */\n startBuffering() {\n if (!this._replay) {\n return;\n }\n\n this._replay.startBuffering();\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n stop() {\n if (!this._replay) {\n return Promise.resolve();\n }\n\n return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n flush(options) {\n if (!this._replay || !this._replay.isEnabled()) {\n return Promise.resolve();\n }\n\n return this._replay.sendBufferedReplayOrFlush(options);\n }\n\n /**\n * Get the current session ID.\n */\n getReplayId() {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.getSessionId();\n }\n /**\n * Initializes replay.\n */\n _initialize() {\n if (!this._replay) {\n return;\n }\n\n this._replay.initializeSampling();\n }\n\n /** Setup the integration. */\n _setup() {\n // Client is not available in constructor, so we need to wait until setupOnce\n const finalOptions = loadReplayOptionsFromClient(this._initialOptions);\n\n this._replay = new ReplayContainer({\n options: finalOptions,\n recordingOptions: this._recordingOptions,\n });\n }\n} Replay.__initStatic();\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions) {\n const client = getCurrentHub().getClient();\n const opt = client && (client.getOptions() );\n\n const finalOptions = { sessionSampleRate: 0, errorSampleRate: 0, ...dropUndefinedKeys(initialOptions) };\n\n if (!opt) {\n // eslint-disable-next-line no-console\n console.warn('SDK client is not available.');\n return finalOptions;\n }\n\n if (\n initialOptions.sessionSampleRate == null && // TODO remove once deprecated rates are removed\n initialOptions.errorSampleRate == null && // TODO remove once deprecated rates are removed\n opt.replaysSessionSampleRate == null &&\n opt.replaysOnErrorSampleRate == null\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n );\n }\n\n if (typeof opt.replaysSessionSampleRate === 'number') {\n finalOptions.sessionSampleRate = opt.replaysSessionSampleRate;\n }\n\n if (typeof opt.replaysOnErrorSampleRate === 'number') {\n finalOptions.errorSampleRate = opt.replaysOnErrorSampleRate;\n }\n\n return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers) {\n return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n\nexport { Replay };\n//# sourceMappingURL=index.js.map\n"],"names":["canvasService","canvasCtx","errorHandler","_takeFullSnapshot","handlers","NodeType","EventType2","IncrementalSource2","MouseInteractions2","PointerTypes2","NodeType$1","WINDOW","_sentry_utils__WEBPACK_IMPORTED_MODULE_0__","n2","REPLAY_SESSION_KEY","UNABLE_TO_SEND_REPLAY","isShadowRoot","n","host","shadowRoot","isNativeShadowDom","Object","prototype","toString","call","stringifyStylesheet","s","cssText","rules","cssRules","Array","from","stringifyRule","join","includes","replace","error","rule","importStringified","styleSheet","escapeImportStatement","split","length","statement","JSON","stringify","href","layerName","push","supportsText","media","mediaText","isCSSStyleRule","selectorText","cssStringified","Mirror","constructor","idNodeMap","Map","nodeMetaMap","WeakMap","getId","_a","id","getMeta","getNode","get","getIds","keys","removeNodeFromMap","delete","childNodes","forEach","childNode","has","hasNode","node","add","meta","set","oldNode","reset","shouldMaskInput","maskInputOptions","tagName","type","Boolean","toLowerCase","maskInputValue","isMasked","element","value","maskInputFn","text","repeat","str","toUpperCase","ORIGINAL_ATTRIBUTE_NAME","getInputType","hasAttribute","getInputValue","el","getAttribute","_id","tagNameRegex","genId","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","origin","quote1","path1","quote2","path2","path3","filePath","maybeQuote","test","url","indexOf","slice","stack","parts","part","pop","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","absoluteToDoc","doc","attributeValue","trim","a","createElement","getHref","document","transformAttribute","name","maskAttributeFn","getAbsoluteSrcsetString","pos","collectCharacters","regEx","chars","match","exec","substring","output","descriptorsStr","inParens","c","charAt","ignoreAttribute","_value","distanceToMatch","matchPredicate","limit","Infinity","distance","nodeType","ELEMENT_NODE","parentNode","createMatchPredicate","className","selector","matches","elementClassMatchesRegex","regex","eIndex","classList","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","parentElement","maskDistance","unmaskDistance","e","lowerIfExists","maybeAttr","serializeNodeWithId","options","mirror","blockClass","blockSelector","unblockSelector","skipChild","inlineStylesheet","maskTextFn","slimDOMOptions","dataURLOptions","inlineImages","recordCanvas","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","keepIframeSrcFn","newlyAddedElement","preserveWhiteSpace","_serializedNode","serializeNode","rootId","getRootId","docId","undefined","DOCUMENT_NODE","compatMode","Document","DOCUMENT_TYPE_NODE","DocumentType","publicId","systemId","serializeElementNode","isCustomElement","needBlock","_isBlockedElement","contains","getValidTagName","HTMLFormElement","processedTagName","attributes","len","i","attr","stylesheet","styleSheets","find","rel","_cssText","sheet","innerText","textContent","checked","forceMask","selected","__context","is2DCanvasBlank","canvas","ctx","getContext","x","width","y","height","getImageData","originalGetImageData","pixelBuffer","Uint32Array","Math","min","data","buffer","some","pixel","rr_dataURL","toDataURL","quality","canvasDataURL","blankCanvas","blankCanvasDataURL","oldValue","image","crossOrigin","recordInlineImage","removeEventListener","naturalWidth","naturalHeight","drawImage","err","console","warn","currentSrc","removeAttribute","complete","addEventListener","rr_mediaState","paused","rr_mediaCurrentTime","currentTime","scrollLeft","rr_scrollLeft","scrollTop","rr_scrollTop","getBoundingClientRect","class","rr_width","rr_height","src","contentDocument","rr_src","customElements","Element","isSVG","isSVGElement","ownerSVGElement","isCustom","TEXT_NODE","serializeTextNode","parentTagName","isStyle","isScript","isTextarea","nextSibling","previousSibling","textarea","isInputMasked","Text","CDATA_SECTION_NODE","CDATA","COMMENT_NODE","Comment","slimDOMExcluded","sn","comment","script","as","endsWith","headFavicon","headMetaDescKeywords","headMetaSocial","property","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","serializedNode","assign","recordChild","isShadowHost","headWhitespace","bypassOptions","childN","serializedChildNode","isElement$1","isShadow","onceIframeLoaded","iframeEl","listener","readyState","win","contentWindow","fired","timer","setTimeout","clearTimeout","blankUrl","location","iframeDoc","serializedIframeNode","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializedLinkNode","on","fn","target","capture","passive","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","map","throttle$1","func","wait","timeout","previous","args","now","Date","leading","remaining","context","apply","trailing","patch","source","replacement","original","wrapped","defineProperties","__rrweb_original__","enumerable","window","Proxy","Reflect","prop","receiver","nowTimestamp","getWindowScroll","_b","_c","_d","_e","_f","left","scrollingElement","pageXOffset","documentElement","body","top","pageYOffset","getWindowHeight","innerHeight","clientHeight","getWindowWidth","innerWidth","clientWidth","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isIgnored","legacy_isTouchEvent","event","changedTouches","isSerializedIframe","nodeName","isSerializedStylesheet","hasShadowRoot","getTime","StyleSheetMirror","styleIDMap","idStyleMap","newId","getStyle","generateId","getShadowHost","shadowHost","getRootNode","Node","DOCUMENT_FRAGMENT_NODE","inDom","ownerDocument","shadowHostInDom","getRootShadowHost","rootShadowHost","EventType","IncrementalSource","MouseInteractions","PointerTypes","DoubleLinkedList","head","tail","position","current","index","next","addNode","__ln","removeNode","moveKey","parentId","MutationBuffer","frozen","locked","texts","removes","mapRemoves","movedMap","addedSet","Set","movedSet","droppedSet","processMutations","mutations","processMutation","emit","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","shadowDomManager","addShadowRoot","iframe","childSn","attachIframe","observeAttachShadow","attachLinkElement","shift","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","payload","filter","attribute","style","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","mutationCb","unattachedDoc","m","implementation","createHTMLDocument","attributeName","item","setAttribute","old","pname","newValue","getPropertyValue","newPriority","getPropertyPriority","addedNodes","genAdds","removedNodes","nodeId","deepDelete","isAncestorRemoved","processedNodeManager","inOtherBuffer","targetId","init","key","freeze","canvasManager","unfreeze","isFrozen","lock","unlock","addsSet","_isParentRemoved","r","size","_isAncestorInSet","callbackWrapper","rest","cb","mutationBuffers","getEventTarget","path","composedPath","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","MutationObserver","__rrMutationObserver","angularZoneSymbol","Zone","__symbol__","observer","onMutation","bind","observe","attributeOldValue","characterData","characterDataOldValue","childList","subtree","initScrollObserver","scrollCb","sampling","updatePosition","evt","defaultView","scrollLeftTop","scroll","INPUT_TAGS","lastInputValueMap","getNestedCSSRulePositions","recurse","childRule","parentRule","CSSGroupingRule","hasNestedCSSRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","unshift","parentStyleSheet","getIdAndStyleId","styleMirror","styleId","ownerNode","initAdoptedStyleSheetObserver","hostId","patchTarget","ShadowRoot","originalPropertyDescriptor","getOwnPropertyDescriptor","defineProperty","configurable","sheets","result","adoptStyleSheets","initObservers","o","_hooks","currentWindow","mutationObserver","mousemoveHandler","initMoveObserver","mousemoveCb","timeBaseline","mousemove","threshold","callbackThreshold","mousemoveCallback","positions","wrappedCb","totalOffset","p","timeOffset","clientX","clientY","DragEvent","Drag","MouseEvent","MouseMove","TouchMove","h","mouseInteractionHandler","initMouseInteractionObserver","mouseInteractionCb","mouseInteraction","disableMap","currentPointerType","getHandler","pointerType","thisEventKey","eventKey","Mouse","Touch","Pen","MouseDown","MouseUp","startsWith","Click","Number","isNaN","eventName","handler","PointerEvent","TouchStart","TouchEnd","scrollHandler","viewportResizeHandler","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","inputHandler","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isTrusted","isChecked","cbWithDedup","querySelectorAll","v","lastInputValue","events","input","propertyDescriptor","HTMLInputElement","hookProperties","HTMLSelectElement","HTMLTextAreaElement","HTMLOptionElement","hookSetter","d","isRevoked","mediaInteractionHandler","initMediaInteractionObserver","mediaInteractionCb","volume","muted","playbackRate","styleSheetObserver","initStyleSheetObserver","styleSheetRuleCb","replaceSync","CSSStyleSheet","insertRule","thisArg","argumentsList","deleteRule","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","entries","typeKey","adoptedStyleSheetObserver","styleDeclarationObserver","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","CSSStyleDeclaration","priority","removeProperty","remove","fontObserver","collectFonts","initFontObserver","fontCb","fontMap","originalFontFace","FontFace","family","descriptors","fontFace","fontSource","Uint8Array","restoreHandler","fonts","selectionObserver","initSelectionObserver","param","selectionCb","collapsed","updateSelection","selection","getSelection","isCollapsed","ranges","count","rangeCount","range","getRangeAt","startContainer","startOffset","endContainer","endOffset","blocked","start","end","customElementObserver","initCustomElementObserver","customElementCb","define","b","disconnect","CrossOriginIframeMirror","generateIdFn","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","getRemoteIds","ids","IframeManagerNoop","crossOriginIframeMirror","crossOriginIframeRootIdMap","addLoadListener","IframeManager","iframes","crossOriginIframeMap","wrappedEmit","recordCrossOriginIframes","crossOriginIframeStyleMirror","handleMessage","loadListener","isAttachIframe","adoptedStyleSheets","message","crossOriginMessageEvent","iframeSourceWindow","transformedEvent","transformCrossOriginEvent","isCheckout","FullSnapshot","replaceIdOnNode","patchRootIdOnNode","timestamp","IncrementalSnapshot","Mutation","Meta","Load","DomContentLoaded","Plugin","Custom","replaceIds","ViewportResize","MediaInteraction","MouseInteraction","Scroll","CanvasMutation","Input","StyleSheetRule","StyleDeclaration","replaceStyleIds","Font","Selection","AdoptedStyleSheet","styles","iframeMirror","obj","isArray","child","ShadowDomManagerNoop","ShadowDomManager","shadowDoms","WeakSet","restoreHandlers","patchAttachShadow","iframeElement","manager","option","CanvasManagerNoop","StylesheetManager","trackedLinkElements","adoptedStyleSheetCb","linkEl","trackStylesheetInLinkElement","adoptedStyleSheetData","styleIds","CSSRule","ProcessedNodeManager","nodeMap","loop","periodicallyClear","requestAnimationFrame","clear","thisBuffer","buffers","destroy","wrapEvent","eWithTime","record","lastFullSnapshotEvent","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordAfter","getCanvasManager","inEmittingFrame","parent","passEmitsToParent","color","date","email","month","number","search","tel","time","week","select","radio","checkbox","polyfill","NodeList","DOMTokenList","incrementalSnapshotCount","eventProcessor","buf","postMessage","exceedCount","exceedTime","takeFullSnapshot","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","__RRWEB_EXCLUDE_IFRAME__","__RRWEB_EXCLUDE_SHADOW_DOM__","snapshot","slimDOM","initialOffset","canvasMutationCb","CustomElement","plugins","timestampToMs","isMs","timestampToS","addBreadcrumbEvent","replay","breadcrumb","category","triggerUserActivity","checkAndHandleExpiredSession","addUpdate","throttledAddEvent","tag","_sentry_utils__WEBPACK_IMPORTED_MODULE_1__","Fv","getClosestInteractive","closestInteractive","closest","getClickTargetNode","getTargetNode","ClickDetector","slowClickConfig","_addBreadcrumbEvent","_lastMutation","_lastScroll","_clicks","_timeout","_threshold","_scollTimeout","scrollTimeout","_replay","_ignoreSelector","addListeners","cleanupWindowOpen","nowInSeconds","_sentry_utils__WEBPACK_IMPORTED_MODULE_2__","hl","originalWindowOpen","splice","_teardown","removeListeners","_checkClickTimeout","handleClick","ignoreElement","SLOW_CLICK_TAGS","newClick","clickBreadcrumb","clickCount","click","abs","_scheduleCheckClicks","registerMutation","registerScroll","registerClick","_handleMultiClick","_getClicks","_checkClicks","timedOutClicks","mutationAfter","scrollAfter","_generateBreadcrumbs","hadScroll","hadMutation","timeAfterClickMs","endReason","route","getCurrentRoute","metric","createBreadcrumb","ATTRIBUTES_TO_RECORD","handleDomListener","isEnabled","handleDom","handlerData","getDomTarget","isClick","_sentry_utils__WEBPACK_IMPORTED_MODULE_3__","Rt","maxStringLength","getBaseDomBreadcrumb","clickDetector","altKey","metaKey","ctrlKey","shiftKey","getAttributesToRecord","normalizedKey","ENTRY_TYPES","resource","entry","entryType","initiatorType","responseEnd","startTime","decodedBodySize","encodedBodySize","responseStatus","transferSize","getAbsoluteTime","statusCode","paint","duration","navigation","domComplete","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","createPerformanceEntry","_sentry_utils__WEBPACK_IMPORTED_MODULE_4__","Z1","performance","timeOrigin","logInfo","shouldAddBreadcrumb","__SENTRY_DEBUG__","_sentry_utils__WEBPACK_IMPORTED_MODULE_6__","kg","info","addBreadcrumb","logInfoNextTick","hub","_sentry_core__WEBPACK_IMPORTED_MODULE_7__","Gd","logger","level","EventBufferSizeExceededError","Error","EventBufferArray","_totalSize","hasCheckout","hasEvents","addEvent","eventSize","finish","Promise","resolve","eventsRet","getEarliestTimestamp","sort","WorkerHandler","worker","_worker","ensureReady","_ensureReadyPromise","reject","success","once","terminate","method","arg","_getAndIncrementId","response","EventBufferCompressionWorker","_earliestTimestamp","_sendEventToWorker","_finishRequest","EventBufferProxy","_fallback","_compression","_used","_ensureWorkerIsLoadedPromise","_ensureWorkerIsLoaded","ensureWorkerIsLoaded","_switchToCompressionWorker","addEventPromises","all","hasSessionStorage","sessionStorage","isSampled","sampleRate","random","saveSession","session","setItem","makeSession","_sentry_utils__WEBPACK_IMPORTED_MODULE_8__","DM","started","lastActivity","segmentId","sampled","previousSessionId","createSession","sessionSampleRate","allowBuffering","stickySession","isExpired","initialTime","expiry","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","traceInternals","sessionOptions","existingSession","fetchSession","sessionStringFromStorage","getItem","sessionObj","parse","addEventSync","shouldAddEvent","_addEvent","eventBuffer","recordingMode","replayOptions","getOptions","eventAfterPossibleCallback","maybeApplyCallback","callback","beforeAddRecordingEvent","reason","stop","client","getClient","recordDroppedEvent","isPaused","timestampInMs","timeouts","sessionIdlePause","initialTimestamp","_experiments","isTransactionEvent","handleAfterSendEvent","enforceStatusCode","isBaseTransportSend","transport","getTransport","send","__sentry__baseTransport__","sendResponse","handleTransactionEvent","replayContext","contexts","trace","trace_id","traceIds","handleErrorEvent","event_id","errorIds","tags","replayId","beforeErrorSampling","sendBufferedReplayOrFlush","createPerformanceSpans","op","description","startTimestamp","endTimestamp","addNetworkBreadcrumb","_sentry_core__WEBPACK_IMPORTED_MODULE_9__","W","getBodySize","textEncoder","encode","URLSearchParams","FormData","formDataStr","_serializeFormData","Blob","ArrayBuffer","byteLength","parseContentLengthHeader","header","parseInt","getBodyString","makeNetworkReplayBreadcrumb","request","Jr","buildSkippedNetworkRequestOrResponse","bodySize","headers","_meta","warnings","buildNetworkRequestOrResponse","normalizedBody","normalizeNetworkBody","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","first","last","truncatedBody","jsonBody","e3","getAllowedHeaders","allowedHeaders","reduce","filteredHeaders","formData","urlMatches","urls","fullUrl","getFullUrl","baseURI","fixedUrl","URL","_sentry_utils__WEBPACK_IMPORTED_MODULE_11__","U0","captureFetchBreadcrumbToReplay","hint","_prepareFetchData","status_code","request_body_size","requestBodySize","response_body_size","responseBodySize","captureDetails","networkDetailAllowUrls","networkDetailDenyUrls","_getRequestInfo","networkCaptureBodies","networkRequestHeaders","fetchArgs","getHeadersFromOptions","requestBody","_getFetchRequestArgBody","bodyStr","_getResponseInfo","networkResponseHeaders","getAllHeaders","res","clone","bodyText","_parseFetchBody","e2","allHeaders","Headers","captureXhrBreadcrumbToReplay","_prepareXhrData","xhr","xhrInfo","_sentry_utils__WEBPACK_IMPORTED_MODULE_10__","xU","request_headers","getResponseHeaders","getAllResponseHeaders","acc","line","responseText","_LAST_BREADCRUMB","handleScopeListener","handleScope","scope","newBreadcrumb","getLastBreadcrumb","normalizeConsoleBreadcrumb","arguments","isTruncated","normalizedArgs","normalizedArg","stringified","addMemoryEntry","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memory","prepareReplayEvent","integrations","_integrations","eventHint","preparedEvent","_sentry_core__WEBPACK_IMPORTED_MODULE_14__","R","platform","metadata","getSdkMetadata","version","sdk","sendReplayRequest","recordingData","segment_id","eventContext","tunnel","preparedRecordingData","prepareRecordingData","payloadWithSequence","replayHeaders","enc","TextEncoder","sequence","getScope","dsn","getDsn","baseEvent","replay_start_timestamp","error_ids","trace_ids","replay_id","replay_type","replayEvent","sdkProcessingMetadata","envelope","_sentry_utils__WEBPACK_IMPORTED_MODULE_13__","Jd","Cd","HY","cause","TransportStatusCodeError","rateLimits","_sentry_utils__WEBPACK_IMPORTED_MODULE_15__","WG","Q","RateLimitError","sendReplay","replayData","retryConfig","interval","_sentry_core__WEBPACK_IMPORTED_MODULE_16__","_retryCount","captureExceptions","Tb","THROTTLED","ReplayContainer","recordingOptions","__init","__init2","__init3","__init4","__init5","__init6","performanceEntries","replayPerformanceEntries","_lastActivity","_isEnabled","_isPaused","_hasInitializedCoreListeners","_context","initialUrl","_recordingOptions","_options","_debouncedFlush","debounce","callbackReturnValue","timerId","maxTimerId","maxWait","max","invokeFunc","cancelTimers","debounced","cancel","flush","_flush","flushMinDelay","flushMaxDelay","_throttledAddEvent","throttle","maxCount","durationSeconds","counter","_cleanup","_getTotalCount","values","isThrottled","floor","wasThrottled","slowClickTimeout","slowClickIgnoreSelectors","initializeSampling","errorSampleRate","_initializeSessionForSampling","_handleException","_initializeRecording","startBuffering","startRecording","hadFirstEvent","_stopRecording","_isCheckout","updateClickDetectorForRecordingEvent","HTMLElement","setInitialState","createOptionsEvent","useCompressionOption","useCompression","blockAllMedia","networkDetailHasUrls","networkRequestHasHeaders","networkResponseHasHeaders","earliestEvent","_onMutationHandler","stopRecording","forceFlush","_removeListeners","force","deleteSession","removeItem","pause","resume","_checkSession","continueRecording","flushImmediate","activityTime","hasStoppedRecording","_updateUserActivity","_updateSessionActivity","_maybeSaveSession","cbResult","updateUserActivity","conditionalFlush","cancelFlush","getSessionId","urlPath","pathname","hash","_clearContext","lastTransaction","getTransaction","createEventBuffer","workerUrl","customWorkerUrl","Worker","_loadWorker","__SENTRY_EXCLUDE_REPLAY_WORKER__","createObjectURL","_addListeners","currentSession","_refreshSession","_handleVisibilityChange","_handleWindowBlur","_handleWindowFocus","_handleKeyboardEvent","addGlobalListeners","addScopeListener","oq","handleHistory","to","handleNetworkBreadcrumbs","beforeAddNetworkBreadcrumb","_isXhrBreadcrumb","enrichXhrBreadcrumb","reqSize","resSize","getResponseHeader","_isFetchBreadcrumb","enrichFetchBreadcrumb","handleFetch","fetchData","status","handleXhr","sentryXhrData","handleGlobalEventListener","includeAfterSendEventHandling","afterSendHandler","breadcrumbs","isSessionActive","exception","originalException","__rrweb__","log","isErrorEventSampled","shouldTagReplayId","addEventProcessor","_sentry_core__WEBPACK_IMPORTED_MODULE_12__","cc","dsc","transaction","_performanceCleanupCallback","setupPerformanceObserver","addPerformanceEntry","onEntries","clearCallbacks","_sentry_internal_tracing__WEBPACK_IMPORTED_MODULE_5__","_j","$A","getLargestContentfulPaint","lastEntry","clearCallback","visibilityState","_doChangeToForegroundTasks","_doChangeToBackgroundTasks","handleKeyboardEvent","getKeyboardBreadcrumb","isContentEditable","isCharacterKey","baseBreadcrumb","expired","_createCustomBreadcrumb","_addPerformanceEntries","createPerformanceEntries","concat","_updateInitialTimestampFromEventBuffer","_popEventContext","_runFlush","tooShort","minReplayDuration","tooLong","_flushLock","mutationLimit","mutationBreadcrumbLimit","overMutationLimit","getOption","selectors","defaultSelectors","deprecatedClassOption","deprecatedSelectorOption","deprecatedSelectors","allSelectors","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","Replay","__initStatic","mask","maskAttributes","unmask","block","unblock","ignore","maskFn","privacyOptions","getPrivacyOptions","maskSelector","unmaskSelector","RegExp","password","maskAttribute","_initialOptions","_getMergedNetworkHeaders","_isInitialized","_sentry_utils__WEBPACK_IMPORTED_MODULE_17__","j","setupOnce","_setup","_initialize","getReplayId","finalOptions","loadReplayOptionsFromClient","initialOptions","opt","replaysSessionSampleRate","replaysOnErrorSampleRate"],"sourceRoot":""}