zip-fs-full-es5.js 875 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036
  1. (function (global, factory) {
  2. typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
  3. typeof define === 'function' && define.amd ? define(['exports'], factory) :
  4. (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.zip = {}));
  5. })(this, (function (exports) { 'use strict';
  6. function _regeneratorRuntime() {
  7. /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
  8. _regeneratorRuntime = function () {
  9. return exports;
  10. };
  11. var exports = {},
  12. Op = Object.prototype,
  13. hasOwn = Op.hasOwnProperty,
  14. $Symbol = "function" == typeof Symbol ? Symbol : {},
  15. iteratorSymbol = $Symbol.iterator || "@@iterator",
  16. asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
  17. toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  18. function define(obj, key, value) {
  19. return Object.defineProperty(obj, key, {
  20. value: value,
  21. enumerable: !0,
  22. configurable: !0,
  23. writable: !0
  24. }), obj[key];
  25. }
  26. try {
  27. define({}, "");
  28. } catch (err) {
  29. define = function (obj, key, value) {
  30. return obj[key] = value;
  31. };
  32. }
  33. function wrap(innerFn, outerFn, self, tryLocsList) {
  34. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
  35. generator = Object.create(protoGenerator.prototype),
  36. context = new Context(tryLocsList || []);
  37. return generator._invoke = function (innerFn, self, context) {
  38. var state = "suspendedStart";
  39. return function (method, arg) {
  40. if ("executing" === state) throw new Error("Generator is already running");
  41. if ("completed" === state) {
  42. if ("throw" === method) throw arg;
  43. return doneResult();
  44. }
  45. for (context.method = method, context.arg = arg;;) {
  46. var delegate = context.delegate;
  47. if (delegate) {
  48. var delegateResult = maybeInvokeDelegate(delegate, context);
  49. if (delegateResult) {
  50. if (delegateResult === ContinueSentinel) continue;
  51. return delegateResult;
  52. }
  53. }
  54. if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
  55. if ("suspendedStart" === state) throw state = "completed", context.arg;
  56. context.dispatchException(context.arg);
  57. } else "return" === context.method && context.abrupt("return", context.arg);
  58. state = "executing";
  59. var record = tryCatch(innerFn, self, context);
  60. if ("normal" === record.type) {
  61. if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
  62. return {
  63. value: record.arg,
  64. done: context.done
  65. };
  66. }
  67. "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
  68. }
  69. };
  70. }(innerFn, self, context), generator;
  71. }
  72. function tryCatch(fn, obj, arg) {
  73. try {
  74. return {
  75. type: "normal",
  76. arg: fn.call(obj, arg)
  77. };
  78. } catch (err) {
  79. return {
  80. type: "throw",
  81. arg: err
  82. };
  83. }
  84. }
  85. exports.wrap = wrap;
  86. var ContinueSentinel = {};
  87. function Generator() {}
  88. function GeneratorFunction() {}
  89. function GeneratorFunctionPrototype() {}
  90. var IteratorPrototype = {};
  91. define(IteratorPrototype, iteratorSymbol, function () {
  92. return this;
  93. });
  94. var getProto = Object.getPrototypeOf,
  95. NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  96. NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
  97. var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
  98. function defineIteratorMethods(prototype) {
  99. ["next", "throw", "return"].forEach(function (method) {
  100. define(prototype, method, function (arg) {
  101. return this._invoke(method, arg);
  102. });
  103. });
  104. }
  105. function AsyncIterator(generator, PromiseImpl) {
  106. function invoke(method, arg, resolve, reject) {
  107. var record = tryCatch(generator[method], generator, arg);
  108. if ("throw" !== record.type) {
  109. var result = record.arg,
  110. value = result.value;
  111. return value && "object" == typeof value && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
  112. invoke("next", value, resolve, reject);
  113. }, function (err) {
  114. invoke("throw", err, resolve, reject);
  115. }) : PromiseImpl.resolve(value).then(function (unwrapped) {
  116. result.value = unwrapped, resolve(result);
  117. }, function (error) {
  118. return invoke("throw", error, resolve, reject);
  119. });
  120. }
  121. reject(record.arg);
  122. }
  123. var previousPromise;
  124. this._invoke = function (method, arg) {
  125. function callInvokeWithMethodAndArg() {
  126. return new PromiseImpl(function (resolve, reject) {
  127. invoke(method, arg, resolve, reject);
  128. });
  129. }
  130. return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
  131. };
  132. }
  133. function maybeInvokeDelegate(delegate, context) {
  134. var method = delegate.iterator[context.method];
  135. if (undefined === method) {
  136. if (context.delegate = null, "throw" === context.method) {
  137. if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
  138. context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
  139. }
  140. return ContinueSentinel;
  141. }
  142. var record = tryCatch(method, delegate.iterator, context.arg);
  143. if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
  144. var info = record.arg;
  145. return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);
  146. }
  147. function pushTryEntry(locs) {
  148. var entry = {
  149. tryLoc: locs[0]
  150. };
  151. 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
  152. }
  153. function resetTryEntry(entry) {
  154. var record = entry.completion || {};
  155. record.type = "normal", delete record.arg, entry.completion = record;
  156. }
  157. function Context(tryLocsList) {
  158. this.tryEntries = [{
  159. tryLoc: "root"
  160. }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
  161. }
  162. function values(iterable) {
  163. if (iterable) {
  164. var iteratorMethod = iterable[iteratorSymbol];
  165. if (iteratorMethod) return iteratorMethod.call(iterable);
  166. if ("function" == typeof iterable.next) return iterable;
  167. if (!isNaN(iterable.length)) {
  168. var i = -1,
  169. next = function next() {
  170. for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
  171. return next.value = undefined, next.done = !0, next;
  172. };
  173. return next.next = next;
  174. }
  175. }
  176. return {
  177. next: doneResult
  178. };
  179. }
  180. function doneResult() {
  181. return {
  182. value: undefined,
  183. done: !0
  184. };
  185. }
  186. return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
  187. var ctor = "function" == typeof genFun && genFun.constructor;
  188. return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
  189. }, exports.mark = function (genFun) {
  190. return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;
  191. }, exports.awrap = function (arg) {
  192. return {
  193. __await: arg
  194. };
  195. }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
  196. return this;
  197. }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
  198. void 0 === PromiseImpl && (PromiseImpl = Promise);
  199. var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
  200. return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
  201. return result.done ? result.value : iter.next();
  202. });
  203. }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
  204. return this;
  205. }), define(Gp, "toString", function () {
  206. return "[object Generator]";
  207. }), exports.keys = function (object) {
  208. var keys = [];
  209. for (var key in object) keys.push(key);
  210. return keys.reverse(), function next() {
  211. for (; keys.length;) {
  212. var key = keys.pop();
  213. if (key in object) return next.value = key, next.done = !1, next;
  214. }
  215. return next.done = !0, next;
  216. };
  217. }, exports.values = values, Context.prototype = {
  218. constructor: Context,
  219. reset: function (skipTempReset) {
  220. if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);
  221. },
  222. stop: function () {
  223. this.done = !0;
  224. var rootRecord = this.tryEntries[0].completion;
  225. if ("throw" === rootRecord.type) throw rootRecord.arg;
  226. return this.rval;
  227. },
  228. dispatchException: function (exception) {
  229. if (this.done) throw exception;
  230. var context = this;
  231. function handle(loc, caught) {
  232. return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
  233. }
  234. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  235. var entry = this.tryEntries[i],
  236. record = entry.completion;
  237. if ("root" === entry.tryLoc) return handle("end");
  238. if (entry.tryLoc <= this.prev) {
  239. var hasCatch = hasOwn.call(entry, "catchLoc"),
  240. hasFinally = hasOwn.call(entry, "finallyLoc");
  241. if (hasCatch && hasFinally) {
  242. if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
  243. if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
  244. } else if (hasCatch) {
  245. if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
  246. } else {
  247. if (!hasFinally) throw new Error("try statement without catch or finally");
  248. if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
  249. }
  250. }
  251. }
  252. },
  253. abrupt: function (type, arg) {
  254. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  255. var entry = this.tryEntries[i];
  256. if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
  257. var finallyEntry = entry;
  258. break;
  259. }
  260. }
  261. finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
  262. var record = finallyEntry ? finallyEntry.completion : {};
  263. return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
  264. },
  265. complete: function (record, afterLoc) {
  266. if ("throw" === record.type) throw record.arg;
  267. return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;
  268. },
  269. finish: function (finallyLoc) {
  270. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  271. var entry = this.tryEntries[i];
  272. if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
  273. }
  274. },
  275. catch: function (tryLoc) {
  276. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  277. var entry = this.tryEntries[i];
  278. if (entry.tryLoc === tryLoc) {
  279. var record = entry.completion;
  280. if ("throw" === record.type) {
  281. var thrown = record.arg;
  282. resetTryEntry(entry);
  283. }
  284. return thrown;
  285. }
  286. }
  287. throw new Error("illegal catch attempt");
  288. },
  289. delegateYield: function (iterable, resultName, nextLoc) {
  290. return this.delegate = {
  291. iterator: values(iterable),
  292. resultName: resultName,
  293. nextLoc: nextLoc
  294. }, "next" === this.method && (this.arg = undefined), ContinueSentinel;
  295. }
  296. }, exports;
  297. }
  298. function _AwaitValue(value) {
  299. this.wrapped = value;
  300. }
  301. function _AsyncGenerator(gen) {
  302. var front, back;
  303. function send(key, arg) {
  304. return new Promise(function (resolve, reject) {
  305. var request = {
  306. key: key,
  307. arg: arg,
  308. resolve: resolve,
  309. reject: reject,
  310. next: null
  311. };
  312. if (back) {
  313. back = back.next = request;
  314. } else {
  315. front = back = request;
  316. resume(key, arg);
  317. }
  318. });
  319. }
  320. function resume(key, arg) {
  321. try {
  322. var result = gen[key](arg);
  323. var value = result.value;
  324. var wrappedAwait = value instanceof _AwaitValue;
  325. Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
  326. if (wrappedAwait) {
  327. resume(key === "return" ? "return" : "next", arg);
  328. return;
  329. }
  330. settle(result.done ? "return" : "normal", arg);
  331. }, function (err) {
  332. resume("throw", err);
  333. });
  334. } catch (err) {
  335. settle("throw", err);
  336. }
  337. }
  338. function settle(type, value) {
  339. switch (type) {
  340. case "return":
  341. front.resolve({
  342. value: value,
  343. done: true
  344. });
  345. break;
  346. case "throw":
  347. front.reject(value);
  348. break;
  349. default:
  350. front.resolve({
  351. value: value,
  352. done: false
  353. });
  354. break;
  355. }
  356. front = front.next;
  357. if (front) {
  358. resume(front.key, front.arg);
  359. } else {
  360. back = null;
  361. }
  362. }
  363. this._invoke = send;
  364. if (typeof gen.return !== "function") {
  365. this.return = undefined;
  366. }
  367. }
  368. _AsyncGenerator.prototype[typeof Symbol === "function" && Symbol.asyncIterator || "@@asyncIterator"] = function () {
  369. return this;
  370. };
  371. _AsyncGenerator.prototype.next = function (arg) {
  372. return this._invoke("next", arg);
  373. };
  374. _AsyncGenerator.prototype.throw = function (arg) {
  375. return this._invoke("throw", arg);
  376. };
  377. _AsyncGenerator.prototype.return = function (arg) {
  378. return this._invoke("return", arg);
  379. };
  380. function _wrapAsyncGenerator(fn) {
  381. return function () {
  382. return new _AsyncGenerator(fn.apply(this, arguments));
  383. };
  384. }
  385. function _awaitAsyncGenerator(value) {
  386. return new _AwaitValue(value);
  387. }
  388. function _classCallCheck(instance, Constructor) {
  389. if (!(instance instanceof Constructor)) {
  390. throw new TypeError("Cannot call a class as a function");
  391. }
  392. }
  393. function _defineProperties(target, props) {
  394. for (var i = 0; i < props.length; i++) {
  395. var descriptor = props[i];
  396. descriptor.enumerable = descriptor.enumerable || false;
  397. descriptor.configurable = true;
  398. if ("value" in descriptor) descriptor.writable = true;
  399. Object.defineProperty(target, descriptor.key, descriptor);
  400. }
  401. }
  402. function _createClass(Constructor, protoProps, staticProps) {
  403. if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  404. if (staticProps) _defineProperties(Constructor, staticProps);
  405. Object.defineProperty(Constructor, "prototype", {
  406. writable: false
  407. });
  408. return Constructor;
  409. }
  410. function _defineProperty(obj, key, value) {
  411. if (key in obj) {
  412. Object.defineProperty(obj, key, {
  413. value: value,
  414. enumerable: true,
  415. configurable: true,
  416. writable: true
  417. });
  418. } else {
  419. obj[key] = value;
  420. }
  421. return obj;
  422. }
  423. function _inherits(subClass, superClass) {
  424. if (typeof superClass !== "function" && superClass !== null) {
  425. throw new TypeError("Super expression must either be null or a function");
  426. }
  427. subClass.prototype = Object.create(superClass && superClass.prototype, {
  428. constructor: {
  429. value: subClass,
  430. writable: true,
  431. configurable: true
  432. }
  433. });
  434. Object.defineProperty(subClass, "prototype", {
  435. writable: false
  436. });
  437. if (superClass) _setPrototypeOf(subClass, superClass);
  438. }
  439. function _getPrototypeOf(o) {
  440. _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
  441. return o.__proto__ || Object.getPrototypeOf(o);
  442. };
  443. return _getPrototypeOf(o);
  444. }
  445. function _setPrototypeOf(o, p) {
  446. _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
  447. o.__proto__ = p;
  448. return o;
  449. };
  450. return _setPrototypeOf(o, p);
  451. }
  452. function _isNativeReflectConstruct() {
  453. if (typeof Reflect === "undefined" || !Reflect.construct) return false;
  454. if (Reflect.construct.sham) return false;
  455. if (typeof Proxy === "function") return true;
  456. try {
  457. Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
  458. return true;
  459. } catch (e) {
  460. return false;
  461. }
  462. }
  463. function _assertThisInitialized(self) {
  464. if (self === void 0) {
  465. throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  466. }
  467. return self;
  468. }
  469. function _possibleConstructorReturn(self, call) {
  470. if (call && (typeof call === "object" || typeof call === "function")) {
  471. return call;
  472. } else if (call !== void 0) {
  473. throw new TypeError("Derived constructors may only return object or undefined");
  474. }
  475. return _assertThisInitialized(self);
  476. }
  477. function _createSuper(Derived) {
  478. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  479. return function _createSuperInternal() {
  480. var Super = _getPrototypeOf(Derived),
  481. result;
  482. if (hasNativeReflectConstruct) {
  483. var NewTarget = _getPrototypeOf(this).constructor;
  484. result = Reflect.construct(Super, arguments, NewTarget);
  485. } else {
  486. result = Super.apply(this, arguments);
  487. }
  488. return _possibleConstructorReturn(this, result);
  489. };
  490. }
  491. function _superPropBase(object, property) {
  492. while (!Object.prototype.hasOwnProperty.call(object, property)) {
  493. object = _getPrototypeOf(object);
  494. if (object === null) break;
  495. }
  496. return object;
  497. }
  498. function _get() {
  499. if (typeof Reflect !== "undefined" && Reflect.get) {
  500. _get = Reflect.get.bind();
  501. } else {
  502. _get = function _get(target, property, receiver) {
  503. var base = _superPropBase(target, property);
  504. if (!base) return;
  505. var desc = Object.getOwnPropertyDescriptor(base, property);
  506. if (desc.get) {
  507. return desc.get.call(arguments.length < 3 ? target : receiver);
  508. }
  509. return desc.value;
  510. };
  511. }
  512. return _get.apply(this, arguments);
  513. }
  514. function _slicedToArray(arr, i) {
  515. return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
  516. }
  517. function _toConsumableArray(arr) {
  518. return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
  519. }
  520. function _arrayWithoutHoles(arr) {
  521. if (Array.isArray(arr)) return _arrayLikeToArray(arr);
  522. }
  523. function _arrayWithHoles(arr) {
  524. if (Array.isArray(arr)) return arr;
  525. }
  526. function _iterableToArray(iter) {
  527. if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
  528. }
  529. function _iterableToArrayLimit(arr, i) {
  530. var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
  531. if (_i == null) return;
  532. var _arr = [];
  533. var _n = true;
  534. var _d = false;
  535. var _s, _e;
  536. try {
  537. for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
  538. _arr.push(_s.value);
  539. if (i && _arr.length === i) break;
  540. }
  541. } catch (err) {
  542. _d = true;
  543. _e = err;
  544. } finally {
  545. try {
  546. if (!_n && _i["return"] != null) _i["return"]();
  547. } finally {
  548. if (_d) throw _e;
  549. }
  550. }
  551. return _arr;
  552. }
  553. function _unsupportedIterableToArray(o, minLen) {
  554. if (!o) return;
  555. if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  556. var n = Object.prototype.toString.call(o).slice(8, -1);
  557. if (n === "Object" && o.constructor) n = o.constructor.name;
  558. if (n === "Map" || n === "Set") return Array.from(o);
  559. if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
  560. }
  561. function _arrayLikeToArray(arr, len) {
  562. if (len == null || len > arr.length) len = arr.length;
  563. for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
  564. return arr2;
  565. }
  566. function _nonIterableSpread() {
  567. throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  568. }
  569. function _nonIterableRest() {
  570. throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  571. }
  572. function _createForOfIteratorHelper(o, allowArrayLike) {
  573. var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
  574. if (!it) {
  575. if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
  576. if (it) o = it;
  577. var i = 0;
  578. var F = function () {};
  579. return {
  580. s: F,
  581. n: function () {
  582. if (i >= o.length) return {
  583. done: true
  584. };
  585. return {
  586. done: false,
  587. value: o[i++]
  588. };
  589. },
  590. e: function (e) {
  591. throw e;
  592. },
  593. f: F
  594. };
  595. }
  596. throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  597. }
  598. var normalCompletion = true,
  599. didErr = false,
  600. err;
  601. return {
  602. s: function () {
  603. it = it.call(o);
  604. },
  605. n: function () {
  606. var step = it.next();
  607. normalCompletion = step.done;
  608. return step;
  609. },
  610. e: function (e) {
  611. didErr = true;
  612. err = e;
  613. },
  614. f: function () {
  615. try {
  616. if (!normalCompletion && it.return != null) it.return();
  617. } finally {
  618. if (didErr) throw err;
  619. }
  620. }
  621. };
  622. }
  623. var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
  624. var check = function (it) {
  625. return it && it.Math == Math && it;
  626. };
  627. // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
  628. var global$F =
  629. // eslint-disable-next-line es-x/no-global-this -- safe
  630. check(typeof globalThis == 'object' && globalThis) ||
  631. check(typeof window == 'object' && window) ||
  632. // eslint-disable-next-line no-restricted-globals -- safe
  633. check(typeof self == 'object' && self) ||
  634. check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
  635. // eslint-disable-next-line no-new-func -- fallback
  636. (function () { return this; })() || Function('return this')();
  637. var objectGetOwnPropertyDescriptor = {};
  638. var fails$H = function (exec) {
  639. try {
  640. return !!exec();
  641. } catch (error) {
  642. return true;
  643. }
  644. };
  645. var fails$G = fails$H;
  646. // Detect IE8's incomplete defineProperty implementation
  647. var descriptors = !fails$G(function () {
  648. // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
  649. return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
  650. });
  651. var fails$F = fails$H;
  652. var functionBindNative = !fails$F(function () {
  653. // eslint-disable-next-line es-x/no-function-prototype-bind -- safe
  654. var test = (function () { /* empty */ }).bind();
  655. // eslint-disable-next-line no-prototype-builtins -- safe
  656. return typeof test != 'function' || test.hasOwnProperty('prototype');
  657. });
  658. var NATIVE_BIND$3 = functionBindNative;
  659. var call$r = Function.prototype.call;
  660. var functionCall = NATIVE_BIND$3 ? call$r.bind(call$r) : function () {
  661. return call$r.apply(call$r, arguments);
  662. };
  663. var objectPropertyIsEnumerable = {};
  664. var $propertyIsEnumerable$2 = {}.propertyIsEnumerable;
  665. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  666. var getOwnPropertyDescriptor$6 = Object.getOwnPropertyDescriptor;
  667. // Nashorn ~ JDK8 bug
  668. var NASHORN_BUG = getOwnPropertyDescriptor$6 && !$propertyIsEnumerable$2.call({ 1: 2 }, 1);
  669. // `Object.prototype.propertyIsEnumerable` method implementation
  670. // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
  671. objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  672. var descriptor = getOwnPropertyDescriptor$6(this, V);
  673. return !!descriptor && descriptor.enumerable;
  674. } : $propertyIsEnumerable$2;
  675. var createPropertyDescriptor$7 = function (bitmap, value) {
  676. return {
  677. enumerable: !(bitmap & 1),
  678. configurable: !(bitmap & 2),
  679. writable: !(bitmap & 4),
  680. value: value
  681. };
  682. };
  683. var NATIVE_BIND$2 = functionBindNative;
  684. var FunctionPrototype$3 = Function.prototype;
  685. var bind$b = FunctionPrototype$3.bind;
  686. var call$q = FunctionPrototype$3.call;
  687. var uncurryThis$I = NATIVE_BIND$2 && bind$b.bind(call$q, call$q);
  688. var functionUncurryThis = NATIVE_BIND$2 ? function (fn) {
  689. return fn && uncurryThis$I(fn);
  690. } : function (fn) {
  691. return fn && function () {
  692. return call$q.apply(fn, arguments);
  693. };
  694. };
  695. var uncurryThis$H = functionUncurryThis;
  696. var toString$d = uncurryThis$H({}.toString);
  697. var stringSlice$9 = uncurryThis$H(''.slice);
  698. var classofRaw$1 = function (it) {
  699. return stringSlice$9(toString$d(it), 8, -1);
  700. };
  701. var uncurryThis$G = functionUncurryThis;
  702. var fails$E = fails$H;
  703. var classof$f = classofRaw$1;
  704. var $Object$4 = Object;
  705. var split$3 = uncurryThis$G(''.split);
  706. // fallback for non-array-like ES3 and non-enumerable old V8 strings
  707. var indexedObject = fails$E(function () {
  708. // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
  709. // eslint-disable-next-line no-prototype-builtins -- safe
  710. return !$Object$4('z').propertyIsEnumerable(0);
  711. }) ? function (it) {
  712. return classof$f(it) == 'String' ? split$3(it, '') : $Object$4(it);
  713. } : $Object$4;
  714. var $TypeError$h = TypeError;
  715. // `RequireObjectCoercible` abstract operation
  716. // https://tc39.es/ecma262/#sec-requireobjectcoercible
  717. var requireObjectCoercible$8 = function (it) {
  718. if (it == undefined) throw $TypeError$h("Can't call method on " + it);
  719. return it;
  720. };
  721. // toObject with fallback for non-array-like ES3 strings
  722. var IndexedObject$3 = indexedObject;
  723. var requireObjectCoercible$7 = requireObjectCoercible$8;
  724. var toIndexedObject$b = function (it) {
  725. return IndexedObject$3(requireObjectCoercible$7(it));
  726. };
  727. // `IsCallable` abstract operation
  728. // https://tc39.es/ecma262/#sec-iscallable
  729. var isCallable$s = function (argument) {
  730. return typeof argument == 'function';
  731. };
  732. var isCallable$r = isCallable$s;
  733. var isObject$k = function (it) {
  734. return typeof it == 'object' ? it !== null : isCallable$r(it);
  735. };
  736. var global$E = global$F;
  737. var isCallable$q = isCallable$s;
  738. var aFunction = function (argument) {
  739. return isCallable$q(argument) ? argument : undefined;
  740. };
  741. var getBuiltIn$b = function (namespace, method) {
  742. return arguments.length < 2 ? aFunction(global$E[namespace]) : global$E[namespace] && global$E[namespace][method];
  743. };
  744. var uncurryThis$F = functionUncurryThis;
  745. var objectIsPrototypeOf = uncurryThis$F({}.isPrototypeOf);
  746. var getBuiltIn$a = getBuiltIn$b;
  747. var engineUserAgent = getBuiltIn$a('navigator', 'userAgent') || '';
  748. var global$D = global$F;
  749. var userAgent$5 = engineUserAgent;
  750. var process$3 = global$D.process;
  751. var Deno$1 = global$D.Deno;
  752. var versions = process$3 && process$3.versions || Deno$1 && Deno$1.version;
  753. var v8 = versions && versions.v8;
  754. var match, version;
  755. if (v8) {
  756. match = v8.split('.');
  757. // in old Chrome, versions of V8 isn't V8 = Chrome / 10
  758. // but their correct versions are not interesting for us
  759. version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
  760. }
  761. // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`
  762. // so check `userAgent` even if `.v8` exists, but 0
  763. if (!version && userAgent$5) {
  764. match = userAgent$5.match(/Edge\/(\d+)/);
  765. if (!match || match[1] >= 74) {
  766. match = userAgent$5.match(/Chrome\/(\d+)/);
  767. if (match) version = +match[1];
  768. }
  769. }
  770. var engineV8Version = version;
  771. /* eslint-disable es-x/no-symbol -- required for testing */
  772. var V8_VERSION$3 = engineV8Version;
  773. var fails$D = fails$H;
  774. // eslint-disable-next-line es-x/no-object-getownpropertysymbols -- required for testing
  775. var nativeSymbol = !!Object.getOwnPropertySymbols && !fails$D(function () {
  776. var symbol = Symbol();
  777. // Chrome 38 Symbol has incorrect toString conversion
  778. // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances
  779. return !String(symbol) || !(Object(symbol) instanceof Symbol) ||
  780. // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
  781. !Symbol.sham && V8_VERSION$3 && V8_VERSION$3 < 41;
  782. });
  783. /* eslint-disable es-x/no-symbol -- required for testing */
  784. var NATIVE_SYMBOL$6 = nativeSymbol;
  785. var useSymbolAsUid = NATIVE_SYMBOL$6
  786. && !Symbol.sham
  787. && typeof Symbol.iterator == 'symbol';
  788. var getBuiltIn$9 = getBuiltIn$b;
  789. var isCallable$p = isCallable$s;
  790. var isPrototypeOf$7 = objectIsPrototypeOf;
  791. var USE_SYMBOL_AS_UID$1 = useSymbolAsUid;
  792. var $Object$3 = Object;
  793. var isSymbol$6 = USE_SYMBOL_AS_UID$1 ? function (it) {
  794. return typeof it == 'symbol';
  795. } : function (it) {
  796. var $Symbol = getBuiltIn$9('Symbol');
  797. return isCallable$p($Symbol) && isPrototypeOf$7($Symbol.prototype, $Object$3(it));
  798. };
  799. var $String$3 = String;
  800. var tryToString$7 = function (argument) {
  801. try {
  802. return $String$3(argument);
  803. } catch (error) {
  804. return 'Object';
  805. }
  806. };
  807. var isCallable$o = isCallable$s;
  808. var tryToString$6 = tryToString$7;
  809. var $TypeError$g = TypeError;
  810. // `Assert: IsCallable(argument) is true`
  811. var aCallable$9 = function (argument) {
  812. if (isCallable$o(argument)) return argument;
  813. throw $TypeError$g(tryToString$6(argument) + ' is not a function');
  814. };
  815. var aCallable$8 = aCallable$9;
  816. // `GetMethod` abstract operation
  817. // https://tc39.es/ecma262/#sec-getmethod
  818. var getMethod$5 = function (V, P) {
  819. var func = V[P];
  820. return func == null ? undefined : aCallable$8(func);
  821. };
  822. var call$p = functionCall;
  823. var isCallable$n = isCallable$s;
  824. var isObject$j = isObject$k;
  825. var $TypeError$f = TypeError;
  826. // `OrdinaryToPrimitive` abstract operation
  827. // https://tc39.es/ecma262/#sec-ordinarytoprimitive
  828. var ordinaryToPrimitive$1 = function (input, pref) {
  829. var fn, val;
  830. if (pref === 'string' && isCallable$n(fn = input.toString) && !isObject$j(val = call$p(fn, input))) return val;
  831. if (isCallable$n(fn = input.valueOf) && !isObject$j(val = call$p(fn, input))) return val;
  832. if (pref !== 'string' && isCallable$n(fn = input.toString) && !isObject$j(val = call$p(fn, input))) return val;
  833. throw $TypeError$f("Can't convert object to primitive value");
  834. };
  835. var shared$7 = {exports: {}};
  836. var isPure = false;
  837. var global$C = global$F;
  838. // eslint-disable-next-line es-x/no-object-defineproperty -- safe
  839. var defineProperty$e = Object.defineProperty;
  840. var defineGlobalProperty$3 = function (key, value) {
  841. try {
  842. defineProperty$e(global$C, key, { value: value, configurable: true, writable: true });
  843. } catch (error) {
  844. global$C[key] = value;
  845. } return value;
  846. };
  847. var global$B = global$F;
  848. var defineGlobalProperty$2 = defineGlobalProperty$3;
  849. var SHARED = '__core-js_shared__';
  850. var store$3 = global$B[SHARED] || defineGlobalProperty$2(SHARED, {});
  851. var sharedStore = store$3;
  852. var store$2 = sharedStore;
  853. (shared$7.exports = function (key, value) {
  854. return store$2[key] || (store$2[key] = value !== undefined ? value : {});
  855. })('versions', []).push({
  856. version: '3.23.2',
  857. mode: 'global',
  858. copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',
  859. license: 'https://github.com/zloirock/core-js/blob/v3.23.2/LICENSE',
  860. source: 'https://github.com/zloirock/core-js'
  861. });
  862. var requireObjectCoercible$6 = requireObjectCoercible$8;
  863. var $Object$2 = Object;
  864. // `ToObject` abstract operation
  865. // https://tc39.es/ecma262/#sec-toobject
  866. var toObject$d = function (argument) {
  867. return $Object$2(requireObjectCoercible$6(argument));
  868. };
  869. var uncurryThis$E = functionUncurryThis;
  870. var toObject$c = toObject$d;
  871. var hasOwnProperty = uncurryThis$E({}.hasOwnProperty);
  872. // `HasOwnProperty` abstract operation
  873. // https://tc39.es/ecma262/#sec-hasownproperty
  874. // eslint-disable-next-line es-x/no-object-hasown -- safe
  875. var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) {
  876. return hasOwnProperty(toObject$c(it), key);
  877. };
  878. var uncurryThis$D = functionUncurryThis;
  879. var id$1 = 0;
  880. var postfix = Math.random();
  881. var toString$c = uncurryThis$D(1.0.toString);
  882. var uid$5 = function (key) {
  883. return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$c(++id$1 + postfix, 36);
  884. };
  885. var global$A = global$F;
  886. var shared$6 = shared$7.exports;
  887. var hasOwn$k = hasOwnProperty_1;
  888. var uid$4 = uid$5;
  889. var NATIVE_SYMBOL$5 = nativeSymbol;
  890. var USE_SYMBOL_AS_UID = useSymbolAsUid;
  891. var WellKnownSymbolsStore$1 = shared$6('wks');
  892. var Symbol$1 = global$A.Symbol;
  893. var symbolFor = Symbol$1 && Symbol$1['for'];
  894. var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid$4;
  895. var wellKnownSymbol$t = function (name) {
  896. if (!hasOwn$k(WellKnownSymbolsStore$1, name) || !(NATIVE_SYMBOL$5 || typeof WellKnownSymbolsStore$1[name] == 'string')) {
  897. var description = 'Symbol.' + name;
  898. if (NATIVE_SYMBOL$5 && hasOwn$k(Symbol$1, name)) {
  899. WellKnownSymbolsStore$1[name] = Symbol$1[name];
  900. } else if (USE_SYMBOL_AS_UID && symbolFor) {
  901. WellKnownSymbolsStore$1[name] = symbolFor(description);
  902. } else {
  903. WellKnownSymbolsStore$1[name] = createWellKnownSymbol(description);
  904. }
  905. } return WellKnownSymbolsStore$1[name];
  906. };
  907. var call$o = functionCall;
  908. var isObject$i = isObject$k;
  909. var isSymbol$5 = isSymbol$6;
  910. var getMethod$4 = getMethod$5;
  911. var ordinaryToPrimitive = ordinaryToPrimitive$1;
  912. var wellKnownSymbol$s = wellKnownSymbol$t;
  913. var $TypeError$e = TypeError;
  914. var TO_PRIMITIVE = wellKnownSymbol$s('toPrimitive');
  915. // `ToPrimitive` abstract operation
  916. // https://tc39.es/ecma262/#sec-toprimitive
  917. var toPrimitive$3 = function (input, pref) {
  918. if (!isObject$i(input) || isSymbol$5(input)) return input;
  919. var exoticToPrim = getMethod$4(input, TO_PRIMITIVE);
  920. var result;
  921. if (exoticToPrim) {
  922. if (pref === undefined) pref = 'default';
  923. result = call$o(exoticToPrim, input, pref);
  924. if (!isObject$i(result) || isSymbol$5(result)) return result;
  925. throw $TypeError$e("Can't convert object to primitive value");
  926. }
  927. if (pref === undefined) pref = 'number';
  928. return ordinaryToPrimitive(input, pref);
  929. };
  930. var toPrimitive$2 = toPrimitive$3;
  931. var isSymbol$4 = isSymbol$6;
  932. // `ToPropertyKey` abstract operation
  933. // https://tc39.es/ecma262/#sec-topropertykey
  934. var toPropertyKey$5 = function (argument) {
  935. var key = toPrimitive$2(argument, 'string');
  936. return isSymbol$4(key) ? key : key + '';
  937. };
  938. var global$z = global$F;
  939. var isObject$h = isObject$k;
  940. var document$3 = global$z.document;
  941. // typeof document.createElement is 'object' in old IE
  942. var EXISTS$1 = isObject$h(document$3) && isObject$h(document$3.createElement);
  943. var documentCreateElement$2 = function (it) {
  944. return EXISTS$1 ? document$3.createElement(it) : {};
  945. };
  946. var DESCRIPTORS$l = descriptors;
  947. var fails$C = fails$H;
  948. var createElement$1 = documentCreateElement$2;
  949. // Thanks to IE8 for its funny defineProperty
  950. var ie8DomDefine = !DESCRIPTORS$l && !fails$C(function () {
  951. // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
  952. return Object.defineProperty(createElement$1('div'), 'a', {
  953. get: function () { return 7; }
  954. }).a != 7;
  955. });
  956. var DESCRIPTORS$k = descriptors;
  957. var call$n = functionCall;
  958. var propertyIsEnumerableModule$2 = objectPropertyIsEnumerable;
  959. var createPropertyDescriptor$6 = createPropertyDescriptor$7;
  960. var toIndexedObject$a = toIndexedObject$b;
  961. var toPropertyKey$4 = toPropertyKey$5;
  962. var hasOwn$j = hasOwnProperty_1;
  963. var IE8_DOM_DEFINE$1 = ie8DomDefine;
  964. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  965. var $getOwnPropertyDescriptor$2 = Object.getOwnPropertyDescriptor;
  966. // `Object.getOwnPropertyDescriptor` method
  967. // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
  968. objectGetOwnPropertyDescriptor.f = DESCRIPTORS$k ? $getOwnPropertyDescriptor$2 : function getOwnPropertyDescriptor(O, P) {
  969. O = toIndexedObject$a(O);
  970. P = toPropertyKey$4(P);
  971. if (IE8_DOM_DEFINE$1) try {
  972. return $getOwnPropertyDescriptor$2(O, P);
  973. } catch (error) { /* empty */ }
  974. if (hasOwn$j(O, P)) return createPropertyDescriptor$6(!call$n(propertyIsEnumerableModule$2.f, O, P), O[P]);
  975. };
  976. var objectDefineProperty = {};
  977. var DESCRIPTORS$j = descriptors;
  978. var fails$B = fails$H;
  979. // V8 ~ Chrome 36-
  980. // https://bugs.chromium.org/p/v8/issues/detail?id=3334
  981. var v8PrototypeDefineBug = DESCRIPTORS$j && fails$B(function () {
  982. // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
  983. return Object.defineProperty(function () { /* empty */ }, 'prototype', {
  984. value: 42,
  985. writable: false
  986. }).prototype != 42;
  987. });
  988. var isObject$g = isObject$k;
  989. var $String$2 = String;
  990. var $TypeError$d = TypeError;
  991. // `Assert: Type(argument) is Object`
  992. var anObject$i = function (argument) {
  993. if (isObject$g(argument)) return argument;
  994. throw $TypeError$d($String$2(argument) + ' is not an object');
  995. };
  996. var DESCRIPTORS$i = descriptors;
  997. var IE8_DOM_DEFINE = ie8DomDefine;
  998. var V8_PROTOTYPE_DEFINE_BUG$1 = v8PrototypeDefineBug;
  999. var anObject$h = anObject$i;
  1000. var toPropertyKey$3 = toPropertyKey$5;
  1001. var $TypeError$c = TypeError;
  1002. // eslint-disable-next-line es-x/no-object-defineproperty -- safe
  1003. var $defineProperty$1 = Object.defineProperty;
  1004. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  1005. var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor;
  1006. var ENUMERABLE = 'enumerable';
  1007. var CONFIGURABLE$1 = 'configurable';
  1008. var WRITABLE = 'writable';
  1009. // `Object.defineProperty` method
  1010. // https://tc39.es/ecma262/#sec-object.defineproperty
  1011. objectDefineProperty.f = DESCRIPTORS$i ? V8_PROTOTYPE_DEFINE_BUG$1 ? function defineProperty(O, P, Attributes) {
  1012. anObject$h(O);
  1013. P = toPropertyKey$3(P);
  1014. anObject$h(Attributes);
  1015. if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
  1016. var current = $getOwnPropertyDescriptor$1(O, P);
  1017. if (current && current[WRITABLE]) {
  1018. O[P] = Attributes.value;
  1019. Attributes = {
  1020. configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1],
  1021. enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
  1022. writable: false
  1023. };
  1024. }
  1025. } return $defineProperty$1(O, P, Attributes);
  1026. } : $defineProperty$1 : function defineProperty(O, P, Attributes) {
  1027. anObject$h(O);
  1028. P = toPropertyKey$3(P);
  1029. anObject$h(Attributes);
  1030. if (IE8_DOM_DEFINE) try {
  1031. return $defineProperty$1(O, P, Attributes);
  1032. } catch (error) { /* empty */ }
  1033. if ('get' in Attributes || 'set' in Attributes) throw $TypeError$c('Accessors not supported');
  1034. if ('value' in Attributes) O[P] = Attributes.value;
  1035. return O;
  1036. };
  1037. var DESCRIPTORS$h = descriptors;
  1038. var definePropertyModule$7 = objectDefineProperty;
  1039. var createPropertyDescriptor$5 = createPropertyDescriptor$7;
  1040. var createNonEnumerableProperty$9 = DESCRIPTORS$h ? function (object, key, value) {
  1041. return definePropertyModule$7.f(object, key, createPropertyDescriptor$5(1, value));
  1042. } : function (object, key, value) {
  1043. object[key] = value;
  1044. return object;
  1045. };
  1046. var makeBuiltIn$3 = {exports: {}};
  1047. var DESCRIPTORS$g = descriptors;
  1048. var hasOwn$i = hasOwnProperty_1;
  1049. var FunctionPrototype$2 = Function.prototype;
  1050. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  1051. var getDescriptor = DESCRIPTORS$g && Object.getOwnPropertyDescriptor;
  1052. var EXISTS = hasOwn$i(FunctionPrototype$2, 'name');
  1053. // additional protection from minified / mangled / dropped function names
  1054. var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';
  1055. var CONFIGURABLE = EXISTS && (!DESCRIPTORS$g || (DESCRIPTORS$g && getDescriptor(FunctionPrototype$2, 'name').configurable));
  1056. var functionName = {
  1057. EXISTS: EXISTS,
  1058. PROPER: PROPER,
  1059. CONFIGURABLE: CONFIGURABLE
  1060. };
  1061. var uncurryThis$C = functionUncurryThis;
  1062. var isCallable$m = isCallable$s;
  1063. var store$1 = sharedStore;
  1064. var functionToString$1 = uncurryThis$C(Function.toString);
  1065. // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper
  1066. if (!isCallable$m(store$1.inspectSource)) {
  1067. store$1.inspectSource = function (it) {
  1068. return functionToString$1(it);
  1069. };
  1070. }
  1071. var inspectSource$4 = store$1.inspectSource;
  1072. var global$y = global$F;
  1073. var isCallable$l = isCallable$s;
  1074. var inspectSource$3 = inspectSource$4;
  1075. var WeakMap$1 = global$y.WeakMap;
  1076. var nativeWeakMap = isCallable$l(WeakMap$1) && /native code/.test(inspectSource$3(WeakMap$1));
  1077. var shared$5 = shared$7.exports;
  1078. var uid$3 = uid$5;
  1079. var keys$2 = shared$5('keys');
  1080. var sharedKey$4 = function (key) {
  1081. return keys$2[key] || (keys$2[key] = uid$3(key));
  1082. };
  1083. var hiddenKeys$6 = {};
  1084. var NATIVE_WEAK_MAP = nativeWeakMap;
  1085. var global$x = global$F;
  1086. var uncurryThis$B = functionUncurryThis;
  1087. var isObject$f = isObject$k;
  1088. var createNonEnumerableProperty$8 = createNonEnumerableProperty$9;
  1089. var hasOwn$h = hasOwnProperty_1;
  1090. var shared$4 = sharedStore;
  1091. var sharedKey$3 = sharedKey$4;
  1092. var hiddenKeys$5 = hiddenKeys$6;
  1093. var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
  1094. var TypeError$7 = global$x.TypeError;
  1095. var WeakMap = global$x.WeakMap;
  1096. var set$2, get$1, has;
  1097. var enforce = function (it) {
  1098. return has(it) ? get$1(it) : set$2(it, {});
  1099. };
  1100. var getterFor = function (TYPE) {
  1101. return function (it) {
  1102. var state;
  1103. if (!isObject$f(it) || (state = get$1(it)).type !== TYPE) {
  1104. throw TypeError$7('Incompatible receiver, ' + TYPE + ' required');
  1105. } return state;
  1106. };
  1107. };
  1108. if (NATIVE_WEAK_MAP || shared$4.state) {
  1109. var store = shared$4.state || (shared$4.state = new WeakMap());
  1110. var wmget = uncurryThis$B(store.get);
  1111. var wmhas = uncurryThis$B(store.has);
  1112. var wmset = uncurryThis$B(store.set);
  1113. set$2 = function (it, metadata) {
  1114. if (wmhas(store, it)) throw new TypeError$7(OBJECT_ALREADY_INITIALIZED);
  1115. metadata.facade = it;
  1116. wmset(store, it, metadata);
  1117. return metadata;
  1118. };
  1119. get$1 = function (it) {
  1120. return wmget(store, it) || {};
  1121. };
  1122. has = function (it) {
  1123. return wmhas(store, it);
  1124. };
  1125. } else {
  1126. var STATE = sharedKey$3('state');
  1127. hiddenKeys$5[STATE] = true;
  1128. set$2 = function (it, metadata) {
  1129. if (hasOwn$h(it, STATE)) throw new TypeError$7(OBJECT_ALREADY_INITIALIZED);
  1130. metadata.facade = it;
  1131. createNonEnumerableProperty$8(it, STATE, metadata);
  1132. return metadata;
  1133. };
  1134. get$1 = function (it) {
  1135. return hasOwn$h(it, STATE) ? it[STATE] : {};
  1136. };
  1137. has = function (it) {
  1138. return hasOwn$h(it, STATE);
  1139. };
  1140. }
  1141. var internalState = {
  1142. set: set$2,
  1143. get: get$1,
  1144. has: has,
  1145. enforce: enforce,
  1146. getterFor: getterFor
  1147. };
  1148. var fails$A = fails$H;
  1149. var isCallable$k = isCallable$s;
  1150. var hasOwn$g = hasOwnProperty_1;
  1151. var DESCRIPTORS$f = descriptors;
  1152. var CONFIGURABLE_FUNCTION_NAME$2 = functionName.CONFIGURABLE;
  1153. var inspectSource$2 = inspectSource$4;
  1154. var InternalStateModule$a = internalState;
  1155. var enforceInternalState$2 = InternalStateModule$a.enforce;
  1156. var getInternalState$7 = InternalStateModule$a.get;
  1157. // eslint-disable-next-line es-x/no-object-defineproperty -- safe
  1158. var defineProperty$d = Object.defineProperty;
  1159. var CONFIGURABLE_LENGTH = DESCRIPTORS$f && !fails$A(function () {
  1160. return defineProperty$d(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;
  1161. });
  1162. var TEMPLATE = String(String).split('String');
  1163. var makeBuiltIn$2 = makeBuiltIn$3.exports = function (value, name, options) {
  1164. if (String(name).slice(0, 7) === 'Symbol(') {
  1165. name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']';
  1166. }
  1167. if (options && options.getter) name = 'get ' + name;
  1168. if (options && options.setter) name = 'set ' + name;
  1169. if (!hasOwn$g(value, 'name') || (CONFIGURABLE_FUNCTION_NAME$2 && value.name !== name)) {
  1170. defineProperty$d(value, 'name', { value: name, configurable: true });
  1171. }
  1172. if (CONFIGURABLE_LENGTH && options && hasOwn$g(options, 'arity') && value.length !== options.arity) {
  1173. defineProperty$d(value, 'length', { value: options.arity });
  1174. }
  1175. try {
  1176. if (options && hasOwn$g(options, 'constructor') && options.constructor) {
  1177. if (DESCRIPTORS$f) defineProperty$d(value, 'prototype', { writable: false });
  1178. // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable
  1179. } else if (value.prototype) value.prototype = undefined;
  1180. } catch (error) { /* empty */ }
  1181. var state = enforceInternalState$2(value);
  1182. if (!hasOwn$g(state, 'source')) {
  1183. state.source = TEMPLATE.join(typeof name == 'string' ? name : '');
  1184. } return value;
  1185. };
  1186. // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
  1187. // eslint-disable-next-line no-extend-native -- required
  1188. Function.prototype.toString = makeBuiltIn$2(function toString() {
  1189. return isCallable$k(this) && getInternalState$7(this).source || inspectSource$2(this);
  1190. }, 'toString');
  1191. var isCallable$j = isCallable$s;
  1192. var definePropertyModule$6 = objectDefineProperty;
  1193. var makeBuiltIn$1 = makeBuiltIn$3.exports;
  1194. var defineGlobalProperty$1 = defineGlobalProperty$3;
  1195. var defineBuiltIn$f = function (O, key, value, options) {
  1196. if (!options) options = {};
  1197. var simple = options.enumerable;
  1198. var name = options.name !== undefined ? options.name : key;
  1199. if (isCallable$j(value)) makeBuiltIn$1(value, name, options);
  1200. if (options.global) {
  1201. if (simple) O[key] = value;
  1202. else defineGlobalProperty$1(key, value);
  1203. } else {
  1204. if (!options.unsafe) delete O[key];
  1205. else if (O[key]) simple = true;
  1206. if (simple) O[key] = value;
  1207. else definePropertyModule$6.f(O, key, {
  1208. value: value,
  1209. enumerable: false,
  1210. configurable: !options.nonConfigurable,
  1211. writable: !options.nonWritable
  1212. });
  1213. } return O;
  1214. };
  1215. var objectGetOwnPropertyNames = {};
  1216. var ceil = Math.ceil;
  1217. var floor$7 = Math.floor;
  1218. // `Math.trunc` method
  1219. // https://tc39.es/ecma262/#sec-math.trunc
  1220. // eslint-disable-next-line es-x/no-math-trunc -- safe
  1221. var mathTrunc = Math.trunc || function trunc(x) {
  1222. var n = +x;
  1223. return (n > 0 ? floor$7 : ceil)(n);
  1224. };
  1225. var trunc = mathTrunc;
  1226. // `ToIntegerOrInfinity` abstract operation
  1227. // https://tc39.es/ecma262/#sec-tointegerorinfinity
  1228. var toIntegerOrInfinity$9 = function (argument) {
  1229. var number = +argument;
  1230. // eslint-disable-next-line no-self-compare -- NaN check
  1231. return number !== number || number === 0 ? 0 : trunc(number);
  1232. };
  1233. var toIntegerOrInfinity$8 = toIntegerOrInfinity$9;
  1234. var max$4 = Math.max;
  1235. var min$8 = Math.min;
  1236. // Helper for a popular repeating case of the spec:
  1237. // Let integer be ? ToInteger(index).
  1238. // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
  1239. var toAbsoluteIndex$8 = function (index, length) {
  1240. var integer = toIntegerOrInfinity$8(index);
  1241. return integer < 0 ? max$4(integer + length, 0) : min$8(integer, length);
  1242. };
  1243. var toIntegerOrInfinity$7 = toIntegerOrInfinity$9;
  1244. var min$7 = Math.min;
  1245. // `ToLength` abstract operation
  1246. // https://tc39.es/ecma262/#sec-tolength
  1247. var toLength$a = function (argument) {
  1248. return argument > 0 ? min$7(toIntegerOrInfinity$7(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
  1249. };
  1250. var toLength$9 = toLength$a;
  1251. // `LengthOfArrayLike` abstract operation
  1252. // https://tc39.es/ecma262/#sec-lengthofarraylike
  1253. var lengthOfArrayLike$f = function (obj) {
  1254. return toLength$9(obj.length);
  1255. };
  1256. var toIndexedObject$9 = toIndexedObject$b;
  1257. var toAbsoluteIndex$7 = toAbsoluteIndex$8;
  1258. var lengthOfArrayLike$e = lengthOfArrayLike$f;
  1259. // `Array.prototype.{ indexOf, includes }` methods implementation
  1260. var createMethod$5 = function (IS_INCLUDES) {
  1261. return function ($this, el, fromIndex) {
  1262. var O = toIndexedObject$9($this);
  1263. var length = lengthOfArrayLike$e(O);
  1264. var index = toAbsoluteIndex$7(fromIndex, length);
  1265. var value;
  1266. // Array#includes uses SameValueZero equality algorithm
  1267. // eslint-disable-next-line no-self-compare -- NaN check
  1268. if (IS_INCLUDES && el != el) while (length > index) {
  1269. value = O[index++];
  1270. // eslint-disable-next-line no-self-compare -- NaN check
  1271. if (value != value) return true;
  1272. // Array#indexOf ignores holes, Array#includes - not
  1273. } else for (;length > index; index++) {
  1274. if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
  1275. } return !IS_INCLUDES && -1;
  1276. };
  1277. };
  1278. var arrayIncludes = {
  1279. // `Array.prototype.includes` method
  1280. // https://tc39.es/ecma262/#sec-array.prototype.includes
  1281. includes: createMethod$5(true),
  1282. // `Array.prototype.indexOf` method
  1283. // https://tc39.es/ecma262/#sec-array.prototype.indexof
  1284. indexOf: createMethod$5(false)
  1285. };
  1286. var uncurryThis$A = functionUncurryThis;
  1287. var hasOwn$f = hasOwnProperty_1;
  1288. var toIndexedObject$8 = toIndexedObject$b;
  1289. var indexOf$1 = arrayIncludes.indexOf;
  1290. var hiddenKeys$4 = hiddenKeys$6;
  1291. var push$8 = uncurryThis$A([].push);
  1292. var objectKeysInternal = function (object, names) {
  1293. var O = toIndexedObject$8(object);
  1294. var i = 0;
  1295. var result = [];
  1296. var key;
  1297. for (key in O) !hasOwn$f(hiddenKeys$4, key) && hasOwn$f(O, key) && push$8(result, key);
  1298. // Don't enum bug & hidden keys
  1299. while (names.length > i) if (hasOwn$f(O, key = names[i++])) {
  1300. ~indexOf$1(result, key) || push$8(result, key);
  1301. }
  1302. return result;
  1303. };
  1304. // IE8- don't enum bug keys
  1305. var enumBugKeys$3 = [
  1306. 'constructor',
  1307. 'hasOwnProperty',
  1308. 'isPrototypeOf',
  1309. 'propertyIsEnumerable',
  1310. 'toLocaleString',
  1311. 'toString',
  1312. 'valueOf'
  1313. ];
  1314. var internalObjectKeys$1 = objectKeysInternal;
  1315. var enumBugKeys$2 = enumBugKeys$3;
  1316. var hiddenKeys$3 = enumBugKeys$2.concat('length', 'prototype');
  1317. // `Object.getOwnPropertyNames` method
  1318. // https://tc39.es/ecma262/#sec-object.getownpropertynames
  1319. // eslint-disable-next-line es-x/no-object-getownpropertynames -- safe
  1320. objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  1321. return internalObjectKeys$1(O, hiddenKeys$3);
  1322. };
  1323. var objectGetOwnPropertySymbols = {};
  1324. // eslint-disable-next-line es-x/no-object-getownpropertysymbols -- safe
  1325. objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols;
  1326. var getBuiltIn$8 = getBuiltIn$b;
  1327. var uncurryThis$z = functionUncurryThis;
  1328. var getOwnPropertyNamesModule$2 = objectGetOwnPropertyNames;
  1329. var getOwnPropertySymbolsModule$3 = objectGetOwnPropertySymbols;
  1330. var anObject$g = anObject$i;
  1331. var concat$3 = uncurryThis$z([].concat);
  1332. // all object keys, includes non-enumerable and symbols
  1333. var ownKeys$1 = getBuiltIn$8('Reflect', 'ownKeys') || function ownKeys(it) {
  1334. var keys = getOwnPropertyNamesModule$2.f(anObject$g(it));
  1335. var getOwnPropertySymbols = getOwnPropertySymbolsModule$3.f;
  1336. return getOwnPropertySymbols ? concat$3(keys, getOwnPropertySymbols(it)) : keys;
  1337. };
  1338. var hasOwn$e = hasOwnProperty_1;
  1339. var ownKeys = ownKeys$1;
  1340. var getOwnPropertyDescriptorModule$2 = objectGetOwnPropertyDescriptor;
  1341. var definePropertyModule$5 = objectDefineProperty;
  1342. var copyConstructorProperties$2 = function (target, source, exceptions) {
  1343. var keys = ownKeys(source);
  1344. var defineProperty = definePropertyModule$5.f;
  1345. var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule$2.f;
  1346. for (var i = 0; i < keys.length; i++) {
  1347. var key = keys[i];
  1348. if (!hasOwn$e(target, key) && !(exceptions && hasOwn$e(exceptions, key))) {
  1349. defineProperty(target, key, getOwnPropertyDescriptor(source, key));
  1350. }
  1351. }
  1352. };
  1353. var fails$z = fails$H;
  1354. var isCallable$i = isCallable$s;
  1355. var replacement = /#|\.prototype\./;
  1356. var isForced$4 = function (feature, detection) {
  1357. var value = data[normalize(feature)];
  1358. return value == POLYFILL ? true
  1359. : value == NATIVE ? false
  1360. : isCallable$i(detection) ? fails$z(detection)
  1361. : !!detection;
  1362. };
  1363. var normalize = isForced$4.normalize = function (string) {
  1364. return String(string).replace(replacement, '.').toLowerCase();
  1365. };
  1366. var data = isForced$4.data = {};
  1367. var NATIVE = isForced$4.NATIVE = 'N';
  1368. var POLYFILL = isForced$4.POLYFILL = 'P';
  1369. var isForced_1 = isForced$4;
  1370. var global$w = global$F;
  1371. var getOwnPropertyDescriptor$5 = objectGetOwnPropertyDescriptor.f;
  1372. var createNonEnumerableProperty$7 = createNonEnumerableProperty$9;
  1373. var defineBuiltIn$e = defineBuiltIn$f;
  1374. var defineGlobalProperty = defineGlobalProperty$3;
  1375. var copyConstructorProperties$1 = copyConstructorProperties$2;
  1376. var isForced$3 = isForced_1;
  1377. /*
  1378. options.target - name of the target object
  1379. options.global - target is the global object
  1380. options.stat - export as static methods of target
  1381. options.proto - export as prototype methods of target
  1382. options.real - real prototype method for the `pure` version
  1383. options.forced - export even if the native feature is available
  1384. options.bind - bind methods to the target, required for the `pure` version
  1385. options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
  1386. options.unsafe - use the simple assignment of property instead of delete + defineProperty
  1387. options.sham - add a flag to not completely full polyfills
  1388. options.enumerable - export as enumerable property
  1389. options.dontCallGetSet - prevent calling a getter on target
  1390. options.name - the .name of the function if it does not match the key
  1391. */
  1392. var _export = function (options, source) {
  1393. var TARGET = options.target;
  1394. var GLOBAL = options.global;
  1395. var STATIC = options.stat;
  1396. var FORCED, target, key, targetProperty, sourceProperty, descriptor;
  1397. if (GLOBAL) {
  1398. target = global$w;
  1399. } else if (STATIC) {
  1400. target = global$w[TARGET] || defineGlobalProperty(TARGET, {});
  1401. } else {
  1402. target = (global$w[TARGET] || {}).prototype;
  1403. }
  1404. if (target) for (key in source) {
  1405. sourceProperty = source[key];
  1406. if (options.dontCallGetSet) {
  1407. descriptor = getOwnPropertyDescriptor$5(target, key);
  1408. targetProperty = descriptor && descriptor.value;
  1409. } else targetProperty = target[key];
  1410. FORCED = isForced$3(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
  1411. // contained in target
  1412. if (!FORCED && targetProperty !== undefined) {
  1413. if (typeof sourceProperty == typeof targetProperty) continue;
  1414. copyConstructorProperties$1(sourceProperty, targetProperty);
  1415. }
  1416. // add a flag to not completely full polyfills
  1417. if (options.sham || (targetProperty && targetProperty.sham)) {
  1418. createNonEnumerableProperty$7(sourceProperty, 'sham', true);
  1419. }
  1420. defineBuiltIn$e(target, key, sourceProperty, options);
  1421. }
  1422. };
  1423. var uncurryThis$y = functionUncurryThis;
  1424. var aCallable$7 = aCallable$9;
  1425. var NATIVE_BIND$1 = functionBindNative;
  1426. var bind$a = uncurryThis$y(uncurryThis$y.bind);
  1427. // optional / simple context binding
  1428. var functionBindContext = function (fn, that) {
  1429. aCallable$7(fn);
  1430. return that === undefined ? fn : NATIVE_BIND$1 ? bind$a(fn, that) : function (/* ...args */) {
  1431. return fn.apply(that, arguments);
  1432. };
  1433. };
  1434. var classof$e = classofRaw$1;
  1435. // `IsArray` abstract operation
  1436. // https://tc39.es/ecma262/#sec-isarray
  1437. // eslint-disable-next-line es-x/no-array-isarray -- safe
  1438. var isArray$4 = Array.isArray || function isArray(argument) {
  1439. return classof$e(argument) == 'Array';
  1440. };
  1441. var wellKnownSymbol$r = wellKnownSymbol$t;
  1442. var TO_STRING_TAG$4 = wellKnownSymbol$r('toStringTag');
  1443. var test = {};
  1444. test[TO_STRING_TAG$4] = 'z';
  1445. var toStringTagSupport = String(test) === '[object z]';
  1446. var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport;
  1447. var isCallable$h = isCallable$s;
  1448. var classofRaw = classofRaw$1;
  1449. var wellKnownSymbol$q = wellKnownSymbol$t;
  1450. var TO_STRING_TAG$3 = wellKnownSymbol$q('toStringTag');
  1451. var $Object$1 = Object;
  1452. // ES3 wrong here
  1453. var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
  1454. // fallback for IE11 Script Access Denied error
  1455. var tryGet = function (it, key) {
  1456. try {
  1457. return it[key];
  1458. } catch (error) { /* empty */ }
  1459. };
  1460. // getting tag from ES6+ `Object.prototype.toString`
  1461. var classof$d = TO_STRING_TAG_SUPPORT$2 ? classofRaw : function (it) {
  1462. var O, tag, result;
  1463. return it === undefined ? 'Undefined' : it === null ? 'Null'
  1464. // @@toStringTag case
  1465. : typeof (tag = tryGet(O = $Object$1(it), TO_STRING_TAG$3)) == 'string' ? tag
  1466. // builtinTag case
  1467. : CORRECT_ARGUMENTS ? classofRaw(O)
  1468. // ES3 arguments fallback
  1469. : (result = classofRaw(O)) == 'Object' && isCallable$h(O.callee) ? 'Arguments' : result;
  1470. };
  1471. var uncurryThis$x = functionUncurryThis;
  1472. var fails$y = fails$H;
  1473. var isCallable$g = isCallable$s;
  1474. var classof$c = classof$d;
  1475. var getBuiltIn$7 = getBuiltIn$b;
  1476. var inspectSource$1 = inspectSource$4;
  1477. var noop = function () { /* empty */ };
  1478. var empty = [];
  1479. var construct = getBuiltIn$7('Reflect', 'construct');
  1480. var constructorRegExp = /^\s*(?:class|function)\b/;
  1481. var exec$5 = uncurryThis$x(constructorRegExp.exec);
  1482. var INCORRECT_TO_STRING = !constructorRegExp.exec(noop);
  1483. var isConstructorModern = function isConstructor(argument) {
  1484. if (!isCallable$g(argument)) return false;
  1485. try {
  1486. construct(noop, empty, argument);
  1487. return true;
  1488. } catch (error) {
  1489. return false;
  1490. }
  1491. };
  1492. var isConstructorLegacy = function isConstructor(argument) {
  1493. if (!isCallable$g(argument)) return false;
  1494. switch (classof$c(argument)) {
  1495. case 'AsyncFunction':
  1496. case 'GeneratorFunction':
  1497. case 'AsyncGeneratorFunction': return false;
  1498. }
  1499. try {
  1500. // we can't check .prototype since constructors produced by .bind haven't it
  1501. // `Function#toString` throws on some built-it function in some legacy engines
  1502. // (for example, `DOMQuad` and similar in FF41-)
  1503. return INCORRECT_TO_STRING || !!exec$5(constructorRegExp, inspectSource$1(argument));
  1504. } catch (error) {
  1505. return true;
  1506. }
  1507. };
  1508. isConstructorLegacy.sham = true;
  1509. // `IsConstructor` abstract operation
  1510. // https://tc39.es/ecma262/#sec-isconstructor
  1511. var isConstructor$4 = !construct || fails$y(function () {
  1512. var called;
  1513. return isConstructorModern(isConstructorModern.call)
  1514. || !isConstructorModern(Object)
  1515. || !isConstructorModern(function () { called = true; })
  1516. || called;
  1517. }) ? isConstructorLegacy : isConstructorModern;
  1518. var isArray$3 = isArray$4;
  1519. var isConstructor$3 = isConstructor$4;
  1520. var isObject$e = isObject$k;
  1521. var wellKnownSymbol$p = wellKnownSymbol$t;
  1522. var SPECIES$6 = wellKnownSymbol$p('species');
  1523. var $Array$4 = Array;
  1524. // a part of `ArraySpeciesCreate` abstract operation
  1525. // https://tc39.es/ecma262/#sec-arrayspeciescreate
  1526. var arraySpeciesConstructor$1 = function (originalArray) {
  1527. var C;
  1528. if (isArray$3(originalArray)) {
  1529. C = originalArray.constructor;
  1530. // cross-realm fallback
  1531. if (isConstructor$3(C) && (C === $Array$4 || isArray$3(C.prototype))) C = undefined;
  1532. else if (isObject$e(C)) {
  1533. C = C[SPECIES$6];
  1534. if (C === null) C = undefined;
  1535. }
  1536. } return C === undefined ? $Array$4 : C;
  1537. };
  1538. var arraySpeciesConstructor = arraySpeciesConstructor$1;
  1539. // `ArraySpeciesCreate` abstract operation
  1540. // https://tc39.es/ecma262/#sec-arrayspeciescreate
  1541. var arraySpeciesCreate$3 = function (originalArray, length) {
  1542. return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
  1543. };
  1544. var bind$9 = functionBindContext;
  1545. var uncurryThis$w = functionUncurryThis;
  1546. var IndexedObject$2 = indexedObject;
  1547. var toObject$b = toObject$d;
  1548. var lengthOfArrayLike$d = lengthOfArrayLike$f;
  1549. var arraySpeciesCreate$2 = arraySpeciesCreate$3;
  1550. var push$7 = uncurryThis$w([].push);
  1551. // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation
  1552. var createMethod$4 = function (TYPE) {
  1553. var IS_MAP = TYPE == 1;
  1554. var IS_FILTER = TYPE == 2;
  1555. var IS_SOME = TYPE == 3;
  1556. var IS_EVERY = TYPE == 4;
  1557. var IS_FIND_INDEX = TYPE == 6;
  1558. var IS_FILTER_REJECT = TYPE == 7;
  1559. var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  1560. return function ($this, callbackfn, that, specificCreate) {
  1561. var O = toObject$b($this);
  1562. var self = IndexedObject$2(O);
  1563. var boundFunction = bind$9(callbackfn, that);
  1564. var length = lengthOfArrayLike$d(self);
  1565. var index = 0;
  1566. var create = specificCreate || arraySpeciesCreate$2;
  1567. var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;
  1568. var value, result;
  1569. for (;length > index; index++) if (NO_HOLES || index in self) {
  1570. value = self[index];
  1571. result = boundFunction(value, index, O);
  1572. if (TYPE) {
  1573. if (IS_MAP) target[index] = result; // map
  1574. else if (result) switch (TYPE) {
  1575. case 3: return true; // some
  1576. case 5: return value; // find
  1577. case 6: return index; // findIndex
  1578. case 2: push$7(target, value); // filter
  1579. } else switch (TYPE) {
  1580. case 4: return false; // every
  1581. case 7: push$7(target, value); // filterReject
  1582. }
  1583. }
  1584. }
  1585. return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
  1586. };
  1587. };
  1588. var arrayIteration = {
  1589. // `Array.prototype.forEach` method
  1590. // https://tc39.es/ecma262/#sec-array.prototype.foreach
  1591. forEach: createMethod$4(0),
  1592. // `Array.prototype.map` method
  1593. // https://tc39.es/ecma262/#sec-array.prototype.map
  1594. map: createMethod$4(1),
  1595. // `Array.prototype.filter` method
  1596. // https://tc39.es/ecma262/#sec-array.prototype.filter
  1597. filter: createMethod$4(2),
  1598. // `Array.prototype.some` method
  1599. // https://tc39.es/ecma262/#sec-array.prototype.some
  1600. some: createMethod$4(3),
  1601. // `Array.prototype.every` method
  1602. // https://tc39.es/ecma262/#sec-array.prototype.every
  1603. every: createMethod$4(4),
  1604. // `Array.prototype.find` method
  1605. // https://tc39.es/ecma262/#sec-array.prototype.find
  1606. find: createMethod$4(5),
  1607. // `Array.prototype.findIndex` method
  1608. // https://tc39.es/ecma262/#sec-array.prototype.findIndex
  1609. findIndex: createMethod$4(6),
  1610. // `Array.prototype.filterReject` method
  1611. // https://github.com/tc39/proposal-array-filtering
  1612. filterReject: createMethod$4(7)
  1613. };
  1614. var fails$x = fails$H;
  1615. var wellKnownSymbol$o = wellKnownSymbol$t;
  1616. var V8_VERSION$2 = engineV8Version;
  1617. var SPECIES$5 = wellKnownSymbol$o('species');
  1618. var arrayMethodHasSpeciesSupport$5 = function (METHOD_NAME) {
  1619. // We can't use this feature detection in V8 since it causes
  1620. // deoptimization and serious performance degradation
  1621. // https://github.com/zloirock/core-js/issues/677
  1622. return V8_VERSION$2 >= 51 || !fails$x(function () {
  1623. var array = [];
  1624. var constructor = array.constructor = {};
  1625. constructor[SPECIES$5] = function () {
  1626. return { foo: 1 };
  1627. };
  1628. return array[METHOD_NAME](Boolean).foo !== 1;
  1629. });
  1630. };
  1631. var $$A = _export;
  1632. var $map$1 = arrayIteration.map;
  1633. var arrayMethodHasSpeciesSupport$4 = arrayMethodHasSpeciesSupport$5;
  1634. var HAS_SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport$4('map');
  1635. // `Array.prototype.map` method
  1636. // https://tc39.es/ecma262/#sec-array.prototype.map
  1637. // with adding support of @@species
  1638. $$A({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 }, {
  1639. map: function map(callbackfn /* , thisArg */) {
  1640. return $map$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  1641. }
  1642. });
  1643. var toObject$a = toObject$d;
  1644. var toAbsoluteIndex$6 = toAbsoluteIndex$8;
  1645. var lengthOfArrayLike$c = lengthOfArrayLike$f;
  1646. // `Array.prototype.fill` method implementation
  1647. // https://tc39.es/ecma262/#sec-array.prototype.fill
  1648. var arrayFill$1 = function fill(value /* , start = 0, end = @length */) {
  1649. var O = toObject$a(this);
  1650. var length = lengthOfArrayLike$c(O);
  1651. var argumentsLength = arguments.length;
  1652. var index = toAbsoluteIndex$6(argumentsLength > 1 ? arguments[1] : undefined, length);
  1653. var end = argumentsLength > 2 ? arguments[2] : undefined;
  1654. var endPos = end === undefined ? length : toAbsoluteIndex$6(end, length);
  1655. while (endPos > index) O[index++] = value;
  1656. return O;
  1657. };
  1658. var objectDefineProperties = {};
  1659. var internalObjectKeys = objectKeysInternal;
  1660. var enumBugKeys$1 = enumBugKeys$3;
  1661. // `Object.keys` method
  1662. // https://tc39.es/ecma262/#sec-object.keys
  1663. // eslint-disable-next-line es-x/no-object-keys -- safe
  1664. var objectKeys$4 = Object.keys || function keys(O) {
  1665. return internalObjectKeys(O, enumBugKeys$1);
  1666. };
  1667. var DESCRIPTORS$e = descriptors;
  1668. var V8_PROTOTYPE_DEFINE_BUG = v8PrototypeDefineBug;
  1669. var definePropertyModule$4 = objectDefineProperty;
  1670. var anObject$f = anObject$i;
  1671. var toIndexedObject$7 = toIndexedObject$b;
  1672. var objectKeys$3 = objectKeys$4;
  1673. // `Object.defineProperties` method
  1674. // https://tc39.es/ecma262/#sec-object.defineproperties
  1675. // eslint-disable-next-line es-x/no-object-defineproperties -- safe
  1676. objectDefineProperties.f = DESCRIPTORS$e && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
  1677. anObject$f(O);
  1678. var props = toIndexedObject$7(Properties);
  1679. var keys = objectKeys$3(Properties);
  1680. var length = keys.length;
  1681. var index = 0;
  1682. var key;
  1683. while (length > index) definePropertyModule$4.f(O, key = keys[index++], props[key]);
  1684. return O;
  1685. };
  1686. var getBuiltIn$6 = getBuiltIn$b;
  1687. var html$2 = getBuiltIn$6('document', 'documentElement');
  1688. /* global ActiveXObject -- old IE, WSH */
  1689. var anObject$e = anObject$i;
  1690. var definePropertiesModule$1 = objectDefineProperties;
  1691. var enumBugKeys = enumBugKeys$3;
  1692. var hiddenKeys$2 = hiddenKeys$6;
  1693. var html$1 = html$2;
  1694. var documentCreateElement$1 = documentCreateElement$2;
  1695. var sharedKey$2 = sharedKey$4;
  1696. var GT = '>';
  1697. var LT = '<';
  1698. var PROTOTYPE$2 = 'prototype';
  1699. var SCRIPT = 'script';
  1700. var IE_PROTO$1 = sharedKey$2('IE_PROTO');
  1701. var EmptyConstructor = function () { /* empty */ };
  1702. var scriptTag = function (content) {
  1703. return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
  1704. };
  1705. // Create object with fake `null` prototype: use ActiveX Object with cleared prototype
  1706. var NullProtoObjectViaActiveX = function (activeXDocument) {
  1707. activeXDocument.write(scriptTag(''));
  1708. activeXDocument.close();
  1709. var temp = activeXDocument.parentWindow.Object;
  1710. activeXDocument = null; // avoid memory leak
  1711. return temp;
  1712. };
  1713. // Create object with fake `null` prototype: use iframe Object with cleared prototype
  1714. var NullProtoObjectViaIFrame = function () {
  1715. // Thrash, waste and sodomy: IE GC bug
  1716. var iframe = documentCreateElement$1('iframe');
  1717. var JS = 'java' + SCRIPT + ':';
  1718. var iframeDocument;
  1719. iframe.style.display = 'none';
  1720. html$1.appendChild(iframe);
  1721. // https://github.com/zloirock/core-js/issues/475
  1722. iframe.src = String(JS);
  1723. iframeDocument = iframe.contentWindow.document;
  1724. iframeDocument.open();
  1725. iframeDocument.write(scriptTag('document.F=Object'));
  1726. iframeDocument.close();
  1727. return iframeDocument.F;
  1728. };
  1729. // Check for document.domain and active x support
  1730. // No need to use active x approach when document.domain is not set
  1731. // see https://github.com/es-shims/es5-shim/issues/150
  1732. // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
  1733. // avoid IE GC bug
  1734. var activeXDocument;
  1735. var NullProtoObject = function () {
  1736. try {
  1737. activeXDocument = new ActiveXObject('htmlfile');
  1738. } catch (error) { /* ignore */ }
  1739. NullProtoObject = typeof document != 'undefined'
  1740. ? document.domain && activeXDocument
  1741. ? NullProtoObjectViaActiveX(activeXDocument) // old IE
  1742. : NullProtoObjectViaIFrame()
  1743. : NullProtoObjectViaActiveX(activeXDocument); // WSH
  1744. var length = enumBugKeys.length;
  1745. while (length--) delete NullProtoObject[PROTOTYPE$2][enumBugKeys[length]];
  1746. return NullProtoObject();
  1747. };
  1748. hiddenKeys$2[IE_PROTO$1] = true;
  1749. // `Object.create` method
  1750. // https://tc39.es/ecma262/#sec-object.create
  1751. // eslint-disable-next-line es-x/no-object-create -- safe
  1752. var objectCreate = Object.create || function create(O, Properties) {
  1753. var result;
  1754. if (O !== null) {
  1755. EmptyConstructor[PROTOTYPE$2] = anObject$e(O);
  1756. result = new EmptyConstructor();
  1757. EmptyConstructor[PROTOTYPE$2] = null;
  1758. // add "__proto__" for Object.getPrototypeOf polyfill
  1759. result[IE_PROTO$1] = O;
  1760. } else result = NullProtoObject();
  1761. return Properties === undefined ? result : definePropertiesModule$1.f(result, Properties);
  1762. };
  1763. var wellKnownSymbol$n = wellKnownSymbol$t;
  1764. var create$5 = objectCreate;
  1765. var defineProperty$c = objectDefineProperty.f;
  1766. var UNSCOPABLES = wellKnownSymbol$n('unscopables');
  1767. var ArrayPrototype$1 = Array.prototype;
  1768. // Array.prototype[@@unscopables]
  1769. // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
  1770. if (ArrayPrototype$1[UNSCOPABLES] == undefined) {
  1771. defineProperty$c(ArrayPrototype$1, UNSCOPABLES, {
  1772. configurable: true,
  1773. value: create$5(null)
  1774. });
  1775. }
  1776. // add a key to Array.prototype[@@unscopables]
  1777. var addToUnscopables$3 = function (key) {
  1778. ArrayPrototype$1[UNSCOPABLES][key] = true;
  1779. };
  1780. var $$z = _export;
  1781. var fill$1 = arrayFill$1;
  1782. var addToUnscopables$2 = addToUnscopables$3;
  1783. // `Array.prototype.fill` method
  1784. // https://tc39.es/ecma262/#sec-array.prototype.fill
  1785. $$z({ target: 'Array', proto: true }, {
  1786. fill: fill$1
  1787. });
  1788. // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
  1789. addToUnscopables$2('fill');
  1790. var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport;
  1791. var classof$b = classof$d;
  1792. // `Object.prototype.toString` method implementation
  1793. // https://tc39.es/ecma262/#sec-object.prototype.tostring
  1794. var objectToString = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() {
  1795. return '[object ' + classof$b(this) + ']';
  1796. };
  1797. var TO_STRING_TAG_SUPPORT = toStringTagSupport;
  1798. var defineBuiltIn$d = defineBuiltIn$f;
  1799. var toString$b = objectToString;
  1800. // `Object.prototype.toString` method
  1801. // https://tc39.es/ecma262/#sec-object.prototype.tostring
  1802. if (!TO_STRING_TAG_SUPPORT) {
  1803. defineBuiltIn$d(Object.prototype, 'toString', toString$b, { unsafe: true });
  1804. }
  1805. var $TypeError$b = TypeError;
  1806. var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991
  1807. var doesNotExceedSafeInteger$2 = function (it) {
  1808. if (it > MAX_SAFE_INTEGER) throw $TypeError$b('Maximum allowed index exceeded');
  1809. return it;
  1810. };
  1811. var toPropertyKey$2 = toPropertyKey$5;
  1812. var definePropertyModule$3 = objectDefineProperty;
  1813. var createPropertyDescriptor$4 = createPropertyDescriptor$7;
  1814. var createProperty$6 = function (object, key, value) {
  1815. var propertyKey = toPropertyKey$2(key);
  1816. if (propertyKey in object) definePropertyModule$3.f(object, propertyKey, createPropertyDescriptor$4(0, value));
  1817. else object[propertyKey] = value;
  1818. };
  1819. var $$y = _export;
  1820. var fails$w = fails$H;
  1821. var isArray$2 = isArray$4;
  1822. var isObject$d = isObject$k;
  1823. var toObject$9 = toObject$d;
  1824. var lengthOfArrayLike$b = lengthOfArrayLike$f;
  1825. var doesNotExceedSafeInteger$1 = doesNotExceedSafeInteger$2;
  1826. var createProperty$5 = createProperty$6;
  1827. var arraySpeciesCreate$1 = arraySpeciesCreate$3;
  1828. var arrayMethodHasSpeciesSupport$3 = arrayMethodHasSpeciesSupport$5;
  1829. var wellKnownSymbol$m = wellKnownSymbol$t;
  1830. var V8_VERSION$1 = engineV8Version;
  1831. var IS_CONCAT_SPREADABLE = wellKnownSymbol$m('isConcatSpreadable');
  1832. // We can't use this feature detection in V8 since it causes
  1833. // deoptimization and serious performance degradation
  1834. // https://github.com/zloirock/core-js/issues/679
  1835. var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION$1 >= 51 || !fails$w(function () {
  1836. var array = [];
  1837. array[IS_CONCAT_SPREADABLE] = false;
  1838. return array.concat()[0] !== array;
  1839. });
  1840. var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport$3('concat');
  1841. var isConcatSpreadable = function (O) {
  1842. if (!isObject$d(O)) return false;
  1843. var spreadable = O[IS_CONCAT_SPREADABLE];
  1844. return spreadable !== undefined ? !!spreadable : isArray$2(O);
  1845. };
  1846. var FORCED$5 = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
  1847. // `Array.prototype.concat` method
  1848. // https://tc39.es/ecma262/#sec-array.prototype.concat
  1849. // with adding support of @@isConcatSpreadable and @@species
  1850. $$y({ target: 'Array', proto: true, arity: 1, forced: FORCED$5 }, {
  1851. // eslint-disable-next-line no-unused-vars -- required for `.length`
  1852. concat: function concat(arg) {
  1853. var O = toObject$9(this);
  1854. var A = arraySpeciesCreate$1(O, 0);
  1855. var n = 0;
  1856. var i, k, length, len, E;
  1857. for (i = -1, length = arguments.length; i < length; i++) {
  1858. E = i === -1 ? O : arguments[i];
  1859. if (isConcatSpreadable(E)) {
  1860. len = lengthOfArrayLike$b(E);
  1861. doesNotExceedSafeInteger$1(n + len);
  1862. for (k = 0; k < len; k++, n++) if (k in E) createProperty$5(A, n, E[k]);
  1863. } else {
  1864. doesNotExceedSafeInteger$1(n + 1);
  1865. createProperty$5(A, n++, E);
  1866. }
  1867. }
  1868. A.length = n;
  1869. return A;
  1870. }
  1871. });
  1872. var iterators = {};
  1873. var fails$v = fails$H;
  1874. var correctPrototypeGetter = !fails$v(function () {
  1875. function F() { /* empty */ }
  1876. F.prototype.constructor = null;
  1877. // eslint-disable-next-line es-x/no-object-getprototypeof -- required for testing
  1878. return Object.getPrototypeOf(new F()) !== F.prototype;
  1879. });
  1880. var hasOwn$d = hasOwnProperty_1;
  1881. var isCallable$f = isCallable$s;
  1882. var toObject$8 = toObject$d;
  1883. var sharedKey$1 = sharedKey$4;
  1884. var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter;
  1885. var IE_PROTO = sharedKey$1('IE_PROTO');
  1886. var $Object = Object;
  1887. var ObjectPrototype$3 = $Object.prototype;
  1888. // `Object.getPrototypeOf` method
  1889. // https://tc39.es/ecma262/#sec-object.getprototypeof
  1890. // eslint-disable-next-line es-x/no-object-getprototypeof -- safe
  1891. var objectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {
  1892. var object = toObject$8(O);
  1893. if (hasOwn$d(object, IE_PROTO)) return object[IE_PROTO];
  1894. var constructor = object.constructor;
  1895. if (isCallable$f(constructor) && object instanceof constructor) {
  1896. return constructor.prototype;
  1897. } return object instanceof $Object ? ObjectPrototype$3 : null;
  1898. };
  1899. var fails$u = fails$H;
  1900. var isCallable$e = isCallable$s;
  1901. var getPrototypeOf$3 = objectGetPrototypeOf;
  1902. var defineBuiltIn$c = defineBuiltIn$f;
  1903. var wellKnownSymbol$l = wellKnownSymbol$t;
  1904. var ITERATOR$8 = wellKnownSymbol$l('iterator');
  1905. var BUGGY_SAFARI_ITERATORS$1 = false;
  1906. // `%IteratorPrototype%` object
  1907. // https://tc39.es/ecma262/#sec-%iteratorprototype%-object
  1908. var IteratorPrototype$2, PrototypeOfArrayIteratorPrototype, arrayIterator;
  1909. /* eslint-disable es-x/no-array-prototype-keys -- safe */
  1910. if ([].keys) {
  1911. arrayIterator = [].keys();
  1912. // Safari 8 has buggy iterators w/o `next`
  1913. if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS$1 = true;
  1914. else {
  1915. PrototypeOfArrayIteratorPrototype = getPrototypeOf$3(getPrototypeOf$3(arrayIterator));
  1916. if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype$2 = PrototypeOfArrayIteratorPrototype;
  1917. }
  1918. }
  1919. var NEW_ITERATOR_PROTOTYPE = IteratorPrototype$2 == undefined || fails$u(function () {
  1920. var test = {};
  1921. // FF44- legacy iterators case
  1922. return IteratorPrototype$2[ITERATOR$8].call(test) !== test;
  1923. });
  1924. if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$2 = {};
  1925. // `%IteratorPrototype%[@@iterator]()` method
  1926. // https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator
  1927. if (!isCallable$e(IteratorPrototype$2[ITERATOR$8])) {
  1928. defineBuiltIn$c(IteratorPrototype$2, ITERATOR$8, function () {
  1929. return this;
  1930. });
  1931. }
  1932. var iteratorsCore = {
  1933. IteratorPrototype: IteratorPrototype$2,
  1934. BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$1
  1935. };
  1936. var defineProperty$b = objectDefineProperty.f;
  1937. var hasOwn$c = hasOwnProperty_1;
  1938. var wellKnownSymbol$k = wellKnownSymbol$t;
  1939. var TO_STRING_TAG$2 = wellKnownSymbol$k('toStringTag');
  1940. var setToStringTag$8 = function (target, TAG, STATIC) {
  1941. if (target && !STATIC) target = target.prototype;
  1942. if (target && !hasOwn$c(target, TO_STRING_TAG$2)) {
  1943. defineProperty$b(target, TO_STRING_TAG$2, { configurable: true, value: TAG });
  1944. }
  1945. };
  1946. var IteratorPrototype$1 = iteratorsCore.IteratorPrototype;
  1947. var create$4 = objectCreate;
  1948. var createPropertyDescriptor$3 = createPropertyDescriptor$7;
  1949. var setToStringTag$7 = setToStringTag$8;
  1950. var Iterators$4 = iterators;
  1951. var returnThis$1 = function () { return this; };
  1952. var createIteratorConstructor$2 = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
  1953. var TO_STRING_TAG = NAME + ' Iterator';
  1954. IteratorConstructor.prototype = create$4(IteratorPrototype$1, { next: createPropertyDescriptor$3(+!ENUMERABLE_NEXT, next) });
  1955. setToStringTag$7(IteratorConstructor, TO_STRING_TAG, false);
  1956. Iterators$4[TO_STRING_TAG] = returnThis$1;
  1957. return IteratorConstructor;
  1958. };
  1959. var isCallable$d = isCallable$s;
  1960. var $String$1 = String;
  1961. var $TypeError$a = TypeError;
  1962. var aPossiblePrototype$1 = function (argument) {
  1963. if (typeof argument == 'object' || isCallable$d(argument)) return argument;
  1964. throw $TypeError$a("Can't set " + $String$1(argument) + ' as a prototype');
  1965. };
  1966. /* eslint-disable no-proto -- safe */
  1967. var uncurryThis$v = functionUncurryThis;
  1968. var anObject$d = anObject$i;
  1969. var aPossiblePrototype = aPossiblePrototype$1;
  1970. // `Object.setPrototypeOf` method
  1971. // https://tc39.es/ecma262/#sec-object.setprototypeof
  1972. // Works with __proto__ only. Old v8 can't work with null proto objects.
  1973. // eslint-disable-next-line es-x/no-object-setprototypeof -- safe
  1974. var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  1975. var CORRECT_SETTER = false;
  1976. var test = {};
  1977. var setter;
  1978. try {
  1979. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  1980. setter = uncurryThis$v(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);
  1981. setter(test, []);
  1982. CORRECT_SETTER = test instanceof Array;
  1983. } catch (error) { /* empty */ }
  1984. return function setPrototypeOf(O, proto) {
  1985. anObject$d(O);
  1986. aPossiblePrototype(proto);
  1987. if (CORRECT_SETTER) setter(O, proto);
  1988. else O.__proto__ = proto;
  1989. return O;
  1990. };
  1991. }() : undefined);
  1992. var $$x = _export;
  1993. var call$m = functionCall;
  1994. var FunctionName$1 = functionName;
  1995. var isCallable$c = isCallable$s;
  1996. var createIteratorConstructor$1 = createIteratorConstructor$2;
  1997. var getPrototypeOf$2 = objectGetPrototypeOf;
  1998. var setPrototypeOf$5 = objectSetPrototypeOf;
  1999. var setToStringTag$6 = setToStringTag$8;
  2000. var createNonEnumerableProperty$6 = createNonEnumerableProperty$9;
  2001. var defineBuiltIn$b = defineBuiltIn$f;
  2002. var wellKnownSymbol$j = wellKnownSymbol$t;
  2003. var Iterators$3 = iterators;
  2004. var IteratorsCore = iteratorsCore;
  2005. var PROPER_FUNCTION_NAME$2 = FunctionName$1.PROPER;
  2006. var CONFIGURABLE_FUNCTION_NAME$1 = FunctionName$1.CONFIGURABLE;
  2007. var IteratorPrototype = IteratorsCore.IteratorPrototype;
  2008. var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
  2009. var ITERATOR$7 = wellKnownSymbol$j('iterator');
  2010. var KEYS = 'keys';
  2011. var VALUES = 'values';
  2012. var ENTRIES = 'entries';
  2013. var returnThis = function () { return this; };
  2014. var defineIterator$3 = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
  2015. createIteratorConstructor$1(IteratorConstructor, NAME, next);
  2016. var getIterationMethod = function (KIND) {
  2017. if (KIND === DEFAULT && defaultIterator) return defaultIterator;
  2018. if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
  2019. switch (KIND) {
  2020. case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
  2021. case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
  2022. case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
  2023. } return function () { return new IteratorConstructor(this); };
  2024. };
  2025. var TO_STRING_TAG = NAME + ' Iterator';
  2026. var INCORRECT_VALUES_NAME = false;
  2027. var IterablePrototype = Iterable.prototype;
  2028. var nativeIterator = IterablePrototype[ITERATOR$7]
  2029. || IterablePrototype['@@iterator']
  2030. || DEFAULT && IterablePrototype[DEFAULT];
  2031. var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
  2032. var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
  2033. var CurrentIteratorPrototype, methods, KEY;
  2034. // fix native
  2035. if (anyNativeIterator) {
  2036. CurrentIteratorPrototype = getPrototypeOf$2(anyNativeIterator.call(new Iterable()));
  2037. if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
  2038. if (getPrototypeOf$2(CurrentIteratorPrototype) !== IteratorPrototype) {
  2039. if (setPrototypeOf$5) {
  2040. setPrototypeOf$5(CurrentIteratorPrototype, IteratorPrototype);
  2041. } else if (!isCallable$c(CurrentIteratorPrototype[ITERATOR$7])) {
  2042. defineBuiltIn$b(CurrentIteratorPrototype, ITERATOR$7, returnThis);
  2043. }
  2044. }
  2045. // Set @@toStringTag to native iterators
  2046. setToStringTag$6(CurrentIteratorPrototype, TO_STRING_TAG, true);
  2047. }
  2048. }
  2049. // fix Array.prototype.{ values, @@iterator }.name in V8 / FF
  2050. if (PROPER_FUNCTION_NAME$2 && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
  2051. if (CONFIGURABLE_FUNCTION_NAME$1) {
  2052. createNonEnumerableProperty$6(IterablePrototype, 'name', VALUES);
  2053. } else {
  2054. INCORRECT_VALUES_NAME = true;
  2055. defaultIterator = function values() { return call$m(nativeIterator, this); };
  2056. }
  2057. }
  2058. // export additional methods
  2059. if (DEFAULT) {
  2060. methods = {
  2061. values: getIterationMethod(VALUES),
  2062. keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
  2063. entries: getIterationMethod(ENTRIES)
  2064. };
  2065. if (FORCED) for (KEY in methods) {
  2066. if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
  2067. defineBuiltIn$b(IterablePrototype, KEY, methods[KEY]);
  2068. }
  2069. } else $$x({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
  2070. }
  2071. // define iterator
  2072. if (IterablePrototype[ITERATOR$7] !== defaultIterator) {
  2073. defineBuiltIn$b(IterablePrototype, ITERATOR$7, defaultIterator, { name: DEFAULT });
  2074. }
  2075. Iterators$3[NAME] = defaultIterator;
  2076. return methods;
  2077. };
  2078. var toIndexedObject$6 = toIndexedObject$b;
  2079. var addToUnscopables$1 = addToUnscopables$3;
  2080. var Iterators$2 = iterators;
  2081. var InternalStateModule$9 = internalState;
  2082. var defineProperty$a = objectDefineProperty.f;
  2083. var defineIterator$2 = defineIterator$3;
  2084. var DESCRIPTORS$d = descriptors;
  2085. var ARRAY_ITERATOR = 'Array Iterator';
  2086. var setInternalState$8 = InternalStateModule$9.set;
  2087. var getInternalState$6 = InternalStateModule$9.getterFor(ARRAY_ITERATOR);
  2088. // `Array.prototype.entries` method
  2089. // https://tc39.es/ecma262/#sec-array.prototype.entries
  2090. // `Array.prototype.keys` method
  2091. // https://tc39.es/ecma262/#sec-array.prototype.keys
  2092. // `Array.prototype.values` method
  2093. // https://tc39.es/ecma262/#sec-array.prototype.values
  2094. // `Array.prototype[@@iterator]` method
  2095. // https://tc39.es/ecma262/#sec-array.prototype-@@iterator
  2096. // `CreateArrayIterator` internal method
  2097. // https://tc39.es/ecma262/#sec-createarrayiterator
  2098. var es_array_iterator = defineIterator$2(Array, 'Array', function (iterated, kind) {
  2099. setInternalState$8(this, {
  2100. type: ARRAY_ITERATOR,
  2101. target: toIndexedObject$6(iterated), // target
  2102. index: 0, // next index
  2103. kind: kind // kind
  2104. });
  2105. // `%ArrayIteratorPrototype%.next` method
  2106. // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
  2107. }, function () {
  2108. var state = getInternalState$6(this);
  2109. var target = state.target;
  2110. var kind = state.kind;
  2111. var index = state.index++;
  2112. if (!target || index >= target.length) {
  2113. state.target = undefined;
  2114. return { value: undefined, done: true };
  2115. }
  2116. if (kind == 'keys') return { value: index, done: false };
  2117. if (kind == 'values') return { value: target[index], done: false };
  2118. return { value: [index, target[index]], done: false };
  2119. }, 'values');
  2120. // argumentsList[@@iterator] is %ArrayProto_values%
  2121. // https://tc39.es/ecma262/#sec-createunmappedargumentsobject
  2122. // https://tc39.es/ecma262/#sec-createmappedargumentsobject
  2123. var values = Iterators$2.Arguments = Iterators$2.Array;
  2124. // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
  2125. addToUnscopables$1('keys');
  2126. addToUnscopables$1('values');
  2127. addToUnscopables$1('entries');
  2128. // V8 ~ Chrome 45- bug
  2129. if (DESCRIPTORS$d && values.name !== 'values') try {
  2130. defineProperty$a(values, 'name', { value: 'values' });
  2131. } catch (error) { /* empty */ }
  2132. // eslint-disable-next-line es-x/no-typed-arrays -- safe
  2133. var arrayBufferNative = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';
  2134. var defineBuiltIn$a = defineBuiltIn$f;
  2135. var defineBuiltIns$3 = function (target, src, options) {
  2136. for (var key in src) defineBuiltIn$a(target, key, src[key], options);
  2137. return target;
  2138. };
  2139. var isPrototypeOf$6 = objectIsPrototypeOf;
  2140. var $TypeError$9 = TypeError;
  2141. var anInstance$7 = function (it, Prototype) {
  2142. if (isPrototypeOf$6(Prototype, it)) return it;
  2143. throw $TypeError$9('Incorrect invocation');
  2144. };
  2145. var toIntegerOrInfinity$6 = toIntegerOrInfinity$9;
  2146. var toLength$8 = toLength$a;
  2147. var $RangeError$3 = RangeError;
  2148. // `ToIndex` abstract operation
  2149. // https://tc39.es/ecma262/#sec-toindex
  2150. var toIndex$2 = function (it) {
  2151. if (it === undefined) return 0;
  2152. var number = toIntegerOrInfinity$6(it);
  2153. var length = toLength$8(number);
  2154. if (number !== length) throw $RangeError$3('Wrong length or index');
  2155. return length;
  2156. };
  2157. // IEEE754 conversions based on https://github.com/feross/ieee754
  2158. var $Array$3 = Array;
  2159. var abs = Math.abs;
  2160. var pow$1 = Math.pow;
  2161. var floor$6 = Math.floor;
  2162. var log = Math.log;
  2163. var LN2 = Math.LN2;
  2164. var pack = function (number, mantissaLength, bytes) {
  2165. var buffer = $Array$3(bytes);
  2166. var exponentLength = bytes * 8 - mantissaLength - 1;
  2167. var eMax = (1 << exponentLength) - 1;
  2168. var eBias = eMax >> 1;
  2169. var rt = mantissaLength === 23 ? pow$1(2, -24) - pow$1(2, -77) : 0;
  2170. var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;
  2171. var index = 0;
  2172. var exponent, mantissa, c;
  2173. number = abs(number);
  2174. // eslint-disable-next-line no-self-compare -- NaN check
  2175. if (number != number || number === Infinity) {
  2176. // eslint-disable-next-line no-self-compare -- NaN check
  2177. mantissa = number != number ? 1 : 0;
  2178. exponent = eMax;
  2179. } else {
  2180. exponent = floor$6(log(number) / LN2);
  2181. c = pow$1(2, -exponent);
  2182. if (number * c < 1) {
  2183. exponent--;
  2184. c *= 2;
  2185. }
  2186. if (exponent + eBias >= 1) {
  2187. number += rt / c;
  2188. } else {
  2189. number += rt * pow$1(2, 1 - eBias);
  2190. }
  2191. if (number * c >= 2) {
  2192. exponent++;
  2193. c /= 2;
  2194. }
  2195. if (exponent + eBias >= eMax) {
  2196. mantissa = 0;
  2197. exponent = eMax;
  2198. } else if (exponent + eBias >= 1) {
  2199. mantissa = (number * c - 1) * pow$1(2, mantissaLength);
  2200. exponent = exponent + eBias;
  2201. } else {
  2202. mantissa = number * pow$1(2, eBias - 1) * pow$1(2, mantissaLength);
  2203. exponent = 0;
  2204. }
  2205. }
  2206. while (mantissaLength >= 8) {
  2207. buffer[index++] = mantissa & 255;
  2208. mantissa /= 256;
  2209. mantissaLength -= 8;
  2210. }
  2211. exponent = exponent << mantissaLength | mantissa;
  2212. exponentLength += mantissaLength;
  2213. while (exponentLength > 0) {
  2214. buffer[index++] = exponent & 255;
  2215. exponent /= 256;
  2216. exponentLength -= 8;
  2217. }
  2218. buffer[--index] |= sign * 128;
  2219. return buffer;
  2220. };
  2221. var unpack = function (buffer, mantissaLength) {
  2222. var bytes = buffer.length;
  2223. var exponentLength = bytes * 8 - mantissaLength - 1;
  2224. var eMax = (1 << exponentLength) - 1;
  2225. var eBias = eMax >> 1;
  2226. var nBits = exponentLength - 7;
  2227. var index = bytes - 1;
  2228. var sign = buffer[index--];
  2229. var exponent = sign & 127;
  2230. var mantissa;
  2231. sign >>= 7;
  2232. while (nBits > 0) {
  2233. exponent = exponent * 256 + buffer[index--];
  2234. nBits -= 8;
  2235. }
  2236. mantissa = exponent & (1 << -nBits) - 1;
  2237. exponent >>= -nBits;
  2238. nBits += mantissaLength;
  2239. while (nBits > 0) {
  2240. mantissa = mantissa * 256 + buffer[index--];
  2241. nBits -= 8;
  2242. }
  2243. if (exponent === 0) {
  2244. exponent = 1 - eBias;
  2245. } else if (exponent === eMax) {
  2246. return mantissa ? NaN : sign ? -Infinity : Infinity;
  2247. } else {
  2248. mantissa = mantissa + pow$1(2, mantissaLength);
  2249. exponent = exponent - eBias;
  2250. } return (sign ? -1 : 1) * mantissa * pow$1(2, exponent - mantissaLength);
  2251. };
  2252. var ieee754 = {
  2253. pack: pack,
  2254. unpack: unpack
  2255. };
  2256. var toAbsoluteIndex$5 = toAbsoluteIndex$8;
  2257. var lengthOfArrayLike$a = lengthOfArrayLike$f;
  2258. var createProperty$4 = createProperty$6;
  2259. var $Array$2 = Array;
  2260. var max$3 = Math.max;
  2261. var arraySliceSimple = function (O, start, end) {
  2262. var length = lengthOfArrayLike$a(O);
  2263. var k = toAbsoluteIndex$5(start, length);
  2264. var fin = toAbsoluteIndex$5(end === undefined ? length : end, length);
  2265. var result = $Array$2(max$3(fin - k, 0));
  2266. for (var n = 0; k < fin; k++, n++) createProperty$4(result, n, O[k]);
  2267. result.length = n;
  2268. return result;
  2269. };
  2270. var global$v = global$F;
  2271. var uncurryThis$u = functionUncurryThis;
  2272. var DESCRIPTORS$c = descriptors;
  2273. var NATIVE_ARRAY_BUFFER$1 = arrayBufferNative;
  2274. var FunctionName = functionName;
  2275. var createNonEnumerableProperty$5 = createNonEnumerableProperty$9;
  2276. var defineBuiltIns$2 = defineBuiltIns$3;
  2277. var fails$t = fails$H;
  2278. var anInstance$6 = anInstance$7;
  2279. var toIntegerOrInfinity$5 = toIntegerOrInfinity$9;
  2280. var toLength$7 = toLength$a;
  2281. var toIndex$1 = toIndex$2;
  2282. var IEEE754 = ieee754;
  2283. var getPrototypeOf$1 = objectGetPrototypeOf;
  2284. var setPrototypeOf$4 = objectSetPrototypeOf;
  2285. var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f;
  2286. var defineProperty$9 = objectDefineProperty.f;
  2287. var arrayFill = arrayFill$1;
  2288. var arraySlice$a = arraySliceSimple;
  2289. var setToStringTag$5 = setToStringTag$8;
  2290. var InternalStateModule$8 = internalState;
  2291. var PROPER_FUNCTION_NAME$1 = FunctionName.PROPER;
  2292. var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
  2293. var getInternalState$5 = InternalStateModule$8.get;
  2294. var setInternalState$7 = InternalStateModule$8.set;
  2295. var ARRAY_BUFFER$1 = 'ArrayBuffer';
  2296. var DATA_VIEW = 'DataView';
  2297. var PROTOTYPE$1 = 'prototype';
  2298. var WRONG_LENGTH$1 = 'Wrong length';
  2299. var WRONG_INDEX = 'Wrong index';
  2300. var NativeArrayBuffer$1 = global$v[ARRAY_BUFFER$1];
  2301. var $ArrayBuffer = NativeArrayBuffer$1;
  2302. var ArrayBufferPrototype$1 = $ArrayBuffer && $ArrayBuffer[PROTOTYPE$1];
  2303. var $DataView = global$v[DATA_VIEW];
  2304. var DataViewPrototype$1 = $DataView && $DataView[PROTOTYPE$1];
  2305. var ObjectPrototype$2 = Object.prototype;
  2306. var Array$1 = global$v.Array;
  2307. var RangeError$3 = global$v.RangeError;
  2308. var fill = uncurryThis$u(arrayFill);
  2309. var reverse = uncurryThis$u([].reverse);
  2310. var packIEEE754 = IEEE754.pack;
  2311. var unpackIEEE754 = IEEE754.unpack;
  2312. var packInt8 = function (number) {
  2313. return [number & 0xFF];
  2314. };
  2315. var packInt16 = function (number) {
  2316. return [number & 0xFF, number >> 8 & 0xFF];
  2317. };
  2318. var packInt32 = function (number) {
  2319. return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];
  2320. };
  2321. var unpackInt32 = function (buffer) {
  2322. return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];
  2323. };
  2324. var packFloat32 = function (number) {
  2325. return packIEEE754(number, 23, 4);
  2326. };
  2327. var packFloat64 = function (number) {
  2328. return packIEEE754(number, 52, 8);
  2329. };
  2330. var addGetter$1 = function (Constructor, key) {
  2331. defineProperty$9(Constructor[PROTOTYPE$1], key, { get: function () { return getInternalState$5(this)[key]; } });
  2332. };
  2333. var get = function (view, count, index, isLittleEndian) {
  2334. var intIndex = toIndex$1(index);
  2335. var store = getInternalState$5(view);
  2336. if (intIndex + count > store.byteLength) throw RangeError$3(WRONG_INDEX);
  2337. var bytes = getInternalState$5(store.buffer).bytes;
  2338. var start = intIndex + store.byteOffset;
  2339. var pack = arraySlice$a(bytes, start, start + count);
  2340. return isLittleEndian ? pack : reverse(pack);
  2341. };
  2342. var set$1 = function (view, count, index, conversion, value, isLittleEndian) {
  2343. var intIndex = toIndex$1(index);
  2344. var store = getInternalState$5(view);
  2345. if (intIndex + count > store.byteLength) throw RangeError$3(WRONG_INDEX);
  2346. var bytes = getInternalState$5(store.buffer).bytes;
  2347. var start = intIndex + store.byteOffset;
  2348. var pack = conversion(+value);
  2349. for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];
  2350. };
  2351. if (!NATIVE_ARRAY_BUFFER$1) {
  2352. $ArrayBuffer = function ArrayBuffer(length) {
  2353. anInstance$6(this, ArrayBufferPrototype$1);
  2354. var byteLength = toIndex$1(length);
  2355. setInternalState$7(this, {
  2356. bytes: fill(Array$1(byteLength), 0),
  2357. byteLength: byteLength
  2358. });
  2359. if (!DESCRIPTORS$c) this.byteLength = byteLength;
  2360. };
  2361. ArrayBufferPrototype$1 = $ArrayBuffer[PROTOTYPE$1];
  2362. $DataView = function DataView(buffer, byteOffset, byteLength) {
  2363. anInstance$6(this, DataViewPrototype$1);
  2364. anInstance$6(buffer, ArrayBufferPrototype$1);
  2365. var bufferLength = getInternalState$5(buffer).byteLength;
  2366. var offset = toIntegerOrInfinity$5(byteOffset);
  2367. if (offset < 0 || offset > bufferLength) throw RangeError$3('Wrong offset');
  2368. byteLength = byteLength === undefined ? bufferLength - offset : toLength$7(byteLength);
  2369. if (offset + byteLength > bufferLength) throw RangeError$3(WRONG_LENGTH$1);
  2370. setInternalState$7(this, {
  2371. buffer: buffer,
  2372. byteLength: byteLength,
  2373. byteOffset: offset
  2374. });
  2375. if (!DESCRIPTORS$c) {
  2376. this.buffer = buffer;
  2377. this.byteLength = byteLength;
  2378. this.byteOffset = offset;
  2379. }
  2380. };
  2381. DataViewPrototype$1 = $DataView[PROTOTYPE$1];
  2382. if (DESCRIPTORS$c) {
  2383. addGetter$1($ArrayBuffer, 'byteLength');
  2384. addGetter$1($DataView, 'buffer');
  2385. addGetter$1($DataView, 'byteLength');
  2386. addGetter$1($DataView, 'byteOffset');
  2387. }
  2388. defineBuiltIns$2(DataViewPrototype$1, {
  2389. getInt8: function getInt8(byteOffset) {
  2390. return get(this, 1, byteOffset)[0] << 24 >> 24;
  2391. },
  2392. getUint8: function getUint8(byteOffset) {
  2393. return get(this, 1, byteOffset)[0];
  2394. },
  2395. getInt16: function getInt16(byteOffset /* , littleEndian */) {
  2396. var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);
  2397. return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
  2398. },
  2399. getUint16: function getUint16(byteOffset /* , littleEndian */) {
  2400. var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);
  2401. return bytes[1] << 8 | bytes[0];
  2402. },
  2403. getInt32: function getInt32(byteOffset /* , littleEndian */) {
  2404. return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));
  2405. },
  2406. getUint32: function getUint32(byteOffset /* , littleEndian */) {
  2407. return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;
  2408. },
  2409. getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
  2410. return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);
  2411. },
  2412. getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
  2413. return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);
  2414. },
  2415. setInt8: function setInt8(byteOffset, value) {
  2416. set$1(this, 1, byteOffset, packInt8, value);
  2417. },
  2418. setUint8: function setUint8(byteOffset, value) {
  2419. set$1(this, 1, byteOffset, packInt8, value);
  2420. },
  2421. setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
  2422. set$1(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);
  2423. },
  2424. setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
  2425. set$1(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);
  2426. },
  2427. setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
  2428. set$1(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);
  2429. },
  2430. setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
  2431. set$1(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);
  2432. },
  2433. setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
  2434. set$1(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);
  2435. },
  2436. setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
  2437. set$1(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);
  2438. }
  2439. });
  2440. } else {
  2441. var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME$1 && NativeArrayBuffer$1.name !== ARRAY_BUFFER$1;
  2442. /* eslint-disable no-new -- required for testing */
  2443. if (!fails$t(function () {
  2444. NativeArrayBuffer$1(1);
  2445. }) || !fails$t(function () {
  2446. new NativeArrayBuffer$1(-1);
  2447. }) || fails$t(function () {
  2448. new NativeArrayBuffer$1();
  2449. new NativeArrayBuffer$1(1.5);
  2450. new NativeArrayBuffer$1(NaN);
  2451. return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
  2452. })) {
  2453. /* eslint-enable no-new -- required for testing */
  2454. $ArrayBuffer = function ArrayBuffer(length) {
  2455. anInstance$6(this, ArrayBufferPrototype$1);
  2456. return new NativeArrayBuffer$1(toIndex$1(length));
  2457. };
  2458. $ArrayBuffer[PROTOTYPE$1] = ArrayBufferPrototype$1;
  2459. for (var keys$1 = getOwnPropertyNames$2(NativeArrayBuffer$1), j$2 = 0, key$1; keys$1.length > j$2;) {
  2460. if (!((key$1 = keys$1[j$2++]) in $ArrayBuffer)) {
  2461. createNonEnumerableProperty$5($ArrayBuffer, key$1, NativeArrayBuffer$1[key$1]);
  2462. }
  2463. }
  2464. ArrayBufferPrototype$1.constructor = $ArrayBuffer;
  2465. } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {
  2466. createNonEnumerableProperty$5(NativeArrayBuffer$1, 'name', ARRAY_BUFFER$1);
  2467. }
  2468. // WebKit bug - the same parent prototype for typed arrays and data view
  2469. if (setPrototypeOf$4 && getPrototypeOf$1(DataViewPrototype$1) !== ObjectPrototype$2) {
  2470. setPrototypeOf$4(DataViewPrototype$1, ObjectPrototype$2);
  2471. }
  2472. // iOS Safari 7.x bug
  2473. var testView = new $DataView(new $ArrayBuffer(2));
  2474. var $setInt8 = uncurryThis$u(DataViewPrototype$1.setInt8);
  2475. testView.setInt8(0, 2147483648);
  2476. testView.setInt8(1, 2147483649);
  2477. if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns$2(DataViewPrototype$1, {
  2478. setInt8: function setInt8(byteOffset, value) {
  2479. $setInt8(this, byteOffset, value << 24 >> 24);
  2480. },
  2481. setUint8: function setUint8(byteOffset, value) {
  2482. $setInt8(this, byteOffset, value << 24 >> 24);
  2483. }
  2484. }, { unsafe: true });
  2485. }
  2486. setToStringTag$5($ArrayBuffer, ARRAY_BUFFER$1);
  2487. setToStringTag$5($DataView, DATA_VIEW);
  2488. var arrayBuffer = {
  2489. ArrayBuffer: $ArrayBuffer,
  2490. DataView: $DataView
  2491. };
  2492. var isConstructor$2 = isConstructor$4;
  2493. var tryToString$5 = tryToString$7;
  2494. var $TypeError$8 = TypeError;
  2495. // `Assert: IsConstructor(argument) is true`
  2496. var aConstructor$2 = function (argument) {
  2497. if (isConstructor$2(argument)) return argument;
  2498. throw $TypeError$8(tryToString$5(argument) + ' is not a constructor');
  2499. };
  2500. var anObject$c = anObject$i;
  2501. var aConstructor$1 = aConstructor$2;
  2502. var wellKnownSymbol$i = wellKnownSymbol$t;
  2503. var SPECIES$4 = wellKnownSymbol$i('species');
  2504. // `SpeciesConstructor` abstract operation
  2505. // https://tc39.es/ecma262/#sec-speciesconstructor
  2506. var speciesConstructor$4 = function (O, defaultConstructor) {
  2507. var C = anObject$c(O).constructor;
  2508. var S;
  2509. return C === undefined || (S = anObject$c(C)[SPECIES$4]) == undefined ? defaultConstructor : aConstructor$1(S);
  2510. };
  2511. var $$w = _export;
  2512. var uncurryThis$t = functionUncurryThis;
  2513. var fails$s = fails$H;
  2514. var ArrayBufferModule$1 = arrayBuffer;
  2515. var anObject$b = anObject$i;
  2516. var toAbsoluteIndex$4 = toAbsoluteIndex$8;
  2517. var toLength$6 = toLength$a;
  2518. var speciesConstructor$3 = speciesConstructor$4;
  2519. var ArrayBuffer$4 = ArrayBufferModule$1.ArrayBuffer;
  2520. var DataView$2 = ArrayBufferModule$1.DataView;
  2521. var DataViewPrototype = DataView$2.prototype;
  2522. var un$ArrayBufferSlice = uncurryThis$t(ArrayBuffer$4.prototype.slice);
  2523. var getUint8$1 = uncurryThis$t(DataViewPrototype.getUint8);
  2524. var setUint8$1 = uncurryThis$t(DataViewPrototype.setUint8);
  2525. var INCORRECT_SLICE = fails$s(function () {
  2526. return !new ArrayBuffer$4(2).slice(1, undefined).byteLength;
  2527. });
  2528. // `ArrayBuffer.prototype.slice` method
  2529. // https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice
  2530. $$w({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {
  2531. slice: function slice(start, end) {
  2532. if (un$ArrayBufferSlice && end === undefined) {
  2533. return un$ArrayBufferSlice(anObject$b(this), start); // FF fix
  2534. }
  2535. var length = anObject$b(this).byteLength;
  2536. var first = toAbsoluteIndex$4(start, length);
  2537. var fin = toAbsoluteIndex$4(end === undefined ? length : end, length);
  2538. var result = new (speciesConstructor$3(this, ArrayBuffer$4))(toLength$6(fin - first));
  2539. var viewSource = new DataView$2(this);
  2540. var viewTarget = new DataView$2(result);
  2541. var index = 0;
  2542. while (first < fin) {
  2543. setUint8$1(viewTarget, index++, getUint8$1(viewSource, first++));
  2544. } return result;
  2545. }
  2546. });
  2547. var typedArrayConstructor = {exports: {}};
  2548. var wellKnownSymbol$h = wellKnownSymbol$t;
  2549. var ITERATOR$6 = wellKnownSymbol$h('iterator');
  2550. var SAFE_CLOSING = false;
  2551. try {
  2552. var called = 0;
  2553. var iteratorWithReturn = {
  2554. next: function () {
  2555. return { done: !!called++ };
  2556. },
  2557. 'return': function () {
  2558. SAFE_CLOSING = true;
  2559. }
  2560. };
  2561. iteratorWithReturn[ITERATOR$6] = function () {
  2562. return this;
  2563. };
  2564. // eslint-disable-next-line es-x/no-array-from, no-throw-literal -- required for testing
  2565. Array.from(iteratorWithReturn, function () { throw 2; });
  2566. } catch (error) { /* empty */ }
  2567. var checkCorrectnessOfIteration$4 = function (exec, SKIP_CLOSING) {
  2568. if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
  2569. var ITERATION_SUPPORT = false;
  2570. try {
  2571. var object = {};
  2572. object[ITERATOR$6] = function () {
  2573. return {
  2574. next: function () {
  2575. return { done: ITERATION_SUPPORT = true };
  2576. }
  2577. };
  2578. };
  2579. exec(object);
  2580. } catch (error) { /* empty */ }
  2581. return ITERATION_SUPPORT;
  2582. };
  2583. var NATIVE_ARRAY_BUFFER = arrayBufferNative;
  2584. var DESCRIPTORS$b = descriptors;
  2585. var global$u = global$F;
  2586. var isCallable$b = isCallable$s;
  2587. var isObject$c = isObject$k;
  2588. var hasOwn$b = hasOwnProperty_1;
  2589. var classof$a = classof$d;
  2590. var tryToString$4 = tryToString$7;
  2591. var createNonEnumerableProperty$4 = createNonEnumerableProperty$9;
  2592. var defineBuiltIn$9 = defineBuiltIn$f;
  2593. var defineProperty$8 = objectDefineProperty.f;
  2594. var isPrototypeOf$5 = objectIsPrototypeOf;
  2595. var getPrototypeOf = objectGetPrototypeOf;
  2596. var setPrototypeOf$3 = objectSetPrototypeOf;
  2597. var wellKnownSymbol$g = wellKnownSymbol$t;
  2598. var uid$2 = uid$5;
  2599. var InternalStateModule$7 = internalState;
  2600. var enforceInternalState$1 = InternalStateModule$7.enforce;
  2601. var getInternalState$4 = InternalStateModule$7.get;
  2602. var Int8Array$4 = global$u.Int8Array;
  2603. var Int8ArrayPrototype$1 = Int8Array$4 && Int8Array$4.prototype;
  2604. var Uint8ClampedArray$1 = global$u.Uint8ClampedArray;
  2605. var Uint8ClampedArrayPrototype = Uint8ClampedArray$1 && Uint8ClampedArray$1.prototype;
  2606. var TypedArray$1 = Int8Array$4 && getPrototypeOf(Int8Array$4);
  2607. var TypedArrayPrototype$2 = Int8ArrayPrototype$1 && getPrototypeOf(Int8ArrayPrototype$1);
  2608. var ObjectPrototype$1 = Object.prototype;
  2609. var TypeError$6 = global$u.TypeError;
  2610. var TO_STRING_TAG$1 = wellKnownSymbol$g('toStringTag');
  2611. var TYPED_ARRAY_TAG$1 = uid$2('TYPED_ARRAY_TAG');
  2612. var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';
  2613. // Fixing native typed arrays in Opera Presto crashes the browser, see #595
  2614. var NATIVE_ARRAY_BUFFER_VIEWS$2 = NATIVE_ARRAY_BUFFER && !!setPrototypeOf$3 && classof$a(global$u.opera) !== 'Opera';
  2615. var TYPED_ARRAY_TAG_REQUIRED = false;
  2616. var NAME$1, Constructor, Prototype;
  2617. var TypedArrayConstructorsList = {
  2618. Int8Array: 1,
  2619. Uint8Array: 1,
  2620. Uint8ClampedArray: 1,
  2621. Int16Array: 2,
  2622. Uint16Array: 2,
  2623. Int32Array: 4,
  2624. Uint32Array: 4,
  2625. Float32Array: 4,
  2626. Float64Array: 8
  2627. };
  2628. var BigIntArrayConstructorsList = {
  2629. BigInt64Array: 8,
  2630. BigUint64Array: 8
  2631. };
  2632. var isView = function isView(it) {
  2633. if (!isObject$c(it)) return false;
  2634. var klass = classof$a(it);
  2635. return klass === 'DataView'
  2636. || hasOwn$b(TypedArrayConstructorsList, klass)
  2637. || hasOwn$b(BigIntArrayConstructorsList, klass);
  2638. };
  2639. var getTypedArrayConstructor$1 = function (it) {
  2640. var proto = getPrototypeOf(it);
  2641. if (!isObject$c(proto)) return;
  2642. var state = getInternalState$4(proto);
  2643. return (state && hasOwn$b(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor$1(proto);
  2644. };
  2645. var isTypedArray$1 = function (it) {
  2646. if (!isObject$c(it)) return false;
  2647. var klass = classof$a(it);
  2648. return hasOwn$b(TypedArrayConstructorsList, klass)
  2649. || hasOwn$b(BigIntArrayConstructorsList, klass);
  2650. };
  2651. var aTypedArray$m = function (it) {
  2652. if (isTypedArray$1(it)) return it;
  2653. throw TypeError$6('Target is not a typed array');
  2654. };
  2655. var aTypedArrayConstructor$3 = function (C) {
  2656. if (isCallable$b(C) && (!setPrototypeOf$3 || isPrototypeOf$5(TypedArray$1, C))) return C;
  2657. throw TypeError$6(tryToString$4(C) + ' is not a typed array constructor');
  2658. };
  2659. var exportTypedArrayMethod$n = function (KEY, property, forced, options) {
  2660. if (!DESCRIPTORS$b) return;
  2661. if (forced) for (var ARRAY in TypedArrayConstructorsList) {
  2662. var TypedArrayConstructor = global$u[ARRAY];
  2663. if (TypedArrayConstructor && hasOwn$b(TypedArrayConstructor.prototype, KEY)) try {
  2664. delete TypedArrayConstructor.prototype[KEY];
  2665. } catch (error) {
  2666. // old WebKit bug - some methods are non-configurable
  2667. try {
  2668. TypedArrayConstructor.prototype[KEY] = property;
  2669. } catch (error2) { /* empty */ }
  2670. }
  2671. }
  2672. if (!TypedArrayPrototype$2[KEY] || forced) {
  2673. defineBuiltIn$9(TypedArrayPrototype$2, KEY, forced ? property
  2674. : NATIVE_ARRAY_BUFFER_VIEWS$2 && Int8ArrayPrototype$1[KEY] || property, options);
  2675. }
  2676. };
  2677. var exportTypedArrayStaticMethod = function (KEY, property, forced) {
  2678. var ARRAY, TypedArrayConstructor;
  2679. if (!DESCRIPTORS$b) return;
  2680. if (setPrototypeOf$3) {
  2681. if (forced) for (ARRAY in TypedArrayConstructorsList) {
  2682. TypedArrayConstructor = global$u[ARRAY];
  2683. if (TypedArrayConstructor && hasOwn$b(TypedArrayConstructor, KEY)) try {
  2684. delete TypedArrayConstructor[KEY];
  2685. } catch (error) { /* empty */ }
  2686. }
  2687. if (!TypedArray$1[KEY] || forced) {
  2688. // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable
  2689. try {
  2690. return defineBuiltIn$9(TypedArray$1, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS$2 && TypedArray$1[KEY] || property);
  2691. } catch (error) { /* empty */ }
  2692. } else return;
  2693. }
  2694. for (ARRAY in TypedArrayConstructorsList) {
  2695. TypedArrayConstructor = global$u[ARRAY];
  2696. if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
  2697. defineBuiltIn$9(TypedArrayConstructor, KEY, property);
  2698. }
  2699. }
  2700. };
  2701. for (NAME$1 in TypedArrayConstructorsList) {
  2702. Constructor = global$u[NAME$1];
  2703. Prototype = Constructor && Constructor.prototype;
  2704. if (Prototype) enforceInternalState$1(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
  2705. else NATIVE_ARRAY_BUFFER_VIEWS$2 = false;
  2706. }
  2707. for (NAME$1 in BigIntArrayConstructorsList) {
  2708. Constructor = global$u[NAME$1];
  2709. Prototype = Constructor && Constructor.prototype;
  2710. if (Prototype) enforceInternalState$1(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
  2711. }
  2712. // WebKit bug - typed arrays constructors prototype is Object.prototype
  2713. if (!NATIVE_ARRAY_BUFFER_VIEWS$2 || !isCallable$b(TypedArray$1) || TypedArray$1 === Function.prototype) {
  2714. // eslint-disable-next-line no-shadow -- safe
  2715. TypedArray$1 = function TypedArray() {
  2716. throw TypeError$6('Incorrect invocation');
  2717. };
  2718. if (NATIVE_ARRAY_BUFFER_VIEWS$2) for (NAME$1 in TypedArrayConstructorsList) {
  2719. if (global$u[NAME$1]) setPrototypeOf$3(global$u[NAME$1], TypedArray$1);
  2720. }
  2721. }
  2722. if (!NATIVE_ARRAY_BUFFER_VIEWS$2 || !TypedArrayPrototype$2 || TypedArrayPrototype$2 === ObjectPrototype$1) {
  2723. TypedArrayPrototype$2 = TypedArray$1.prototype;
  2724. if (NATIVE_ARRAY_BUFFER_VIEWS$2) for (NAME$1 in TypedArrayConstructorsList) {
  2725. if (global$u[NAME$1]) setPrototypeOf$3(global$u[NAME$1].prototype, TypedArrayPrototype$2);
  2726. }
  2727. }
  2728. // WebKit bug - one more object in Uint8ClampedArray prototype chain
  2729. if (NATIVE_ARRAY_BUFFER_VIEWS$2 && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype$2) {
  2730. setPrototypeOf$3(Uint8ClampedArrayPrototype, TypedArrayPrototype$2);
  2731. }
  2732. if (DESCRIPTORS$b && !hasOwn$b(TypedArrayPrototype$2, TO_STRING_TAG$1)) {
  2733. TYPED_ARRAY_TAG_REQUIRED = true;
  2734. defineProperty$8(TypedArrayPrototype$2, TO_STRING_TAG$1, { get: function () {
  2735. return isObject$c(this) ? this[TYPED_ARRAY_TAG$1] : undefined;
  2736. } });
  2737. for (NAME$1 in TypedArrayConstructorsList) if (global$u[NAME$1]) {
  2738. createNonEnumerableProperty$4(global$u[NAME$1], TYPED_ARRAY_TAG$1, NAME$1);
  2739. }
  2740. }
  2741. var arrayBufferViewCore = {
  2742. NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS$2,
  2743. TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG$1,
  2744. aTypedArray: aTypedArray$m,
  2745. aTypedArrayConstructor: aTypedArrayConstructor$3,
  2746. exportTypedArrayMethod: exportTypedArrayMethod$n,
  2747. exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,
  2748. getTypedArrayConstructor: getTypedArrayConstructor$1,
  2749. isView: isView,
  2750. isTypedArray: isTypedArray$1,
  2751. TypedArray: TypedArray$1,
  2752. TypedArrayPrototype: TypedArrayPrototype$2
  2753. };
  2754. /* eslint-disable no-new -- required for testing */
  2755. var global$t = global$F;
  2756. var fails$r = fails$H;
  2757. var checkCorrectnessOfIteration$3 = checkCorrectnessOfIteration$4;
  2758. var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
  2759. var ArrayBuffer$3 = global$t.ArrayBuffer;
  2760. var Int8Array$3 = global$t.Int8Array;
  2761. var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails$r(function () {
  2762. Int8Array$3(1);
  2763. }) || !fails$r(function () {
  2764. new Int8Array$3(-1);
  2765. }) || !checkCorrectnessOfIteration$3(function (iterable) {
  2766. new Int8Array$3();
  2767. new Int8Array$3(null);
  2768. new Int8Array$3(1.5);
  2769. new Int8Array$3(iterable);
  2770. }, true) || fails$r(function () {
  2771. // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill
  2772. return new Int8Array$3(new ArrayBuffer$3(2), 1, undefined).length !== 1;
  2773. });
  2774. var isObject$b = isObject$k;
  2775. var floor$5 = Math.floor;
  2776. // `IsIntegralNumber` abstract operation
  2777. // https://tc39.es/ecma262/#sec-isintegralnumber
  2778. // eslint-disable-next-line es-x/no-number-isinteger -- safe
  2779. var isIntegralNumber$1 = Number.isInteger || function isInteger(it) {
  2780. return !isObject$b(it) && isFinite(it) && floor$5(it) === it;
  2781. };
  2782. var toIntegerOrInfinity$4 = toIntegerOrInfinity$9;
  2783. var $RangeError$2 = RangeError;
  2784. var toPositiveInteger$1 = function (it) {
  2785. var result = toIntegerOrInfinity$4(it);
  2786. if (result < 0) throw $RangeError$2("The argument can't be less than 0");
  2787. return result;
  2788. };
  2789. var toPositiveInteger = toPositiveInteger$1;
  2790. var $RangeError$1 = RangeError;
  2791. var toOffset$2 = function (it, BYTES) {
  2792. var offset = toPositiveInteger(it);
  2793. if (offset % BYTES) throw $RangeError$1('Wrong offset');
  2794. return offset;
  2795. };
  2796. var classof$9 = classof$d;
  2797. var getMethod$3 = getMethod$5;
  2798. var Iterators$1 = iterators;
  2799. var wellKnownSymbol$f = wellKnownSymbol$t;
  2800. var ITERATOR$5 = wellKnownSymbol$f('iterator');
  2801. var getIteratorMethod$5 = function (it) {
  2802. if (it != undefined) return getMethod$3(it, ITERATOR$5)
  2803. || getMethod$3(it, '@@iterator')
  2804. || Iterators$1[classof$9(it)];
  2805. };
  2806. var call$l = functionCall;
  2807. var aCallable$6 = aCallable$9;
  2808. var anObject$a = anObject$i;
  2809. var tryToString$3 = tryToString$7;
  2810. var getIteratorMethod$4 = getIteratorMethod$5;
  2811. var $TypeError$7 = TypeError;
  2812. var getIterator$4 = function (argument, usingIterator) {
  2813. var iteratorMethod = arguments.length < 2 ? getIteratorMethod$4(argument) : usingIterator;
  2814. if (aCallable$6(iteratorMethod)) return anObject$a(call$l(iteratorMethod, argument));
  2815. throw $TypeError$7(tryToString$3(argument) + ' is not iterable');
  2816. };
  2817. var wellKnownSymbol$e = wellKnownSymbol$t;
  2818. var Iterators = iterators;
  2819. var ITERATOR$4 = wellKnownSymbol$e('iterator');
  2820. var ArrayPrototype = Array.prototype;
  2821. // check on default Array iterator
  2822. var isArrayIteratorMethod$3 = function (it) {
  2823. return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR$4] === it);
  2824. };
  2825. var bind$8 = functionBindContext;
  2826. var call$k = functionCall;
  2827. var aConstructor = aConstructor$2;
  2828. var toObject$7 = toObject$d;
  2829. var lengthOfArrayLike$9 = lengthOfArrayLike$f;
  2830. var getIterator$3 = getIterator$4;
  2831. var getIteratorMethod$3 = getIteratorMethod$5;
  2832. var isArrayIteratorMethod$2 = isArrayIteratorMethod$3;
  2833. var aTypedArrayConstructor$2 = arrayBufferViewCore.aTypedArrayConstructor;
  2834. var typedArrayFrom$1 = function from(source /* , mapfn, thisArg */) {
  2835. var C = aConstructor(this);
  2836. var O = toObject$7(source);
  2837. var argumentsLength = arguments.length;
  2838. var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
  2839. var mapping = mapfn !== undefined;
  2840. var iteratorMethod = getIteratorMethod$3(O);
  2841. var i, length, result, step, iterator, next;
  2842. if (iteratorMethod && !isArrayIteratorMethod$2(iteratorMethod)) {
  2843. iterator = getIterator$3(O, iteratorMethod);
  2844. next = iterator.next;
  2845. O = [];
  2846. while (!(step = call$k(next, iterator)).done) {
  2847. O.push(step.value);
  2848. }
  2849. }
  2850. if (mapping && argumentsLength > 2) {
  2851. mapfn = bind$8(mapfn, arguments[2]);
  2852. }
  2853. length = lengthOfArrayLike$9(O);
  2854. result = new (aTypedArrayConstructor$2(C))(length);
  2855. for (i = 0; length > i; i++) {
  2856. result[i] = mapping ? mapfn(O[i], i) : O[i];
  2857. }
  2858. return result;
  2859. };
  2860. var getBuiltIn$5 = getBuiltIn$b;
  2861. var definePropertyModule$2 = objectDefineProperty;
  2862. var wellKnownSymbol$d = wellKnownSymbol$t;
  2863. var DESCRIPTORS$a = descriptors;
  2864. var SPECIES$3 = wellKnownSymbol$d('species');
  2865. var setSpecies$4 = function (CONSTRUCTOR_NAME) {
  2866. var Constructor = getBuiltIn$5(CONSTRUCTOR_NAME);
  2867. var defineProperty = definePropertyModule$2.f;
  2868. if (DESCRIPTORS$a && Constructor && !Constructor[SPECIES$3]) {
  2869. defineProperty(Constructor, SPECIES$3, {
  2870. configurable: true,
  2871. get: function () { return this; }
  2872. });
  2873. }
  2874. };
  2875. var isCallable$a = isCallable$s;
  2876. var isObject$a = isObject$k;
  2877. var setPrototypeOf$2 = objectSetPrototypeOf;
  2878. // makes subclassing work correct for wrapped built-ins
  2879. var inheritIfRequired$3 = function ($this, dummy, Wrapper) {
  2880. var NewTarget, NewTargetPrototype;
  2881. if (
  2882. // it can work only with native `setPrototypeOf`
  2883. setPrototypeOf$2 &&
  2884. // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
  2885. isCallable$a(NewTarget = dummy.constructor) &&
  2886. NewTarget !== Wrapper &&
  2887. isObject$a(NewTargetPrototype = NewTarget.prototype) &&
  2888. NewTargetPrototype !== Wrapper.prototype
  2889. ) setPrototypeOf$2($this, NewTargetPrototype);
  2890. return $this;
  2891. };
  2892. var $$v = _export;
  2893. var global$s = global$F;
  2894. var call$j = functionCall;
  2895. var DESCRIPTORS$9 = descriptors;
  2896. var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = typedArrayConstructorsRequireWrappers;
  2897. var ArrayBufferViewCore$n = arrayBufferViewCore;
  2898. var ArrayBufferModule = arrayBuffer;
  2899. var anInstance$5 = anInstance$7;
  2900. var createPropertyDescriptor$2 = createPropertyDescriptor$7;
  2901. var createNonEnumerableProperty$3 = createNonEnumerableProperty$9;
  2902. var isIntegralNumber = isIntegralNumber$1;
  2903. var toLength$5 = toLength$a;
  2904. var toIndex = toIndex$2;
  2905. var toOffset$1 = toOffset$2;
  2906. var toPropertyKey$1 = toPropertyKey$5;
  2907. var hasOwn$a = hasOwnProperty_1;
  2908. var classof$8 = classof$d;
  2909. var isObject$9 = isObject$k;
  2910. var isSymbol$3 = isSymbol$6;
  2911. var create$3 = objectCreate;
  2912. var isPrototypeOf$4 = objectIsPrototypeOf;
  2913. var setPrototypeOf$1 = objectSetPrototypeOf;
  2914. var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
  2915. var typedArrayFrom = typedArrayFrom$1;
  2916. var forEach$1 = arrayIteration.forEach;
  2917. var setSpecies$3 = setSpecies$4;
  2918. var definePropertyModule$1 = objectDefineProperty;
  2919. var getOwnPropertyDescriptorModule$1 = objectGetOwnPropertyDescriptor;
  2920. var InternalStateModule$6 = internalState;
  2921. var inheritIfRequired$2 = inheritIfRequired$3;
  2922. var getInternalState$3 = InternalStateModule$6.get;
  2923. var setInternalState$6 = InternalStateModule$6.set;
  2924. var enforceInternalState = InternalStateModule$6.enforce;
  2925. var nativeDefineProperty$1 = definePropertyModule$1.f;
  2926. var nativeGetOwnPropertyDescriptor$1 = getOwnPropertyDescriptorModule$1.f;
  2927. var round = Math.round;
  2928. var RangeError$2 = global$s.RangeError;
  2929. var ArrayBuffer$2 = ArrayBufferModule.ArrayBuffer;
  2930. var ArrayBufferPrototype = ArrayBuffer$2.prototype;
  2931. var DataView$1 = ArrayBufferModule.DataView;
  2932. var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore$n.NATIVE_ARRAY_BUFFER_VIEWS;
  2933. var TYPED_ARRAY_TAG = ArrayBufferViewCore$n.TYPED_ARRAY_TAG;
  2934. var TypedArray = ArrayBufferViewCore$n.TypedArray;
  2935. var TypedArrayPrototype$1 = ArrayBufferViewCore$n.TypedArrayPrototype;
  2936. var aTypedArrayConstructor$1 = ArrayBufferViewCore$n.aTypedArrayConstructor;
  2937. var isTypedArray = ArrayBufferViewCore$n.isTypedArray;
  2938. var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
  2939. var WRONG_LENGTH = 'Wrong length';
  2940. var fromList = function (C, list) {
  2941. aTypedArrayConstructor$1(C);
  2942. var index = 0;
  2943. var length = list.length;
  2944. var result = new C(length);
  2945. while (length > index) result[index] = list[index++];
  2946. return result;
  2947. };
  2948. var addGetter = function (it, key) {
  2949. nativeDefineProperty$1(it, key, { get: function () {
  2950. return getInternalState$3(this)[key];
  2951. } });
  2952. };
  2953. var isArrayBuffer = function (it) {
  2954. var klass;
  2955. return isPrototypeOf$4(ArrayBufferPrototype, it) || (klass = classof$8(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
  2956. };
  2957. var isTypedArrayIndex = function (target, key) {
  2958. return isTypedArray(target)
  2959. && !isSymbol$3(key)
  2960. && key in target
  2961. && isIntegralNumber(+key)
  2962. && key >= 0;
  2963. };
  2964. var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {
  2965. key = toPropertyKey$1(key);
  2966. return isTypedArrayIndex(target, key)
  2967. ? createPropertyDescriptor$2(2, target[key])
  2968. : nativeGetOwnPropertyDescriptor$1(target, key);
  2969. };
  2970. var wrappedDefineProperty = function defineProperty(target, key, descriptor) {
  2971. key = toPropertyKey$1(key);
  2972. if (isTypedArrayIndex(target, key)
  2973. && isObject$9(descriptor)
  2974. && hasOwn$a(descriptor, 'value')
  2975. && !hasOwn$a(descriptor, 'get')
  2976. && !hasOwn$a(descriptor, 'set')
  2977. // TODO: add validation descriptor w/o calling accessors
  2978. && !descriptor.configurable
  2979. && (!hasOwn$a(descriptor, 'writable') || descriptor.writable)
  2980. && (!hasOwn$a(descriptor, 'enumerable') || descriptor.enumerable)
  2981. ) {
  2982. target[key] = descriptor.value;
  2983. return target;
  2984. } return nativeDefineProperty$1(target, key, descriptor);
  2985. };
  2986. if (DESCRIPTORS$9) {
  2987. if (!NATIVE_ARRAY_BUFFER_VIEWS) {
  2988. getOwnPropertyDescriptorModule$1.f = wrappedGetOwnPropertyDescriptor;
  2989. definePropertyModule$1.f = wrappedDefineProperty;
  2990. addGetter(TypedArrayPrototype$1, 'buffer');
  2991. addGetter(TypedArrayPrototype$1, 'byteOffset');
  2992. addGetter(TypedArrayPrototype$1, 'byteLength');
  2993. addGetter(TypedArrayPrototype$1, 'length');
  2994. }
  2995. $$v({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
  2996. getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,
  2997. defineProperty: wrappedDefineProperty
  2998. });
  2999. typedArrayConstructor.exports = function (TYPE, wrapper, CLAMPED) {
  3000. var BYTES = TYPE.match(/\d+$/)[0] / 8;
  3001. var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';
  3002. var GETTER = 'get' + TYPE;
  3003. var SETTER = 'set' + TYPE;
  3004. var NativeTypedArrayConstructor = global$s[CONSTRUCTOR_NAME];
  3005. var TypedArrayConstructor = NativeTypedArrayConstructor;
  3006. var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;
  3007. var exported = {};
  3008. var getter = function (that, index) {
  3009. var data = getInternalState$3(that);
  3010. return data.view[GETTER](index * BYTES + data.byteOffset, true);
  3011. };
  3012. var setter = function (that, index, value) {
  3013. var data = getInternalState$3(that);
  3014. if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;
  3015. data.view[SETTER](index * BYTES + data.byteOffset, value, true);
  3016. };
  3017. var addElement = function (that, index) {
  3018. nativeDefineProperty$1(that, index, {
  3019. get: function () {
  3020. return getter(this, index);
  3021. },
  3022. set: function (value) {
  3023. return setter(this, index, value);
  3024. },
  3025. enumerable: true
  3026. });
  3027. };
  3028. if (!NATIVE_ARRAY_BUFFER_VIEWS) {
  3029. TypedArrayConstructor = wrapper(function (that, data, offset, $length) {
  3030. anInstance$5(that, TypedArrayConstructorPrototype);
  3031. var index = 0;
  3032. var byteOffset = 0;
  3033. var buffer, byteLength, length;
  3034. if (!isObject$9(data)) {
  3035. length = toIndex(data);
  3036. byteLength = length * BYTES;
  3037. buffer = new ArrayBuffer$2(byteLength);
  3038. } else if (isArrayBuffer(data)) {
  3039. buffer = data;
  3040. byteOffset = toOffset$1(offset, BYTES);
  3041. var $len = data.byteLength;
  3042. if ($length === undefined) {
  3043. if ($len % BYTES) throw RangeError$2(WRONG_LENGTH);
  3044. byteLength = $len - byteOffset;
  3045. if (byteLength < 0) throw RangeError$2(WRONG_LENGTH);
  3046. } else {
  3047. byteLength = toLength$5($length) * BYTES;
  3048. if (byteLength + byteOffset > $len) throw RangeError$2(WRONG_LENGTH);
  3049. }
  3050. length = byteLength / BYTES;
  3051. } else if (isTypedArray(data)) {
  3052. return fromList(TypedArrayConstructor, data);
  3053. } else {
  3054. return call$j(typedArrayFrom, TypedArrayConstructor, data);
  3055. }
  3056. setInternalState$6(that, {
  3057. buffer: buffer,
  3058. byteOffset: byteOffset,
  3059. byteLength: byteLength,
  3060. length: length,
  3061. view: new DataView$1(buffer)
  3062. });
  3063. while (index < length) addElement(that, index++);
  3064. });
  3065. if (setPrototypeOf$1) setPrototypeOf$1(TypedArrayConstructor, TypedArray);
  3066. TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create$3(TypedArrayPrototype$1);
  3067. } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {
  3068. TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {
  3069. anInstance$5(dummy, TypedArrayConstructorPrototype);
  3070. return inheritIfRequired$2(function () {
  3071. if (!isObject$9(data)) return new NativeTypedArrayConstructor(toIndex(data));
  3072. if (isArrayBuffer(data)) return $length !== undefined
  3073. ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES), $length)
  3074. : typedArrayOffset !== undefined
  3075. ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES))
  3076. : new NativeTypedArrayConstructor(data);
  3077. if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);
  3078. return call$j(typedArrayFrom, TypedArrayConstructor, data);
  3079. }(), dummy, TypedArrayConstructor);
  3080. });
  3081. if (setPrototypeOf$1) setPrototypeOf$1(TypedArrayConstructor, TypedArray);
  3082. forEach$1(getOwnPropertyNames$1(NativeTypedArrayConstructor), function (key) {
  3083. if (!(key in TypedArrayConstructor)) {
  3084. createNonEnumerableProperty$3(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);
  3085. }
  3086. });
  3087. TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;
  3088. }
  3089. if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {
  3090. createNonEnumerableProperty$3(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);
  3091. }
  3092. enforceInternalState(TypedArrayConstructorPrototype).TypedArrayConstructor = TypedArrayConstructor;
  3093. if (TYPED_ARRAY_TAG) {
  3094. createNonEnumerableProperty$3(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);
  3095. }
  3096. var FORCED = TypedArrayConstructor != NativeTypedArrayConstructor;
  3097. exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;
  3098. $$v({ global: true, constructor: true, forced: FORCED, sham: !NATIVE_ARRAY_BUFFER_VIEWS }, exported);
  3099. if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {
  3100. createNonEnumerableProperty$3(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);
  3101. }
  3102. if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {
  3103. createNonEnumerableProperty$3(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);
  3104. }
  3105. setSpecies$3(CONSTRUCTOR_NAME);
  3106. };
  3107. } else typedArrayConstructor.exports = function () { /* empty */ };
  3108. var createTypedArrayConstructor$3 = typedArrayConstructor.exports;
  3109. // `Uint8Array` constructor
  3110. // https://tc39.es/ecma262/#sec-typedarray-objects
  3111. createTypedArrayConstructor$3('Uint8', function (init) {
  3112. return function Uint8Array(data, byteOffset, length) {
  3113. return init(this, data, byteOffset, length);
  3114. };
  3115. });
  3116. var tryToString$2 = tryToString$7;
  3117. var $TypeError$6 = TypeError;
  3118. var deletePropertyOrThrow$2 = function (O, P) {
  3119. if (!delete O[P]) throw $TypeError$6('Cannot delete property ' + tryToString$2(P) + ' of ' + tryToString$2(O));
  3120. };
  3121. var toObject$6 = toObject$d;
  3122. var toAbsoluteIndex$3 = toAbsoluteIndex$8;
  3123. var lengthOfArrayLike$8 = lengthOfArrayLike$f;
  3124. var deletePropertyOrThrow$1 = deletePropertyOrThrow$2;
  3125. var min$6 = Math.min;
  3126. // `Array.prototype.copyWithin` method implementation
  3127. // https://tc39.es/ecma262/#sec-array.prototype.copywithin
  3128. // eslint-disable-next-line es-x/no-array-prototype-copywithin -- safe
  3129. var arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
  3130. var O = toObject$6(this);
  3131. var len = lengthOfArrayLike$8(O);
  3132. var to = toAbsoluteIndex$3(target, len);
  3133. var from = toAbsoluteIndex$3(start, len);
  3134. var end = arguments.length > 2 ? arguments[2] : undefined;
  3135. var count = min$6((end === undefined ? len : toAbsoluteIndex$3(end, len)) - from, len - to);
  3136. var inc = 1;
  3137. if (from < to && to < from + count) {
  3138. inc = -1;
  3139. from += count - 1;
  3140. to += count - 1;
  3141. }
  3142. while (count-- > 0) {
  3143. if (from in O) O[to] = O[from];
  3144. else deletePropertyOrThrow$1(O, to);
  3145. to += inc;
  3146. from += inc;
  3147. } return O;
  3148. };
  3149. var uncurryThis$s = functionUncurryThis;
  3150. var ArrayBufferViewCore$m = arrayBufferViewCore;
  3151. var $ArrayCopyWithin = arrayCopyWithin;
  3152. var u$ArrayCopyWithin = uncurryThis$s($ArrayCopyWithin);
  3153. var aTypedArray$l = ArrayBufferViewCore$m.aTypedArray;
  3154. var exportTypedArrayMethod$m = ArrayBufferViewCore$m.exportTypedArrayMethod;
  3155. // `%TypedArray%.prototype.copyWithin` method
  3156. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin
  3157. exportTypedArrayMethod$m('copyWithin', function copyWithin(target, start /* , end */) {
  3158. return u$ArrayCopyWithin(aTypedArray$l(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
  3159. });
  3160. var ArrayBufferViewCore$l = arrayBufferViewCore;
  3161. var $every = arrayIteration.every;
  3162. var aTypedArray$k = ArrayBufferViewCore$l.aTypedArray;
  3163. var exportTypedArrayMethod$l = ArrayBufferViewCore$l.exportTypedArrayMethod;
  3164. // `%TypedArray%.prototype.every` method
  3165. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.every
  3166. exportTypedArrayMethod$l('every', function every(callbackfn /* , thisArg */) {
  3167. return $every(aTypedArray$k(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  3168. });
  3169. var toPrimitive$1 = toPrimitive$3;
  3170. var $TypeError$5 = TypeError;
  3171. // `ToBigInt` abstract operation
  3172. // https://tc39.es/ecma262/#sec-tobigint
  3173. var toBigInt$1 = function (argument) {
  3174. var prim = toPrimitive$1(argument, 'number');
  3175. if (typeof prim == 'number') throw $TypeError$5("Can't convert number to bigint");
  3176. // eslint-disable-next-line es-x/no-bigint -- safe
  3177. return BigInt(prim);
  3178. };
  3179. var ArrayBufferViewCore$k = arrayBufferViewCore;
  3180. var $fill = arrayFill$1;
  3181. var toBigInt = toBigInt$1;
  3182. var classof$7 = classof$d;
  3183. var call$i = functionCall;
  3184. var uncurryThis$r = functionUncurryThis;
  3185. var fails$q = fails$H;
  3186. var aTypedArray$j = ArrayBufferViewCore$k.aTypedArray;
  3187. var exportTypedArrayMethod$k = ArrayBufferViewCore$k.exportTypedArrayMethod;
  3188. var slice$1 = uncurryThis$r(''.slice);
  3189. // V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18
  3190. var CONVERSION_BUG = fails$q(function () {
  3191. var count = 0;
  3192. // eslint-disable-next-line es-x/no-typed-arrays -- safe
  3193. new Int8Array(2).fill({ valueOf: function () { return count++; } });
  3194. return count !== 1;
  3195. });
  3196. // `%TypedArray%.prototype.fill` method
  3197. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill
  3198. exportTypedArrayMethod$k('fill', function fill(value /* , start, end */) {
  3199. var length = arguments.length;
  3200. aTypedArray$j(this);
  3201. var actualValue = slice$1(classof$7(this), 0, 3) === 'Big' ? toBigInt(value) : +value;
  3202. return call$i($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);
  3203. }, CONVERSION_BUG);
  3204. var lengthOfArrayLike$7 = lengthOfArrayLike$f;
  3205. var arrayFromConstructorAndList$1 = function (Constructor, list) {
  3206. var index = 0;
  3207. var length = lengthOfArrayLike$7(list);
  3208. var result = new Constructor(length);
  3209. while (length > index) result[index] = list[index++];
  3210. return result;
  3211. };
  3212. var ArrayBufferViewCore$j = arrayBufferViewCore;
  3213. var speciesConstructor$2 = speciesConstructor$4;
  3214. var aTypedArrayConstructor = ArrayBufferViewCore$j.aTypedArrayConstructor;
  3215. var getTypedArrayConstructor = ArrayBufferViewCore$j.getTypedArrayConstructor;
  3216. // a part of `TypedArraySpeciesCreate` abstract operation
  3217. // https://tc39.es/ecma262/#typedarray-species-create
  3218. var typedArraySpeciesConstructor$4 = function (originalArray) {
  3219. return aTypedArrayConstructor(speciesConstructor$2(originalArray, getTypedArrayConstructor(originalArray)));
  3220. };
  3221. var arrayFromConstructorAndList = arrayFromConstructorAndList$1;
  3222. var typedArraySpeciesConstructor$3 = typedArraySpeciesConstructor$4;
  3223. var typedArrayFromSpeciesAndList = function (instance, list) {
  3224. return arrayFromConstructorAndList(typedArraySpeciesConstructor$3(instance), list);
  3225. };
  3226. var ArrayBufferViewCore$i = arrayBufferViewCore;
  3227. var $filter$1 = arrayIteration.filter;
  3228. var fromSpeciesAndList = typedArrayFromSpeciesAndList;
  3229. var aTypedArray$i = ArrayBufferViewCore$i.aTypedArray;
  3230. var exportTypedArrayMethod$j = ArrayBufferViewCore$i.exportTypedArrayMethod;
  3231. // `%TypedArray%.prototype.filter` method
  3232. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter
  3233. exportTypedArrayMethod$j('filter', function filter(callbackfn /* , thisArg */) {
  3234. var list = $filter$1(aTypedArray$i(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  3235. return fromSpeciesAndList(this, list);
  3236. });
  3237. var ArrayBufferViewCore$h = arrayBufferViewCore;
  3238. var $find$1 = arrayIteration.find;
  3239. var aTypedArray$h = ArrayBufferViewCore$h.aTypedArray;
  3240. var exportTypedArrayMethod$i = ArrayBufferViewCore$h.exportTypedArrayMethod;
  3241. // `%TypedArray%.prototype.find` method
  3242. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.find
  3243. exportTypedArrayMethod$i('find', function find(predicate /* , thisArg */) {
  3244. return $find$1(aTypedArray$h(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
  3245. });
  3246. var ArrayBufferViewCore$g = arrayBufferViewCore;
  3247. var $findIndex = arrayIteration.findIndex;
  3248. var aTypedArray$g = ArrayBufferViewCore$g.aTypedArray;
  3249. var exportTypedArrayMethod$h = ArrayBufferViewCore$g.exportTypedArrayMethod;
  3250. // `%TypedArray%.prototype.findIndex` method
  3251. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex
  3252. exportTypedArrayMethod$h('findIndex', function findIndex(predicate /* , thisArg */) {
  3253. return $findIndex(aTypedArray$g(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
  3254. });
  3255. var ArrayBufferViewCore$f = arrayBufferViewCore;
  3256. var $forEach$2 = arrayIteration.forEach;
  3257. var aTypedArray$f = ArrayBufferViewCore$f.aTypedArray;
  3258. var exportTypedArrayMethod$g = ArrayBufferViewCore$f.exportTypedArrayMethod;
  3259. // `%TypedArray%.prototype.forEach` method
  3260. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach
  3261. exportTypedArrayMethod$g('forEach', function forEach(callbackfn /* , thisArg */) {
  3262. $forEach$2(aTypedArray$f(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  3263. });
  3264. var ArrayBufferViewCore$e = arrayBufferViewCore;
  3265. var $includes = arrayIncludes.includes;
  3266. var aTypedArray$e = ArrayBufferViewCore$e.aTypedArray;
  3267. var exportTypedArrayMethod$f = ArrayBufferViewCore$e.exportTypedArrayMethod;
  3268. // `%TypedArray%.prototype.includes` method
  3269. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes
  3270. exportTypedArrayMethod$f('includes', function includes(searchElement /* , fromIndex */) {
  3271. return $includes(aTypedArray$e(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
  3272. });
  3273. var ArrayBufferViewCore$d = arrayBufferViewCore;
  3274. var $indexOf = arrayIncludes.indexOf;
  3275. var aTypedArray$d = ArrayBufferViewCore$d.aTypedArray;
  3276. var exportTypedArrayMethod$e = ArrayBufferViewCore$d.exportTypedArrayMethod;
  3277. // `%TypedArray%.prototype.indexOf` method
  3278. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof
  3279. exportTypedArrayMethod$e('indexOf', function indexOf(searchElement /* , fromIndex */) {
  3280. return $indexOf(aTypedArray$d(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
  3281. });
  3282. var global$r = global$F;
  3283. var fails$p = fails$H;
  3284. var uncurryThis$q = functionUncurryThis;
  3285. var ArrayBufferViewCore$c = arrayBufferViewCore;
  3286. var ArrayIterators = es_array_iterator;
  3287. var wellKnownSymbol$c = wellKnownSymbol$t;
  3288. var ITERATOR$3 = wellKnownSymbol$c('iterator');
  3289. var Uint8Array$2 = global$r.Uint8Array;
  3290. var arrayValues = uncurryThis$q(ArrayIterators.values);
  3291. var arrayKeys = uncurryThis$q(ArrayIterators.keys);
  3292. var arrayEntries = uncurryThis$q(ArrayIterators.entries);
  3293. var aTypedArray$c = ArrayBufferViewCore$c.aTypedArray;
  3294. var exportTypedArrayMethod$d = ArrayBufferViewCore$c.exportTypedArrayMethod;
  3295. var TypedArrayPrototype = Uint8Array$2 && Uint8Array$2.prototype;
  3296. var GENERIC = !fails$p(function () {
  3297. TypedArrayPrototype[ITERATOR$3].call([1]);
  3298. });
  3299. var ITERATOR_IS_VALUES = !!TypedArrayPrototype
  3300. && TypedArrayPrototype.values
  3301. && TypedArrayPrototype[ITERATOR$3] === TypedArrayPrototype.values
  3302. && TypedArrayPrototype.values.name === 'values';
  3303. var typedArrayValues = function values() {
  3304. return arrayValues(aTypedArray$c(this));
  3305. };
  3306. // `%TypedArray%.prototype.entries` method
  3307. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries
  3308. exportTypedArrayMethod$d('entries', function entries() {
  3309. return arrayEntries(aTypedArray$c(this));
  3310. }, GENERIC);
  3311. // `%TypedArray%.prototype.keys` method
  3312. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys
  3313. exportTypedArrayMethod$d('keys', function keys() {
  3314. return arrayKeys(aTypedArray$c(this));
  3315. }, GENERIC);
  3316. // `%TypedArray%.prototype.values` method
  3317. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.values
  3318. exportTypedArrayMethod$d('values', typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });
  3319. // `%TypedArray%.prototype[@@iterator]` method
  3320. // https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator
  3321. exportTypedArrayMethod$d(ITERATOR$3, typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });
  3322. var ArrayBufferViewCore$b = arrayBufferViewCore;
  3323. var uncurryThis$p = functionUncurryThis;
  3324. var aTypedArray$b = ArrayBufferViewCore$b.aTypedArray;
  3325. var exportTypedArrayMethod$c = ArrayBufferViewCore$b.exportTypedArrayMethod;
  3326. var $join = uncurryThis$p([].join);
  3327. // `%TypedArray%.prototype.join` method
  3328. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.join
  3329. exportTypedArrayMethod$c('join', function join(separator) {
  3330. return $join(aTypedArray$b(this), separator);
  3331. });
  3332. var NATIVE_BIND = functionBindNative;
  3333. var FunctionPrototype$1 = Function.prototype;
  3334. var apply$7 = FunctionPrototype$1.apply;
  3335. var call$h = FunctionPrototype$1.call;
  3336. // eslint-disable-next-line es-x/no-reflect -- safe
  3337. var functionApply = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call$h.bind(apply$7) : function () {
  3338. return call$h.apply(apply$7, arguments);
  3339. });
  3340. var fails$o = fails$H;
  3341. var arrayMethodIsStrict$2 = function (METHOD_NAME, argument) {
  3342. var method = [][METHOD_NAME];
  3343. return !!method && fails$o(function () {
  3344. // eslint-disable-next-line no-useless-call -- required for testing
  3345. method.call(null, argument || function () { return 1; }, 1);
  3346. });
  3347. };
  3348. /* eslint-disable es-x/no-array-prototype-lastindexof -- safe */
  3349. var apply$6 = functionApply;
  3350. var toIndexedObject$5 = toIndexedObject$b;
  3351. var toIntegerOrInfinity$3 = toIntegerOrInfinity$9;
  3352. var lengthOfArrayLike$6 = lengthOfArrayLike$f;
  3353. var arrayMethodIsStrict$1 = arrayMethodIsStrict$2;
  3354. var min$5 = Math.min;
  3355. var $lastIndexOf$1 = [].lastIndexOf;
  3356. var NEGATIVE_ZERO = !!$lastIndexOf$1 && 1 / [1].lastIndexOf(1, -0) < 0;
  3357. var STRICT_METHOD$1 = arrayMethodIsStrict$1('lastIndexOf');
  3358. var FORCED$4 = NEGATIVE_ZERO || !STRICT_METHOD$1;
  3359. // `Array.prototype.lastIndexOf` method implementation
  3360. // https://tc39.es/ecma262/#sec-array.prototype.lastindexof
  3361. var arrayLastIndexOf = FORCED$4 ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
  3362. // convert -0 to +0
  3363. if (NEGATIVE_ZERO) return apply$6($lastIndexOf$1, this, arguments) || 0;
  3364. var O = toIndexedObject$5(this);
  3365. var length = lengthOfArrayLike$6(O);
  3366. var index = length - 1;
  3367. if (arguments.length > 1) index = min$5(index, toIntegerOrInfinity$3(arguments[1]));
  3368. if (index < 0) index = length + index;
  3369. for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;
  3370. return -1;
  3371. } : $lastIndexOf$1;
  3372. var ArrayBufferViewCore$a = arrayBufferViewCore;
  3373. var apply$5 = functionApply;
  3374. var $lastIndexOf = arrayLastIndexOf;
  3375. var aTypedArray$a = ArrayBufferViewCore$a.aTypedArray;
  3376. var exportTypedArrayMethod$b = ArrayBufferViewCore$a.exportTypedArrayMethod;
  3377. // `%TypedArray%.prototype.lastIndexOf` method
  3378. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof
  3379. exportTypedArrayMethod$b('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {
  3380. var length = arguments.length;
  3381. return apply$5($lastIndexOf, aTypedArray$a(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);
  3382. });
  3383. var ArrayBufferViewCore$9 = arrayBufferViewCore;
  3384. var $map = arrayIteration.map;
  3385. var typedArraySpeciesConstructor$2 = typedArraySpeciesConstructor$4;
  3386. var aTypedArray$9 = ArrayBufferViewCore$9.aTypedArray;
  3387. var exportTypedArrayMethod$a = ArrayBufferViewCore$9.exportTypedArrayMethod;
  3388. // `%TypedArray%.prototype.map` method
  3389. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.map
  3390. exportTypedArrayMethod$a('map', function map(mapfn /* , thisArg */) {
  3391. return $map(aTypedArray$9(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {
  3392. return new (typedArraySpeciesConstructor$2(O))(length);
  3393. });
  3394. });
  3395. var aCallable$5 = aCallable$9;
  3396. var toObject$5 = toObject$d;
  3397. var IndexedObject$1 = indexedObject;
  3398. var lengthOfArrayLike$5 = lengthOfArrayLike$f;
  3399. var $TypeError$4 = TypeError;
  3400. // `Array.prototype.{ reduce, reduceRight }` methods implementation
  3401. var createMethod$3 = function (IS_RIGHT) {
  3402. return function (that, callbackfn, argumentsLength, memo) {
  3403. aCallable$5(callbackfn);
  3404. var O = toObject$5(that);
  3405. var self = IndexedObject$1(O);
  3406. var length = lengthOfArrayLike$5(O);
  3407. var index = IS_RIGHT ? length - 1 : 0;
  3408. var i = IS_RIGHT ? -1 : 1;
  3409. if (argumentsLength < 2) while (true) {
  3410. if (index in self) {
  3411. memo = self[index];
  3412. index += i;
  3413. break;
  3414. }
  3415. index += i;
  3416. if (IS_RIGHT ? index < 0 : length <= index) {
  3417. throw $TypeError$4('Reduce of empty array with no initial value');
  3418. }
  3419. }
  3420. for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {
  3421. memo = callbackfn(memo, self[index], index, O);
  3422. }
  3423. return memo;
  3424. };
  3425. };
  3426. var arrayReduce = {
  3427. // `Array.prototype.reduce` method
  3428. // https://tc39.es/ecma262/#sec-array.prototype.reduce
  3429. left: createMethod$3(false),
  3430. // `Array.prototype.reduceRight` method
  3431. // https://tc39.es/ecma262/#sec-array.prototype.reduceright
  3432. right: createMethod$3(true)
  3433. };
  3434. var ArrayBufferViewCore$8 = arrayBufferViewCore;
  3435. var $reduce = arrayReduce.left;
  3436. var aTypedArray$8 = ArrayBufferViewCore$8.aTypedArray;
  3437. var exportTypedArrayMethod$9 = ArrayBufferViewCore$8.exportTypedArrayMethod;
  3438. // `%TypedArray%.prototype.reduce` method
  3439. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce
  3440. exportTypedArrayMethod$9('reduce', function reduce(callbackfn /* , initialValue */) {
  3441. var length = arguments.length;
  3442. return $reduce(aTypedArray$8(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
  3443. });
  3444. var ArrayBufferViewCore$7 = arrayBufferViewCore;
  3445. var $reduceRight = arrayReduce.right;
  3446. var aTypedArray$7 = ArrayBufferViewCore$7.aTypedArray;
  3447. var exportTypedArrayMethod$8 = ArrayBufferViewCore$7.exportTypedArrayMethod;
  3448. // `%TypedArray%.prototype.reduceRicht` method
  3449. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright
  3450. exportTypedArrayMethod$8('reduceRight', function reduceRight(callbackfn /* , initialValue */) {
  3451. var length = arguments.length;
  3452. return $reduceRight(aTypedArray$7(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
  3453. });
  3454. var ArrayBufferViewCore$6 = arrayBufferViewCore;
  3455. var aTypedArray$6 = ArrayBufferViewCore$6.aTypedArray;
  3456. var exportTypedArrayMethod$7 = ArrayBufferViewCore$6.exportTypedArrayMethod;
  3457. var floor$4 = Math.floor;
  3458. // `%TypedArray%.prototype.reverse` method
  3459. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse
  3460. exportTypedArrayMethod$7('reverse', function reverse() {
  3461. var that = this;
  3462. var length = aTypedArray$6(that).length;
  3463. var middle = floor$4(length / 2);
  3464. var index = 0;
  3465. var value;
  3466. while (index < middle) {
  3467. value = that[index];
  3468. that[index++] = that[--length];
  3469. that[length] = value;
  3470. } return that;
  3471. });
  3472. var global$q = global$F;
  3473. var call$g = functionCall;
  3474. var ArrayBufferViewCore$5 = arrayBufferViewCore;
  3475. var lengthOfArrayLike$4 = lengthOfArrayLike$f;
  3476. var toOffset = toOffset$2;
  3477. var toIndexedObject$4 = toObject$d;
  3478. var fails$n = fails$H;
  3479. var RangeError$1 = global$q.RangeError;
  3480. var Int8Array$2 = global$q.Int8Array;
  3481. var Int8ArrayPrototype = Int8Array$2 && Int8Array$2.prototype;
  3482. var $set = Int8ArrayPrototype && Int8ArrayPrototype.set;
  3483. var aTypedArray$5 = ArrayBufferViewCore$5.aTypedArray;
  3484. var exportTypedArrayMethod$6 = ArrayBufferViewCore$5.exportTypedArrayMethod;
  3485. var WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails$n(function () {
  3486. // eslint-disable-next-line es-x/no-typed-arrays -- required for testing
  3487. var array = new Uint8ClampedArray(2);
  3488. call$g($set, array, { length: 1, 0: 3 }, 1);
  3489. return array[1] !== 3;
  3490. });
  3491. // https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other
  3492. var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore$5.NATIVE_ARRAY_BUFFER_VIEWS && fails$n(function () {
  3493. var array = new Int8Array$2(2);
  3494. array.set(1);
  3495. array.set('2', 1);
  3496. return array[0] !== 0 || array[1] !== 2;
  3497. });
  3498. // `%TypedArray%.prototype.set` method
  3499. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.set
  3500. exportTypedArrayMethod$6('set', function set(arrayLike /* , offset */) {
  3501. aTypedArray$5(this);
  3502. var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
  3503. var src = toIndexedObject$4(arrayLike);
  3504. if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return call$g($set, this, src, offset);
  3505. var length = this.length;
  3506. var len = lengthOfArrayLike$4(src);
  3507. var index = 0;
  3508. if (len + offset > length) throw RangeError$1('Wrong length');
  3509. while (index < len) this[offset + index] = src[index++];
  3510. }, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);
  3511. var uncurryThis$o = functionUncurryThis;
  3512. var arraySlice$9 = uncurryThis$o([].slice);
  3513. var ArrayBufferViewCore$4 = arrayBufferViewCore;
  3514. var typedArraySpeciesConstructor$1 = typedArraySpeciesConstructor$4;
  3515. var fails$m = fails$H;
  3516. var arraySlice$8 = arraySlice$9;
  3517. var aTypedArray$4 = ArrayBufferViewCore$4.aTypedArray;
  3518. var exportTypedArrayMethod$5 = ArrayBufferViewCore$4.exportTypedArrayMethod;
  3519. var FORCED$3 = fails$m(function () {
  3520. // eslint-disable-next-line es-x/no-typed-arrays -- required for testing
  3521. new Int8Array(1).slice();
  3522. });
  3523. // `%TypedArray%.prototype.slice` method
  3524. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice
  3525. exportTypedArrayMethod$5('slice', function slice(start, end) {
  3526. var list = arraySlice$8(aTypedArray$4(this), start, end);
  3527. var C = typedArraySpeciesConstructor$1(this);
  3528. var index = 0;
  3529. var length = list.length;
  3530. var result = new C(length);
  3531. while (length > index) result[index] = list[index++];
  3532. return result;
  3533. }, FORCED$3);
  3534. var ArrayBufferViewCore$3 = arrayBufferViewCore;
  3535. var $some = arrayIteration.some;
  3536. var aTypedArray$3 = ArrayBufferViewCore$3.aTypedArray;
  3537. var exportTypedArrayMethod$4 = ArrayBufferViewCore$3.exportTypedArrayMethod;
  3538. // `%TypedArray%.prototype.some` method
  3539. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.some
  3540. exportTypedArrayMethod$4('some', function some(callbackfn /* , thisArg */) {
  3541. return $some(aTypedArray$3(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  3542. });
  3543. var arraySlice$7 = arraySliceSimple;
  3544. var floor$3 = Math.floor;
  3545. var mergeSort = function (array, comparefn) {
  3546. var length = array.length;
  3547. var middle = floor$3(length / 2);
  3548. return length < 8 ? insertionSort(array, comparefn) : merge(
  3549. array,
  3550. mergeSort(arraySlice$7(array, 0, middle), comparefn),
  3551. mergeSort(arraySlice$7(array, middle), comparefn),
  3552. comparefn
  3553. );
  3554. };
  3555. var insertionSort = function (array, comparefn) {
  3556. var length = array.length;
  3557. var i = 1;
  3558. var element, j;
  3559. while (i < length) {
  3560. j = i;
  3561. element = array[i];
  3562. while (j && comparefn(array[j - 1], element) > 0) {
  3563. array[j] = array[--j];
  3564. }
  3565. if (j !== i++) array[j] = element;
  3566. } return array;
  3567. };
  3568. var merge = function (array, left, right, comparefn) {
  3569. var llength = left.length;
  3570. var rlength = right.length;
  3571. var lindex = 0;
  3572. var rindex = 0;
  3573. while (lindex < llength || rindex < rlength) {
  3574. array[lindex + rindex] = (lindex < llength && rindex < rlength)
  3575. ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]
  3576. : lindex < llength ? left[lindex++] : right[rindex++];
  3577. } return array;
  3578. };
  3579. var arraySort$1 = mergeSort;
  3580. var userAgent$4 = engineUserAgent;
  3581. var firefox = userAgent$4.match(/firefox\/(\d+)/i);
  3582. var engineFfVersion = !!firefox && +firefox[1];
  3583. var UA = engineUserAgent;
  3584. var engineIsIeOrEdge = /MSIE|Trident/.test(UA);
  3585. var userAgent$3 = engineUserAgent;
  3586. var webkit = userAgent$3.match(/AppleWebKit\/(\d+)\./);
  3587. var engineWebkitVersion = !!webkit && +webkit[1];
  3588. var global$p = global$F;
  3589. var uncurryThis$n = functionUncurryThis;
  3590. var fails$l = fails$H;
  3591. var aCallable$4 = aCallable$9;
  3592. var internalSort = arraySort$1;
  3593. var ArrayBufferViewCore$2 = arrayBufferViewCore;
  3594. var FF = engineFfVersion;
  3595. var IE_OR_EDGE = engineIsIeOrEdge;
  3596. var V8 = engineV8Version;
  3597. var WEBKIT = engineWebkitVersion;
  3598. var aTypedArray$2 = ArrayBufferViewCore$2.aTypedArray;
  3599. var exportTypedArrayMethod$3 = ArrayBufferViewCore$2.exportTypedArrayMethod;
  3600. var Uint16Array$1 = global$p.Uint16Array;
  3601. var un$Sort = Uint16Array$1 && uncurryThis$n(Uint16Array$1.prototype.sort);
  3602. // WebKit
  3603. var ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails$l(function () {
  3604. un$Sort(new Uint16Array$1(2), null);
  3605. }) && fails$l(function () {
  3606. un$Sort(new Uint16Array$1(2), {});
  3607. }));
  3608. var STABLE_SORT = !!un$Sort && !fails$l(function () {
  3609. // feature detection can be too slow, so check engines versions
  3610. if (V8) return V8 < 74;
  3611. if (FF) return FF < 67;
  3612. if (IE_OR_EDGE) return true;
  3613. if (WEBKIT) return WEBKIT < 602;
  3614. var array = new Uint16Array$1(516);
  3615. var expected = Array(516);
  3616. var index, mod;
  3617. for (index = 0; index < 516; index++) {
  3618. mod = index % 4;
  3619. array[index] = 515 - index;
  3620. expected[index] = index - 2 * mod + 3;
  3621. }
  3622. un$Sort(array, function (a, b) {
  3623. return (a / 4 | 0) - (b / 4 | 0);
  3624. });
  3625. for (index = 0; index < 516; index++) {
  3626. if (array[index] !== expected[index]) return true;
  3627. }
  3628. });
  3629. var getSortCompare = function (comparefn) {
  3630. return function (x, y) {
  3631. if (comparefn !== undefined) return +comparefn(x, y) || 0;
  3632. // eslint-disable-next-line no-self-compare -- NaN check
  3633. if (y !== y) return -1;
  3634. // eslint-disable-next-line no-self-compare -- NaN check
  3635. if (x !== x) return 1;
  3636. if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;
  3637. return x > y;
  3638. };
  3639. };
  3640. // `%TypedArray%.prototype.sort` method
  3641. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
  3642. exportTypedArrayMethod$3('sort', function sort(comparefn) {
  3643. if (comparefn !== undefined) aCallable$4(comparefn);
  3644. if (STABLE_SORT) return un$Sort(this, comparefn);
  3645. return internalSort(aTypedArray$2(this), getSortCompare(comparefn));
  3646. }, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);
  3647. var ArrayBufferViewCore$1 = arrayBufferViewCore;
  3648. var toLength$4 = toLength$a;
  3649. var toAbsoluteIndex$2 = toAbsoluteIndex$8;
  3650. var typedArraySpeciesConstructor = typedArraySpeciesConstructor$4;
  3651. var aTypedArray$1 = ArrayBufferViewCore$1.aTypedArray;
  3652. var exportTypedArrayMethod$2 = ArrayBufferViewCore$1.exportTypedArrayMethod;
  3653. // `%TypedArray%.prototype.subarray` method
  3654. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray
  3655. exportTypedArrayMethod$2('subarray', function subarray(begin, end) {
  3656. var O = aTypedArray$1(this);
  3657. var length = O.length;
  3658. var beginIndex = toAbsoluteIndex$2(begin, length);
  3659. var C = typedArraySpeciesConstructor(O);
  3660. return new C(
  3661. O.buffer,
  3662. O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,
  3663. toLength$4((end === undefined ? length : toAbsoluteIndex$2(end, length)) - beginIndex)
  3664. );
  3665. });
  3666. var global$o = global$F;
  3667. var apply$4 = functionApply;
  3668. var ArrayBufferViewCore = arrayBufferViewCore;
  3669. var fails$k = fails$H;
  3670. var arraySlice$6 = arraySlice$9;
  3671. var Int8Array$1 = global$o.Int8Array;
  3672. var aTypedArray = ArrayBufferViewCore.aTypedArray;
  3673. var exportTypedArrayMethod$1 = ArrayBufferViewCore.exportTypedArrayMethod;
  3674. var $toLocaleString = [].toLocaleString;
  3675. // iOS Safari 6.x fails here
  3676. var TO_LOCALE_STRING_BUG = !!Int8Array$1 && fails$k(function () {
  3677. $toLocaleString.call(new Int8Array$1(1));
  3678. });
  3679. var FORCED$2 = fails$k(function () {
  3680. return [1, 2].toLocaleString() != new Int8Array$1([1, 2]).toLocaleString();
  3681. }) || !fails$k(function () {
  3682. Int8Array$1.prototype.toLocaleString.call([1, 2]);
  3683. });
  3684. // `%TypedArray%.prototype.toLocaleString` method
  3685. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring
  3686. exportTypedArrayMethod$1('toLocaleString', function toLocaleString() {
  3687. return apply$4(
  3688. $toLocaleString,
  3689. TO_LOCALE_STRING_BUG ? arraySlice$6(aTypedArray(this)) : aTypedArray(this),
  3690. arraySlice$6(arguments)
  3691. );
  3692. }, FORCED$2);
  3693. var exportTypedArrayMethod = arrayBufferViewCore.exportTypedArrayMethod;
  3694. var fails$j = fails$H;
  3695. var global$n = global$F;
  3696. var uncurryThis$m = functionUncurryThis;
  3697. var Uint8Array$1 = global$n.Uint8Array;
  3698. var Uint8ArrayPrototype = Uint8Array$1 && Uint8Array$1.prototype || {};
  3699. var arrayToString = [].toString;
  3700. var join$3 = uncurryThis$m([].join);
  3701. if (fails$j(function () { arrayToString.call({}); })) {
  3702. arrayToString = function toString() {
  3703. return join$3(this);
  3704. };
  3705. }
  3706. var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;
  3707. // `%TypedArray%.prototype.toString` method
  3708. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring
  3709. exportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);
  3710. var createTypedArrayConstructor$2 = typedArrayConstructor.exports;
  3711. // `Uint16Array` constructor
  3712. // https://tc39.es/ecma262/#sec-typedarray-objects
  3713. createTypedArrayConstructor$2('Uint16', function (init) {
  3714. return function Uint16Array(data, byteOffset, length) {
  3715. return init(this, data, byteOffset, length);
  3716. };
  3717. });
  3718. var $$u = _export;
  3719. var isArray$1 = isArray$4;
  3720. var isConstructor$1 = isConstructor$4;
  3721. var isObject$8 = isObject$k;
  3722. var toAbsoluteIndex$1 = toAbsoluteIndex$8;
  3723. var lengthOfArrayLike$3 = lengthOfArrayLike$f;
  3724. var toIndexedObject$3 = toIndexedObject$b;
  3725. var createProperty$3 = createProperty$6;
  3726. var wellKnownSymbol$b = wellKnownSymbol$t;
  3727. var arrayMethodHasSpeciesSupport$2 = arrayMethodHasSpeciesSupport$5;
  3728. var un$Slice = arraySlice$9;
  3729. var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport$2('slice');
  3730. var SPECIES$2 = wellKnownSymbol$b('species');
  3731. var $Array$1 = Array;
  3732. var max$2 = Math.max;
  3733. // `Array.prototype.slice` method
  3734. // https://tc39.es/ecma262/#sec-array.prototype.slice
  3735. // fallback for not array-like ES3 strings and DOM objects
  3736. $$u({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 }, {
  3737. slice: function slice(start, end) {
  3738. var O = toIndexedObject$3(this);
  3739. var length = lengthOfArrayLike$3(O);
  3740. var k = toAbsoluteIndex$1(start, length);
  3741. var fin = toAbsoluteIndex$1(end === undefined ? length : end, length);
  3742. // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
  3743. var Constructor, result, n;
  3744. if (isArray$1(O)) {
  3745. Constructor = O.constructor;
  3746. // cross-realm fallback
  3747. if (isConstructor$1(Constructor) && (Constructor === $Array$1 || isArray$1(Constructor.prototype))) {
  3748. Constructor = undefined;
  3749. } else if (isObject$8(Constructor)) {
  3750. Constructor = Constructor[SPECIES$2];
  3751. if (Constructor === null) Constructor = undefined;
  3752. }
  3753. if (Constructor === $Array$1 || Constructor === undefined) {
  3754. return un$Slice(O, k, fin);
  3755. }
  3756. }
  3757. result = new (Constructor === undefined ? $Array$1 : Constructor)(max$2(fin - k, 0));
  3758. for (n = 0; k < fin; k++, n++) if (k in O) createProperty$3(result, n, O[k]);
  3759. result.length = n;
  3760. return result;
  3761. }
  3762. });
  3763. var _ref3, _ref4;
  3764. /*
  3765. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  3766. Redistribution and use in source and binary forms, with or without
  3767. modification, are permitted provided that the following conditions are met:
  3768. 1. Redistributions of source code must retain the above copyright notice,
  3769. this list of conditions and the following disclaimer.
  3770. 2. Redistributions in binary form must reproduce the above copyright
  3771. notice, this list of conditions and the following disclaimer in
  3772. the documentation and/or other materials provided with the distribution.
  3773. 3. The names of the authors may not be used to endorse or promote products
  3774. derived from this software without specific prior written permission.
  3775. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  3776. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  3777. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  3778. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  3779. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  3780. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  3781. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  3782. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  3783. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  3784. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  3785. */
  3786. /*
  3787. * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc.
  3788. * JZlib is based on zlib-1.1.3, so all credit should go authors
  3789. * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
  3790. * and contributors of zlib.
  3791. */
  3792. // deno-lint-ignore-file no-this-alias prefer-const
  3793. // Global
  3794. var MAX_BITS$1 = 15;
  3795. var D_CODES = 30;
  3796. var BL_CODES = 19;
  3797. var LENGTH_CODES = 29;
  3798. var LITERALS = 256;
  3799. var L_CODES = LITERALS + 1 + LENGTH_CODES;
  3800. var HEAP_SIZE = 2 * L_CODES + 1;
  3801. var END_BLOCK = 256; // Bit length codes must not exceed MAX_BL_BITS bits
  3802. var MAX_BL_BITS = 7; // repeat previous bit length 3-6 times (2 bits of repeat count)
  3803. var REP_3_6 = 16; // repeat a zero length 3-10 times (3 bits of repeat count)
  3804. var REPZ_3_10 = 17; // repeat a zero length 11-138 times (7 bits of repeat count)
  3805. var REPZ_11_138 = 18; // The lengths of the bit length codes are sent in order of decreasing
  3806. // probability, to avoid transmitting the lengths for unused bit
  3807. // length codes.
  3808. var Buf_size = 8 * 2; // JZlib version : "1.0.2"
  3809. var Z_DEFAULT_COMPRESSION = -1; // compression strategy
  3810. var Z_FILTERED = 1;
  3811. var Z_HUFFMAN_ONLY = 2;
  3812. var Z_DEFAULT_STRATEGY = 0;
  3813. var Z_NO_FLUSH$1 = 0;
  3814. var Z_PARTIAL_FLUSH = 1;
  3815. var Z_FULL_FLUSH = 3;
  3816. var Z_FINISH$1 = 4;
  3817. var Z_OK$1 = 0;
  3818. var Z_STREAM_END$1 = 1;
  3819. var Z_NEED_DICT$1 = 2;
  3820. var Z_STREAM_ERROR$1 = -2;
  3821. var Z_DATA_ERROR$1 = -3;
  3822. var Z_BUF_ERROR$1 = -5; // Tree
  3823. function extractArray(array) {
  3824. return flatArray(array.map(function (_ref) {
  3825. var _ref2 = _slicedToArray(_ref, 2),
  3826. length = _ref2[0],
  3827. value = _ref2[1];
  3828. return new Array(length).fill(value, 0, length);
  3829. }));
  3830. }
  3831. function flatArray(array) {
  3832. return array.reduce(function (a, b) {
  3833. return a.concat(Array.isArray(b) ? flatArray(b) : b);
  3834. }, []);
  3835. } // see definition of array dist_code below
  3836. var _dist_code = (_ref3 = [0, 1, 2, 3]).concat.apply(_ref3, _toConsumableArray(extractArray([[2, 4], [2, 5], [4, 6], [4, 7], [8, 8], [8, 9], [16, 10], [16, 11], [32, 12], [32, 13], [64, 14], [64, 15], [2, 0], [1, 16], [1, 17], [2, 18], [2, 19], [4, 20], [4, 21], [8, 22], [8, 23], [16, 24], [16, 25], [32, 26], [32, 27], [64, 28], [64, 29]])));
  3837. function Tree() {
  3838. var that = this; // dyn_tree; // the dynamic tree
  3839. // max_code; // largest code with non zero frequency
  3840. // stat_desc; // the corresponding static tree
  3841. // Compute the optimal bit lengths for a tree and update the total bit
  3842. // length
  3843. // for the current block.
  3844. // IN assertion: the fields freq and dad are set, heap[heap_max] and
  3845. // above are the tree nodes sorted by increasing frequency.
  3846. // OUT assertions: the field len is set to the optimal bit length, the
  3847. // array bl_count contains the frequencies for each bit length.
  3848. // The length opt_len is updated; static_len is also updated if stree is
  3849. // not null.
  3850. function gen_bitlen(s) {
  3851. var tree = that.dyn_tree;
  3852. var stree = that.stat_desc.static_tree;
  3853. var extra = that.stat_desc.extra_bits;
  3854. var base = that.stat_desc.extra_base;
  3855. var max_length = that.stat_desc.max_length;
  3856. var h; // heap index
  3857. var n, m; // iterate over the tree elements
  3858. var bits; // bit length
  3859. var xbits; // extra bits
  3860. var f; // frequency
  3861. var overflow = 0; // number of elements with bit length too large
  3862. for (bits = 0; bits <= MAX_BITS$1; bits++) {
  3863. s.bl_count[bits] = 0;
  3864. } // In a first pass, compute the optimal bit lengths (which may
  3865. // overflow in the case of the bit length tree).
  3866. tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap
  3867. for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
  3868. n = s.heap[h];
  3869. bits = tree[tree[n * 2 + 1] * 2 + 1] + 1;
  3870. if (bits > max_length) {
  3871. bits = max_length;
  3872. overflow++;
  3873. }
  3874. tree[n * 2 + 1] = bits; // We overwrite tree[n*2+1] which is no longer needed
  3875. if (n > that.max_code) continue; // not a leaf node
  3876. s.bl_count[bits]++;
  3877. xbits = 0;
  3878. if (n >= base) xbits = extra[n - base];
  3879. f = tree[n * 2];
  3880. s.opt_len += f * (bits + xbits);
  3881. if (stree) s.static_len += f * (stree[n * 2 + 1] + xbits);
  3882. }
  3883. if (overflow === 0) return; // This happens for example on obj2 and pic of the Calgary corpus
  3884. // Find the first bit length which could increase:
  3885. do {
  3886. bits = max_length - 1;
  3887. while (s.bl_count[bits] === 0) {
  3888. bits--;
  3889. }
  3890. s.bl_count[bits]--; // move one leaf down the tree
  3891. s.bl_count[bits + 1] += 2; // move one overflow item as its brother
  3892. s.bl_count[max_length]--; // The brother of the overflow item also moves one step up,
  3893. // but this does not affect bl_count[max_length]
  3894. overflow -= 2;
  3895. } while (overflow > 0);
  3896. for (bits = max_length; bits !== 0; bits--) {
  3897. n = s.bl_count[bits];
  3898. while (n !== 0) {
  3899. m = s.heap[--h];
  3900. if (m > that.max_code) continue;
  3901. if (tree[m * 2 + 1] != bits) {
  3902. s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2];
  3903. tree[m * 2 + 1] = bits;
  3904. }
  3905. n--;
  3906. }
  3907. }
  3908. } // Reverse the first len bits of a code, using straightforward code (a
  3909. // faster
  3910. // method would use a table)
  3911. // IN assertion: 1 <= len <= 15
  3912. function bi_reverse(code, // the value to invert
  3913. len // its bit length
  3914. ) {
  3915. var res = 0;
  3916. do {
  3917. res |= code & 1;
  3918. code >>>= 1;
  3919. res <<= 1;
  3920. } while (--len > 0);
  3921. return res >>> 1;
  3922. } // Generate the codes for a given tree and bit counts (which need not be
  3923. // optimal).
  3924. // IN assertion: the array bl_count contains the bit length statistics for
  3925. // the given tree and the field len is set for all tree elements.
  3926. // OUT assertion: the field code is set for all tree elements of non
  3927. // zero code length.
  3928. function gen_codes(tree, // the tree to decorate
  3929. max_code, // largest code with non zero frequency
  3930. bl_count // number of codes at each bit length
  3931. ) {
  3932. var next_code = []; // next code value for each
  3933. // bit length
  3934. var code = 0; // running code value
  3935. var bits; // bit index
  3936. var n; // code index
  3937. var len; // The distribution counts are first used to generate the code values
  3938. // without bit reversal.
  3939. for (bits = 1; bits <= MAX_BITS$1; bits++) {
  3940. next_code[bits] = code = code + bl_count[bits - 1] << 1;
  3941. } // Check that the bit counts in bl_count are consistent. The last code
  3942. // must be all ones.
  3943. // Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
  3944. // "inconsistent bit counts");
  3945. // Tracev((stderr,"gen_codes: max_code %d ", max_code));
  3946. for (n = 0; n <= max_code; n++) {
  3947. len = tree[n * 2 + 1];
  3948. if (len === 0) continue; // Now reverse the bits
  3949. tree[n * 2] = bi_reverse(next_code[len]++, len);
  3950. }
  3951. } // Construct one Huffman tree and assigns the code bit strings and lengths.
  3952. // Update the total bit length for the current block.
  3953. // IN assertion: the field freq is set for all tree elements.
  3954. // OUT assertions: the fields len and code are set to the optimal bit length
  3955. // and corresponding code. The length opt_len is updated; static_len is
  3956. // also updated if stree is not null. The field max_code is set.
  3957. that.build_tree = function (s) {
  3958. var tree = that.dyn_tree;
  3959. var stree = that.stat_desc.static_tree;
  3960. var elems = that.stat_desc.elems;
  3961. var n, m; // iterate over heap elements
  3962. var max_code = -1; // largest code with non zero frequency
  3963. var node; // new node being created
  3964. // Construct the initial heap, with least frequent element in
  3965. // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
  3966. // heap[0] is not used.
  3967. s.heap_len = 0;
  3968. s.heap_max = HEAP_SIZE;
  3969. for (n = 0; n < elems; n++) {
  3970. if (tree[n * 2] !== 0) {
  3971. s.heap[++s.heap_len] = max_code = n;
  3972. s.depth[n] = 0;
  3973. } else {
  3974. tree[n * 2 + 1] = 0;
  3975. }
  3976. } // The pkzip format requires that at least one distance code exists,
  3977. // and that at least one bit should be sent even if there is only one
  3978. // possible code. So to avoid special checks later on we force at least
  3979. // two codes of non zero frequency.
  3980. while (s.heap_len < 2) {
  3981. node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;
  3982. tree[node * 2] = 1;
  3983. s.depth[node] = 0;
  3984. s.opt_len--;
  3985. if (stree) s.static_len -= stree[node * 2 + 1]; // node is 0 or 1 so it does not have extra bits
  3986. }
  3987. that.max_code = max_code; // The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
  3988. // establish sub-heaps of increasing lengths:
  3989. for (n = Math.floor(s.heap_len / 2); n >= 1; n--) {
  3990. s.pqdownheap(tree, n);
  3991. } // Construct the Huffman tree by repeatedly combining the least two
  3992. // frequent nodes.
  3993. node = elems; // next internal node of the tree
  3994. do {
  3995. // n = node of least frequency
  3996. n = s.heap[1];
  3997. s.heap[1] = s.heap[s.heap_len--];
  3998. s.pqdownheap(tree, 1);
  3999. m = s.heap[1]; // m = node of next least frequency
  4000. s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency
  4001. s.heap[--s.heap_max] = m; // Create a new node father of n and m
  4002. tree[node * 2] = tree[n * 2] + tree[m * 2];
  4003. s.depth[node] = Math.max(s.depth[n], s.depth[m]) + 1;
  4004. tree[n * 2 + 1] = tree[m * 2 + 1] = node; // and insert the new node in the heap
  4005. s.heap[1] = node++;
  4006. s.pqdownheap(tree, 1);
  4007. } while (s.heap_len >= 2);
  4008. s.heap[--s.heap_max] = s.heap[1]; // At this point, the fields freq and dad are set. We can now
  4009. // generate the bit lengths.
  4010. gen_bitlen(s); // The field len is now set, we can generate the bit codes
  4011. gen_codes(tree, that.max_code, s.bl_count);
  4012. };
  4013. }
  4014. Tree._length_code = (_ref4 = [0, 1, 2, 3, 4, 5, 6, 7]).concat.apply(_ref4, _toConsumableArray(extractArray([[2, 8], [2, 9], [2, 10], [2, 11], [4, 12], [4, 13], [4, 14], [4, 15], [8, 16], [8, 17], [8, 18], [8, 19], [16, 20], [16, 21], [16, 22], [16, 23], [32, 24], [32, 25], [32, 26], [31, 27], [1, 28]])));
  4015. Tree.base_length = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0];
  4016. Tree.base_dist = [0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576]; // Mapping from a distance to a distance code. dist is the distance - 1 and
  4017. // must not have side effects. _dist_code[256] and _dist_code[257] are never
  4018. // used.
  4019. Tree.d_code = function (dist) {
  4020. return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
  4021. }; // extra bits for each length code
  4022. Tree.extra_lbits = [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]; // extra bits for each distance code
  4023. Tree.extra_dbits = [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]; // extra bits for each bit length code
  4024. Tree.extra_blbits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];
  4025. Tree.bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; // StaticTree
  4026. function StaticTree(static_tree, extra_bits, extra_base, elems, max_length) {
  4027. var that = this;
  4028. that.static_tree = static_tree;
  4029. that.extra_bits = extra_bits;
  4030. that.extra_base = extra_base;
  4031. that.elems = elems;
  4032. that.max_length = max_length;
  4033. }
  4034. var static_ltree2_first_part = [12, 140, 76, 204, 44, 172, 108, 236, 28, 156, 92, 220, 60, 188, 124, 252, 2, 130, 66, 194, 34, 162, 98, 226, 18, 146, 82, 210, 50, 178, 114, 242, 10, 138, 74, 202, 42, 170, 106, 234, 26, 154, 90, 218, 58, 186, 122, 250, 6, 134, 70, 198, 38, 166, 102, 230, 22, 150, 86, 214, 54, 182, 118, 246, 14, 142, 78, 206, 46, 174, 110, 238, 30, 158, 94, 222, 62, 190, 126, 254, 1, 129, 65, 193, 33, 161, 97, 225, 17, 145, 81, 209, 49, 177, 113, 241, 9, 137, 73, 201, 41, 169, 105, 233, 25, 153, 89, 217, 57, 185, 121, 249, 5, 133, 69, 197, 37, 165, 101, 229, 21, 149, 85, 213, 53, 181, 117, 245, 13, 141, 77, 205, 45, 173, 109, 237, 29, 157, 93, 221, 61, 189, 125, 253, 19, 275, 147, 403, 83, 339, 211, 467, 51, 307, 179, 435, 115, 371, 243, 499, 11, 267, 139, 395, 75, 331, 203, 459, 43, 299, 171, 427, 107, 363, 235, 491, 27, 283, 155, 411, 91, 347, 219, 475, 59, 315, 187, 443, 123, 379, 251, 507, 7, 263, 135, 391, 71, 327, 199, 455, 39, 295, 167, 423, 103, 359, 231, 487, 23, 279, 151, 407, 87, 343, 215, 471, 55, 311, 183, 439, 119, 375, 247, 503, 15, 271, 143, 399, 79, 335, 207, 463, 47, 303, 175, 431, 111, 367, 239, 495, 31, 287, 159, 415, 95, 351, 223, 479, 63, 319, 191, 447, 127, 383, 255, 511, 0, 64, 32, 96, 16, 80, 48, 112, 8, 72, 40, 104, 24, 88, 56, 120, 4, 68, 36, 100, 20, 84, 52, 116, 3, 131, 67, 195, 35, 163, 99, 227];
  4035. var static_ltree2_second_part = extractArray([[144, 8], [112, 9], [24, 7], [8, 8]]);
  4036. StaticTree.static_ltree = flatArray(static_ltree2_first_part.map(function (value, index) {
  4037. return [value, static_ltree2_second_part[index]];
  4038. }));
  4039. var static_dtree_first_part = [0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30, 1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23];
  4040. var static_dtree_second_part = extractArray([[30, 5]]);
  4041. StaticTree.static_dtree = flatArray(static_dtree_first_part.map(function (value, index) {
  4042. return [value, static_dtree_second_part[index]];
  4043. }));
  4044. StaticTree.static_l_desc = new StaticTree(StaticTree.static_ltree, Tree.extra_lbits, LITERALS + 1, L_CODES, MAX_BITS$1);
  4045. StaticTree.static_d_desc = new StaticTree(StaticTree.static_dtree, Tree.extra_dbits, 0, D_CODES, MAX_BITS$1);
  4046. StaticTree.static_bl_desc = new StaticTree(null, Tree.extra_blbits, 0, BL_CODES, MAX_BL_BITS); // Deflate
  4047. var MAX_MEM_LEVEL = 9;
  4048. var DEF_MEM_LEVEL = 8;
  4049. function Config(good_length, max_lazy, nice_length, max_chain, func) {
  4050. var that = this;
  4051. that.good_length = good_length;
  4052. that.max_lazy = max_lazy;
  4053. that.nice_length = nice_length;
  4054. that.max_chain = max_chain;
  4055. that.func = func;
  4056. }
  4057. var STORED$1 = 0;
  4058. var FAST = 1;
  4059. var SLOW = 2;
  4060. var config_table = [new Config(0, 0, 0, 0, STORED$1), new Config(4, 4, 8, 4, FAST), new Config(4, 5, 16, 8, FAST), new Config(4, 6, 32, 32, FAST), new Config(4, 4, 16, 16, SLOW), new Config(8, 16, 32, 32, SLOW), new Config(8, 16, 128, 128, SLOW), new Config(8, 32, 128, 256, SLOW), new Config(32, 128, 258, 1024, SLOW), new Config(32, 258, 258, 4096, SLOW)];
  4061. var z_errmsg = ["need dictionary", // Z_NEED_DICT
  4062. // 2
  4063. "stream end", // Z_STREAM_END 1
  4064. "", // Z_OK 0
  4065. "", // Z_ERRNO (-1)
  4066. "stream error", // Z_STREAM_ERROR (-2)
  4067. "data error", // Z_DATA_ERROR (-3)
  4068. "", // Z_MEM_ERROR (-4)
  4069. "buffer error", // Z_BUF_ERROR (-5)
  4070. "", // Z_VERSION_ERROR (-6)
  4071. ""]; // block not completed, need more input or more output
  4072. var NeedMore = 0; // block flush performed
  4073. var BlockDone = 1; // finish started, need only more output at next deflate
  4074. var FinishStarted = 2; // finish done, accept no more input or output
  4075. var FinishDone = 3; // preset dictionary flag in zlib header
  4076. var PRESET_DICT$1 = 0x20;
  4077. var INIT_STATE = 42;
  4078. var BUSY_STATE = 113;
  4079. var FINISH_STATE = 666; // The deflate compression method
  4080. var Z_DEFLATED$1 = 8;
  4081. var STORED_BLOCK = 0;
  4082. var STATIC_TREES = 1;
  4083. var DYN_TREES = 2;
  4084. var MIN_MATCH = 3;
  4085. var MAX_MATCH = 258;
  4086. var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
  4087. function smaller(tree, n, m, depth) {
  4088. var tn2 = tree[n * 2];
  4089. var tm2 = tree[m * 2];
  4090. return tn2 < tm2 || tn2 == tm2 && depth[n] <= depth[m];
  4091. }
  4092. function Deflate$1() {
  4093. var that = this;
  4094. var strm; // pointer back to this zlib stream
  4095. var status; // as the name implies
  4096. // pending_buf; // output still pending
  4097. var pending_buf_size; // size of pending_buf
  4098. // pending_out; // next pending byte to output to the stream
  4099. // pending; // nb of bytes in the pending buffer
  4100. // dist_buf; // buffer for distances
  4101. // lc_buf; // buffer for literals or lengths
  4102. // To simplify the code, dist_buf and lc_buf have the same number of elements.
  4103. // To use different lengths, an extra flag array would be necessary.
  4104. var last_flush; // value of flush param for previous deflate call
  4105. var w_size; // LZ77 win size (32K by default)
  4106. var w_bits; // log2(w_size) (8..16)
  4107. var w_mask; // w_size - 1
  4108. var win; // Sliding win. Input bytes are read into the second half of the win,
  4109. // and move to the first half later to keep a dictionary of at least wSize
  4110. // bytes. With this organization, matches are limited to a distance of
  4111. // wSize-MAX_MATCH bytes, but this ensures that IO is always
  4112. // performed with a length multiple of the block size. Also, it limits
  4113. // the win size to 64K, which is quite useful on MSDOS.
  4114. // To do: use the user input buffer as sliding win.
  4115. var window_size; // Actual size of win: 2*wSize, except when the user input buffer
  4116. // is directly used as sliding win.
  4117. var prev; // Link to older string with same hash index. To limit the size of this
  4118. // array to 64K, this link is maintained only for the last 32K strings.
  4119. // An index in this array is thus a win index modulo 32K.
  4120. var head; // Heads of the hash chains or NIL.
  4121. var ins_h; // hash index of string to be inserted
  4122. var hash_size; // number of elements in hash table
  4123. var hash_bits; // log2(hash_size)
  4124. var hash_mask; // hash_size-1
  4125. // Number of bits by which ins_h must be shifted at each input
  4126. // step. It must be such that after MIN_MATCH steps, the oldest
  4127. // byte no longer takes part in the hash key, that is:
  4128. // hash_shift * MIN_MATCH >= hash_bits
  4129. var hash_shift; // Window position at the beginning of the current output block. Gets
  4130. // negative when the win is moved backwards.
  4131. var block_start;
  4132. var match_length; // length of best match
  4133. var prev_match; // previous match
  4134. var match_available; // set if previous match exists
  4135. var strstart; // start of string to insert
  4136. var match_start; // start of matching string
  4137. var lookahead; // number of valid bytes ahead in win
  4138. // Length of the best match at previous step. Matches not greater than this
  4139. // are discarded. This is used in the lazy match evaluation.
  4140. var prev_length; // To speed up deflation, hash chains are never searched beyond this
  4141. // length. A higher limit improves compression ratio but degrades the speed.
  4142. var max_chain_length; // Attempt to find a better match only when the current match is strictly
  4143. // smaller than this value. This mechanism is used only for compression
  4144. // levels >= 4.
  4145. var max_lazy_match; // Insert new strings in the hash table only if the match length is not
  4146. // greater than this length. This saves time but degrades compression.
  4147. // max_insert_length is used only for compression levels <= 3.
  4148. var level; // compression level (1..9)
  4149. var strategy; // favor or force Huffman coding
  4150. // Use a faster search when the previous match is longer than this
  4151. var good_match; // Stop searching when current match exceeds this
  4152. var nice_match;
  4153. var dyn_ltree; // literal and length tree
  4154. var dyn_dtree; // distance tree
  4155. var bl_tree; // Huffman tree for bit lengths
  4156. var l_desc = new Tree(); // desc for literal tree
  4157. var d_desc = new Tree(); // desc for distance tree
  4158. var bl_desc = new Tree(); // desc for bit length tree
  4159. // that.heap_len; // number of elements in the heap
  4160. // that.heap_max; // element of largest frequency
  4161. // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
  4162. // The same heap array is used to build all trees.
  4163. // Depth of each subtree used as tie breaker for trees of equal frequency
  4164. that.depth = []; // Size of match buffer for literals/lengths. There are 4 reasons for
  4165. // limiting lit_bufsize to 64K:
  4166. // - frequencies can be kept in 16 bit counters
  4167. // - if compression is not successful for the first block, all input
  4168. // data is still in the win so we can still emit a stored block even
  4169. // when input comes from standard input. (This can also be done for
  4170. // all blocks if lit_bufsize is not greater than 32K.)
  4171. // - if compression is not successful for a file smaller than 64K, we can
  4172. // even emit a stored file instead of a stored block (saving 5 bytes).
  4173. // This is applicable only for zip (not gzip or zlib).
  4174. // - creating new Huffman trees less frequently may not provide fast
  4175. // adaptation to changes in the input data statistics. (Take for
  4176. // example a binary file with poorly compressible code followed by
  4177. // a highly compressible string table.) Smaller buffer sizes give
  4178. // fast adaptation but have of course the overhead of transmitting
  4179. // trees more frequently.
  4180. // - I can't count above 4
  4181. var lit_bufsize;
  4182. var last_lit; // running index in dist_buf and lc_buf
  4183. // that.opt_len; // bit length of current block with optimal trees
  4184. // that.static_len; // bit length of current block with static trees
  4185. var matches; // number of string matches in current block
  4186. var last_eob_len; // bit length of EOB code for last block
  4187. // Output buffer. bits are inserted starting at the bottom (least
  4188. // significant bits).
  4189. var bi_buf; // Number of valid bits in bi_buf. All bits above the last valid bit
  4190. // are always zero.
  4191. var bi_valid; // number of codes at each bit length for an optimal tree
  4192. that.bl_count = []; // heap used to build the Huffman trees
  4193. that.heap = [];
  4194. dyn_ltree = [];
  4195. dyn_dtree = [];
  4196. bl_tree = [];
  4197. function lm_init() {
  4198. window_size = 2 * w_size;
  4199. head[hash_size - 1] = 0;
  4200. for (var i = 0; i < hash_size - 1; i++) {
  4201. head[i] = 0;
  4202. } // Set the default configuration parameters:
  4203. max_lazy_match = config_table[level].max_lazy;
  4204. good_match = config_table[level].good_length;
  4205. nice_match = config_table[level].nice_length;
  4206. max_chain_length = config_table[level].max_chain;
  4207. strstart = 0;
  4208. block_start = 0;
  4209. lookahead = 0;
  4210. match_length = prev_length = MIN_MATCH - 1;
  4211. match_available = 0;
  4212. ins_h = 0;
  4213. }
  4214. function init_block() {
  4215. var i; // Initialize the trees.
  4216. for (i = 0; i < L_CODES; i++) {
  4217. dyn_ltree[i * 2] = 0;
  4218. }
  4219. for (i = 0; i < D_CODES; i++) {
  4220. dyn_dtree[i * 2] = 0;
  4221. }
  4222. for (i = 0; i < BL_CODES; i++) {
  4223. bl_tree[i * 2] = 0;
  4224. }
  4225. dyn_ltree[END_BLOCK * 2] = 1;
  4226. that.opt_len = that.static_len = 0;
  4227. last_lit = matches = 0;
  4228. } // Initialize the tree data structures for a new zlib stream.
  4229. function tr_init() {
  4230. l_desc.dyn_tree = dyn_ltree;
  4231. l_desc.stat_desc = StaticTree.static_l_desc;
  4232. d_desc.dyn_tree = dyn_dtree;
  4233. d_desc.stat_desc = StaticTree.static_d_desc;
  4234. bl_desc.dyn_tree = bl_tree;
  4235. bl_desc.stat_desc = StaticTree.static_bl_desc;
  4236. bi_buf = 0;
  4237. bi_valid = 0;
  4238. last_eob_len = 8; // enough lookahead for inflate
  4239. // Initialize the first block of the first file:
  4240. init_block();
  4241. } // Restore the heap property by moving down the tree starting at node k,
  4242. // exchanging a node with the smallest of its two sons if necessary,
  4243. // stopping
  4244. // when the heap property is re-established (each father smaller than its
  4245. // two sons).
  4246. that.pqdownheap = function (tree, // the tree to restore
  4247. k // node to move down
  4248. ) {
  4249. var heap = that.heap;
  4250. var v = heap[k];
  4251. var j = k << 1; // left son of k
  4252. while (j <= that.heap_len) {
  4253. // Set j to the smallest of the two sons:
  4254. if (j < that.heap_len && smaller(tree, heap[j + 1], heap[j], that.depth)) {
  4255. j++;
  4256. } // Exit if v is smaller than both sons
  4257. if (smaller(tree, v, heap[j], that.depth)) break; // Exchange v with the smallest son
  4258. heap[k] = heap[j];
  4259. k = j; // And continue down the tree, setting j to the left son of k
  4260. j <<= 1;
  4261. }
  4262. heap[k] = v;
  4263. }; // Scan a literal or distance tree to determine the frequencies of the codes
  4264. // in the bit length tree.
  4265. function scan_tree(tree, // the tree to be scanned
  4266. max_code // and its largest code of non zero frequency
  4267. ) {
  4268. var prevlen = -1; // last emitted length
  4269. var curlen; // length of current code
  4270. var nextlen = tree[0 * 2 + 1]; // length of next code
  4271. var count = 0; // repeat count of the current code
  4272. var max_count = 7; // max repeat count
  4273. var min_count = 4; // min repeat count
  4274. if (nextlen === 0) {
  4275. max_count = 138;
  4276. min_count = 3;
  4277. }
  4278. tree[(max_code + 1) * 2 + 1] = 0xffff; // guard
  4279. for (var n = 0; n <= max_code; n++) {
  4280. curlen = nextlen;
  4281. nextlen = tree[(n + 1) * 2 + 1];
  4282. if (++count < max_count && curlen == nextlen) {
  4283. continue;
  4284. } else if (count < min_count) {
  4285. bl_tree[curlen * 2] += count;
  4286. } else if (curlen !== 0) {
  4287. if (curlen != prevlen) bl_tree[curlen * 2]++;
  4288. bl_tree[REP_3_6 * 2]++;
  4289. } else if (count <= 10) {
  4290. bl_tree[REPZ_3_10 * 2]++;
  4291. } else {
  4292. bl_tree[REPZ_11_138 * 2]++;
  4293. }
  4294. count = 0;
  4295. prevlen = curlen;
  4296. if (nextlen === 0) {
  4297. max_count = 138;
  4298. min_count = 3;
  4299. } else if (curlen == nextlen) {
  4300. max_count = 6;
  4301. min_count = 3;
  4302. } else {
  4303. max_count = 7;
  4304. min_count = 4;
  4305. }
  4306. }
  4307. } // Construct the Huffman tree for the bit lengths and return the index in
  4308. // bl_order of the last bit length code to send.
  4309. function build_bl_tree() {
  4310. var max_blindex; // index of last bit length code of non zero freq
  4311. // Determine the bit length frequencies for literal and distance trees
  4312. scan_tree(dyn_ltree, l_desc.max_code);
  4313. scan_tree(dyn_dtree, d_desc.max_code); // Build the bit length tree:
  4314. bl_desc.build_tree(that); // opt_len now includes the length of the tree representations, except
  4315. // the lengths of the bit lengths codes and the 5+5+4 bits for the
  4316. // counts.
  4317. // Determine the number of bit length codes to send. The pkzip format
  4318. // requires that at least 4 bit length codes be sent. (appnote.txt says
  4319. // 3 but the actual value used is 4.)
  4320. for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
  4321. if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] !== 0) break;
  4322. } // Update opt_len to include the bit length tree and counts
  4323. that.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
  4324. return max_blindex;
  4325. } // Output a byte on the stream.
  4326. // IN assertion: there is enough room in pending_buf.
  4327. function put_byte(p) {
  4328. that.pending_buf[that.pending++] = p;
  4329. }
  4330. function put_short(w) {
  4331. put_byte(w & 0xff);
  4332. put_byte(w >>> 8 & 0xff);
  4333. }
  4334. function putShortMSB(b) {
  4335. put_byte(b >> 8 & 0xff);
  4336. put_byte(b & 0xff & 0xff);
  4337. }
  4338. function send_bits(value, length) {
  4339. var val;
  4340. var len = length;
  4341. if (bi_valid > Buf_size - len) {
  4342. val = value; // bi_buf |= (val << bi_valid);
  4343. bi_buf |= val << bi_valid & 0xffff;
  4344. put_short(bi_buf);
  4345. bi_buf = val >>> Buf_size - bi_valid;
  4346. bi_valid += len - Buf_size;
  4347. } else {
  4348. // bi_buf |= (value) << bi_valid;
  4349. bi_buf |= value << bi_valid & 0xffff;
  4350. bi_valid += len;
  4351. }
  4352. }
  4353. function send_code(c, tree) {
  4354. var c2 = c * 2;
  4355. send_bits(tree[c2] & 0xffff, tree[c2 + 1] & 0xffff);
  4356. } // Send a literal or distance tree in compressed form, using the codes in
  4357. // bl_tree.
  4358. function send_tree(tree, // the tree to be sent
  4359. max_code // and its largest code of non zero frequency
  4360. ) {
  4361. var n; // iterates over all tree elements
  4362. var prevlen = -1; // last emitted length
  4363. var curlen; // length of current code
  4364. var nextlen = tree[0 * 2 + 1]; // length of next code
  4365. var count = 0; // repeat count of the current code
  4366. var max_count = 7; // max repeat count
  4367. var min_count = 4; // min repeat count
  4368. if (nextlen === 0) {
  4369. max_count = 138;
  4370. min_count = 3;
  4371. }
  4372. for (n = 0; n <= max_code; n++) {
  4373. curlen = nextlen;
  4374. nextlen = tree[(n + 1) * 2 + 1];
  4375. if (++count < max_count && curlen == nextlen) {
  4376. continue;
  4377. } else if (count < min_count) {
  4378. do {
  4379. send_code(curlen, bl_tree);
  4380. } while (--count !== 0);
  4381. } else if (curlen !== 0) {
  4382. if (curlen != prevlen) {
  4383. send_code(curlen, bl_tree);
  4384. count--;
  4385. }
  4386. send_code(REP_3_6, bl_tree);
  4387. send_bits(count - 3, 2);
  4388. } else if (count <= 10) {
  4389. send_code(REPZ_3_10, bl_tree);
  4390. send_bits(count - 3, 3);
  4391. } else {
  4392. send_code(REPZ_11_138, bl_tree);
  4393. send_bits(count - 11, 7);
  4394. }
  4395. count = 0;
  4396. prevlen = curlen;
  4397. if (nextlen === 0) {
  4398. max_count = 138;
  4399. min_count = 3;
  4400. } else if (curlen == nextlen) {
  4401. max_count = 6;
  4402. min_count = 3;
  4403. } else {
  4404. max_count = 7;
  4405. min_count = 4;
  4406. }
  4407. }
  4408. } // Send the header for a block using dynamic Huffman trees: the counts, the
  4409. // lengths of the bit length codes, the literal tree and the distance tree.
  4410. // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
  4411. function send_all_trees(lcodes, dcodes, blcodes) {
  4412. var rank; // index in bl_order
  4413. send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt
  4414. send_bits(dcodes - 1, 5);
  4415. send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt
  4416. for (rank = 0; rank < blcodes; rank++) {
  4417. send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3);
  4418. }
  4419. send_tree(dyn_ltree, lcodes - 1); // literal tree
  4420. send_tree(dyn_dtree, dcodes - 1); // distance tree
  4421. } // Flush the bit buffer, keeping at most 7 bits in it.
  4422. function bi_flush() {
  4423. if (bi_valid == 16) {
  4424. put_short(bi_buf);
  4425. bi_buf = 0;
  4426. bi_valid = 0;
  4427. } else if (bi_valid >= 8) {
  4428. put_byte(bi_buf & 0xff);
  4429. bi_buf >>>= 8;
  4430. bi_valid -= 8;
  4431. }
  4432. } // Send one empty static block to give enough lookahead for inflate.
  4433. // This takes 10 bits, of which 7 may remain in the bit buffer.
  4434. // The current inflate code requires 9 bits of lookahead. If the
  4435. // last two codes for the previous block (real code plus EOB) were coded
  4436. // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
  4437. // the last real code. In this case we send two empty static blocks instead
  4438. // of one. (There are no problems if the previous block is stored or fixed.)
  4439. // To simplify the code, we assume the worst case of last real code encoded
  4440. // on one bit only.
  4441. function _tr_align() {
  4442. send_bits(STATIC_TREES << 1, 3);
  4443. send_code(END_BLOCK, StaticTree.static_ltree);
  4444. bi_flush(); // Of the 10 bits for the empty block, we have already sent
  4445. // (10 - bi_valid) bits. The lookahead for the last real code (before
  4446. // the EOB of the previous block) was thus at least one plus the length
  4447. // of the EOB plus what we have just sent of the empty static block.
  4448. if (1 + last_eob_len + 10 - bi_valid < 9) {
  4449. send_bits(STATIC_TREES << 1, 3);
  4450. send_code(END_BLOCK, StaticTree.static_ltree);
  4451. bi_flush();
  4452. }
  4453. last_eob_len = 7;
  4454. } // Save the match info and tally the frequency counts. Return true if
  4455. // the current block must be flushed.
  4456. function _tr_tally(dist, // distance of matched string
  4457. lc // match length-MIN_MATCH or unmatched char (if dist==0)
  4458. ) {
  4459. var out_length, in_length, dcode;
  4460. that.dist_buf[last_lit] = dist;
  4461. that.lc_buf[last_lit] = lc & 0xff;
  4462. last_lit++;
  4463. if (dist === 0) {
  4464. // lc is the unmatched char
  4465. dyn_ltree[lc * 2]++;
  4466. } else {
  4467. matches++; // Here, lc is the match length - MIN_MATCH
  4468. dist--; // dist = match distance - 1
  4469. dyn_ltree[(Tree._length_code[lc] + LITERALS + 1) * 2]++;
  4470. dyn_dtree[Tree.d_code(dist) * 2]++;
  4471. }
  4472. if ((last_lit & 0x1fff) === 0 && level > 2) {
  4473. // Compute an upper bound for the compressed length
  4474. out_length = last_lit * 8;
  4475. in_length = strstart - block_start;
  4476. for (dcode = 0; dcode < D_CODES; dcode++) {
  4477. out_length += dyn_dtree[dcode * 2] * (5 + Tree.extra_dbits[dcode]);
  4478. }
  4479. out_length >>>= 3;
  4480. if (matches < Math.floor(last_lit / 2) && out_length < Math.floor(in_length / 2)) return true;
  4481. }
  4482. return last_lit == lit_bufsize - 1; // We avoid equality with lit_bufsize because of wraparound at 64K
  4483. // on 16 bit machines and because stored blocks are restricted to
  4484. // 64K-1 bytes.
  4485. } // Send the block data compressed using the given Huffman trees
  4486. function compress_block(ltree, dtree) {
  4487. var dist; // distance of matched string
  4488. var lc; // match length or unmatched char (if dist === 0)
  4489. var lx = 0; // running index in dist_buf and lc_buf
  4490. var code; // the code to send
  4491. var extra; // number of extra bits to send
  4492. if (last_lit !== 0) {
  4493. do {
  4494. dist = that.dist_buf[lx];
  4495. lc = that.lc_buf[lx];
  4496. lx++;
  4497. if (dist === 0) {
  4498. send_code(lc, ltree); // send a literal byte
  4499. } else {
  4500. // Here, lc is the match length - MIN_MATCH
  4501. code = Tree._length_code[lc];
  4502. send_code(code + LITERALS + 1, ltree); // send the length
  4503. // code
  4504. extra = Tree.extra_lbits[code];
  4505. if (extra !== 0) {
  4506. lc -= Tree.base_length[code];
  4507. send_bits(lc, extra); // send the extra length bits
  4508. }
  4509. dist--; // dist is now the match distance - 1
  4510. code = Tree.d_code(dist);
  4511. send_code(code, dtree); // send the distance code
  4512. extra = Tree.extra_dbits[code];
  4513. if (extra !== 0) {
  4514. dist -= Tree.base_dist[code];
  4515. send_bits(dist, extra); // send the extra distance bits
  4516. }
  4517. } // literal or match pair ?
  4518. } while (lx < last_lit);
  4519. }
  4520. send_code(END_BLOCK, ltree);
  4521. last_eob_len = ltree[END_BLOCK * 2 + 1];
  4522. } // Flush the bit buffer and align the output on a byte boundary
  4523. function bi_windup() {
  4524. if (bi_valid > 8) {
  4525. put_short(bi_buf);
  4526. } else if (bi_valid > 0) {
  4527. put_byte(bi_buf & 0xff);
  4528. }
  4529. bi_buf = 0;
  4530. bi_valid = 0;
  4531. } // Copy a stored block, storing first the length and its
  4532. // one's complement if requested.
  4533. function copy_block(buf, // the input data
  4534. len, // its length
  4535. header // true if block header must be written
  4536. ) {
  4537. bi_windup(); // align on byte boundary
  4538. last_eob_len = 8; // enough lookahead for inflate
  4539. if (header) {
  4540. put_short(len);
  4541. put_short(~len);
  4542. }
  4543. that.pending_buf.set(win.subarray(buf, buf + len), that.pending);
  4544. that.pending += len;
  4545. } // Send a stored block
  4546. function _tr_stored_block(buf, // input block
  4547. stored_len, // length of input block
  4548. eof // true if this is the last block for a file
  4549. ) {
  4550. send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type
  4551. copy_block(buf, stored_len, true); // with header
  4552. } // Determine the best encoding for the current block: dynamic trees, static
  4553. // trees or store, and output the encoded block to the zip file.
  4554. function _tr_flush_block(buf, // input block, or NULL if too old
  4555. stored_len, // length of input block
  4556. eof // true if this is the last block for a file
  4557. ) {
  4558. var opt_lenb, static_lenb; // opt_len and static_len in bytes
  4559. var max_blindex = 0; // index of last bit length code of non zero freq
  4560. // Build the Huffman trees unless a stored block is forced
  4561. if (level > 0) {
  4562. // Construct the literal and distance trees
  4563. l_desc.build_tree(that);
  4564. d_desc.build_tree(that); // At this point, opt_len and static_len are the total bit lengths
  4565. // of
  4566. // the compressed block data, excluding the tree representations.
  4567. // Build the bit length tree for the above two trees, and get the
  4568. // index
  4569. // in bl_order of the last bit length code to send.
  4570. max_blindex = build_bl_tree(); // Determine the best encoding. Compute first the block length in
  4571. // bytes
  4572. opt_lenb = that.opt_len + 3 + 7 >>> 3;
  4573. static_lenb = that.static_len + 3 + 7 >>> 3;
  4574. if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
  4575. } else {
  4576. opt_lenb = static_lenb = stored_len + 5; // force a stored block
  4577. }
  4578. if (stored_len + 4 <= opt_lenb && buf != -1) {
  4579. // 4: two words for the lengths
  4580. // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
  4581. // Otherwise we can't have processed more than WSIZE input bytes
  4582. // since
  4583. // the last block flush, because compression would have been
  4584. // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
  4585. // transform a block into a stored block.
  4586. _tr_stored_block(buf, stored_len, eof);
  4587. } else if (static_lenb == opt_lenb) {
  4588. send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3);
  4589. compress_block(StaticTree.static_ltree, StaticTree.static_dtree);
  4590. } else {
  4591. send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3);
  4592. send_all_trees(l_desc.max_code + 1, d_desc.max_code + 1, max_blindex + 1);
  4593. compress_block(dyn_ltree, dyn_dtree);
  4594. } // The above check is made mod 2^32, for files larger than 512 MB
  4595. // and uLong implemented on 32 bits.
  4596. init_block();
  4597. if (eof) {
  4598. bi_windup();
  4599. }
  4600. }
  4601. function flush_block_only(eof) {
  4602. _tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof);
  4603. block_start = strstart;
  4604. strm.flush_pending();
  4605. } // Fill the win when the lookahead becomes insufficient.
  4606. // Updates strstart and lookahead.
  4607. //
  4608. // IN assertion: lookahead < MIN_LOOKAHEAD
  4609. // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
  4610. // At least one byte has been read, or avail_in === 0; reads are
  4611. // performed for at least two bytes (required for the zip translate_eol
  4612. // option -- not supported here).
  4613. function fill_window() {
  4614. var n, m;
  4615. var p;
  4616. var more; // Amount of free space at the end of the win.
  4617. do {
  4618. more = window_size - lookahead - strstart; // Deal with !@#$% 64K limit:
  4619. if (more === 0 && strstart === 0 && lookahead === 0) {
  4620. more = w_size;
  4621. } else if (more == -1) {
  4622. // Very unlikely, but possible on 16 bit machine if strstart ==
  4623. // 0
  4624. // and lookahead == 1 (input done one byte at time)
  4625. more--; // If the win is almost full and there is insufficient
  4626. // lookahead,
  4627. // move the upper half to the lower one to make room in the
  4628. // upper half.
  4629. } else if (strstart >= w_size + w_size - MIN_LOOKAHEAD) {
  4630. win.set(win.subarray(w_size, w_size + w_size), 0);
  4631. match_start -= w_size;
  4632. strstart -= w_size; // we now have strstart >= MAX_DIST
  4633. block_start -= w_size; // Slide the hash table (could be avoided with 32 bit values
  4634. // at the expense of memory usage). We slide even when level ==
  4635. // 0
  4636. // to keep the hash table consistent if we switch back to level
  4637. // > 0
  4638. // later. (Using level 0 permanently is not an optimal usage of
  4639. // zlib, so we don't care about this pathological case.)
  4640. n = hash_size;
  4641. p = n;
  4642. do {
  4643. m = head[--p] & 0xffff;
  4644. head[p] = m >= w_size ? m - w_size : 0;
  4645. } while (--n !== 0);
  4646. n = w_size;
  4647. p = n;
  4648. do {
  4649. m = prev[--p] & 0xffff;
  4650. prev[p] = m >= w_size ? m - w_size : 0; // If n is not on any hash chain, prev[n] is garbage but
  4651. // its value will never be used.
  4652. } while (--n !== 0);
  4653. more += w_size;
  4654. }
  4655. if (strm.avail_in === 0) return; // If there was no sliding:
  4656. // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
  4657. // more == window_size - lookahead - strstart
  4658. // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
  4659. // => more >= window_size - 2*WSIZE + 2
  4660. // In the BIG_MEM or MMAP case (not yet supported),
  4661. // window_size == input_size + MIN_LOOKAHEAD &&
  4662. // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
  4663. // Otherwise, window_size == 2*WSIZE so more >= 2.
  4664. // If there was sliding, more >= WSIZE. So in all cases, more >= 2.
  4665. n = strm.read_buf(win, strstart + lookahead, more);
  4666. lookahead += n; // Initialize the hash value now that we have some input:
  4667. if (lookahead >= MIN_MATCH) {
  4668. ins_h = win[strstart] & 0xff;
  4669. ins_h = (ins_h << hash_shift ^ win[strstart + 1] & 0xff) & hash_mask;
  4670. } // If the whole input has less than MIN_MATCH bytes, ins_h is
  4671. // garbage,
  4672. // but this is not important since only literal bytes will be
  4673. // emitted.
  4674. } while (lookahead < MIN_LOOKAHEAD && strm.avail_in !== 0);
  4675. } // Copy without compression as much as possible from the input stream,
  4676. // return
  4677. // the current block state.
  4678. // This function does not insert new strings in the dictionary since
  4679. // uncompressible data is probably not useful. This function is used
  4680. // only for the level=0 compression option.
  4681. // NOTE: this function should be optimized to avoid extra copying from
  4682. // win to pending_buf.
  4683. function deflate_stored(flush) {
  4684. // Stored blocks are limited to 0xffff bytes, pending_buf is limited
  4685. // to pending_buf_size, and each stored block has a 5 byte header:
  4686. var max_block_size = 0xffff;
  4687. var max_start;
  4688. if (max_block_size > pending_buf_size - 5) {
  4689. max_block_size = pending_buf_size - 5;
  4690. } // Copy as much as possible from input to output:
  4691. // eslint-disable-next-line no-constant-condition
  4692. while (true) {
  4693. // Fill the win as much as possible:
  4694. if (lookahead <= 1) {
  4695. fill_window();
  4696. if (lookahead === 0 && flush == Z_NO_FLUSH$1) return NeedMore;
  4697. if (lookahead === 0) break; // flush the current block
  4698. }
  4699. strstart += lookahead;
  4700. lookahead = 0; // Emit a stored block if pending_buf will be full:
  4701. max_start = block_start + max_block_size;
  4702. if (strstart === 0 || strstart >= max_start) {
  4703. // strstart === 0 is possible when wraparound on 16-bit machine
  4704. lookahead = strstart - max_start;
  4705. strstart = max_start;
  4706. flush_block_only(false);
  4707. if (strm.avail_out === 0) return NeedMore;
  4708. } // Flush if we may have to slide, otherwise block_start may become
  4709. // negative and the data will be gone:
  4710. if (strstart - block_start >= w_size - MIN_LOOKAHEAD) {
  4711. flush_block_only(false);
  4712. if (strm.avail_out === 0) return NeedMore;
  4713. }
  4714. }
  4715. flush_block_only(flush == Z_FINISH$1);
  4716. if (strm.avail_out === 0) return flush == Z_FINISH$1 ? FinishStarted : NeedMore;
  4717. return flush == Z_FINISH$1 ? FinishDone : BlockDone;
  4718. }
  4719. function longest_match(cur_match) {
  4720. var chain_length = max_chain_length; // max hash chain length
  4721. var scan = strstart; // current string
  4722. var match; // matched string
  4723. var len; // length of current match
  4724. var best_len = prev_length; // best match length so far
  4725. var limit = strstart > w_size - MIN_LOOKAHEAD ? strstart - (w_size - MIN_LOOKAHEAD) : 0;
  4726. var _nice_match = nice_match; // Stop when cur_match becomes <= limit. To simplify the code,
  4727. // we prevent matches with the string of win index 0.
  4728. var wmask = w_mask;
  4729. var strend = strstart + MAX_MATCH;
  4730. var scan_end1 = win[scan + best_len - 1];
  4731. var scan_end = win[scan + best_len]; // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of
  4732. // 16.
  4733. // It is easy to get rid of this optimization if necessary.
  4734. // Do not waste too much time if we already have a good match:
  4735. if (prev_length >= good_match) {
  4736. chain_length >>= 2;
  4737. } // Do not look for matches beyond the end of the input. This is
  4738. // necessary
  4739. // to make deflate deterministic.
  4740. if (_nice_match > lookahead) _nice_match = lookahead;
  4741. do {
  4742. match = cur_match; // Skip to next match if the match length cannot increase
  4743. // or if the match length is less than 2:
  4744. if (win[match + best_len] != scan_end || win[match + best_len - 1] != scan_end1 || win[match] != win[scan] || win[++match] != win[scan + 1]) continue; // The check at best_len-1 can be removed because it will be made
  4745. // again later. (This heuristic is not always a win.)
  4746. // It is not necessary to compare scan[2] and match[2] since they
  4747. // are always equal when the other bytes match, given that
  4748. // the hash keys are equal and that HASH_BITS >= 8.
  4749. scan += 2;
  4750. match++; // We check for insufficient lookahead only every 8th comparison;
  4751. // the 256th check will be made at strstart+258.
  4752. // eslint-disable-next-line no-empty
  4753. do {// empty block
  4754. } while (win[++scan] == win[++match] && win[++scan] == win[++match] && win[++scan] == win[++match] && win[++scan] == win[++match] && win[++scan] == win[++match] && win[++scan] == win[++match] && win[++scan] == win[++match] && win[++scan] == win[++match] && scan < strend);
  4755. len = MAX_MATCH - (strend - scan);
  4756. scan = strend - MAX_MATCH;
  4757. if (len > best_len) {
  4758. match_start = cur_match;
  4759. best_len = len;
  4760. if (len >= _nice_match) break;
  4761. scan_end1 = win[scan + best_len - 1];
  4762. scan_end = win[scan + best_len];
  4763. }
  4764. } while ((cur_match = prev[cur_match & wmask] & 0xffff) > limit && --chain_length !== 0);
  4765. if (best_len <= lookahead) return best_len;
  4766. return lookahead;
  4767. } // Compress as much as possible from the input stream, return the current
  4768. // block state.
  4769. // This function does not perform lazy evaluation of matches and inserts
  4770. // new strings in the dictionary only for unmatched strings or for short
  4771. // matches. It is used only for the fast compression options.
  4772. function deflate_fast(flush) {
  4773. // short hash_head = 0; // head of the hash chain
  4774. var hash_head = 0; // head of the hash chain
  4775. var bflush; // set if current block must be flushed
  4776. // eslint-disable-next-line no-constant-condition
  4777. while (true) {
  4778. // Make sure that we always have enough lookahead, except
  4779. // at the end of the input file. We need MAX_MATCH bytes
  4780. // for the next match, plus MIN_MATCH bytes to insert the
  4781. // string following the next match.
  4782. if (lookahead < MIN_LOOKAHEAD) {
  4783. fill_window();
  4784. if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH$1) {
  4785. return NeedMore;
  4786. }
  4787. if (lookahead === 0) break; // flush the current block
  4788. } // Insert the string win[strstart .. strstart+2] in the
  4789. // dictionary, and set hash_head to the head of the hash chain:
  4790. if (lookahead >= MIN_MATCH) {
  4791. ins_h = (ins_h << hash_shift ^ win[strstart + (MIN_MATCH - 1)] & 0xff) & hash_mask; // prev[strstart&w_mask]=hash_head=head[ins_h];
  4792. hash_head = head[ins_h] & 0xffff;
  4793. prev[strstart & w_mask] = head[ins_h];
  4794. head[ins_h] = strstart;
  4795. } // Find the longest match, discarding those <= prev_length.
  4796. // At this point we have always match_length < MIN_MATCH
  4797. if (hash_head !== 0 && (strstart - hash_head & 0xffff) <= w_size - MIN_LOOKAHEAD) {
  4798. // To simplify the code, we prevent matches with the string
  4799. // of win index 0 (in particular we have to avoid a match
  4800. // of the string with itself at the start of the input file).
  4801. if (strategy != Z_HUFFMAN_ONLY) {
  4802. match_length = longest_match(hash_head);
  4803. } // longest_match() sets match_start
  4804. }
  4805. if (match_length >= MIN_MATCH) {
  4806. // check_match(strstart, match_start, match_length);
  4807. bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH);
  4808. lookahead -= match_length; // Insert new strings in the hash table only if the match length
  4809. // is not too large. This saves time but degrades compression.
  4810. if (match_length <= max_lazy_match && lookahead >= MIN_MATCH) {
  4811. match_length--; // string at strstart already in hash table
  4812. do {
  4813. strstart++;
  4814. ins_h = (ins_h << hash_shift ^ win[strstart + (MIN_MATCH - 1)] & 0xff) & hash_mask; // prev[strstart&w_mask]=hash_head=head[ins_h];
  4815. hash_head = head[ins_h] & 0xffff;
  4816. prev[strstart & w_mask] = head[ins_h];
  4817. head[ins_h] = strstart; // strstart never exceeds WSIZE-MAX_MATCH, so there are
  4818. // always MIN_MATCH bytes ahead.
  4819. } while (--match_length !== 0);
  4820. strstart++;
  4821. } else {
  4822. strstart += match_length;
  4823. match_length = 0;
  4824. ins_h = win[strstart] & 0xff;
  4825. ins_h = (ins_h << hash_shift ^ win[strstart + 1] & 0xff) & hash_mask; // If lookahead < MIN_MATCH, ins_h is garbage, but it does
  4826. // not
  4827. // matter since it will be recomputed at next deflate call.
  4828. }
  4829. } else {
  4830. // No match, output a literal byte
  4831. bflush = _tr_tally(0, win[strstart] & 0xff);
  4832. lookahead--;
  4833. strstart++;
  4834. }
  4835. if (bflush) {
  4836. flush_block_only(false);
  4837. if (strm.avail_out === 0) return NeedMore;
  4838. }
  4839. }
  4840. flush_block_only(flush == Z_FINISH$1);
  4841. if (strm.avail_out === 0) {
  4842. if (flush == Z_FINISH$1) return FinishStarted;else return NeedMore;
  4843. }
  4844. return flush == Z_FINISH$1 ? FinishDone : BlockDone;
  4845. } // Same as above, but achieves better compression. We use a lazy
  4846. // evaluation for matches: a match is finally adopted only if there is
  4847. // no better match at the next win position.
  4848. function deflate_slow(flush) {
  4849. // short hash_head = 0; // head of hash chain
  4850. var hash_head = 0; // head of hash chain
  4851. var bflush; // set if current block must be flushed
  4852. var max_insert; // Process the input block.
  4853. // eslint-disable-next-line no-constant-condition
  4854. while (true) {
  4855. // Make sure that we always have enough lookahead, except
  4856. // at the end of the input file. We need MAX_MATCH bytes
  4857. // for the next match, plus MIN_MATCH bytes to insert the
  4858. // string following the next match.
  4859. if (lookahead < MIN_LOOKAHEAD) {
  4860. fill_window();
  4861. if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH$1) {
  4862. return NeedMore;
  4863. }
  4864. if (lookahead === 0) break; // flush the current block
  4865. } // Insert the string win[strstart .. strstart+2] in the
  4866. // dictionary, and set hash_head to the head of the hash chain:
  4867. if (lookahead >= MIN_MATCH) {
  4868. ins_h = (ins_h << hash_shift ^ win[strstart + (MIN_MATCH - 1)] & 0xff) & hash_mask; // prev[strstart&w_mask]=hash_head=head[ins_h];
  4869. hash_head = head[ins_h] & 0xffff;
  4870. prev[strstart & w_mask] = head[ins_h];
  4871. head[ins_h] = strstart;
  4872. } // Find the longest match, discarding those <= prev_length.
  4873. prev_length = match_length;
  4874. prev_match = match_start;
  4875. match_length = MIN_MATCH - 1;
  4876. if (hash_head !== 0 && prev_length < max_lazy_match && (strstart - hash_head & 0xffff) <= w_size - MIN_LOOKAHEAD) {
  4877. // To simplify the code, we prevent matches with the string
  4878. // of win index 0 (in particular we have to avoid a match
  4879. // of the string with itself at the start of the input file).
  4880. if (strategy != Z_HUFFMAN_ONLY) {
  4881. match_length = longest_match(hash_head);
  4882. } // longest_match() sets match_start
  4883. if (match_length <= 5 && (strategy == Z_FILTERED || match_length == MIN_MATCH && strstart - match_start > 4096)) {
  4884. // If prev_match is also MIN_MATCH, match_start is garbage
  4885. // but we will ignore the current match anyway.
  4886. match_length = MIN_MATCH - 1;
  4887. }
  4888. } // If there was a match at the previous step and the current
  4889. // match is not better, output the previous match:
  4890. if (prev_length >= MIN_MATCH && match_length <= prev_length) {
  4891. max_insert = strstart + lookahead - MIN_MATCH; // Do not insert strings in hash table beyond this.
  4892. // check_match(strstart-1, prev_match, prev_length);
  4893. bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH); // Insert in hash table all strings up to the end of the match.
  4894. // strstart-1 and strstart are already inserted. If there is not
  4895. // enough lookahead, the last two strings are not inserted in
  4896. // the hash table.
  4897. lookahead -= prev_length - 1;
  4898. prev_length -= 2;
  4899. do {
  4900. if (++strstart <= max_insert) {
  4901. ins_h = (ins_h << hash_shift ^ win[strstart + (MIN_MATCH - 1)] & 0xff) & hash_mask; // prev[strstart&w_mask]=hash_head=head[ins_h];
  4902. hash_head = head[ins_h] & 0xffff;
  4903. prev[strstart & w_mask] = head[ins_h];
  4904. head[ins_h] = strstart;
  4905. }
  4906. } while (--prev_length !== 0);
  4907. match_available = 0;
  4908. match_length = MIN_MATCH - 1;
  4909. strstart++;
  4910. if (bflush) {
  4911. flush_block_only(false);
  4912. if (strm.avail_out === 0) return NeedMore;
  4913. }
  4914. } else if (match_available !== 0) {
  4915. // If there was no match at the previous position, output a
  4916. // single literal. If there was a match but the current match
  4917. // is longer, truncate the previous match to a single literal.
  4918. bflush = _tr_tally(0, win[strstart - 1] & 0xff);
  4919. if (bflush) {
  4920. flush_block_only(false);
  4921. }
  4922. strstart++;
  4923. lookahead--;
  4924. if (strm.avail_out === 0) return NeedMore;
  4925. } else {
  4926. // There is no previous match to compare with, wait for
  4927. // the next step to decide.
  4928. match_available = 1;
  4929. strstart++;
  4930. lookahead--;
  4931. }
  4932. }
  4933. if (match_available !== 0) {
  4934. bflush = _tr_tally(0, win[strstart - 1] & 0xff);
  4935. match_available = 0;
  4936. }
  4937. flush_block_only(flush == Z_FINISH$1);
  4938. if (strm.avail_out === 0) {
  4939. if (flush == Z_FINISH$1) return FinishStarted;else return NeedMore;
  4940. }
  4941. return flush == Z_FINISH$1 ? FinishDone : BlockDone;
  4942. }
  4943. function deflateReset(strm) {
  4944. strm.total_in = strm.total_out = 0;
  4945. strm.msg = null; //
  4946. that.pending = 0;
  4947. that.pending_out = 0;
  4948. status = BUSY_STATE;
  4949. last_flush = Z_NO_FLUSH$1;
  4950. tr_init();
  4951. lm_init();
  4952. return Z_OK$1;
  4953. }
  4954. that.deflateInit = function (strm, _level, bits, _method, memLevel, _strategy) {
  4955. if (!_method) _method = Z_DEFLATED$1;
  4956. if (!memLevel) memLevel = DEF_MEM_LEVEL;
  4957. if (!_strategy) _strategy = Z_DEFAULT_STRATEGY; // byte[] my_version=ZLIB_VERSION;
  4958. //
  4959. // if (!version || version[0] != my_version[0]
  4960. // || stream_size != sizeof(z_stream)) {
  4961. // return Z_VERSION_ERROR;
  4962. // }
  4963. strm.msg = null;
  4964. if (_level == Z_DEFAULT_COMPRESSION) _level = 6;
  4965. if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || _method != Z_DEFLATED$1 || bits < 9 || bits > 15 || _level < 0 || _level > 9 || _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) {
  4966. return Z_STREAM_ERROR$1;
  4967. }
  4968. strm.dstate = that;
  4969. w_bits = bits;
  4970. w_size = 1 << w_bits;
  4971. w_mask = w_size - 1;
  4972. hash_bits = memLevel + 7;
  4973. hash_size = 1 << hash_bits;
  4974. hash_mask = hash_size - 1;
  4975. hash_shift = Math.floor((hash_bits + MIN_MATCH - 1) / MIN_MATCH);
  4976. win = new Uint8Array(w_size * 2);
  4977. prev = [];
  4978. head = [];
  4979. lit_bufsize = 1 << memLevel + 6; // 16K elements by default
  4980. that.pending_buf = new Uint8Array(lit_bufsize * 4);
  4981. pending_buf_size = lit_bufsize * 4;
  4982. that.dist_buf = new Uint16Array(lit_bufsize);
  4983. that.lc_buf = new Uint8Array(lit_bufsize);
  4984. level = _level;
  4985. strategy = _strategy;
  4986. return deflateReset(strm);
  4987. };
  4988. that.deflateEnd = function () {
  4989. if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) {
  4990. return Z_STREAM_ERROR$1;
  4991. } // Deallocate in reverse order of allocations:
  4992. that.lc_buf = null;
  4993. that.dist_buf = null;
  4994. that.pending_buf = null;
  4995. head = null;
  4996. prev = null;
  4997. win = null; // free
  4998. that.dstate = null;
  4999. return status == BUSY_STATE ? Z_DATA_ERROR$1 : Z_OK$1;
  5000. };
  5001. that.deflateParams = function (strm, _level, _strategy) {
  5002. var err = Z_OK$1;
  5003. if (_level == Z_DEFAULT_COMPRESSION) {
  5004. _level = 6;
  5005. }
  5006. if (_level < 0 || _level > 9 || _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) {
  5007. return Z_STREAM_ERROR$1;
  5008. }
  5009. if (config_table[level].func != config_table[_level].func && strm.total_in !== 0) {
  5010. // Flush the last buffer:
  5011. err = strm.deflate(Z_PARTIAL_FLUSH);
  5012. }
  5013. if (level != _level) {
  5014. level = _level;
  5015. max_lazy_match = config_table[level].max_lazy;
  5016. good_match = config_table[level].good_length;
  5017. nice_match = config_table[level].nice_length;
  5018. max_chain_length = config_table[level].max_chain;
  5019. }
  5020. strategy = _strategy;
  5021. return err;
  5022. };
  5023. that.deflateSetDictionary = function (_strm, dictionary, dictLength) {
  5024. var length = dictLength;
  5025. var n,
  5026. index = 0;
  5027. if (!dictionary || status != INIT_STATE) return Z_STREAM_ERROR$1;
  5028. if (length < MIN_MATCH) return Z_OK$1;
  5029. if (length > w_size - MIN_LOOKAHEAD) {
  5030. length = w_size - MIN_LOOKAHEAD;
  5031. index = dictLength - length; // use the tail of the dictionary
  5032. }
  5033. win.set(dictionary.subarray(index, index + length), 0);
  5034. strstart = length;
  5035. block_start = length; // Insert all strings in the hash table (except for the last two bytes).
  5036. // s->lookahead stays null, so s->ins_h will be recomputed at the next
  5037. // call of fill_window.
  5038. ins_h = win[0] & 0xff;
  5039. ins_h = (ins_h << hash_shift ^ win[1] & 0xff) & hash_mask;
  5040. for (n = 0; n <= length - MIN_MATCH; n++) {
  5041. ins_h = (ins_h << hash_shift ^ win[n + (MIN_MATCH - 1)] & 0xff) & hash_mask;
  5042. prev[n & w_mask] = head[ins_h];
  5043. head[ins_h] = n;
  5044. }
  5045. return Z_OK$1;
  5046. };
  5047. that.deflate = function (_strm, flush) {
  5048. var i, header, level_flags, old_flush, bstate;
  5049. if (flush > Z_FINISH$1 || flush < 0) {
  5050. return Z_STREAM_ERROR$1;
  5051. }
  5052. if (!_strm.next_out || !_strm.next_in && _strm.avail_in !== 0 || status == FINISH_STATE && flush != Z_FINISH$1) {
  5053. _strm.msg = z_errmsg[Z_NEED_DICT$1 - Z_STREAM_ERROR$1];
  5054. return Z_STREAM_ERROR$1;
  5055. }
  5056. if (_strm.avail_out === 0) {
  5057. _strm.msg = z_errmsg[Z_NEED_DICT$1 - Z_BUF_ERROR$1];
  5058. return Z_BUF_ERROR$1;
  5059. }
  5060. strm = _strm; // just in case
  5061. old_flush = last_flush;
  5062. last_flush = flush; // Write the zlib header
  5063. if (status == INIT_STATE) {
  5064. header = Z_DEFLATED$1 + (w_bits - 8 << 4) << 8;
  5065. level_flags = (level - 1 & 0xff) >> 1;
  5066. if (level_flags > 3) level_flags = 3;
  5067. header |= level_flags << 6;
  5068. if (strstart !== 0) header |= PRESET_DICT$1;
  5069. header += 31 - header % 31;
  5070. status = BUSY_STATE;
  5071. putShortMSB(header);
  5072. } // Flush as much pending output as possible
  5073. if (that.pending !== 0) {
  5074. strm.flush_pending();
  5075. if (strm.avail_out === 0) {
  5076. // console.log(" avail_out==0");
  5077. // Since avail_out is 0, deflate will be called again with
  5078. // more output space, but possibly with both pending and
  5079. // avail_in equal to zero. There won't be anything to do,
  5080. // but this is not an error situation so make sure we
  5081. // return OK instead of BUF_ERROR at next call of deflate:
  5082. last_flush = -1;
  5083. return Z_OK$1;
  5084. } // Make sure there is something to do and avoid duplicate
  5085. // consecutive
  5086. // flushes. For repeated and useless calls with Z_FINISH, we keep
  5087. // returning Z_STREAM_END instead of Z_BUFF_ERROR.
  5088. } else if (strm.avail_in === 0 && flush <= old_flush && flush != Z_FINISH$1) {
  5089. strm.msg = z_errmsg[Z_NEED_DICT$1 - Z_BUF_ERROR$1];
  5090. return Z_BUF_ERROR$1;
  5091. } // User must not provide more input after the first FINISH:
  5092. if (status == FINISH_STATE && strm.avail_in !== 0) {
  5093. _strm.msg = z_errmsg[Z_NEED_DICT$1 - Z_BUF_ERROR$1];
  5094. return Z_BUF_ERROR$1;
  5095. } // Start a new block or continue the current one.
  5096. if (strm.avail_in !== 0 || lookahead !== 0 || flush != Z_NO_FLUSH$1 && status != FINISH_STATE) {
  5097. bstate = -1;
  5098. switch (config_table[level].func) {
  5099. case STORED$1:
  5100. bstate = deflate_stored(flush);
  5101. break;
  5102. case FAST:
  5103. bstate = deflate_fast(flush);
  5104. break;
  5105. case SLOW:
  5106. bstate = deflate_slow(flush);
  5107. break;
  5108. }
  5109. if (bstate == FinishStarted || bstate == FinishDone) {
  5110. status = FINISH_STATE;
  5111. }
  5112. if (bstate == NeedMore || bstate == FinishStarted) {
  5113. if (strm.avail_out === 0) {
  5114. last_flush = -1; // avoid BUF_ERROR next call, see above
  5115. }
  5116. return Z_OK$1; // If flush != Z_NO_FLUSH && avail_out === 0, the next call
  5117. // of deflate should use the same flush parameter to make sure
  5118. // that the flush is complete. So we don't have to output an
  5119. // empty block here, this will be done at next call. This also
  5120. // ensures that for a very small output buffer, we emit at most
  5121. // one empty block.
  5122. }
  5123. if (bstate == BlockDone) {
  5124. if (flush == Z_PARTIAL_FLUSH) {
  5125. _tr_align();
  5126. } else {
  5127. // FULL_FLUSH or SYNC_FLUSH
  5128. _tr_stored_block(0, 0, false); // For a full flush, this empty block will be recognized
  5129. // as a special marker by inflate_sync().
  5130. if (flush == Z_FULL_FLUSH) {
  5131. // state.head[s.hash_size-1]=0;
  5132. for (i = 0; i < hash_size
  5133. /*-1*/
  5134. ; i++) {
  5135. // forget history
  5136. head[i] = 0;
  5137. }
  5138. }
  5139. }
  5140. strm.flush_pending();
  5141. if (strm.avail_out === 0) {
  5142. last_flush = -1; // avoid BUF_ERROR at next call, see above
  5143. return Z_OK$1;
  5144. }
  5145. }
  5146. }
  5147. if (flush != Z_FINISH$1) return Z_OK$1;
  5148. return Z_STREAM_END$1;
  5149. };
  5150. } // ZStream
  5151. function ZStream$1() {
  5152. var that = this;
  5153. that.next_in_index = 0;
  5154. that.next_out_index = 0; // that.next_in; // next input byte
  5155. that.avail_in = 0; // number of bytes available at next_in
  5156. that.total_in = 0; // total nb of input bytes read so far
  5157. // that.next_out; // next output byte should be put there
  5158. that.avail_out = 0; // remaining free space at next_out
  5159. that.total_out = 0; // total nb of bytes output so far
  5160. // that.msg;
  5161. // that.dstate;
  5162. }
  5163. ZStream$1.prototype = {
  5164. deflateInit: function deflateInit(level, bits) {
  5165. var that = this;
  5166. that.dstate = new Deflate$1();
  5167. if (!bits) bits = MAX_BITS$1;
  5168. return that.dstate.deflateInit(that, level, bits);
  5169. },
  5170. deflate: function deflate(flush) {
  5171. var that = this;
  5172. if (!that.dstate) {
  5173. return Z_STREAM_ERROR$1;
  5174. }
  5175. return that.dstate.deflate(that, flush);
  5176. },
  5177. deflateEnd: function deflateEnd() {
  5178. var that = this;
  5179. if (!that.dstate) return Z_STREAM_ERROR$1;
  5180. var ret = that.dstate.deflateEnd();
  5181. that.dstate = null;
  5182. return ret;
  5183. },
  5184. deflateParams: function deflateParams(level, strategy) {
  5185. var that = this;
  5186. if (!that.dstate) return Z_STREAM_ERROR$1;
  5187. return that.dstate.deflateParams(that, level, strategy);
  5188. },
  5189. deflateSetDictionary: function deflateSetDictionary(dictionary, dictLength) {
  5190. var that = this;
  5191. if (!that.dstate) return Z_STREAM_ERROR$1;
  5192. return that.dstate.deflateSetDictionary(that, dictionary, dictLength);
  5193. },
  5194. // Read a new buffer from the current input stream, update the
  5195. // total number of bytes read. All deflate() input goes through
  5196. // this function so some applications may wish to modify it to avoid
  5197. // allocating a large strm->next_in buffer and copying from it.
  5198. // (See also flush_pending()).
  5199. read_buf: function read_buf(buf, start, size) {
  5200. var that = this;
  5201. var len = that.avail_in;
  5202. if (len > size) len = size;
  5203. if (len === 0) return 0;
  5204. that.avail_in -= len;
  5205. buf.set(that.next_in.subarray(that.next_in_index, that.next_in_index + len), start);
  5206. that.next_in_index += len;
  5207. that.total_in += len;
  5208. return len;
  5209. },
  5210. // Flush as much pending output as possible. All deflate() output goes
  5211. // through this function so some applications may wish to modify it
  5212. // to avoid allocating a large strm->next_out buffer and copying into it.
  5213. // (See also read_buf()).
  5214. flush_pending: function flush_pending() {
  5215. var that = this;
  5216. var len = that.dstate.pending;
  5217. if (len > that.avail_out) len = that.avail_out;
  5218. if (len === 0) return; // if (that.dstate.pending_buf.length <= that.dstate.pending_out || that.next_out.length <= that.next_out_index
  5219. // || that.dstate.pending_buf.length < (that.dstate.pending_out + len) || that.next_out.length < (that.next_out_index +
  5220. // len)) {
  5221. // console.log(that.dstate.pending_buf.length + ", " + that.dstate.pending_out + ", " + that.next_out.length + ", " +
  5222. // that.next_out_index + ", " + len);
  5223. // console.log("avail_out=" + that.avail_out);
  5224. // }
  5225. that.next_out.set(that.dstate.pending_buf.subarray(that.dstate.pending_out, that.dstate.pending_out + len), that.next_out_index);
  5226. that.next_out_index += len;
  5227. that.dstate.pending_out += len;
  5228. that.total_out += len;
  5229. that.avail_out -= len;
  5230. that.dstate.pending -= len;
  5231. if (that.dstate.pending === 0) {
  5232. that.dstate.pending_out = 0;
  5233. }
  5234. }
  5235. }; // Deflate
  5236. function ZipDeflate(options) {
  5237. var that = this;
  5238. var z = new ZStream$1();
  5239. var bufsize = getMaximumCompressedSize$1(options && options.chunkSize ? options.chunkSize : 64 * 1024);
  5240. var flush = Z_NO_FLUSH$1;
  5241. var buf = new Uint8Array(bufsize);
  5242. var level = options ? options.level : Z_DEFAULT_COMPRESSION;
  5243. if (typeof level == "undefined") level = Z_DEFAULT_COMPRESSION;
  5244. z.deflateInit(level);
  5245. z.next_out = buf;
  5246. that.append = function (data, onprogress) {
  5247. var err,
  5248. array,
  5249. lastIndex = 0,
  5250. bufferIndex = 0,
  5251. bufferSize = 0;
  5252. var buffers = [];
  5253. if (!data.length) return;
  5254. z.next_in_index = 0;
  5255. z.next_in = data;
  5256. z.avail_in = data.length;
  5257. do {
  5258. z.next_out_index = 0;
  5259. z.avail_out = bufsize;
  5260. err = z.deflate(flush);
  5261. if (err != Z_OK$1) throw new Error("deflating: " + z.msg);
  5262. if (z.next_out_index) if (z.next_out_index == bufsize) buffers.push(new Uint8Array(buf));else buffers.push(buf.slice(0, z.next_out_index));
  5263. bufferSize += z.next_out_index;
  5264. if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) {
  5265. onprogress(z.next_in_index);
  5266. lastIndex = z.next_in_index;
  5267. }
  5268. } while (z.avail_in > 0 || z.avail_out === 0);
  5269. if (buffers.length > 1) {
  5270. array = new Uint8Array(bufferSize);
  5271. buffers.forEach(function (chunk) {
  5272. array.set(chunk, bufferIndex);
  5273. bufferIndex += chunk.length;
  5274. });
  5275. } else {
  5276. array = buffers[0] || new Uint8Array(0);
  5277. }
  5278. return array;
  5279. };
  5280. that.flush = function () {
  5281. var err,
  5282. array,
  5283. bufferIndex = 0,
  5284. bufferSize = 0;
  5285. var buffers = [];
  5286. do {
  5287. z.next_out_index = 0;
  5288. z.avail_out = bufsize;
  5289. err = z.deflate(Z_FINISH$1);
  5290. if (err != Z_STREAM_END$1 && err != Z_OK$1) throw new Error("deflating: " + z.msg);
  5291. if (bufsize - z.avail_out > 0) buffers.push(buf.slice(0, z.next_out_index));
  5292. bufferSize += z.next_out_index;
  5293. } while (z.avail_in > 0 || z.avail_out === 0);
  5294. z.deflateEnd();
  5295. array = new Uint8Array(bufferSize);
  5296. buffers.forEach(function (chunk) {
  5297. array.set(chunk, bufferIndex);
  5298. bufferIndex += chunk.length;
  5299. });
  5300. return array;
  5301. };
  5302. }
  5303. function getMaximumCompressedSize$1(uncompressedSize) {
  5304. return uncompressedSize + 5 * (Math.floor(uncompressedSize / 16383) + 1);
  5305. }
  5306. var createTypedArrayConstructor$1 = typedArrayConstructor.exports;
  5307. // `Int32Array` constructor
  5308. // https://tc39.es/ecma262/#sec-typedarray-objects
  5309. createTypedArrayConstructor$1('Int32', function (init) {
  5310. return function Int32Array(data, byteOffset, length) {
  5311. return init(this, data, byteOffset, length);
  5312. };
  5313. });
  5314. /*
  5315. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  5316. Redistribution and use in source and binary forms, with or without
  5317. modification, are permitted provided that the following conditions are met:
  5318. 1. Redistributions of source code must retain the above copyright notice,
  5319. this list of conditions and the following disclaimer.
  5320. 2. Redistributions in binary form must reproduce the above copyright
  5321. notice, this list of conditions and the following disclaimer in
  5322. the documentation and/or other materials provided with the distribution.
  5323. 3. The names of the authors may not be used to endorse or promote products
  5324. derived from this software without specific prior written permission.
  5325. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  5326. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  5327. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  5328. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  5329. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  5330. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  5331. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  5332. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  5333. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  5334. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  5335. */
  5336. /*
  5337. * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc.
  5338. * JZlib is based on zlib-1.1.3, so all credit should go authors
  5339. * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
  5340. * and contributors of zlib.
  5341. */
  5342. // deno-lint-ignore-file no-this-alias prefer-const
  5343. // Global
  5344. var MAX_BITS = 15;
  5345. var Z_OK = 0;
  5346. var Z_STREAM_END = 1;
  5347. var Z_NEED_DICT = 2;
  5348. var Z_STREAM_ERROR = -2;
  5349. var Z_DATA_ERROR = -3;
  5350. var Z_MEM_ERROR = -4;
  5351. var Z_BUF_ERROR = -5;
  5352. var inflate_mask = [0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff];
  5353. var MANY = 1440; // JZlib version : "1.0.2"
  5354. var Z_NO_FLUSH = 0;
  5355. var Z_FINISH = 4; // InfTree
  5356. var fixed_bl = 9;
  5357. var fixed_bd = 5;
  5358. var fixed_tl = [96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255];
  5359. var fixed_td = [80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577]; // Tables for deflate from PKZIP's appnote.txt.
  5360. var cplens = [// Copy lengths for literal codes 257..285
  5361. 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0]; // see note #13 above about 258
  5362. var cplext = [// Extra bits for literal codes 257..285
  5363. 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, 112, 112 // 112==invalid
  5364. ];
  5365. var cpdist = [// Copy offsets for distance codes 0..29
  5366. 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577];
  5367. var cpdext = [// Extra bits for distance codes
  5368. 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]; // If BMAX needs to be larger than 16, then h and x[] should be uLong.
  5369. var BMAX = 15; // maximum bit length of any code
  5370. function InfTree() {
  5371. var that = this;
  5372. var hn; // hufts used in space
  5373. var v; // work area for huft_build
  5374. var c; // bit length count table
  5375. var r; // table entry for structure assignment
  5376. var u; // table stack
  5377. var x; // bit offsets, then code stack
  5378. function huft_build(b, // code lengths in bits (all assumed <=
  5379. // BMAX)
  5380. bindex, n, // number of codes (assumed <= 288)
  5381. s, // number of simple-valued codes (0..s-1)
  5382. d, // list of base values for non-simple codes
  5383. e, // list of extra bits for non-simple codes
  5384. t, // result: starting table
  5385. m, // maximum lookup bits, returns actual
  5386. hp, // space for trees
  5387. hn, // hufts used in space
  5388. v // working area: values in order of bit length
  5389. ) {
  5390. // Given a list of code lengths and a maximum table size, make a set of
  5391. // tables to decode that set of codes. Return Z_OK on success,
  5392. // Z_BUF_ERROR
  5393. // if the given code set is incomplete (the tables are still built in
  5394. // this
  5395. // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set
  5396. // of
  5397. // lengths), or Z_MEM_ERROR if not enough memory.
  5398. var a; // counter for codes of length k
  5399. var f; // i repeats in table every f entries
  5400. var g; // maximum code length
  5401. var h; // table level
  5402. var i; // counter, current code
  5403. var j; // counter
  5404. var k; // number of bits in current code
  5405. var l; // bits per table (returned in m)
  5406. var mask; // (1 << w) - 1, to avoid cc -O bug on HP
  5407. var p; // pointer into c[], b[], or v[]
  5408. var q; // points to current table
  5409. var w; // bits before this table == (l * h)
  5410. var xp; // pointer into x
  5411. var y; // number of dummy codes added
  5412. var z; // number of entries in current table
  5413. // Generate counts for each bit length
  5414. p = 0;
  5415. i = n;
  5416. do {
  5417. c[b[bindex + p]]++;
  5418. p++;
  5419. i--; // assume all entries <= BMAX
  5420. } while (i !== 0);
  5421. if (c[0] == n) {
  5422. // null input--all zero length codes
  5423. t[0] = -1;
  5424. m[0] = 0;
  5425. return Z_OK;
  5426. } // Find minimum and maximum length, bound *m by those
  5427. l = m[0];
  5428. for (j = 1; j <= BMAX; j++) {
  5429. if (c[j] !== 0) break;
  5430. }
  5431. k = j; // minimum code length
  5432. if (l < j) {
  5433. l = j;
  5434. }
  5435. for (i = BMAX; i !== 0; i--) {
  5436. if (c[i] !== 0) break;
  5437. }
  5438. g = i; // maximum code length
  5439. if (l > i) {
  5440. l = i;
  5441. }
  5442. m[0] = l; // Adjust last length count to fill out codes, if needed
  5443. for (y = 1 << j; j < i; j++, y <<= 1) {
  5444. if ((y -= c[j]) < 0) {
  5445. return Z_DATA_ERROR;
  5446. }
  5447. }
  5448. if ((y -= c[i]) < 0) {
  5449. return Z_DATA_ERROR;
  5450. }
  5451. c[i] += y; // Generate starting offsets into the value table for each length
  5452. x[1] = j = 0;
  5453. p = 1;
  5454. xp = 2;
  5455. while (--i !== 0) {
  5456. // note that i == g from above
  5457. x[xp] = j += c[p];
  5458. xp++;
  5459. p++;
  5460. } // Make a table of values in order of bit lengths
  5461. i = 0;
  5462. p = 0;
  5463. do {
  5464. if ((j = b[bindex + p]) !== 0) {
  5465. v[x[j]++] = i;
  5466. }
  5467. p++;
  5468. } while (++i < n);
  5469. n = x[g]; // set n to length of v
  5470. // Generate the Huffman codes and for each, make the table entries
  5471. x[0] = i = 0; // first Huffman code is zero
  5472. p = 0; // grab values in bit order
  5473. h = -1; // no tables yet--level -1
  5474. w = -l; // bits decoded == (l * h)
  5475. u[0] = 0; // just to keep compilers happy
  5476. q = 0; // ditto
  5477. z = 0; // ditto
  5478. // go through the bit lengths (k already is bits in shortest code)
  5479. for (; k <= g; k++) {
  5480. a = c[k];
  5481. while (a-- !== 0) {
  5482. // here i is the Huffman code of length k bits for value *p
  5483. // make tables up to required level
  5484. while (k > w + l) {
  5485. h++;
  5486. w += l; // previous table always l bits
  5487. // compute minimum size table less than or equal to l bits
  5488. z = g - w;
  5489. z = z > l ? l : z; // table size upper limit
  5490. if ((f = 1 << (j = k - w)) > a + 1) {
  5491. // try a k-w bit table
  5492. // too few codes for
  5493. // k-w bit table
  5494. f -= a + 1; // deduct codes from patterns left
  5495. xp = k;
  5496. if (j < z) {
  5497. while (++j < z) {
  5498. // try smaller tables up to z bits
  5499. if ((f <<= 1) <= c[++xp]) break; // enough codes to use up j bits
  5500. f -= c[xp]; // else deduct codes from patterns
  5501. }
  5502. }
  5503. }
  5504. z = 1 << j; // table entries for j-bit table
  5505. // allocate new table
  5506. if (hn[0] + z > MANY) {
  5507. // (note: doesn't matter for fixed)
  5508. return Z_DATA_ERROR; // overflow of MANY
  5509. }
  5510. u[h] = q =
  5511. /* hp+ */
  5512. hn[0]; // DEBUG
  5513. hn[0] += z; // connect to last table, if there is one
  5514. if (h !== 0) {
  5515. x[h] = i; // save pattern for backing up
  5516. r[0] =
  5517. /* (byte) */
  5518. j; // bits in this table
  5519. r[1] =
  5520. /* (byte) */
  5521. l; // bits to dump before this table
  5522. j = i >>> w - l;
  5523. r[2] =
  5524. /* (int) */
  5525. q - u[h - 1] - j; // offset to this table
  5526. hp.set(r, (u[h - 1] + j) * 3); // to
  5527. // last
  5528. // table
  5529. } else {
  5530. t[0] = q; // first table is returned result
  5531. }
  5532. } // set up table entry in r
  5533. r[1] =
  5534. /* (byte) */
  5535. k - w;
  5536. if (p >= n) {
  5537. r[0] = 128 + 64; // out of values--invalid code
  5538. } else if (v[p] < s) {
  5539. r[0] =
  5540. /* (byte) */
  5541. v[p] < 256 ? 0 : 32 + 64; // 256 is
  5542. // end-of-block
  5543. r[2] = v[p++]; // simple code is just the value
  5544. } else {
  5545. r[0] =
  5546. /* (byte) */
  5547. e[v[p] - s] + 16 + 64; // non-simple--look
  5548. // up in lists
  5549. r[2] = d[v[p++] - s];
  5550. } // fill code-like entries with r
  5551. f = 1 << k - w;
  5552. for (j = i >>> w; j < z; j += f) {
  5553. hp.set(r, (q + j) * 3);
  5554. } // backwards increment the k-bit code i
  5555. for (j = 1 << k - 1; (i & j) !== 0; j >>>= 1) {
  5556. i ^= j;
  5557. }
  5558. i ^= j; // backup over finished tables
  5559. mask = (1 << w) - 1; // needed on HP, cc -O bug
  5560. while ((i & mask) != x[h]) {
  5561. h--; // don't need to update q
  5562. w -= l;
  5563. mask = (1 << w) - 1;
  5564. }
  5565. }
  5566. } // Return Z_BUF_ERROR if we were given an incomplete table
  5567. return y !== 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
  5568. }
  5569. function initWorkArea(vsize) {
  5570. var i;
  5571. if (!hn) {
  5572. hn = []; // []; //new Array(1);
  5573. v = []; // new Array(vsize);
  5574. c = new Int32Array(BMAX + 1); // new Array(BMAX + 1);
  5575. r = []; // new Array(3);
  5576. u = new Int32Array(BMAX); // new Array(BMAX);
  5577. x = new Int32Array(BMAX + 1); // new Array(BMAX + 1);
  5578. }
  5579. if (v.length < vsize) {
  5580. v = []; // new Array(vsize);
  5581. }
  5582. for (i = 0; i < vsize; i++) {
  5583. v[i] = 0;
  5584. }
  5585. for (i = 0; i < BMAX + 1; i++) {
  5586. c[i] = 0;
  5587. }
  5588. for (i = 0; i < 3; i++) {
  5589. r[i] = 0;
  5590. } // for(int i=0; i<BMAX; i++){u[i]=0;}
  5591. u.set(c.subarray(0, BMAX), 0); // for(int i=0; i<BMAX+1; i++){x[i]=0;}
  5592. x.set(c.subarray(0, BMAX + 1), 0);
  5593. }
  5594. that.inflate_trees_bits = function (c, // 19 code lengths
  5595. bb, // bits tree desired/actual depth
  5596. tb, // bits tree result
  5597. hp, // space for trees
  5598. z // for messages
  5599. ) {
  5600. var result;
  5601. initWorkArea(19);
  5602. hn[0] = 0;
  5603. result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v);
  5604. if (result == Z_DATA_ERROR) {
  5605. z.msg = "oversubscribed dynamic bit lengths tree";
  5606. } else if (result == Z_BUF_ERROR || bb[0] === 0) {
  5607. z.msg = "incomplete dynamic bit lengths tree";
  5608. result = Z_DATA_ERROR;
  5609. }
  5610. return result;
  5611. };
  5612. that.inflate_trees_dynamic = function (nl, // number of literal/length codes
  5613. nd, // number of distance codes
  5614. c, // that many (total) code lengths
  5615. bl, // literal desired/actual bit depth
  5616. bd, // distance desired/actual bit depth
  5617. tl, // literal/length tree result
  5618. td, // distance tree result
  5619. hp, // space for trees
  5620. z // for messages
  5621. ) {
  5622. var result; // build literal/length tree
  5623. initWorkArea(288);
  5624. hn[0] = 0;
  5625. result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v);
  5626. if (result != Z_OK || bl[0] === 0) {
  5627. if (result == Z_DATA_ERROR) {
  5628. z.msg = "oversubscribed literal/length tree";
  5629. } else if (result != Z_MEM_ERROR) {
  5630. z.msg = "incomplete literal/length tree";
  5631. result = Z_DATA_ERROR;
  5632. }
  5633. return result;
  5634. } // build distance tree
  5635. initWorkArea(288);
  5636. result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v);
  5637. if (result != Z_OK || bd[0] === 0 && nl > 257) {
  5638. if (result == Z_DATA_ERROR) {
  5639. z.msg = "oversubscribed distance tree";
  5640. } else if (result == Z_BUF_ERROR) {
  5641. z.msg = "incomplete distance tree";
  5642. result = Z_DATA_ERROR;
  5643. } else if (result != Z_MEM_ERROR) {
  5644. z.msg = "empty distance tree with lengths";
  5645. result = Z_DATA_ERROR;
  5646. }
  5647. return result;
  5648. }
  5649. return Z_OK;
  5650. };
  5651. }
  5652. InfTree.inflate_trees_fixed = function (bl, // literal desired/actual bit depth
  5653. bd, // distance desired/actual bit depth
  5654. tl, // literal/length tree result
  5655. td // distance tree result
  5656. ) {
  5657. bl[0] = fixed_bl;
  5658. bd[0] = fixed_bd;
  5659. tl[0] = fixed_tl;
  5660. td[0] = fixed_td;
  5661. return Z_OK;
  5662. }; // InfCodes
  5663. // waiting for "i:"=input,
  5664. // "o:"=output,
  5665. // "x:"=nothing
  5666. var START = 0; // x: set up for LEN
  5667. var LEN = 1; // i: get length/literal/eob next
  5668. var LENEXT = 2; // i: getting length extra (have base)
  5669. var DIST = 3; // i: get distance next
  5670. var DISTEXT = 4; // i: getting distance extra
  5671. var COPY = 5; // o: copying bytes in win, waiting
  5672. // for space
  5673. var LIT = 6; // o: got literal, waiting for output
  5674. // space
  5675. var WASH = 7; // o: got eob, possibly still output
  5676. // waiting
  5677. var END = 8; // x: got eob and all data flushed
  5678. var BADCODE = 9; // x: got error
  5679. function InfCodes() {
  5680. var that = this;
  5681. var mode; // current inflate_codes mode
  5682. // mode dependent information
  5683. var len = 0;
  5684. var tree; // pointer into tree
  5685. var tree_index = 0;
  5686. var need = 0; // bits needed
  5687. var lit = 0; // if EXT or COPY, where and how much
  5688. var get = 0; // bits to get for extra
  5689. var dist = 0; // distance back to copy from
  5690. var lbits = 0; // ltree bits decoded per branch
  5691. var dbits = 0; // dtree bits decoder per branch
  5692. var ltree; // literal/length/eob tree
  5693. var ltree_index = 0; // literal/length/eob tree
  5694. var dtree; // distance tree
  5695. var dtree_index = 0; // distance tree
  5696. // Called with number of bytes left to write in win at least 258
  5697. // (the maximum string length) and number of input bytes available
  5698. // at least ten. The ten bytes are six bytes for the longest length/
  5699. // distance pair plus four bytes for overloading the bit buffer.
  5700. function inflate_fast(bl, bd, tl, tl_index, td, td_index, s, z) {
  5701. var t; // temporary pointer
  5702. var tp; // temporary pointer
  5703. var tp_index; // temporary pointer
  5704. var e; // extra bits or operation
  5705. var b; // bit buffer
  5706. var k; // bits in bit buffer
  5707. var p; // input data pointer
  5708. var n; // bytes available there
  5709. var q; // output win write pointer
  5710. var m; // bytes to end of win or read pointer
  5711. var ml; // mask for literal/length tree
  5712. var md; // mask for distance tree
  5713. var c; // bytes to copy
  5714. var d; // distance back to copy from
  5715. var r; // copy source pointer
  5716. var tp_index_t_3; // (tp_index+t)*3
  5717. // load input, output, bit values
  5718. p = z.next_in_index;
  5719. n = z.avail_in;
  5720. b = s.bitb;
  5721. k = s.bitk;
  5722. q = s.write;
  5723. m = q < s.read ? s.read - q - 1 : s.end - q; // initialize masks
  5724. ml = inflate_mask[bl];
  5725. md = inflate_mask[bd]; // do until not enough input or output space for fast loop
  5726. do {
  5727. // assume called with m >= 258 && n >= 10
  5728. // get literal/length code
  5729. while (k < 20) {
  5730. // max bits for literal/length code
  5731. n--;
  5732. b |= (z.read_byte(p++) & 0xff) << k;
  5733. k += 8;
  5734. }
  5735. t = b & ml;
  5736. tp = tl;
  5737. tp_index = tl_index;
  5738. tp_index_t_3 = (tp_index + t) * 3;
  5739. if ((e = tp[tp_index_t_3]) === 0) {
  5740. b >>= tp[tp_index_t_3 + 1];
  5741. k -= tp[tp_index_t_3 + 1];
  5742. s.win[q++] =
  5743. /* (byte) */
  5744. tp[tp_index_t_3 + 2];
  5745. m--;
  5746. continue;
  5747. }
  5748. do {
  5749. b >>= tp[tp_index_t_3 + 1];
  5750. k -= tp[tp_index_t_3 + 1];
  5751. if ((e & 16) !== 0) {
  5752. e &= 15;
  5753. c = tp[tp_index_t_3 + 2] + (
  5754. /* (int) */
  5755. b & inflate_mask[e]);
  5756. b >>= e;
  5757. k -= e; // decode distance base of block to copy
  5758. while (k < 15) {
  5759. // max bits for distance code
  5760. n--;
  5761. b |= (z.read_byte(p++) & 0xff) << k;
  5762. k += 8;
  5763. }
  5764. t = b & md;
  5765. tp = td;
  5766. tp_index = td_index;
  5767. tp_index_t_3 = (tp_index + t) * 3;
  5768. e = tp[tp_index_t_3];
  5769. do {
  5770. b >>= tp[tp_index_t_3 + 1];
  5771. k -= tp[tp_index_t_3 + 1];
  5772. if ((e & 16) !== 0) {
  5773. // get extra bits to add to distance base
  5774. e &= 15;
  5775. while (k < e) {
  5776. // get extra bits (up to 13)
  5777. n--;
  5778. b |= (z.read_byte(p++) & 0xff) << k;
  5779. k += 8;
  5780. }
  5781. d = tp[tp_index_t_3 + 2] + (b & inflate_mask[e]);
  5782. b >>= e;
  5783. k -= e; // do the copy
  5784. m -= c;
  5785. if (q >= d) {
  5786. // offset before dest
  5787. // just copy
  5788. r = q - d;
  5789. if (q - r > 0 && 2 > q - r) {
  5790. s.win[q++] = s.win[r++]; // minimum
  5791. // count is
  5792. // three,
  5793. s.win[q++] = s.win[r++]; // so unroll
  5794. // loop a
  5795. // little
  5796. c -= 2;
  5797. } else {
  5798. s.win.set(s.win.subarray(r, r + 2), q);
  5799. q += 2;
  5800. r += 2;
  5801. c -= 2;
  5802. }
  5803. } else {
  5804. // else offset after destination
  5805. r = q - d;
  5806. do {
  5807. r += s.end; // force pointer in win
  5808. } while (r < 0); // covers invalid distances
  5809. e = s.end - r;
  5810. if (c > e) {
  5811. // if source crosses,
  5812. c -= e; // wrapped copy
  5813. if (q - r > 0 && e > q - r) {
  5814. do {
  5815. s.win[q++] = s.win[r++];
  5816. } while (--e !== 0);
  5817. } else {
  5818. s.win.set(s.win.subarray(r, r + e), q);
  5819. q += e;
  5820. r += e;
  5821. e = 0;
  5822. }
  5823. r = 0; // copy rest from start of win
  5824. }
  5825. } // copy all or what's left
  5826. if (q - r > 0 && c > q - r) {
  5827. do {
  5828. s.win[q++] = s.win[r++];
  5829. } while (--c !== 0);
  5830. } else {
  5831. s.win.set(s.win.subarray(r, r + c), q);
  5832. q += c;
  5833. r += c;
  5834. c = 0;
  5835. }
  5836. break;
  5837. } else if ((e & 64) === 0) {
  5838. t += tp[tp_index_t_3 + 2];
  5839. t += b & inflate_mask[e];
  5840. tp_index_t_3 = (tp_index + t) * 3;
  5841. e = tp[tp_index_t_3];
  5842. } else {
  5843. z.msg = "invalid distance code";
  5844. c = z.avail_in - n;
  5845. c = k >> 3 < c ? k >> 3 : c;
  5846. n += c;
  5847. p -= c;
  5848. k -= c << 3;
  5849. s.bitb = b;
  5850. s.bitk = k;
  5851. z.avail_in = n;
  5852. z.total_in += p - z.next_in_index;
  5853. z.next_in_index = p;
  5854. s.write = q;
  5855. return Z_DATA_ERROR;
  5856. } // eslint-disable-next-line no-constant-condition
  5857. } while (true);
  5858. break;
  5859. }
  5860. if ((e & 64) === 0) {
  5861. t += tp[tp_index_t_3 + 2];
  5862. t += b & inflate_mask[e];
  5863. tp_index_t_3 = (tp_index + t) * 3;
  5864. if ((e = tp[tp_index_t_3]) === 0) {
  5865. b >>= tp[tp_index_t_3 + 1];
  5866. k -= tp[tp_index_t_3 + 1];
  5867. s.win[q++] =
  5868. /* (byte) */
  5869. tp[tp_index_t_3 + 2];
  5870. m--;
  5871. break;
  5872. }
  5873. } else if ((e & 32) !== 0) {
  5874. c = z.avail_in - n;
  5875. c = k >> 3 < c ? k >> 3 : c;
  5876. n += c;
  5877. p -= c;
  5878. k -= c << 3;
  5879. s.bitb = b;
  5880. s.bitk = k;
  5881. z.avail_in = n;
  5882. z.total_in += p - z.next_in_index;
  5883. z.next_in_index = p;
  5884. s.write = q;
  5885. return Z_STREAM_END;
  5886. } else {
  5887. z.msg = "invalid literal/length code";
  5888. c = z.avail_in - n;
  5889. c = k >> 3 < c ? k >> 3 : c;
  5890. n += c;
  5891. p -= c;
  5892. k -= c << 3;
  5893. s.bitb = b;
  5894. s.bitk = k;
  5895. z.avail_in = n;
  5896. z.total_in += p - z.next_in_index;
  5897. z.next_in_index = p;
  5898. s.write = q;
  5899. return Z_DATA_ERROR;
  5900. } // eslint-disable-next-line no-constant-condition
  5901. } while (true);
  5902. } while (m >= 258 && n >= 10); // not enough input or output--restore pointers and return
  5903. c = z.avail_in - n;
  5904. c = k >> 3 < c ? k >> 3 : c;
  5905. n += c;
  5906. p -= c;
  5907. k -= c << 3;
  5908. s.bitb = b;
  5909. s.bitk = k;
  5910. z.avail_in = n;
  5911. z.total_in += p - z.next_in_index;
  5912. z.next_in_index = p;
  5913. s.write = q;
  5914. return Z_OK;
  5915. }
  5916. that.init = function (bl, bd, tl, tl_index, td, td_index) {
  5917. mode = START;
  5918. lbits =
  5919. /* (byte) */
  5920. bl;
  5921. dbits =
  5922. /* (byte) */
  5923. bd;
  5924. ltree = tl;
  5925. ltree_index = tl_index;
  5926. dtree = td;
  5927. dtree_index = td_index;
  5928. tree = null;
  5929. };
  5930. that.proc = function (s, z, r) {
  5931. var j; // temporary storage
  5932. var tindex; // temporary pointer
  5933. var e; // extra bits or operation
  5934. var b = 0; // bit buffer
  5935. var k = 0; // bits in bit buffer
  5936. var p = 0; // input data pointer
  5937. var n; // bytes available there
  5938. var q; // output win write pointer
  5939. var m; // bytes to end of win or read pointer
  5940. var f; // pointer to copy strings from
  5941. // copy input/output information to locals (UPDATE macro restores)
  5942. p = z.next_in_index;
  5943. n = z.avail_in;
  5944. b = s.bitb;
  5945. k = s.bitk;
  5946. q = s.write;
  5947. m = q < s.read ? s.read - q - 1 : s.end - q; // process input and output based on current state
  5948. // eslint-disable-next-line no-constant-condition
  5949. while (true) {
  5950. switch (mode) {
  5951. // waiting for "i:"=input, "o:"=output, "x:"=nothing
  5952. case START:
  5953. // x: set up for LEN
  5954. if (m >= 258 && n >= 10) {
  5955. s.bitb = b;
  5956. s.bitk = k;
  5957. z.avail_in = n;
  5958. z.total_in += p - z.next_in_index;
  5959. z.next_in_index = p;
  5960. s.write = q;
  5961. r = inflate_fast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, s, z);
  5962. p = z.next_in_index;
  5963. n = z.avail_in;
  5964. b = s.bitb;
  5965. k = s.bitk;
  5966. q = s.write;
  5967. m = q < s.read ? s.read - q - 1 : s.end - q;
  5968. if (r != Z_OK) {
  5969. mode = r == Z_STREAM_END ? WASH : BADCODE;
  5970. break;
  5971. }
  5972. }
  5973. need = lbits;
  5974. tree = ltree;
  5975. tree_index = ltree_index;
  5976. mode = LEN;
  5977. /* falls through */
  5978. case LEN:
  5979. // i: get length/literal/eob next
  5980. j = need;
  5981. while (k < j) {
  5982. if (n !== 0) r = Z_OK;else {
  5983. s.bitb = b;
  5984. s.bitk = k;
  5985. z.avail_in = n;
  5986. z.total_in += p - z.next_in_index;
  5987. z.next_in_index = p;
  5988. s.write = q;
  5989. return s.inflate_flush(z, r);
  5990. }
  5991. n--;
  5992. b |= (z.read_byte(p++) & 0xff) << k;
  5993. k += 8;
  5994. }
  5995. tindex = (tree_index + (b & inflate_mask[j])) * 3;
  5996. b >>>= tree[tindex + 1];
  5997. k -= tree[tindex + 1];
  5998. e = tree[tindex];
  5999. if (e === 0) {
  6000. // literal
  6001. lit = tree[tindex + 2];
  6002. mode = LIT;
  6003. break;
  6004. }
  6005. if ((e & 16) !== 0) {
  6006. // length
  6007. get = e & 15;
  6008. len = tree[tindex + 2];
  6009. mode = LENEXT;
  6010. break;
  6011. }
  6012. if ((e & 64) === 0) {
  6013. // next table
  6014. need = e;
  6015. tree_index = tindex / 3 + tree[tindex + 2];
  6016. break;
  6017. }
  6018. if ((e & 32) !== 0) {
  6019. // end of block
  6020. mode = WASH;
  6021. break;
  6022. }
  6023. mode = BADCODE; // invalid code
  6024. z.msg = "invalid literal/length code";
  6025. r = Z_DATA_ERROR;
  6026. s.bitb = b;
  6027. s.bitk = k;
  6028. z.avail_in = n;
  6029. z.total_in += p - z.next_in_index;
  6030. z.next_in_index = p;
  6031. s.write = q;
  6032. return s.inflate_flush(z, r);
  6033. case LENEXT:
  6034. // i: getting length extra (have base)
  6035. j = get;
  6036. while (k < j) {
  6037. if (n !== 0) r = Z_OK;else {
  6038. s.bitb = b;
  6039. s.bitk = k;
  6040. z.avail_in = n;
  6041. z.total_in += p - z.next_in_index;
  6042. z.next_in_index = p;
  6043. s.write = q;
  6044. return s.inflate_flush(z, r);
  6045. }
  6046. n--;
  6047. b |= (z.read_byte(p++) & 0xff) << k;
  6048. k += 8;
  6049. }
  6050. len += b & inflate_mask[j];
  6051. b >>= j;
  6052. k -= j;
  6053. need = dbits;
  6054. tree = dtree;
  6055. tree_index = dtree_index;
  6056. mode = DIST;
  6057. /* falls through */
  6058. case DIST:
  6059. // i: get distance next
  6060. j = need;
  6061. while (k < j) {
  6062. if (n !== 0) r = Z_OK;else {
  6063. s.bitb = b;
  6064. s.bitk = k;
  6065. z.avail_in = n;
  6066. z.total_in += p - z.next_in_index;
  6067. z.next_in_index = p;
  6068. s.write = q;
  6069. return s.inflate_flush(z, r);
  6070. }
  6071. n--;
  6072. b |= (z.read_byte(p++) & 0xff) << k;
  6073. k += 8;
  6074. }
  6075. tindex = (tree_index + (b & inflate_mask[j])) * 3;
  6076. b >>= tree[tindex + 1];
  6077. k -= tree[tindex + 1];
  6078. e = tree[tindex];
  6079. if ((e & 16) !== 0) {
  6080. // distance
  6081. get = e & 15;
  6082. dist = tree[tindex + 2];
  6083. mode = DISTEXT;
  6084. break;
  6085. }
  6086. if ((e & 64) === 0) {
  6087. // next table
  6088. need = e;
  6089. tree_index = tindex / 3 + tree[tindex + 2];
  6090. break;
  6091. }
  6092. mode = BADCODE; // invalid code
  6093. z.msg = "invalid distance code";
  6094. r = Z_DATA_ERROR;
  6095. s.bitb = b;
  6096. s.bitk = k;
  6097. z.avail_in = n;
  6098. z.total_in += p - z.next_in_index;
  6099. z.next_in_index = p;
  6100. s.write = q;
  6101. return s.inflate_flush(z, r);
  6102. case DISTEXT:
  6103. // i: getting distance extra
  6104. j = get;
  6105. while (k < j) {
  6106. if (n !== 0) r = Z_OK;else {
  6107. s.bitb = b;
  6108. s.bitk = k;
  6109. z.avail_in = n;
  6110. z.total_in += p - z.next_in_index;
  6111. z.next_in_index = p;
  6112. s.write = q;
  6113. return s.inflate_flush(z, r);
  6114. }
  6115. n--;
  6116. b |= (z.read_byte(p++) & 0xff) << k;
  6117. k += 8;
  6118. }
  6119. dist += b & inflate_mask[j];
  6120. b >>= j;
  6121. k -= j;
  6122. mode = COPY;
  6123. /* falls through */
  6124. case COPY:
  6125. // o: copying bytes in win, waiting for space
  6126. f = q - dist;
  6127. while (f < 0) {
  6128. // modulo win size-"while" instead
  6129. f += s.end; // of "if" handles invalid distances
  6130. }
  6131. while (len !== 0) {
  6132. if (m === 0) {
  6133. if (q == s.end && s.read !== 0) {
  6134. q = 0;
  6135. m = q < s.read ? s.read - q - 1 : s.end - q;
  6136. }
  6137. if (m === 0) {
  6138. s.write = q;
  6139. r = s.inflate_flush(z, r);
  6140. q = s.write;
  6141. m = q < s.read ? s.read - q - 1 : s.end - q;
  6142. if (q == s.end && s.read !== 0) {
  6143. q = 0;
  6144. m = q < s.read ? s.read - q - 1 : s.end - q;
  6145. }
  6146. if (m === 0) {
  6147. s.bitb = b;
  6148. s.bitk = k;
  6149. z.avail_in = n;
  6150. z.total_in += p - z.next_in_index;
  6151. z.next_in_index = p;
  6152. s.write = q;
  6153. return s.inflate_flush(z, r);
  6154. }
  6155. }
  6156. }
  6157. s.win[q++] = s.win[f++];
  6158. m--;
  6159. if (f == s.end) f = 0;
  6160. len--;
  6161. }
  6162. mode = START;
  6163. break;
  6164. case LIT:
  6165. // o: got literal, waiting for output space
  6166. if (m === 0) {
  6167. if (q == s.end && s.read !== 0) {
  6168. q = 0;
  6169. m = q < s.read ? s.read - q - 1 : s.end - q;
  6170. }
  6171. if (m === 0) {
  6172. s.write = q;
  6173. r = s.inflate_flush(z, r);
  6174. q = s.write;
  6175. m = q < s.read ? s.read - q - 1 : s.end - q;
  6176. if (q == s.end && s.read !== 0) {
  6177. q = 0;
  6178. m = q < s.read ? s.read - q - 1 : s.end - q;
  6179. }
  6180. if (m === 0) {
  6181. s.bitb = b;
  6182. s.bitk = k;
  6183. z.avail_in = n;
  6184. z.total_in += p - z.next_in_index;
  6185. z.next_in_index = p;
  6186. s.write = q;
  6187. return s.inflate_flush(z, r);
  6188. }
  6189. }
  6190. }
  6191. r = Z_OK;
  6192. s.win[q++] =
  6193. /* (byte) */
  6194. lit;
  6195. m--;
  6196. mode = START;
  6197. break;
  6198. case WASH:
  6199. // o: got eob, possibly more output
  6200. if (k > 7) {
  6201. // return unused byte, if any
  6202. k -= 8;
  6203. n++;
  6204. p--; // can always return one
  6205. }
  6206. s.write = q;
  6207. r = s.inflate_flush(z, r);
  6208. q = s.write;
  6209. m = q < s.read ? s.read - q - 1 : s.end - q;
  6210. if (s.read != s.write) {
  6211. s.bitb = b;
  6212. s.bitk = k;
  6213. z.avail_in = n;
  6214. z.total_in += p - z.next_in_index;
  6215. z.next_in_index = p;
  6216. s.write = q;
  6217. return s.inflate_flush(z, r);
  6218. }
  6219. mode = END;
  6220. /* falls through */
  6221. case END:
  6222. r = Z_STREAM_END;
  6223. s.bitb = b;
  6224. s.bitk = k;
  6225. z.avail_in = n;
  6226. z.total_in += p - z.next_in_index;
  6227. z.next_in_index = p;
  6228. s.write = q;
  6229. return s.inflate_flush(z, r);
  6230. case BADCODE:
  6231. // x: got error
  6232. r = Z_DATA_ERROR;
  6233. s.bitb = b;
  6234. s.bitk = k;
  6235. z.avail_in = n;
  6236. z.total_in += p - z.next_in_index;
  6237. z.next_in_index = p;
  6238. s.write = q;
  6239. return s.inflate_flush(z, r);
  6240. default:
  6241. r = Z_STREAM_ERROR;
  6242. s.bitb = b;
  6243. s.bitk = k;
  6244. z.avail_in = n;
  6245. z.total_in += p - z.next_in_index;
  6246. z.next_in_index = p;
  6247. s.write = q;
  6248. return s.inflate_flush(z, r);
  6249. }
  6250. }
  6251. };
  6252. that.free = function () {// ZFREE(z, c);
  6253. };
  6254. } // InfBlocks
  6255. // Table for deflate from PKZIP's appnote.txt.
  6256. var border = [// Order of the bit length code lengths
  6257. 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
  6258. var TYPE = 0; // get type bits (3, including end bit)
  6259. var LENS = 1; // get lengths for stored
  6260. var STORED = 2; // processing stored block
  6261. var TABLE = 3; // get table lengths
  6262. var BTREE = 4; // get bit lengths tree for a dynamic
  6263. // block
  6264. var DTREE = 5; // get length, distance trees for a
  6265. // dynamic block
  6266. var CODES = 6; // processing fixed or dynamic block
  6267. var DRY = 7; // output remaining win bytes
  6268. var DONELOCKS = 8; // finished last block, done
  6269. var BADBLOCKS = 9; // ot a data error--stuck here
  6270. function InfBlocks(z, w) {
  6271. var that = this;
  6272. var mode = TYPE; // current inflate_block mode
  6273. var left = 0; // if STORED, bytes left to copy
  6274. var table = 0; // table lengths (14 bits)
  6275. var index = 0; // index into blens (or border)
  6276. var blens; // bit lengths of codes
  6277. var bb = [0]; // bit length tree depth
  6278. var tb = [0]; // bit length decoding tree
  6279. var codes = new InfCodes(); // if CODES, current state
  6280. var last = 0; // true if this block is the last block
  6281. var hufts = new Int32Array(MANY * 3); // single malloc for tree space
  6282. var check = 0; // check on output
  6283. var inftree = new InfTree();
  6284. that.bitk = 0; // bits in bit buffer
  6285. that.bitb = 0; // bit buffer
  6286. that.win = new Uint8Array(w); // sliding win
  6287. that.end = w; // one byte after sliding win
  6288. that.read = 0; // win read pointer
  6289. that.write = 0; // win write pointer
  6290. that.reset = function (z, c) {
  6291. if (c) c[0] = check; // if (mode == BTREE || mode == DTREE) {
  6292. // }
  6293. if (mode == CODES) {
  6294. codes.free(z);
  6295. }
  6296. mode = TYPE;
  6297. that.bitk = 0;
  6298. that.bitb = 0;
  6299. that.read = that.write = 0;
  6300. };
  6301. that.reset(z, null); // copy as much as possible from the sliding win to the output area
  6302. that.inflate_flush = function (z, r) {
  6303. var n;
  6304. var p;
  6305. var q; // local copies of source and destination pointers
  6306. p = z.next_out_index;
  6307. q = that.read; // compute number of bytes to copy as far as end of win
  6308. n =
  6309. /* (int) */
  6310. (q <= that.write ? that.write : that.end) - q;
  6311. if (n > z.avail_out) n = z.avail_out;
  6312. if (n !== 0 && r == Z_BUF_ERROR) r = Z_OK; // update counters
  6313. z.avail_out -= n;
  6314. z.total_out += n; // copy as far as end of win
  6315. z.next_out.set(that.win.subarray(q, q + n), p);
  6316. p += n;
  6317. q += n; // see if more to copy at beginning of win
  6318. if (q == that.end) {
  6319. // wrap pointers
  6320. q = 0;
  6321. if (that.write == that.end) that.write = 0; // compute bytes to copy
  6322. n = that.write - q;
  6323. if (n > z.avail_out) n = z.avail_out;
  6324. if (n !== 0 && r == Z_BUF_ERROR) r = Z_OK; // update counters
  6325. z.avail_out -= n;
  6326. z.total_out += n; // copy
  6327. z.next_out.set(that.win.subarray(q, q + n), p);
  6328. p += n;
  6329. q += n;
  6330. } // update pointers
  6331. z.next_out_index = p;
  6332. that.read = q; // done
  6333. return r;
  6334. };
  6335. that.proc = function (z, r) {
  6336. var t; // temporary storage
  6337. var b; // bit buffer
  6338. var k; // bits in bit buffer
  6339. var p; // input data pointer
  6340. var n; // bytes available there
  6341. var q; // output win write pointer
  6342. var m; // bytes to end of win or read pointer
  6343. var i; // copy input/output information to locals (UPDATE macro restores)
  6344. // {
  6345. p = z.next_in_index;
  6346. n = z.avail_in;
  6347. b = that.bitb;
  6348. k = that.bitk; // }
  6349. // {
  6350. q = that.write;
  6351. m =
  6352. /* (int) */
  6353. q < that.read ? that.read - q - 1 : that.end - q; // }
  6354. // process input based on current state
  6355. // DEBUG dtree
  6356. // eslint-disable-next-line no-constant-condition
  6357. while (true) {
  6358. var bl = void 0,
  6359. bd = void 0,
  6360. tl = void 0,
  6361. td = void 0,
  6362. bl_ = void 0,
  6363. bd_ = void 0,
  6364. tl_ = void 0,
  6365. td_ = void 0;
  6366. switch (mode) {
  6367. case TYPE:
  6368. while (k < 3) {
  6369. if (n !== 0) {
  6370. r = Z_OK;
  6371. } else {
  6372. that.bitb = b;
  6373. that.bitk = k;
  6374. z.avail_in = n;
  6375. z.total_in += p - z.next_in_index;
  6376. z.next_in_index = p;
  6377. that.write = q;
  6378. return that.inflate_flush(z, r);
  6379. }
  6380. n--;
  6381. b |= (z.read_byte(p++) & 0xff) << k;
  6382. k += 8;
  6383. }
  6384. t =
  6385. /* (int) */
  6386. b & 7;
  6387. last = t & 1;
  6388. switch (t >>> 1) {
  6389. case 0:
  6390. // stored
  6391. // {
  6392. b >>>= 3;
  6393. k -= 3; // }
  6394. t = k & 7; // go to byte boundary
  6395. // {
  6396. b >>>= t;
  6397. k -= t; // }
  6398. mode = LENS; // get length of stored block
  6399. break;
  6400. case 1:
  6401. // fixed
  6402. // {
  6403. bl = []; // new Array(1);
  6404. bd = []; // new Array(1);
  6405. tl = [[]]; // new Array(1);
  6406. td = [[]]; // new Array(1);
  6407. InfTree.inflate_trees_fixed(bl, bd, tl, td);
  6408. codes.init(bl[0], bd[0], tl[0], 0, td[0], 0); // }
  6409. // {
  6410. b >>>= 3;
  6411. k -= 3; // }
  6412. mode = CODES;
  6413. break;
  6414. case 2:
  6415. // dynamic
  6416. // {
  6417. b >>>= 3;
  6418. k -= 3; // }
  6419. mode = TABLE;
  6420. break;
  6421. case 3:
  6422. // illegal
  6423. // {
  6424. b >>>= 3;
  6425. k -= 3; // }
  6426. mode = BADBLOCKS;
  6427. z.msg = "invalid block type";
  6428. r = Z_DATA_ERROR;
  6429. that.bitb = b;
  6430. that.bitk = k;
  6431. z.avail_in = n;
  6432. z.total_in += p - z.next_in_index;
  6433. z.next_in_index = p;
  6434. that.write = q;
  6435. return that.inflate_flush(z, r);
  6436. }
  6437. break;
  6438. case LENS:
  6439. while (k < 32) {
  6440. if (n !== 0) {
  6441. r = Z_OK;
  6442. } else {
  6443. that.bitb = b;
  6444. that.bitk = k;
  6445. z.avail_in = n;
  6446. z.total_in += p - z.next_in_index;
  6447. z.next_in_index = p;
  6448. that.write = q;
  6449. return that.inflate_flush(z, r);
  6450. }
  6451. n--;
  6452. b |= (z.read_byte(p++) & 0xff) << k;
  6453. k += 8;
  6454. }
  6455. if ((~b >>> 16 & 0xffff) != (b & 0xffff)) {
  6456. mode = BADBLOCKS;
  6457. z.msg = "invalid stored block lengths";
  6458. r = Z_DATA_ERROR;
  6459. that.bitb = b;
  6460. that.bitk = k;
  6461. z.avail_in = n;
  6462. z.total_in += p - z.next_in_index;
  6463. z.next_in_index = p;
  6464. that.write = q;
  6465. return that.inflate_flush(z, r);
  6466. }
  6467. left = b & 0xffff;
  6468. b = k = 0; // dump bits
  6469. mode = left !== 0 ? STORED : last !== 0 ? DRY : TYPE;
  6470. break;
  6471. case STORED:
  6472. if (n === 0) {
  6473. that.bitb = b;
  6474. that.bitk = k;
  6475. z.avail_in = n;
  6476. z.total_in += p - z.next_in_index;
  6477. z.next_in_index = p;
  6478. that.write = q;
  6479. return that.inflate_flush(z, r);
  6480. }
  6481. if (m === 0) {
  6482. if (q == that.end && that.read !== 0) {
  6483. q = 0;
  6484. m =
  6485. /* (int) */
  6486. q < that.read ? that.read - q - 1 : that.end - q;
  6487. }
  6488. if (m === 0) {
  6489. that.write = q;
  6490. r = that.inflate_flush(z, r);
  6491. q = that.write;
  6492. m =
  6493. /* (int) */
  6494. q < that.read ? that.read - q - 1 : that.end - q;
  6495. if (q == that.end && that.read !== 0) {
  6496. q = 0;
  6497. m =
  6498. /* (int) */
  6499. q < that.read ? that.read - q - 1 : that.end - q;
  6500. }
  6501. if (m === 0) {
  6502. that.bitb = b;
  6503. that.bitk = k;
  6504. z.avail_in = n;
  6505. z.total_in += p - z.next_in_index;
  6506. z.next_in_index = p;
  6507. that.write = q;
  6508. return that.inflate_flush(z, r);
  6509. }
  6510. }
  6511. }
  6512. r = Z_OK;
  6513. t = left;
  6514. if (t > n) t = n;
  6515. if (t > m) t = m;
  6516. that.win.set(z.read_buf(p, t), q);
  6517. p += t;
  6518. n -= t;
  6519. q += t;
  6520. m -= t;
  6521. if ((left -= t) !== 0) break;
  6522. mode = last !== 0 ? DRY : TYPE;
  6523. break;
  6524. case TABLE:
  6525. while (k < 14) {
  6526. if (n !== 0) {
  6527. r = Z_OK;
  6528. } else {
  6529. that.bitb = b;
  6530. that.bitk = k;
  6531. z.avail_in = n;
  6532. z.total_in += p - z.next_in_index;
  6533. z.next_in_index = p;
  6534. that.write = q;
  6535. return that.inflate_flush(z, r);
  6536. }
  6537. n--;
  6538. b |= (z.read_byte(p++) & 0xff) << k;
  6539. k += 8;
  6540. }
  6541. table = t = b & 0x3fff;
  6542. if ((t & 0x1f) > 29 || (t >> 5 & 0x1f) > 29) {
  6543. mode = BADBLOCKS;
  6544. z.msg = "too many length or distance symbols";
  6545. r = Z_DATA_ERROR;
  6546. that.bitb = b;
  6547. that.bitk = k;
  6548. z.avail_in = n;
  6549. z.total_in += p - z.next_in_index;
  6550. z.next_in_index = p;
  6551. that.write = q;
  6552. return that.inflate_flush(z, r);
  6553. }
  6554. t = 258 + (t & 0x1f) + (t >> 5 & 0x1f);
  6555. if (!blens || blens.length < t) {
  6556. blens = []; // new Array(t);
  6557. } else {
  6558. for (i = 0; i < t; i++) {
  6559. blens[i] = 0;
  6560. }
  6561. } // {
  6562. b >>>= 14;
  6563. k -= 14; // }
  6564. index = 0;
  6565. mode = BTREE;
  6566. /* falls through */
  6567. case BTREE:
  6568. while (index < 4 + (table >>> 10)) {
  6569. while (k < 3) {
  6570. if (n !== 0) {
  6571. r = Z_OK;
  6572. } else {
  6573. that.bitb = b;
  6574. that.bitk = k;
  6575. z.avail_in = n;
  6576. z.total_in += p - z.next_in_index;
  6577. z.next_in_index = p;
  6578. that.write = q;
  6579. return that.inflate_flush(z, r);
  6580. }
  6581. n--;
  6582. b |= (z.read_byte(p++) & 0xff) << k;
  6583. k += 8;
  6584. }
  6585. blens[border[index++]] = b & 7; // {
  6586. b >>>= 3;
  6587. k -= 3; // }
  6588. }
  6589. while (index < 19) {
  6590. blens[border[index++]] = 0;
  6591. }
  6592. bb[0] = 7;
  6593. t = inftree.inflate_trees_bits(blens, bb, tb, hufts, z);
  6594. if (t != Z_OK) {
  6595. r = t;
  6596. if (r == Z_DATA_ERROR) {
  6597. blens = null;
  6598. mode = BADBLOCKS;
  6599. }
  6600. that.bitb = b;
  6601. that.bitk = k;
  6602. z.avail_in = n;
  6603. z.total_in += p - z.next_in_index;
  6604. z.next_in_index = p;
  6605. that.write = q;
  6606. return that.inflate_flush(z, r);
  6607. }
  6608. index = 0;
  6609. mode = DTREE;
  6610. /* falls through */
  6611. case DTREE:
  6612. // eslint-disable-next-line no-constant-condition
  6613. while (true) {
  6614. t = table;
  6615. if (index >= 258 + (t & 0x1f) + (t >> 5 & 0x1f)) {
  6616. break;
  6617. }
  6618. var j = void 0,
  6619. c = void 0;
  6620. t = bb[0];
  6621. while (k < t) {
  6622. if (n !== 0) {
  6623. r = Z_OK;
  6624. } else {
  6625. that.bitb = b;
  6626. that.bitk = k;
  6627. z.avail_in = n;
  6628. z.total_in += p - z.next_in_index;
  6629. z.next_in_index = p;
  6630. that.write = q;
  6631. return that.inflate_flush(z, r);
  6632. }
  6633. n--;
  6634. b |= (z.read_byte(p++) & 0xff) << k;
  6635. k += 8;
  6636. } // if (tb[0] == -1) {
  6637. // System.err.println("null...");
  6638. // }
  6639. t = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 1];
  6640. c = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 2];
  6641. if (c < 16) {
  6642. b >>>= t;
  6643. k -= t;
  6644. blens[index++] = c;
  6645. } else {
  6646. // c == 16..18
  6647. i = c == 18 ? 7 : c - 14;
  6648. j = c == 18 ? 11 : 3;
  6649. while (k < t + i) {
  6650. if (n !== 0) {
  6651. r = Z_OK;
  6652. } else {
  6653. that.bitb = b;
  6654. that.bitk = k;
  6655. z.avail_in = n;
  6656. z.total_in += p - z.next_in_index;
  6657. z.next_in_index = p;
  6658. that.write = q;
  6659. return that.inflate_flush(z, r);
  6660. }
  6661. n--;
  6662. b |= (z.read_byte(p++) & 0xff) << k;
  6663. k += 8;
  6664. }
  6665. b >>>= t;
  6666. k -= t;
  6667. j += b & inflate_mask[i];
  6668. b >>>= i;
  6669. k -= i;
  6670. i = index;
  6671. t = table;
  6672. if (i + j > 258 + (t & 0x1f) + (t >> 5 & 0x1f) || c == 16 && i < 1) {
  6673. blens = null;
  6674. mode = BADBLOCKS;
  6675. z.msg = "invalid bit length repeat";
  6676. r = Z_DATA_ERROR;
  6677. that.bitb = b;
  6678. that.bitk = k;
  6679. z.avail_in = n;
  6680. z.total_in += p - z.next_in_index;
  6681. z.next_in_index = p;
  6682. that.write = q;
  6683. return that.inflate_flush(z, r);
  6684. }
  6685. c = c == 16 ? blens[i - 1] : 0;
  6686. do {
  6687. blens[i++] = c;
  6688. } while (--j !== 0);
  6689. index = i;
  6690. }
  6691. }
  6692. tb[0] = -1; // {
  6693. bl_ = []; // new Array(1);
  6694. bd_ = []; // new Array(1);
  6695. tl_ = []; // new Array(1);
  6696. td_ = []; // new Array(1);
  6697. bl_[0] = 9; // must be <= 9 for lookahead assumptions
  6698. bd_[0] = 6; // must be <= 9 for lookahead assumptions
  6699. t = table;
  6700. t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + (t >> 5 & 0x1f), blens, bl_, bd_, tl_, td_, hufts, z);
  6701. if (t != Z_OK) {
  6702. if (t == Z_DATA_ERROR) {
  6703. blens = null;
  6704. mode = BADBLOCKS;
  6705. }
  6706. r = t;
  6707. that.bitb = b;
  6708. that.bitk = k;
  6709. z.avail_in = n;
  6710. z.total_in += p - z.next_in_index;
  6711. z.next_in_index = p;
  6712. that.write = q;
  6713. return that.inflate_flush(z, r);
  6714. }
  6715. codes.init(bl_[0], bd_[0], hufts, tl_[0], hufts, td_[0]); // }
  6716. mode = CODES;
  6717. /* falls through */
  6718. case CODES:
  6719. that.bitb = b;
  6720. that.bitk = k;
  6721. z.avail_in = n;
  6722. z.total_in += p - z.next_in_index;
  6723. z.next_in_index = p;
  6724. that.write = q;
  6725. if ((r = codes.proc(that, z, r)) != Z_STREAM_END) {
  6726. return that.inflate_flush(z, r);
  6727. }
  6728. r = Z_OK;
  6729. codes.free(z);
  6730. p = z.next_in_index;
  6731. n = z.avail_in;
  6732. b = that.bitb;
  6733. k = that.bitk;
  6734. q = that.write;
  6735. m =
  6736. /* (int) */
  6737. q < that.read ? that.read - q - 1 : that.end - q;
  6738. if (last === 0) {
  6739. mode = TYPE;
  6740. break;
  6741. }
  6742. mode = DRY;
  6743. /* falls through */
  6744. case DRY:
  6745. that.write = q;
  6746. r = that.inflate_flush(z, r);
  6747. q = that.write;
  6748. m =
  6749. /* (int) */
  6750. q < that.read ? that.read - q - 1 : that.end - q;
  6751. if (that.read != that.write) {
  6752. that.bitb = b;
  6753. that.bitk = k;
  6754. z.avail_in = n;
  6755. z.total_in += p - z.next_in_index;
  6756. z.next_in_index = p;
  6757. that.write = q;
  6758. return that.inflate_flush(z, r);
  6759. }
  6760. mode = DONELOCKS;
  6761. /* falls through */
  6762. case DONELOCKS:
  6763. r = Z_STREAM_END;
  6764. that.bitb = b;
  6765. that.bitk = k;
  6766. z.avail_in = n;
  6767. z.total_in += p - z.next_in_index;
  6768. z.next_in_index = p;
  6769. that.write = q;
  6770. return that.inflate_flush(z, r);
  6771. case BADBLOCKS:
  6772. r = Z_DATA_ERROR;
  6773. that.bitb = b;
  6774. that.bitk = k;
  6775. z.avail_in = n;
  6776. z.total_in += p - z.next_in_index;
  6777. z.next_in_index = p;
  6778. that.write = q;
  6779. return that.inflate_flush(z, r);
  6780. default:
  6781. r = Z_STREAM_ERROR;
  6782. that.bitb = b;
  6783. that.bitk = k;
  6784. z.avail_in = n;
  6785. z.total_in += p - z.next_in_index;
  6786. z.next_in_index = p;
  6787. that.write = q;
  6788. return that.inflate_flush(z, r);
  6789. }
  6790. }
  6791. };
  6792. that.free = function (z) {
  6793. that.reset(z, null);
  6794. that.win = null;
  6795. hufts = null; // ZFREE(z, s);
  6796. };
  6797. that.set_dictionary = function (d, start, n) {
  6798. that.win.set(d.subarray(start, start + n), 0);
  6799. that.read = that.write = n;
  6800. }; // Returns true if inflate is currently at the end of a block generated
  6801. // by Z_SYNC_FLUSH or Z_FULL_FLUSH.
  6802. that.sync_point = function () {
  6803. return mode == LENS ? 1 : 0;
  6804. };
  6805. } // Inflate
  6806. // preset dictionary flag in zlib header
  6807. var PRESET_DICT = 0x20;
  6808. var Z_DEFLATED = 8;
  6809. var METHOD = 0; // waiting for method byte
  6810. var FLAG = 1; // waiting for flag byte
  6811. var DICT4 = 2; // four dictionary check bytes to go
  6812. var DICT3 = 3; // three dictionary check bytes to go
  6813. var DICT2 = 4; // two dictionary check bytes to go
  6814. var DICT1 = 5; // one dictionary check byte to go
  6815. var DICT0 = 6; // waiting for inflateSetDictionary
  6816. var BLOCKS = 7; // decompressing blocks
  6817. var DONE = 12; // finished check, done
  6818. var BAD = 13; // got an error--stay here
  6819. var mark = [0, 0, 0xff, 0xff];
  6820. function Inflate$1() {
  6821. var that = this;
  6822. that.mode = 0; // current inflate mode
  6823. // mode dependent information
  6824. that.method = 0; // if FLAGS, method byte
  6825. // if CHECK, check values to compare
  6826. that.was = [0]; // new Array(1); // computed check value
  6827. that.need = 0; // stream check value
  6828. // if BAD, inflateSync's marker bytes count
  6829. that.marker = 0; // mode independent information
  6830. that.wbits = 0; // log2(win size) (8..15, defaults to 15)
  6831. // this.blocks; // current inflate_blocks state
  6832. function inflateReset(z) {
  6833. if (!z || !z.istate) return Z_STREAM_ERROR;
  6834. z.total_in = z.total_out = 0;
  6835. z.msg = null;
  6836. z.istate.mode = BLOCKS;
  6837. z.istate.blocks.reset(z, null);
  6838. return Z_OK;
  6839. }
  6840. that.inflateEnd = function (z) {
  6841. if (that.blocks) that.blocks.free(z);
  6842. that.blocks = null; // ZFREE(z, z->state);
  6843. return Z_OK;
  6844. };
  6845. that.inflateInit = function (z, w) {
  6846. z.msg = null;
  6847. that.blocks = null; // set win size
  6848. if (w < 8 || w > 15) {
  6849. that.inflateEnd(z);
  6850. return Z_STREAM_ERROR;
  6851. }
  6852. that.wbits = w;
  6853. z.istate.blocks = new InfBlocks(z, 1 << w); // reset state
  6854. inflateReset(z);
  6855. return Z_OK;
  6856. };
  6857. that.inflate = function (z, f) {
  6858. var r;
  6859. var b;
  6860. if (!z || !z.istate || !z.next_in) return Z_STREAM_ERROR;
  6861. var istate = z.istate;
  6862. f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
  6863. r = Z_BUF_ERROR; // eslint-disable-next-line no-constant-condition
  6864. while (true) {
  6865. switch (istate.mode) {
  6866. case METHOD:
  6867. if (z.avail_in === 0) return r;
  6868. r = f;
  6869. z.avail_in--;
  6870. z.total_in++;
  6871. if (((istate.method = z.read_byte(z.next_in_index++)) & 0xf) != Z_DEFLATED) {
  6872. istate.mode = BAD;
  6873. z.msg = "unknown compression method";
  6874. istate.marker = 5; // can't try inflateSync
  6875. break;
  6876. }
  6877. if ((istate.method >> 4) + 8 > istate.wbits) {
  6878. istate.mode = BAD;
  6879. z.msg = "invalid win size";
  6880. istate.marker = 5; // can't try inflateSync
  6881. break;
  6882. }
  6883. istate.mode = FLAG;
  6884. /* falls through */
  6885. case FLAG:
  6886. if (z.avail_in === 0) return r;
  6887. r = f;
  6888. z.avail_in--;
  6889. z.total_in++;
  6890. b = z.read_byte(z.next_in_index++) & 0xff;
  6891. if (((istate.method << 8) + b) % 31 !== 0) {
  6892. istate.mode = BAD;
  6893. z.msg = "incorrect header check";
  6894. istate.marker = 5; // can't try inflateSync
  6895. break;
  6896. }
  6897. if ((b & PRESET_DICT) === 0) {
  6898. istate.mode = BLOCKS;
  6899. break;
  6900. }
  6901. istate.mode = DICT4;
  6902. /* falls through */
  6903. case DICT4:
  6904. if (z.avail_in === 0) return r;
  6905. r = f;
  6906. z.avail_in--;
  6907. z.total_in++;
  6908. istate.need = (z.read_byte(z.next_in_index++) & 0xff) << 24 & 0xff000000;
  6909. istate.mode = DICT3;
  6910. /* falls through */
  6911. case DICT3:
  6912. if (z.avail_in === 0) return r;
  6913. r = f;
  6914. z.avail_in--;
  6915. z.total_in++;
  6916. istate.need += (z.read_byte(z.next_in_index++) & 0xff) << 16 & 0xff0000;
  6917. istate.mode = DICT2;
  6918. /* falls through */
  6919. case DICT2:
  6920. if (z.avail_in === 0) return r;
  6921. r = f;
  6922. z.avail_in--;
  6923. z.total_in++;
  6924. istate.need += (z.read_byte(z.next_in_index++) & 0xff) << 8 & 0xff00;
  6925. istate.mode = DICT1;
  6926. /* falls through */
  6927. case DICT1:
  6928. if (z.avail_in === 0) return r;
  6929. r = f;
  6930. z.avail_in--;
  6931. z.total_in++;
  6932. istate.need += z.read_byte(z.next_in_index++) & 0xff;
  6933. istate.mode = DICT0;
  6934. return Z_NEED_DICT;
  6935. case DICT0:
  6936. istate.mode = BAD;
  6937. z.msg = "need dictionary";
  6938. istate.marker = 0; // can try inflateSync
  6939. return Z_STREAM_ERROR;
  6940. case BLOCKS:
  6941. r = istate.blocks.proc(z, r);
  6942. if (r == Z_DATA_ERROR) {
  6943. istate.mode = BAD;
  6944. istate.marker = 0; // can try inflateSync
  6945. break;
  6946. }
  6947. if (r == Z_OK) {
  6948. r = f;
  6949. }
  6950. if (r != Z_STREAM_END) {
  6951. return r;
  6952. }
  6953. r = f;
  6954. istate.blocks.reset(z, istate.was);
  6955. istate.mode = DONE;
  6956. /* falls through */
  6957. case DONE:
  6958. z.avail_in = 0;
  6959. return Z_STREAM_END;
  6960. case BAD:
  6961. return Z_DATA_ERROR;
  6962. default:
  6963. return Z_STREAM_ERROR;
  6964. }
  6965. }
  6966. };
  6967. that.inflateSetDictionary = function (z, dictionary, dictLength) {
  6968. var index = 0,
  6969. length = dictLength;
  6970. if (!z || !z.istate || z.istate.mode != DICT0) return Z_STREAM_ERROR;
  6971. var istate = z.istate;
  6972. if (length >= 1 << istate.wbits) {
  6973. length = (1 << istate.wbits) - 1;
  6974. index = dictLength - length;
  6975. }
  6976. istate.blocks.set_dictionary(dictionary, index, length);
  6977. istate.mode = BLOCKS;
  6978. return Z_OK;
  6979. };
  6980. that.inflateSync = function (z) {
  6981. var n; // number of bytes to look at
  6982. var p; // pointer to bytes
  6983. var m; // number of marker bytes found in a row
  6984. var r, w; // temporaries to save total_in and total_out
  6985. // set up
  6986. if (!z || !z.istate) return Z_STREAM_ERROR;
  6987. var istate = z.istate;
  6988. if (istate.mode != BAD) {
  6989. istate.mode = BAD;
  6990. istate.marker = 0;
  6991. }
  6992. if ((n = z.avail_in) === 0) return Z_BUF_ERROR;
  6993. p = z.next_in_index;
  6994. m = istate.marker; // search
  6995. while (n !== 0 && m < 4) {
  6996. if (z.read_byte(p) == mark[m]) {
  6997. m++;
  6998. } else if (z.read_byte(p) !== 0) {
  6999. m = 0;
  7000. } else {
  7001. m = 4 - m;
  7002. }
  7003. p++;
  7004. n--;
  7005. } // restore
  7006. z.total_in += p - z.next_in_index;
  7007. z.next_in_index = p;
  7008. z.avail_in = n;
  7009. istate.marker = m; // return no joy or set up to restart on a new block
  7010. if (m != 4) {
  7011. return Z_DATA_ERROR;
  7012. }
  7013. r = z.total_in;
  7014. w = z.total_out;
  7015. inflateReset(z);
  7016. z.total_in = r;
  7017. z.total_out = w;
  7018. istate.mode = BLOCKS;
  7019. return Z_OK;
  7020. }; // Returns true if inflate is currently at the end of a block generated
  7021. // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
  7022. // implementation to provide an additional safety check. PPP uses
  7023. // Z_SYNC_FLUSH
  7024. // but removes the length bytes of the resulting empty stored block. When
  7025. // decompressing, PPP checks that at the end of input packet, inflate is
  7026. // waiting for these length bytes.
  7027. that.inflateSyncPoint = function (z) {
  7028. if (!z || !z.istate || !z.istate.blocks) return Z_STREAM_ERROR;
  7029. return z.istate.blocks.sync_point();
  7030. };
  7031. } // ZStream
  7032. function ZStream() {}
  7033. ZStream.prototype = {
  7034. inflateInit: function inflateInit(bits) {
  7035. var that = this;
  7036. that.istate = new Inflate$1();
  7037. if (!bits) bits = MAX_BITS;
  7038. return that.istate.inflateInit(that, bits);
  7039. },
  7040. inflate: function inflate(f) {
  7041. var that = this;
  7042. if (!that.istate) return Z_STREAM_ERROR;
  7043. return that.istate.inflate(that, f);
  7044. },
  7045. inflateEnd: function inflateEnd() {
  7046. var that = this;
  7047. if (!that.istate) return Z_STREAM_ERROR;
  7048. var ret = that.istate.inflateEnd(that);
  7049. that.istate = null;
  7050. return ret;
  7051. },
  7052. inflateSync: function inflateSync() {
  7053. var that = this;
  7054. if (!that.istate) return Z_STREAM_ERROR;
  7055. return that.istate.inflateSync(that);
  7056. },
  7057. inflateSetDictionary: function inflateSetDictionary(dictionary, dictLength) {
  7058. var that = this;
  7059. if (!that.istate) return Z_STREAM_ERROR;
  7060. return that.istate.inflateSetDictionary(that, dictionary, dictLength);
  7061. },
  7062. read_byte: function read_byte(start) {
  7063. var that = this;
  7064. return that.next_in[start];
  7065. },
  7066. read_buf: function read_buf(start, size) {
  7067. var that = this;
  7068. return that.next_in.subarray(start, start + size);
  7069. }
  7070. }; // Inflater
  7071. function ZipInflate(options) {
  7072. var that = this;
  7073. var z = new ZStream();
  7074. var bufsize = options && options.chunkSize ? Math.floor(options.chunkSize * 2) : 128 * 1024;
  7075. var flush = Z_NO_FLUSH;
  7076. var buf = new Uint8Array(bufsize);
  7077. var nomoreinput = false;
  7078. z.inflateInit();
  7079. z.next_out = buf;
  7080. that.append = function (data, onprogress) {
  7081. var buffers = [];
  7082. var err,
  7083. array,
  7084. lastIndex = 0,
  7085. bufferIndex = 0,
  7086. bufferSize = 0;
  7087. if (data.length === 0) return;
  7088. z.next_in_index = 0;
  7089. z.next_in = data;
  7090. z.avail_in = data.length;
  7091. do {
  7092. z.next_out_index = 0;
  7093. z.avail_out = bufsize;
  7094. if (z.avail_in === 0 && !nomoreinput) {
  7095. // if buffer is empty and more input is available, refill it
  7096. z.next_in_index = 0;
  7097. nomoreinput = true;
  7098. }
  7099. err = z.inflate(flush);
  7100. if (nomoreinput && err === Z_BUF_ERROR) {
  7101. if (z.avail_in !== 0) throw new Error("inflating: bad input");
  7102. } else if (err !== Z_OK && err !== Z_STREAM_END) throw new Error("inflating: " + z.msg);
  7103. if ((nomoreinput || err === Z_STREAM_END) && z.avail_in === data.length) throw new Error("inflating: bad input");
  7104. if (z.next_out_index) if (z.next_out_index === bufsize) buffers.push(new Uint8Array(buf));else buffers.push(buf.slice(0, z.next_out_index));
  7105. bufferSize += z.next_out_index;
  7106. if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) {
  7107. onprogress(z.next_in_index);
  7108. lastIndex = z.next_in_index;
  7109. }
  7110. } while (z.avail_in > 0 || z.avail_out === 0);
  7111. if (buffers.length > 1) {
  7112. array = new Uint8Array(bufferSize);
  7113. buffers.forEach(function (chunk) {
  7114. array.set(chunk, bufferIndex);
  7115. bufferIndex += chunk.length;
  7116. });
  7117. } else {
  7118. array = buffers[0] || new Uint8Array(0);
  7119. }
  7120. return array;
  7121. };
  7122. that.flush = function () {
  7123. z.inflateEnd();
  7124. };
  7125. }
  7126. var DESCRIPTORS$8 = descriptors;
  7127. var uncurryThis$l = functionUncurryThis;
  7128. var call$f = functionCall;
  7129. var fails$i = fails$H;
  7130. var objectKeys$2 = objectKeys$4;
  7131. var getOwnPropertySymbolsModule$2 = objectGetOwnPropertySymbols;
  7132. var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable;
  7133. var toObject$4 = toObject$d;
  7134. var IndexedObject = indexedObject;
  7135. // eslint-disable-next-line es-x/no-object-assign -- safe
  7136. var $assign = Object.assign;
  7137. // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
  7138. var defineProperty$7 = Object.defineProperty;
  7139. var concat$2 = uncurryThis$l([].concat);
  7140. // `Object.assign` method
  7141. // https://tc39.es/ecma262/#sec-object.assign
  7142. var objectAssign = !$assign || fails$i(function () {
  7143. // should have correct order of operations (Edge bug)
  7144. if (DESCRIPTORS$8 && $assign({ b: 1 }, $assign(defineProperty$7({}, 'a', {
  7145. enumerable: true,
  7146. get: function () {
  7147. defineProperty$7(this, 'b', {
  7148. value: 3,
  7149. enumerable: false
  7150. });
  7151. }
  7152. }), { b: 2 })).b !== 1) return true;
  7153. // should work with symbols and should have deterministic property order (V8 bug)
  7154. var A = {};
  7155. var B = {};
  7156. // eslint-disable-next-line es-x/no-symbol -- safe
  7157. var symbol = Symbol();
  7158. var alphabet = 'abcdefghijklmnopqrst';
  7159. A[symbol] = 7;
  7160. alphabet.split('').forEach(function (chr) { B[chr] = chr; });
  7161. return $assign({}, A)[symbol] != 7 || objectKeys$2($assign({}, B)).join('') != alphabet;
  7162. }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
  7163. var T = toObject$4(target);
  7164. var argumentsLength = arguments.length;
  7165. var index = 1;
  7166. var getOwnPropertySymbols = getOwnPropertySymbolsModule$2.f;
  7167. var propertyIsEnumerable = propertyIsEnumerableModule$1.f;
  7168. while (argumentsLength > index) {
  7169. var S = IndexedObject(arguments[index++]);
  7170. var keys = getOwnPropertySymbols ? concat$2(objectKeys$2(S), getOwnPropertySymbols(S)) : objectKeys$2(S);
  7171. var length = keys.length;
  7172. var j = 0;
  7173. var key;
  7174. while (length > j) {
  7175. key = keys[j++];
  7176. if (!DESCRIPTORS$8 || call$f(propertyIsEnumerable, S, key)) T[key] = S[key];
  7177. }
  7178. } return T;
  7179. } : $assign;
  7180. var $$t = _export;
  7181. var assign$1 = objectAssign;
  7182. // `Object.assign` method
  7183. // https://tc39.es/ecma262/#sec-object.assign
  7184. // eslint-disable-next-line es-x/no-object-assign -- required for testing
  7185. $$t({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign$1 }, {
  7186. assign: assign$1
  7187. });
  7188. /*
  7189. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  7190. Redistribution and use in source and binary forms, with or without
  7191. modification, are permitted provided that the following conditions are met:
  7192. 1. Redistributions of source code must retain the above copyright notice,
  7193. this list of conditions and the following disclaimer.
  7194. 2. Redistributions in binary form must reproduce the above copyright
  7195. notice, this list of conditions and the following disclaimer in
  7196. the documentation and/or other materials provided with the distribution.
  7197. 3. The names of the authors may not be used to endorse or promote products
  7198. derived from this software without specific prior written permission.
  7199. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  7200. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  7201. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  7202. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  7203. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  7204. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  7205. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  7206. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  7207. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  7208. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  7209. */
  7210. /* global navigator */
  7211. var DEFAULT_CONFIGURATION = {
  7212. chunkSize: 512 * 1024,
  7213. maxWorkers: typeof navigator != "undefined" && navigator.hardwareConcurrency || 2,
  7214. terminateWorkerTimeout: 5000,
  7215. useWebWorkers: true,
  7216. workerScripts: undefined
  7217. };
  7218. var config = Object.assign({}, DEFAULT_CONFIGURATION);
  7219. function getConfiguration() {
  7220. return config;
  7221. }
  7222. function configure(configuration) {
  7223. if (configuration.baseURL !== undefined) {
  7224. config.baseURL = configuration.baseURL;
  7225. }
  7226. if (configuration.chunkSize !== undefined) {
  7227. config.chunkSize = configuration.chunkSize;
  7228. }
  7229. if (configuration.maxWorkers !== undefined) {
  7230. config.maxWorkers = configuration.maxWorkers;
  7231. }
  7232. if (configuration.terminateWorkerTimeout !== undefined) {
  7233. config.terminateWorkerTimeout = configuration.terminateWorkerTimeout;
  7234. }
  7235. if (configuration.useWebWorkers !== undefined) {
  7236. config.useWebWorkers = configuration.useWebWorkers;
  7237. }
  7238. if (configuration.Deflate !== undefined) {
  7239. config.Deflate = configuration.Deflate;
  7240. }
  7241. if (configuration.Inflate !== undefined) {
  7242. config.Inflate = configuration.Inflate;
  7243. }
  7244. if (configuration.workerScripts !== undefined) {
  7245. if (configuration.workerScripts.deflate) {
  7246. if (!Array.isArray(configuration.workerScripts.deflate)) {
  7247. throw new Error("workerScripts.deflate must be an array");
  7248. }
  7249. if (!config.workerScripts) {
  7250. config.workerScripts = {};
  7251. }
  7252. config.workerScripts.deflate = configuration.workerScripts.deflate;
  7253. }
  7254. if (configuration.workerScripts.inflate) {
  7255. if (!Array.isArray(configuration.workerScripts.inflate)) {
  7256. throw new Error("workerScripts.inflate must be an array");
  7257. }
  7258. if (!config.workerScripts) {
  7259. config.workerScripts = {};
  7260. }
  7261. config.workerScripts.inflate = configuration.workerScripts.inflate;
  7262. }
  7263. }
  7264. }
  7265. var classof$6 = classof$d;
  7266. var $String = String;
  7267. var toString$a = function (argument) {
  7268. if (classof$6(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');
  7269. return $String(argument);
  7270. };
  7271. var anObject$9 = anObject$i;
  7272. // `RegExp.prototype.flags` getter implementation
  7273. // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
  7274. var regexpFlags$1 = function () {
  7275. var that = anObject$9(this);
  7276. var result = '';
  7277. if (that.hasIndices) result += 'd';
  7278. if (that.global) result += 'g';
  7279. if (that.ignoreCase) result += 'i';
  7280. if (that.multiline) result += 'm';
  7281. if (that.dotAll) result += 's';
  7282. if (that.unicode) result += 'u';
  7283. if (that.unicodeSets) result += 'v';
  7284. if (that.sticky) result += 'y';
  7285. return result;
  7286. };
  7287. var fails$h = fails$H;
  7288. var global$m = global$F;
  7289. // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
  7290. var $RegExp$2 = global$m.RegExp;
  7291. var UNSUPPORTED_Y$2 = fails$h(function () {
  7292. var re = $RegExp$2('a', 'y');
  7293. re.lastIndex = 2;
  7294. return re.exec('abcd') != null;
  7295. });
  7296. // UC Browser bug
  7297. // https://github.com/zloirock/core-js/issues/1008
  7298. var MISSED_STICKY = UNSUPPORTED_Y$2 || fails$h(function () {
  7299. return !$RegExp$2('a', 'y').sticky;
  7300. });
  7301. var BROKEN_CARET = UNSUPPORTED_Y$2 || fails$h(function () {
  7302. // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
  7303. var re = $RegExp$2('^r', 'gy');
  7304. re.lastIndex = 2;
  7305. return re.exec('str') != null;
  7306. });
  7307. var regexpStickyHelpers = {
  7308. BROKEN_CARET: BROKEN_CARET,
  7309. MISSED_STICKY: MISSED_STICKY,
  7310. UNSUPPORTED_Y: UNSUPPORTED_Y$2
  7311. };
  7312. var fails$g = fails$H;
  7313. var global$l = global$F;
  7314. // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError
  7315. var $RegExp$1 = global$l.RegExp;
  7316. var regexpUnsupportedDotAll = fails$g(function () {
  7317. var re = $RegExp$1('.', 's');
  7318. return !(re.dotAll && re.exec('\n') && re.flags === 's');
  7319. });
  7320. var fails$f = fails$H;
  7321. var global$k = global$F;
  7322. // babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError
  7323. var $RegExp = global$k.RegExp;
  7324. var regexpUnsupportedNcg = fails$f(function () {
  7325. var re = $RegExp('(?<a>b)', 'g');
  7326. return re.exec('b').groups.a !== 'b' ||
  7327. 'b'.replace(re, '$<a>c') !== 'bc';
  7328. });
  7329. /* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */
  7330. /* eslint-disable regexp/no-useless-quantifier -- testing */
  7331. var call$e = functionCall;
  7332. var uncurryThis$k = functionUncurryThis;
  7333. var toString$9 = toString$a;
  7334. var regexpFlags = regexpFlags$1;
  7335. var stickyHelpers$1 = regexpStickyHelpers;
  7336. var shared$3 = shared$7.exports;
  7337. var create$2 = objectCreate;
  7338. var getInternalState$2 = internalState.get;
  7339. var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll;
  7340. var UNSUPPORTED_NCG = regexpUnsupportedNcg;
  7341. var nativeReplace = shared$3('native-string-replace', String.prototype.replace);
  7342. var nativeExec = RegExp.prototype.exec;
  7343. var patchedExec = nativeExec;
  7344. var charAt$7 = uncurryThis$k(''.charAt);
  7345. var indexOf = uncurryThis$k(''.indexOf);
  7346. var replace$7 = uncurryThis$k(''.replace);
  7347. var stringSlice$8 = uncurryThis$k(''.slice);
  7348. var UPDATES_LAST_INDEX_WRONG = (function () {
  7349. var re1 = /a/;
  7350. var re2 = /b*/g;
  7351. call$e(nativeExec, re1, 'a');
  7352. call$e(nativeExec, re2, 'a');
  7353. return re1.lastIndex !== 0 || re2.lastIndex !== 0;
  7354. })();
  7355. var UNSUPPORTED_Y$1 = stickyHelpers$1.BROKEN_CARET;
  7356. // nonparticipating capturing group, copied from es5-shim's String#split patch.
  7357. var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
  7358. var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$1 || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;
  7359. if (PATCH) {
  7360. patchedExec = function exec(string) {
  7361. var re = this;
  7362. var state = getInternalState$2(re);
  7363. var str = toString$9(string);
  7364. var raw = state.raw;
  7365. var result, reCopy, lastIndex, match, i, object, group;
  7366. if (raw) {
  7367. raw.lastIndex = re.lastIndex;
  7368. result = call$e(patchedExec, raw, str);
  7369. re.lastIndex = raw.lastIndex;
  7370. return result;
  7371. }
  7372. var groups = state.groups;
  7373. var sticky = UNSUPPORTED_Y$1 && re.sticky;
  7374. var flags = call$e(regexpFlags, re);
  7375. var source = re.source;
  7376. var charsAdded = 0;
  7377. var strCopy = str;
  7378. if (sticky) {
  7379. flags = replace$7(flags, 'y', '');
  7380. if (indexOf(flags, 'g') === -1) {
  7381. flags += 'g';
  7382. }
  7383. strCopy = stringSlice$8(str, re.lastIndex);
  7384. // Support anchored sticky behavior.
  7385. if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$7(str, re.lastIndex - 1) !== '\n')) {
  7386. source = '(?: ' + source + ')';
  7387. strCopy = ' ' + strCopy;
  7388. charsAdded++;
  7389. }
  7390. // ^(? + rx + ) is needed, in combination with some str slicing, to
  7391. // simulate the 'y' flag.
  7392. reCopy = new RegExp('^(?:' + source + ')', flags);
  7393. }
  7394. if (NPCG_INCLUDED) {
  7395. reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
  7396. }
  7397. if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
  7398. match = call$e(nativeExec, sticky ? reCopy : re, strCopy);
  7399. if (sticky) {
  7400. if (match) {
  7401. match.input = stringSlice$8(match.input, charsAdded);
  7402. match[0] = stringSlice$8(match[0], charsAdded);
  7403. match.index = re.lastIndex;
  7404. re.lastIndex += match[0].length;
  7405. } else re.lastIndex = 0;
  7406. } else if (UPDATES_LAST_INDEX_WRONG && match) {
  7407. re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
  7408. }
  7409. if (NPCG_INCLUDED && match && match.length > 1) {
  7410. // Fix browsers whose `exec` methods don't consistently return `undefined`
  7411. // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
  7412. call$e(nativeReplace, match[0], reCopy, function () {
  7413. for (i = 1; i < arguments.length - 2; i++) {
  7414. if (arguments[i] === undefined) match[i] = undefined;
  7415. }
  7416. });
  7417. }
  7418. if (match && groups) {
  7419. match.groups = object = create$2(null);
  7420. for (i = 0; i < groups.length; i++) {
  7421. group = groups[i];
  7422. object[group[0]] = match[group[1]];
  7423. }
  7424. }
  7425. return match;
  7426. };
  7427. }
  7428. var regexpExec$3 = patchedExec;
  7429. var $$s = _export;
  7430. var exec$4 = regexpExec$3;
  7431. // `RegExp.prototype.exec` method
  7432. // https://tc39.es/ecma262/#sec-regexp.prototype.exec
  7433. $$s({ target: 'RegExp', proto: true, forced: /./.exec !== exec$4 }, {
  7434. exec: exec$4
  7435. });
  7436. // TODO: Remove from `core-js@4` since it's moved to entry points
  7437. var uncurryThis$j = functionUncurryThis;
  7438. var defineBuiltIn$8 = defineBuiltIn$f;
  7439. var regexpExec$2 = regexpExec$3;
  7440. var fails$e = fails$H;
  7441. var wellKnownSymbol$a = wellKnownSymbol$t;
  7442. var createNonEnumerableProperty$2 = createNonEnumerableProperty$9;
  7443. var SPECIES$1 = wellKnownSymbol$a('species');
  7444. var RegExpPrototype = RegExp.prototype;
  7445. var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) {
  7446. var SYMBOL = wellKnownSymbol$a(KEY);
  7447. var DELEGATES_TO_SYMBOL = !fails$e(function () {
  7448. // String methods call symbol-named RegEp methods
  7449. var O = {};
  7450. O[SYMBOL] = function () { return 7; };
  7451. return ''[KEY](O) != 7;
  7452. });
  7453. var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$e(function () {
  7454. // Symbol-named RegExp methods call .exec
  7455. var execCalled = false;
  7456. var re = /a/;
  7457. if (KEY === 'split') {
  7458. // We can't use real regex here since it causes deoptimization
  7459. // and serious performance degradation in V8
  7460. // https://github.com/zloirock/core-js/issues/306
  7461. re = {};
  7462. // RegExp[@@split] doesn't call the regex's exec method, but first creates
  7463. // a new one. We need to return the patched regex when creating the new one.
  7464. re.constructor = {};
  7465. re.constructor[SPECIES$1] = function () { return re; };
  7466. re.flags = '';
  7467. re[SYMBOL] = /./[SYMBOL];
  7468. }
  7469. re.exec = function () { execCalled = true; return null; };
  7470. re[SYMBOL]('');
  7471. return !execCalled;
  7472. });
  7473. if (
  7474. !DELEGATES_TO_SYMBOL ||
  7475. !DELEGATES_TO_EXEC ||
  7476. FORCED
  7477. ) {
  7478. var uncurriedNativeRegExpMethod = uncurryThis$j(/./[SYMBOL]);
  7479. var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
  7480. var uncurriedNativeMethod = uncurryThis$j(nativeMethod);
  7481. var $exec = regexp.exec;
  7482. if ($exec === regexpExec$2 || $exec === RegExpPrototype.exec) {
  7483. if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
  7484. // The native String method already delegates to @@method (this
  7485. // polyfilled function), leasing to infinite recursion.
  7486. // We avoid it by directly calling the native @@method method.
  7487. return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };
  7488. }
  7489. return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };
  7490. }
  7491. return { done: false };
  7492. });
  7493. defineBuiltIn$8(String.prototype, KEY, methods[0]);
  7494. defineBuiltIn$8(RegExpPrototype, SYMBOL, methods[1]);
  7495. }
  7496. if (SHAM) createNonEnumerableProperty$2(RegExpPrototype[SYMBOL], 'sham', true);
  7497. };
  7498. var isObject$7 = isObject$k;
  7499. var classof$5 = classofRaw$1;
  7500. var wellKnownSymbol$9 = wellKnownSymbol$t;
  7501. var MATCH$1 = wellKnownSymbol$9('match');
  7502. // `IsRegExp` abstract operation
  7503. // https://tc39.es/ecma262/#sec-isregexp
  7504. var isRegexp = function (it) {
  7505. var isRegExp;
  7506. return isObject$7(it) && ((isRegExp = it[MATCH$1]) !== undefined ? !!isRegExp : classof$5(it) == 'RegExp');
  7507. };
  7508. var uncurryThis$i = functionUncurryThis;
  7509. var toIntegerOrInfinity$2 = toIntegerOrInfinity$9;
  7510. var toString$8 = toString$a;
  7511. var requireObjectCoercible$5 = requireObjectCoercible$8;
  7512. var charAt$6 = uncurryThis$i(''.charAt);
  7513. var charCodeAt$3 = uncurryThis$i(''.charCodeAt);
  7514. var stringSlice$7 = uncurryThis$i(''.slice);
  7515. var createMethod$2 = function (CONVERT_TO_STRING) {
  7516. return function ($this, pos) {
  7517. var S = toString$8(requireObjectCoercible$5($this));
  7518. var position = toIntegerOrInfinity$2(pos);
  7519. var size = S.length;
  7520. var first, second;
  7521. if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
  7522. first = charCodeAt$3(S, position);
  7523. return first < 0xD800 || first > 0xDBFF || position + 1 === size
  7524. || (second = charCodeAt$3(S, position + 1)) < 0xDC00 || second > 0xDFFF
  7525. ? CONVERT_TO_STRING
  7526. ? charAt$6(S, position)
  7527. : first
  7528. : CONVERT_TO_STRING
  7529. ? stringSlice$7(S, position, position + 2)
  7530. : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
  7531. };
  7532. };
  7533. var stringMultibyte = {
  7534. // `String.prototype.codePointAt` method
  7535. // https://tc39.es/ecma262/#sec-string.prototype.codepointat
  7536. codeAt: createMethod$2(false),
  7537. // `String.prototype.at` method
  7538. // https://github.com/mathiasbynens/String.prototype.at
  7539. charAt: createMethod$2(true)
  7540. };
  7541. var charAt$5 = stringMultibyte.charAt;
  7542. // `AdvanceStringIndex` abstract operation
  7543. // https://tc39.es/ecma262/#sec-advancestringindex
  7544. var advanceStringIndex$2 = function (S, index, unicode) {
  7545. return index + (unicode ? charAt$5(S, index).length : 1);
  7546. };
  7547. var call$d = functionCall;
  7548. var anObject$8 = anObject$i;
  7549. var isCallable$9 = isCallable$s;
  7550. var classof$4 = classofRaw$1;
  7551. var regexpExec$1 = regexpExec$3;
  7552. var $TypeError$3 = TypeError;
  7553. // `RegExpExec` abstract operation
  7554. // https://tc39.es/ecma262/#sec-regexpexec
  7555. var regexpExecAbstract = function (R, S) {
  7556. var exec = R.exec;
  7557. if (isCallable$9(exec)) {
  7558. var result = call$d(exec, R, S);
  7559. if (result !== null) anObject$8(result);
  7560. return result;
  7561. }
  7562. if (classof$4(R) === 'RegExp') return call$d(regexpExec$1, R, S);
  7563. throw $TypeError$3('RegExp#exec called on incompatible receiver');
  7564. };
  7565. var apply$3 = functionApply;
  7566. var call$c = functionCall;
  7567. var uncurryThis$h = functionUncurryThis;
  7568. var fixRegExpWellKnownSymbolLogic$1 = fixRegexpWellKnownSymbolLogic;
  7569. var isRegExp$1 = isRegexp;
  7570. var anObject$7 = anObject$i;
  7571. var requireObjectCoercible$4 = requireObjectCoercible$8;
  7572. var speciesConstructor$1 = speciesConstructor$4;
  7573. var advanceStringIndex$1 = advanceStringIndex$2;
  7574. var toLength$3 = toLength$a;
  7575. var toString$7 = toString$a;
  7576. var getMethod$2 = getMethod$5;
  7577. var arraySlice$5 = arraySliceSimple;
  7578. var callRegExpExec = regexpExecAbstract;
  7579. var regexpExec = regexpExec$3;
  7580. var stickyHelpers = regexpStickyHelpers;
  7581. var fails$d = fails$H;
  7582. var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
  7583. var MAX_UINT32 = 0xFFFFFFFF;
  7584. var min$4 = Math.min;
  7585. var $push = [].push;
  7586. var exec$3 = uncurryThis$h(/./.exec);
  7587. var push$6 = uncurryThis$h($push);
  7588. var stringSlice$6 = uncurryThis$h(''.slice);
  7589. // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
  7590. // Weex JS has frozen built-in prototypes, so use try / catch wrapper
  7591. var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails$d(function () {
  7592. // eslint-disable-next-line regexp/no-empty-group -- required for testing
  7593. var re = /(?:)/;
  7594. var originalExec = re.exec;
  7595. re.exec = function () { return originalExec.apply(this, arguments); };
  7596. var result = 'ab'.split(re);
  7597. return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
  7598. });
  7599. // @@split logic
  7600. fixRegExpWellKnownSymbolLogic$1('split', function (SPLIT, nativeSplit, maybeCallNative) {
  7601. var internalSplit;
  7602. if (
  7603. 'abbc'.split(/(b)*/)[1] == 'c' ||
  7604. // eslint-disable-next-line regexp/no-empty-group -- required for testing
  7605. 'test'.split(/(?:)/, -1).length != 4 ||
  7606. 'ab'.split(/(?:ab)*/).length != 2 ||
  7607. '.'.split(/(.?)(.?)/).length != 4 ||
  7608. // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing
  7609. '.'.split(/()()/).length > 1 ||
  7610. ''.split(/.?/).length
  7611. ) {
  7612. // based on es5-shim implementation, need to rework it
  7613. internalSplit = function (separator, limit) {
  7614. var string = toString$7(requireObjectCoercible$4(this));
  7615. var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
  7616. if (lim === 0) return [];
  7617. if (separator === undefined) return [string];
  7618. // If `separator` is not a regex, use native split
  7619. if (!isRegExp$1(separator)) {
  7620. return call$c(nativeSplit, string, separator, lim);
  7621. }
  7622. var output = [];
  7623. var flags = (separator.ignoreCase ? 'i' : '') +
  7624. (separator.multiline ? 'm' : '') +
  7625. (separator.unicode ? 'u' : '') +
  7626. (separator.sticky ? 'y' : '');
  7627. var lastLastIndex = 0;
  7628. // Make `global` and avoid `lastIndex` issues by working with a copy
  7629. var separatorCopy = new RegExp(separator.source, flags + 'g');
  7630. var match, lastIndex, lastLength;
  7631. while (match = call$c(regexpExec, separatorCopy, string)) {
  7632. lastIndex = separatorCopy.lastIndex;
  7633. if (lastIndex > lastLastIndex) {
  7634. push$6(output, stringSlice$6(string, lastLastIndex, match.index));
  7635. if (match.length > 1 && match.index < string.length) apply$3($push, output, arraySlice$5(match, 1));
  7636. lastLength = match[0].length;
  7637. lastLastIndex = lastIndex;
  7638. if (output.length >= lim) break;
  7639. }
  7640. if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
  7641. }
  7642. if (lastLastIndex === string.length) {
  7643. if (lastLength || !exec$3(separatorCopy, '')) push$6(output, '');
  7644. } else push$6(output, stringSlice$6(string, lastLastIndex));
  7645. return output.length > lim ? arraySlice$5(output, 0, lim) : output;
  7646. };
  7647. // Chakra, V8
  7648. } else if ('0'.split(undefined, 0).length) {
  7649. internalSplit = function (separator, limit) {
  7650. return separator === undefined && limit === 0 ? [] : call$c(nativeSplit, this, separator, limit);
  7651. };
  7652. } else internalSplit = nativeSplit;
  7653. return [
  7654. // `String.prototype.split` method
  7655. // https://tc39.es/ecma262/#sec-string.prototype.split
  7656. function split(separator, limit) {
  7657. var O = requireObjectCoercible$4(this);
  7658. var splitter = separator == undefined ? undefined : getMethod$2(separator, SPLIT);
  7659. return splitter
  7660. ? call$c(splitter, separator, O, limit)
  7661. : call$c(internalSplit, toString$7(O), separator, limit);
  7662. },
  7663. // `RegExp.prototype[@@split]` method
  7664. // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
  7665. //
  7666. // NOTE: This cannot be properly polyfilled in engines that don't support
  7667. // the 'y' flag.
  7668. function (string, limit) {
  7669. var rx = anObject$7(this);
  7670. var S = toString$7(string);
  7671. var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);
  7672. if (res.done) return res.value;
  7673. var C = speciesConstructor$1(rx, RegExp);
  7674. var unicodeMatching = rx.unicode;
  7675. var flags = (rx.ignoreCase ? 'i' : '') +
  7676. (rx.multiline ? 'm' : '') +
  7677. (rx.unicode ? 'u' : '') +
  7678. (UNSUPPORTED_Y ? 'g' : 'y');
  7679. // ^(? + rx + ) is needed, in combination with some S slicing, to
  7680. // simulate the 'y' flag.
  7681. var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);
  7682. var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
  7683. if (lim === 0) return [];
  7684. if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];
  7685. var p = 0;
  7686. var q = 0;
  7687. var A = [];
  7688. while (q < S.length) {
  7689. splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
  7690. var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice$6(S, q) : S);
  7691. var e;
  7692. if (
  7693. z === null ||
  7694. (e = min$4(toLength$3(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p
  7695. ) {
  7696. q = advanceStringIndex$1(S, q, unicodeMatching);
  7697. } else {
  7698. push$6(A, stringSlice$6(S, p, q));
  7699. if (A.length === lim) return A;
  7700. for (var i = 1; i <= z.length - 1; i++) {
  7701. push$6(A, z[i]);
  7702. if (A.length === lim) return A;
  7703. }
  7704. q = p = e;
  7705. }
  7706. }
  7707. push$6(A, stringSlice$6(S, p));
  7708. return A;
  7709. }
  7710. ];
  7711. }, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);
  7712. /*
  7713. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  7714. Redistribution and use in source and binary forms, with or without
  7715. modification, are permitted provided that the following conditions are met:
  7716. 1. Redistributions of source code must retain the above copyright notice,
  7717. this list of conditions and the following disclaimer.
  7718. 2. Redistributions in binary form must reproduce the above copyright
  7719. notice, this list of conditions and the following disclaimer in
  7720. the documentation and/or other materials provided with the distribution.
  7721. 3. The names of the authors may not be used to endorse or promote products
  7722. derived from this software without specific prior written permission.
  7723. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  7724. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  7725. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  7726. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  7727. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  7728. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  7729. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  7730. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  7731. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  7732. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  7733. */
  7734. function getMimeType$1() {
  7735. return "application/octet-stream";
  7736. }
  7737. var table$1 = {
  7738. "application": {
  7739. "andrew-inset": "ez",
  7740. "annodex": "anx",
  7741. "atom+xml": "atom",
  7742. "atomcat+xml": "atomcat",
  7743. "atomserv+xml": "atomsrv",
  7744. "bbolin": "lin",
  7745. "cap": ["cap", "pcap"],
  7746. "cu-seeme": "cu",
  7747. "davmount+xml": "davmount",
  7748. "dsptype": "tsp",
  7749. "ecmascript": ["es", "ecma"],
  7750. "futuresplash": "spl",
  7751. "hta": "hta",
  7752. "java-archive": "jar",
  7753. "java-serialized-object": "ser",
  7754. "java-vm": "class",
  7755. "javascript": "js",
  7756. "m3g": "m3g",
  7757. "mac-binhex40": "hqx",
  7758. "mathematica": ["nb", "ma", "mb"],
  7759. "msaccess": "mdb",
  7760. "msword": ["doc", "dot"],
  7761. "mxf": "mxf",
  7762. "oda": "oda",
  7763. "ogg": "ogx",
  7764. "pdf": "pdf",
  7765. "pgp-keys": "key",
  7766. "pgp-signature": ["asc", "sig"],
  7767. "pics-rules": "prf",
  7768. "postscript": ["ps", "ai", "eps", "epsi", "epsf", "eps2", "eps3"],
  7769. "rar": "rar",
  7770. "rdf+xml": "rdf",
  7771. "rss+xml": "rss",
  7772. "rtf": "rtf",
  7773. "smil": ["smi", "smil"],
  7774. "xhtml+xml": ["xhtml", "xht"],
  7775. "xml": ["xml", "xsl", "xsd"],
  7776. "xspf+xml": "xspf",
  7777. "zip": "zip",
  7778. "vnd.android.package-archive": "apk",
  7779. "vnd.cinderella": "cdy",
  7780. "vnd.google-earth.kml+xml": "kml",
  7781. "vnd.google-earth.kmz": "kmz",
  7782. "vnd.mozilla.xul+xml": "xul",
  7783. "vnd.ms-excel": ["xls", "xlb", "xlt", "xlm", "xla", "xlc", "xlw"],
  7784. "vnd.ms-pki.seccat": "cat",
  7785. "vnd.ms-pki.stl": "stl",
  7786. "vnd.ms-powerpoint": ["ppt", "pps", "pot"],
  7787. "vnd.oasis.opendocument.chart": "odc",
  7788. "vnd.oasis.opendocument.database": "odb",
  7789. "vnd.oasis.opendocument.formula": "odf",
  7790. "vnd.oasis.opendocument.graphics": "odg",
  7791. "vnd.oasis.opendocument.graphics-template": "otg",
  7792. "vnd.oasis.opendocument.image": "odi",
  7793. "vnd.oasis.opendocument.presentation": "odp",
  7794. "vnd.oasis.opendocument.presentation-template": "otp",
  7795. "vnd.oasis.opendocument.spreadsheet": "ods",
  7796. "vnd.oasis.opendocument.spreadsheet-template": "ots",
  7797. "vnd.oasis.opendocument.text": "odt",
  7798. "vnd.oasis.opendocument.text-master": "odm",
  7799. "vnd.oasis.opendocument.text-template": "ott",
  7800. "vnd.oasis.opendocument.text-web": "oth",
  7801. "vnd.openxmlformats-officedocument.spreadsheetml.sheet": "xlsx",
  7802. "vnd.openxmlformats-officedocument.spreadsheetml.template": "xltx",
  7803. "vnd.openxmlformats-officedocument.presentationml.presentation": "pptx",
  7804. "vnd.openxmlformats-officedocument.presentationml.slideshow": "ppsx",
  7805. "vnd.openxmlformats-officedocument.presentationml.template": "potx",
  7806. "vnd.openxmlformats-officedocument.wordprocessingml.document": "docx",
  7807. "vnd.openxmlformats-officedocument.wordprocessingml.template": "dotx",
  7808. "vnd.smaf": "mmf",
  7809. "vnd.stardivision.calc": "sdc",
  7810. "vnd.stardivision.chart": "sds",
  7811. "vnd.stardivision.draw": "sda",
  7812. "vnd.stardivision.impress": "sdd",
  7813. "vnd.stardivision.math": ["sdf", "smf"],
  7814. "vnd.stardivision.writer": ["sdw", "vor"],
  7815. "vnd.stardivision.writer-global": "sgl",
  7816. "vnd.sun.xml.calc": "sxc",
  7817. "vnd.sun.xml.calc.template": "stc",
  7818. "vnd.sun.xml.draw": "sxd",
  7819. "vnd.sun.xml.draw.template": "std",
  7820. "vnd.sun.xml.impress": "sxi",
  7821. "vnd.sun.xml.impress.template": "sti",
  7822. "vnd.sun.xml.math": "sxm",
  7823. "vnd.sun.xml.writer": "sxw",
  7824. "vnd.sun.xml.writer.global": "sxg",
  7825. "vnd.sun.xml.writer.template": "stw",
  7826. "vnd.symbian.install": ["sis", "sisx"],
  7827. "vnd.visio": ["vsd", "vst", "vss", "vsw"],
  7828. "vnd.wap.wbxml": "wbxml",
  7829. "vnd.wap.wmlc": "wmlc",
  7830. "vnd.wap.wmlscriptc": "wmlsc",
  7831. "vnd.wordperfect": "wpd",
  7832. "vnd.wordperfect5.1": "wp5",
  7833. "x-123": "wk",
  7834. "x-7z-compressed": "7z",
  7835. "x-abiword": "abw",
  7836. "x-apple-diskimage": "dmg",
  7837. "x-bcpio": "bcpio",
  7838. "x-bittorrent": "torrent",
  7839. "x-cbr": ["cbr", "cba", "cbt", "cb7"],
  7840. "x-cbz": "cbz",
  7841. "x-cdf": ["cdf", "cda"],
  7842. "x-cdlink": "vcd",
  7843. "x-chess-pgn": "pgn",
  7844. "x-cpio": "cpio",
  7845. "x-csh": "csh",
  7846. "x-debian-package": ["deb", "udeb"],
  7847. "x-director": ["dcr", "dir", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"],
  7848. "x-dms": "dms",
  7849. "x-doom": "wad",
  7850. "x-dvi": "dvi",
  7851. "x-httpd-eruby": "rhtml",
  7852. "x-font": "pcf.Z",
  7853. "x-freemind": "mm",
  7854. "x-gnumeric": "gnumeric",
  7855. "x-go-sgf": "sgf",
  7856. "x-graphing-calculator": "gcf",
  7857. "x-gtar": ["gtar", "taz"],
  7858. "x-hdf": "hdf",
  7859. "x-httpd-php": ["phtml", "pht", "php"],
  7860. "x-httpd-php-source": "phps",
  7861. "x-httpd-php3": "php3",
  7862. "x-httpd-php3-preprocessed": "php3p",
  7863. "x-httpd-php4": "php4",
  7864. "x-httpd-php5": "php5",
  7865. "x-ica": "ica",
  7866. "x-info": "info",
  7867. "x-internet-signup": ["ins", "isp"],
  7868. "x-iphone": "iii",
  7869. "x-iso9660-image": "iso",
  7870. "x-java-jnlp-file": "jnlp",
  7871. "x-jmol": "jmz",
  7872. "x-killustrator": "kil",
  7873. "x-koan": ["skp", "skd", "skt", "skm"],
  7874. "x-kpresenter": ["kpr", "kpt"],
  7875. "x-kword": ["kwd", "kwt"],
  7876. "x-latex": "latex",
  7877. "x-lha": "lha",
  7878. "x-lyx": "lyx",
  7879. "x-lzh": "lzh",
  7880. "x-lzx": "lzx",
  7881. "x-maker": ["frm", "maker", "frame", "fm", "fb", "book", "fbdoc"],
  7882. "x-ms-wmd": "wmd",
  7883. "x-ms-wmz": "wmz",
  7884. "x-msdos-program": ["com", "exe", "bat", "dll"],
  7885. "x-msi": "msi",
  7886. "x-netcdf": ["nc", "cdf"],
  7887. "x-ns-proxy-autoconfig": ["pac", "dat"],
  7888. "x-nwc": "nwc",
  7889. "x-object": "o",
  7890. "x-oz-application": "oza",
  7891. "x-pkcs7-certreqresp": "p7r",
  7892. "x-python-code": ["pyc", "pyo"],
  7893. "x-qgis": ["qgs", "shp", "shx"],
  7894. "x-quicktimeplayer": "qtl",
  7895. "x-redhat-package-manager": "rpm",
  7896. "x-ruby": "rb",
  7897. "x-sh": "sh",
  7898. "x-shar": "shar",
  7899. "x-shockwave-flash": ["swf", "swfl"],
  7900. "x-silverlight": "scr",
  7901. "x-stuffit": "sit",
  7902. "x-sv4cpio": "sv4cpio",
  7903. "x-sv4crc": "sv4crc",
  7904. "x-tar": "tar",
  7905. "x-tcl": "tcl",
  7906. "x-tex-gf": "gf",
  7907. "x-tex-pk": "pk",
  7908. "x-texinfo": ["texinfo", "texi"],
  7909. "x-trash": ["~", "%", "bak", "old", "sik"],
  7910. "x-troff": ["t", "tr", "roff"],
  7911. "x-troff-man": "man",
  7912. "x-troff-me": "me",
  7913. "x-troff-ms": "ms",
  7914. "x-ustar": "ustar",
  7915. "x-wais-source": "src",
  7916. "x-wingz": "wz",
  7917. "x-x509-ca-cert": ["crt", "der", "cer"],
  7918. "x-xcf": "xcf",
  7919. "x-xfig": "fig",
  7920. "x-xpinstall": "xpi",
  7921. "applixware": "aw",
  7922. "atomsvc+xml": "atomsvc",
  7923. "ccxml+xml": "ccxml",
  7924. "cdmi-capability": "cdmia",
  7925. "cdmi-container": "cdmic",
  7926. "cdmi-domain": "cdmid",
  7927. "cdmi-object": "cdmio",
  7928. "cdmi-queue": "cdmiq",
  7929. "docbook+xml": "dbk",
  7930. "dssc+der": "dssc",
  7931. "dssc+xml": "xdssc",
  7932. "emma+xml": "emma",
  7933. "epub+zip": "epub",
  7934. "exi": "exi",
  7935. "font-tdpfr": "pfr",
  7936. "gml+xml": "gml",
  7937. "gpx+xml": "gpx",
  7938. "gxf": "gxf",
  7939. "hyperstudio": "stk",
  7940. "inkml+xml": ["ink", "inkml"],
  7941. "ipfix": "ipfix",
  7942. "json": "json",
  7943. "jsonml+json": "jsonml",
  7944. "lost+xml": "lostxml",
  7945. "mads+xml": "mads",
  7946. "marc": "mrc",
  7947. "marcxml+xml": "mrcx",
  7948. "mathml+xml": "mathml",
  7949. "mbox": "mbox",
  7950. "mediaservercontrol+xml": "mscml",
  7951. "metalink+xml": "metalink",
  7952. "metalink4+xml": "meta4",
  7953. "mets+xml": "mets",
  7954. "mods+xml": "mods",
  7955. "mp21": ["m21", "mp21"],
  7956. "mp4": "mp4s",
  7957. "oebps-package+xml": "opf",
  7958. "omdoc+xml": "omdoc",
  7959. "onenote": ["onetoc", "onetoc2", "onetmp", "onepkg"],
  7960. "oxps": "oxps",
  7961. "patch-ops-error+xml": "xer",
  7962. "pgp-encrypted": "pgp",
  7963. "pkcs10": "p10",
  7964. "pkcs7-mime": ["p7m", "p7c"],
  7965. "pkcs7-signature": "p7s",
  7966. "pkcs8": "p8",
  7967. "pkix-attr-cert": "ac",
  7968. "pkix-crl": "crl",
  7969. "pkix-pkipath": "pkipath",
  7970. "pkixcmp": "pki",
  7971. "pls+xml": "pls",
  7972. "prs.cww": "cww",
  7973. "pskc+xml": "pskcxml",
  7974. "reginfo+xml": "rif",
  7975. "relax-ng-compact-syntax": "rnc",
  7976. "resource-lists+xml": "rl",
  7977. "resource-lists-diff+xml": "rld",
  7978. "rls-services+xml": "rs",
  7979. "rpki-ghostbusters": "gbr",
  7980. "rpki-manifest": "mft",
  7981. "rpki-roa": "roa",
  7982. "rsd+xml": "rsd",
  7983. "sbml+xml": "sbml",
  7984. "scvp-cv-request": "scq",
  7985. "scvp-cv-response": "scs",
  7986. "scvp-vp-request": "spq",
  7987. "scvp-vp-response": "spp",
  7988. "sdp": "sdp",
  7989. "set-payment-initiation": "setpay",
  7990. "set-registration-initiation": "setreg",
  7991. "shf+xml": "shf",
  7992. "sparql-query": "rq",
  7993. "sparql-results+xml": "srx",
  7994. "srgs": "gram",
  7995. "srgs+xml": "grxml",
  7996. "sru+xml": "sru",
  7997. "ssdl+xml": "ssdl",
  7998. "ssml+xml": "ssml",
  7999. "tei+xml": ["tei", "teicorpus"],
  8000. "thraud+xml": "tfi",
  8001. "timestamped-data": "tsd",
  8002. "vnd.3gpp.pic-bw-large": "plb",
  8003. "vnd.3gpp.pic-bw-small": "psb",
  8004. "vnd.3gpp.pic-bw-var": "pvb",
  8005. "vnd.3gpp2.tcap": "tcap",
  8006. "vnd.3m.post-it-notes": "pwn",
  8007. "vnd.accpac.simply.aso": "aso",
  8008. "vnd.accpac.simply.imp": "imp",
  8009. "vnd.acucobol": "acu",
  8010. "vnd.acucorp": ["atc", "acutc"],
  8011. "vnd.adobe.air-application-installer-package+zip": "air",
  8012. "vnd.adobe.formscentral.fcdt": "fcdt",
  8013. "vnd.adobe.fxp": ["fxp", "fxpl"],
  8014. "vnd.adobe.xdp+xml": "xdp",
  8015. "vnd.adobe.xfdf": "xfdf",
  8016. "vnd.ahead.space": "ahead",
  8017. "vnd.airzip.filesecure.azf": "azf",
  8018. "vnd.airzip.filesecure.azs": "azs",
  8019. "vnd.amazon.ebook": "azw",
  8020. "vnd.americandynamics.acc": "acc",
  8021. "vnd.amiga.ami": "ami",
  8022. "vnd.anser-web-certificate-issue-initiation": "cii",
  8023. "vnd.anser-web-funds-transfer-initiation": "fti",
  8024. "vnd.antix.game-component": "atx",
  8025. "vnd.apple.installer+xml": "mpkg",
  8026. "vnd.apple.mpegurl": "m3u8",
  8027. "vnd.aristanetworks.swi": "swi",
  8028. "vnd.astraea-software.iota": "iota",
  8029. "vnd.audiograph": "aep",
  8030. "vnd.blueice.multipass": "mpm",
  8031. "vnd.bmi": "bmi",
  8032. "vnd.businessobjects": "rep",
  8033. "vnd.chemdraw+xml": "cdxml",
  8034. "vnd.chipnuts.karaoke-mmd": "mmd",
  8035. "vnd.claymore": "cla",
  8036. "vnd.cloanto.rp9": "rp9",
  8037. "vnd.clonk.c4group": ["c4g", "c4d", "c4f", "c4p", "c4u"],
  8038. "vnd.cluetrust.cartomobile-config": "c11amc",
  8039. "vnd.cluetrust.cartomobile-config-pkg": "c11amz",
  8040. "vnd.commonspace": "csp",
  8041. "vnd.contact.cmsg": "cdbcmsg",
  8042. "vnd.cosmocaller": "cmc",
  8043. "vnd.crick.clicker": "clkx",
  8044. "vnd.crick.clicker.keyboard": "clkk",
  8045. "vnd.crick.clicker.palette": "clkp",
  8046. "vnd.crick.clicker.template": "clkt",
  8047. "vnd.crick.clicker.wordbank": "clkw",
  8048. "vnd.criticaltools.wbs+xml": "wbs",
  8049. "vnd.ctc-posml": "pml",
  8050. "vnd.cups-ppd": "ppd",
  8051. "vnd.curl.car": "car",
  8052. "vnd.curl.pcurl": "pcurl",
  8053. "vnd.dart": "dart",
  8054. "vnd.data-vision.rdz": "rdz",
  8055. "vnd.dece.data": ["uvf", "uvvf", "uvd", "uvvd"],
  8056. "vnd.dece.ttml+xml": ["uvt", "uvvt"],
  8057. "vnd.dece.unspecified": ["uvx", "uvvx"],
  8058. "vnd.dece.zip": ["uvz", "uvvz"],
  8059. "vnd.denovo.fcselayout-link": "fe_launch",
  8060. "vnd.dna": "dna",
  8061. "vnd.dolby.mlp": "mlp",
  8062. "vnd.dpgraph": "dpg",
  8063. "vnd.dreamfactory": "dfac",
  8064. "vnd.ds-keypoint": "kpxx",
  8065. "vnd.dvb.ait": "ait",
  8066. "vnd.dvb.service": "svc",
  8067. "vnd.dynageo": "geo",
  8068. "vnd.ecowin.chart": "mag",
  8069. "vnd.enliven": "nml",
  8070. "vnd.epson.esf": "esf",
  8071. "vnd.epson.msf": "msf",
  8072. "vnd.epson.quickanime": "qam",
  8073. "vnd.epson.salt": "slt",
  8074. "vnd.epson.ssf": "ssf",
  8075. "vnd.eszigno3+xml": ["es3", "et3"],
  8076. "vnd.ezpix-album": "ez2",
  8077. "vnd.ezpix-package": "ez3",
  8078. "vnd.fdf": "fdf",
  8079. "vnd.fdsn.mseed": "mseed",
  8080. "vnd.fdsn.seed": ["seed", "dataless"],
  8081. "vnd.flographit": "gph",
  8082. "vnd.fluxtime.clip": "ftc",
  8083. "vnd.framemaker": ["fm", "frame", "maker", "book"],
  8084. "vnd.frogans.fnc": "fnc",
  8085. "vnd.frogans.ltf": "ltf",
  8086. "vnd.fsc.weblaunch": "fsc",
  8087. "vnd.fujitsu.oasys": "oas",
  8088. "vnd.fujitsu.oasys2": "oa2",
  8089. "vnd.fujitsu.oasys3": "oa3",
  8090. "vnd.fujitsu.oasysgp": "fg5",
  8091. "vnd.fujitsu.oasysprs": "bh2",
  8092. "vnd.fujixerox.ddd": "ddd",
  8093. "vnd.fujixerox.docuworks": "xdw",
  8094. "vnd.fujixerox.docuworks.binder": "xbd",
  8095. "vnd.fuzzysheet": "fzs",
  8096. "vnd.genomatix.tuxedo": "txd",
  8097. "vnd.geogebra.file": "ggb",
  8098. "vnd.geogebra.tool": "ggt",
  8099. "vnd.geometry-explorer": ["gex", "gre"],
  8100. "vnd.geonext": "gxt",
  8101. "vnd.geoplan": "g2w",
  8102. "vnd.geospace": "g3w",
  8103. "vnd.gmx": "gmx",
  8104. "vnd.grafeq": ["gqf", "gqs"],
  8105. "vnd.groove-account": "gac",
  8106. "vnd.groove-help": "ghf",
  8107. "vnd.groove-identity-message": "gim",
  8108. "vnd.groove-injector": "grv",
  8109. "vnd.groove-tool-message": "gtm",
  8110. "vnd.groove-tool-template": "tpl",
  8111. "vnd.groove-vcard": "vcg",
  8112. "vnd.hal+xml": "hal",
  8113. "vnd.handheld-entertainment+xml": "zmm",
  8114. "vnd.hbci": "hbci",
  8115. "vnd.hhe.lesson-player": "les",
  8116. "vnd.hp-hpgl": "hpgl",
  8117. "vnd.hp-hpid": "hpid",
  8118. "vnd.hp-hps": "hps",
  8119. "vnd.hp-jlyt": "jlt",
  8120. "vnd.hp-pcl": "pcl",
  8121. "vnd.hp-pclxl": "pclxl",
  8122. "vnd.hydrostatix.sof-data": "sfd-hdstx",
  8123. "vnd.ibm.minipay": "mpy",
  8124. "vnd.ibm.modcap": ["afp", "listafp", "list3820"],
  8125. "vnd.ibm.rights-management": "irm",
  8126. "vnd.ibm.secure-container": "sc",
  8127. "vnd.iccprofile": ["icc", "icm"],
  8128. "vnd.igloader": "igl",
  8129. "vnd.immervision-ivp": "ivp",
  8130. "vnd.immervision-ivu": "ivu",
  8131. "vnd.insors.igm": "igm",
  8132. "vnd.intercon.formnet": ["xpw", "xpx"],
  8133. "vnd.intergeo": "i2g",
  8134. "vnd.intu.qbo": "qbo",
  8135. "vnd.intu.qfx": "qfx",
  8136. "vnd.ipunplugged.rcprofile": "rcprofile",
  8137. "vnd.irepository.package+xml": "irp",
  8138. "vnd.is-xpr": "xpr",
  8139. "vnd.isac.fcs": "fcs",
  8140. "vnd.jam": "jam",
  8141. "vnd.jcp.javame.midlet-rms": "rms",
  8142. "vnd.jisp": "jisp",
  8143. "vnd.joost.joda-archive": "joda",
  8144. "vnd.kahootz": ["ktz", "ktr"],
  8145. "vnd.kde.karbon": "karbon",
  8146. "vnd.kde.kchart": "chrt",
  8147. "vnd.kde.kformula": "kfo",
  8148. "vnd.kde.kivio": "flw",
  8149. "vnd.kde.kontour": "kon",
  8150. "vnd.kde.kpresenter": ["kpr", "kpt"],
  8151. "vnd.kde.kspread": "ksp",
  8152. "vnd.kde.kword": ["kwd", "kwt"],
  8153. "vnd.kenameaapp": "htke",
  8154. "vnd.kidspiration": "kia",
  8155. "vnd.kinar": ["kne", "knp"],
  8156. "vnd.koan": ["skp", "skd", "skt", "skm"],
  8157. "vnd.kodak-descriptor": "sse",
  8158. "vnd.las.las+xml": "lasxml",
  8159. "vnd.llamagraphics.life-balance.desktop": "lbd",
  8160. "vnd.llamagraphics.life-balance.exchange+xml": "lbe",
  8161. "vnd.lotus-1-2-3": "123",
  8162. "vnd.lotus-approach": "apr",
  8163. "vnd.lotus-freelance": "pre",
  8164. "vnd.lotus-notes": "nsf",
  8165. "vnd.lotus-organizer": "org",
  8166. "vnd.lotus-screencam": "scm",
  8167. "vnd.lotus-wordpro": "lwp",
  8168. "vnd.macports.portpkg": "portpkg",
  8169. "vnd.mcd": "mcd",
  8170. "vnd.medcalcdata": "mc1",
  8171. "vnd.mediastation.cdkey": "cdkey",
  8172. "vnd.mfer": "mwf",
  8173. "vnd.mfmp": "mfm",
  8174. "vnd.micrografx.flo": "flo",
  8175. "vnd.micrografx.igx": "igx",
  8176. "vnd.mif": "mif",
  8177. "vnd.mobius.daf": "daf",
  8178. "vnd.mobius.dis": "dis",
  8179. "vnd.mobius.mbk": "mbk",
  8180. "vnd.mobius.mqy": "mqy",
  8181. "vnd.mobius.msl": "msl",
  8182. "vnd.mobius.plc": "plc",
  8183. "vnd.mobius.txf": "txf",
  8184. "vnd.mophun.application": "mpn",
  8185. "vnd.mophun.certificate": "mpc",
  8186. "vnd.ms-artgalry": "cil",
  8187. "vnd.ms-cab-compressed": "cab",
  8188. "vnd.ms-excel.addin.macroenabled.12": "xlam",
  8189. "vnd.ms-excel.sheet.binary.macroenabled.12": "xlsb",
  8190. "vnd.ms-excel.sheet.macroenabled.12": "xlsm",
  8191. "vnd.ms-excel.template.macroenabled.12": "xltm",
  8192. "vnd.ms-fontobject": "eot",
  8193. "vnd.ms-htmlhelp": "chm",
  8194. "vnd.ms-ims": "ims",
  8195. "vnd.ms-lrm": "lrm",
  8196. "vnd.ms-officetheme": "thmx",
  8197. "vnd.ms-powerpoint.addin.macroenabled.12": "ppam",
  8198. "vnd.ms-powerpoint.presentation.macroenabled.12": "pptm",
  8199. "vnd.ms-powerpoint.slide.macroenabled.12": "sldm",
  8200. "vnd.ms-powerpoint.slideshow.macroenabled.12": "ppsm",
  8201. "vnd.ms-powerpoint.template.macroenabled.12": "potm",
  8202. "vnd.ms-project": ["mpp", "mpt"],
  8203. "vnd.ms-word.document.macroenabled.12": "docm",
  8204. "vnd.ms-word.template.macroenabled.12": "dotm",
  8205. "vnd.ms-works": ["wps", "wks", "wcm", "wdb"],
  8206. "vnd.ms-wpl": "wpl",
  8207. "vnd.ms-xpsdocument": "xps",
  8208. "vnd.mseq": "mseq",
  8209. "vnd.musician": "mus",
  8210. "vnd.muvee.style": "msty",
  8211. "vnd.mynfc": "taglet",
  8212. "vnd.neurolanguage.nlu": "nlu",
  8213. "vnd.nitf": ["ntf", "nitf"],
  8214. "vnd.noblenet-directory": "nnd",
  8215. "vnd.noblenet-sealer": "nns",
  8216. "vnd.noblenet-web": "nnw",
  8217. "vnd.nokia.n-gage.data": "ngdat",
  8218. "vnd.nokia.n-gage.symbian.install": "n-gage",
  8219. "vnd.nokia.radio-preset": "rpst",
  8220. "vnd.nokia.radio-presets": "rpss",
  8221. "vnd.novadigm.edm": "edm",
  8222. "vnd.novadigm.edx": "edx",
  8223. "vnd.novadigm.ext": "ext",
  8224. "vnd.oasis.opendocument.chart-template": "otc",
  8225. "vnd.oasis.opendocument.formula-template": "odft",
  8226. "vnd.oasis.opendocument.image-template": "oti",
  8227. "vnd.olpc-sugar": "xo",
  8228. "vnd.oma.dd2+xml": "dd2",
  8229. "vnd.openofficeorg.extension": "oxt",
  8230. "vnd.openxmlformats-officedocument.presentationml.slide": "sldx",
  8231. "vnd.osgeo.mapguide.package": "mgp",
  8232. "vnd.osgi.dp": "dp",
  8233. "vnd.osgi.subsystem": "esa",
  8234. "vnd.palm": ["pdb", "pqa", "oprc"],
  8235. "vnd.pawaafile": "paw",
  8236. "vnd.pg.format": "str",
  8237. "vnd.pg.osasli": "ei6",
  8238. "vnd.picsel": "efif",
  8239. "vnd.pmi.widget": "wg",
  8240. "vnd.pocketlearn": "plf",
  8241. "vnd.powerbuilder6": "pbd",
  8242. "vnd.previewsystems.box": "box",
  8243. "vnd.proteus.magazine": "mgz",
  8244. "vnd.publishare-delta-tree": "qps",
  8245. "vnd.pvi.ptid1": "ptid",
  8246. "vnd.quark.quarkxpress": ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"],
  8247. "vnd.realvnc.bed": "bed",
  8248. "vnd.recordare.musicxml": "mxl",
  8249. "vnd.recordare.musicxml+xml": "musicxml",
  8250. "vnd.rig.cryptonote": "cryptonote",
  8251. "vnd.rn-realmedia": "rm",
  8252. "vnd.rn-realmedia-vbr": "rmvb",
  8253. "vnd.route66.link66+xml": "link66",
  8254. "vnd.sailingtracker.track": "st",
  8255. "vnd.seemail": "see",
  8256. "vnd.sema": "sema",
  8257. "vnd.semd": "semd",
  8258. "vnd.semf": "semf",
  8259. "vnd.shana.informed.formdata": "ifm",
  8260. "vnd.shana.informed.formtemplate": "itp",
  8261. "vnd.shana.informed.interchange": "iif",
  8262. "vnd.shana.informed.package": "ipk",
  8263. "vnd.simtech-mindmapper": ["twd", "twds"],
  8264. "vnd.smart.teacher": "teacher",
  8265. "vnd.solent.sdkm+xml": ["sdkm", "sdkd"],
  8266. "vnd.spotfire.dxp": "dxp",
  8267. "vnd.spotfire.sfs": "sfs",
  8268. "vnd.stepmania.package": "smzip",
  8269. "vnd.stepmania.stepchart": "sm",
  8270. "vnd.sus-calendar": ["sus", "susp"],
  8271. "vnd.svd": "svd",
  8272. "vnd.syncml+xml": "xsm",
  8273. "vnd.syncml.dm+wbxml": "bdm",
  8274. "vnd.syncml.dm+xml": "xdm",
  8275. "vnd.tao.intent-module-archive": "tao",
  8276. "vnd.tcpdump.pcap": ["pcap", "cap", "dmp"],
  8277. "vnd.tmobile-livetv": "tmo",
  8278. "vnd.trid.tpt": "tpt",
  8279. "vnd.triscape.mxs": "mxs",
  8280. "vnd.trueapp": "tra",
  8281. "vnd.ufdl": ["ufd", "ufdl"],
  8282. "vnd.uiq.theme": "utz",
  8283. "vnd.umajin": "umj",
  8284. "vnd.unity": "unityweb",
  8285. "vnd.uoml+xml": "uoml",
  8286. "vnd.vcx": "vcx",
  8287. "vnd.visionary": "vis",
  8288. "vnd.vsf": "vsf",
  8289. "vnd.webturbo": "wtb",
  8290. "vnd.wolfram.player": "nbp",
  8291. "vnd.wqd": "wqd",
  8292. "vnd.wt.stf": "stf",
  8293. "vnd.xara": "xar",
  8294. "vnd.xfdl": "xfdl",
  8295. "vnd.yamaha.hv-dic": "hvd",
  8296. "vnd.yamaha.hv-script": "hvs",
  8297. "vnd.yamaha.hv-voice": "hvp",
  8298. "vnd.yamaha.openscoreformat": "osf",
  8299. "vnd.yamaha.openscoreformat.osfpvg+xml": "osfpvg",
  8300. "vnd.yamaha.smaf-audio": "saf",
  8301. "vnd.yamaha.smaf-phrase": "spf",
  8302. "vnd.yellowriver-custom-menu": "cmp",
  8303. "vnd.zul": ["zir", "zirz"],
  8304. "vnd.zzazz.deck+xml": "zaz",
  8305. "voicexml+xml": "vxml",
  8306. "widget": "wgt",
  8307. "winhlp": "hlp",
  8308. "wsdl+xml": "wsdl",
  8309. "wspolicy+xml": "wspolicy",
  8310. "x-ace-compressed": "ace",
  8311. "x-authorware-bin": ["aab", "x32", "u32", "vox"],
  8312. "x-authorware-map": "aam",
  8313. "x-authorware-seg": "aas",
  8314. "x-blorb": ["blb", "blorb"],
  8315. "x-bzip": "bz",
  8316. "x-bzip2": ["bz2", "boz"],
  8317. "x-cfs-compressed": "cfs",
  8318. "x-chat": "chat",
  8319. "x-conference": "nsc",
  8320. "x-dgc-compressed": "dgc",
  8321. "x-dtbncx+xml": "ncx",
  8322. "x-dtbook+xml": "dtb",
  8323. "x-dtbresource+xml": "res",
  8324. "x-eva": "eva",
  8325. "x-font-bdf": "bdf",
  8326. "x-font-ghostscript": "gsf",
  8327. "x-font-linux-psf": "psf",
  8328. "x-font-otf": "otf",
  8329. "x-font-pcf": "pcf",
  8330. "x-font-snf": "snf",
  8331. "x-font-ttf": ["ttf", "ttc"],
  8332. "x-font-type1": ["pfa", "pfb", "pfm", "afm"],
  8333. "x-font-woff": "woff",
  8334. "x-freearc": "arc",
  8335. "x-gca-compressed": "gca",
  8336. "x-glulx": "ulx",
  8337. "x-gramps-xml": "gramps",
  8338. "x-install-instructions": "install",
  8339. "x-lzh-compressed": ["lzh", "lha"],
  8340. "x-mie": "mie",
  8341. "x-mobipocket-ebook": ["prc", "mobi"],
  8342. "x-ms-application": "application",
  8343. "x-ms-shortcut": "lnk",
  8344. "x-ms-xbap": "xbap",
  8345. "x-msbinder": "obd",
  8346. "x-mscardfile": "crd",
  8347. "x-msclip": "clp",
  8348. "x-msdownload": ["exe", "dll", "com", "bat", "msi"],
  8349. "x-msmediaview": ["mvb", "m13", "m14"],
  8350. "x-msmetafile": ["wmf", "wmz", "emf", "emz"],
  8351. "x-msmoney": "mny",
  8352. "x-mspublisher": "pub",
  8353. "x-msschedule": "scd",
  8354. "x-msterminal": "trm",
  8355. "x-mswrite": "wri",
  8356. "x-nzb": "nzb",
  8357. "x-pkcs12": ["p12", "pfx"],
  8358. "x-pkcs7-certificates": ["p7b", "spc"],
  8359. "x-research-info-systems": "ris",
  8360. "x-silverlight-app": "xap",
  8361. "x-sql": "sql",
  8362. "x-stuffitx": "sitx",
  8363. "x-subrip": "srt",
  8364. "x-t3vm-image": "t3",
  8365. "x-tads": "gam",
  8366. "x-tex": "tex",
  8367. "x-tex-tfm": "tfm",
  8368. "x-tgif": "obj",
  8369. "x-xliff+xml": "xlf",
  8370. "x-xz": "xz",
  8371. "x-zmachine": ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"],
  8372. "xaml+xml": "xaml",
  8373. "xcap-diff+xml": "xdf",
  8374. "xenc+xml": "xenc",
  8375. "xml-dtd": "dtd",
  8376. "xop+xml": "xop",
  8377. "xproc+xml": "xpl",
  8378. "xslt+xml": "xslt",
  8379. "xv+xml": ["mxml", "xhvml", "xvml", "xvm"],
  8380. "yang": "yang",
  8381. "yin+xml": "yin",
  8382. "envoy": "evy",
  8383. "fractals": "fif",
  8384. "internet-property-stream": "acx",
  8385. "olescript": "axs",
  8386. "vnd.ms-outlook": "msg",
  8387. "vnd.ms-pkicertstore": "sst",
  8388. "x-compress": "z",
  8389. "x-compressed": "tgz",
  8390. "x-gzip": "gz",
  8391. "x-perfmon": ["pma", "pmc", "pml", "pmr", "pmw"],
  8392. "x-pkcs7-mime": ["p7c", "p7m"],
  8393. "ynd.ms-pkipko": "pko"
  8394. },
  8395. "audio": {
  8396. "amr": "amr",
  8397. "amr-wb": "awb",
  8398. "annodex": "axa",
  8399. "basic": ["au", "snd"],
  8400. "flac": "flac",
  8401. "midi": ["mid", "midi", "kar", "rmi"],
  8402. "mpeg": ["mpga", "mpega", "mp2", "mp3", "m4a", "mp2a", "m2a", "m3a"],
  8403. "mpegurl": "m3u",
  8404. "ogg": ["oga", "ogg", "spx"],
  8405. "prs.sid": "sid",
  8406. "x-aiff": ["aif", "aiff", "aifc"],
  8407. "x-gsm": "gsm",
  8408. "x-ms-wma": "wma",
  8409. "x-ms-wax": "wax",
  8410. "x-pn-realaudio": "ram",
  8411. "x-realaudio": "ra",
  8412. "x-sd2": "sd2",
  8413. "x-wav": "wav",
  8414. "adpcm": "adp",
  8415. "mp4": "mp4a",
  8416. "s3m": "s3m",
  8417. "silk": "sil",
  8418. "vnd.dece.audio": ["uva", "uvva"],
  8419. "vnd.digital-winds": "eol",
  8420. "vnd.dra": "dra",
  8421. "vnd.dts": "dts",
  8422. "vnd.dts.hd": "dtshd",
  8423. "vnd.lucent.voice": "lvp",
  8424. "vnd.ms-playready.media.pya": "pya",
  8425. "vnd.nuera.ecelp4800": "ecelp4800",
  8426. "vnd.nuera.ecelp7470": "ecelp7470",
  8427. "vnd.nuera.ecelp9600": "ecelp9600",
  8428. "vnd.rip": "rip",
  8429. "webm": "weba",
  8430. "x-aac": "aac",
  8431. "x-caf": "caf",
  8432. "x-matroska": "mka",
  8433. "x-pn-realaudio-plugin": "rmp",
  8434. "xm": "xm",
  8435. "mid": ["mid", "rmi"]
  8436. },
  8437. "chemical": {
  8438. "x-alchemy": "alc",
  8439. "x-cache": ["cac", "cache"],
  8440. "x-cache-csf": "csf",
  8441. "x-cactvs-binary": ["cbin", "cascii", "ctab"],
  8442. "x-cdx": "cdx",
  8443. "x-chem3d": "c3d",
  8444. "x-cif": "cif",
  8445. "x-cmdf": "cmdf",
  8446. "x-cml": "cml",
  8447. "x-compass": "cpa",
  8448. "x-crossfire": "bsd",
  8449. "x-csml": ["csml", "csm"],
  8450. "x-ctx": "ctx",
  8451. "x-cxf": ["cxf", "cef"],
  8452. "x-embl-dl-nucleotide": ["emb", "embl"],
  8453. "x-gamess-input": ["inp", "gam", "gamin"],
  8454. "x-gaussian-checkpoint": ["fch", "fchk"],
  8455. "x-gaussian-cube": "cub",
  8456. "x-gaussian-input": ["gau", "gjc", "gjf"],
  8457. "x-gaussian-log": "gal",
  8458. "x-gcg8-sequence": "gcg",
  8459. "x-genbank": "gen",
  8460. "x-hin": "hin",
  8461. "x-isostar": ["istr", "ist"],
  8462. "x-jcamp-dx": ["jdx", "dx"],
  8463. "x-kinemage": "kin",
  8464. "x-macmolecule": "mcm",
  8465. "x-macromodel-input": ["mmd", "mmod"],
  8466. "x-mdl-molfile": "mol",
  8467. "x-mdl-rdfile": "rd",
  8468. "x-mdl-rxnfile": "rxn",
  8469. "x-mdl-sdfile": ["sd", "sdf"],
  8470. "x-mdl-tgf": "tgf",
  8471. "x-mmcif": "mcif",
  8472. "x-mol2": "mol2",
  8473. "x-molconn-Z": "b",
  8474. "x-mopac-graph": "gpt",
  8475. "x-mopac-input": ["mop", "mopcrt", "mpc", "zmt"],
  8476. "x-mopac-out": "moo",
  8477. "x-ncbi-asn1": "asn",
  8478. "x-ncbi-asn1-ascii": ["prt", "ent"],
  8479. "x-ncbi-asn1-binary": ["val", "aso"],
  8480. "x-pdb": ["pdb", "ent"],
  8481. "x-rosdal": "ros",
  8482. "x-swissprot": "sw",
  8483. "x-vamas-iso14976": "vms",
  8484. "x-vmd": "vmd",
  8485. "x-xtel": "xtel",
  8486. "x-xyz": "xyz"
  8487. },
  8488. "image": {
  8489. "gif": "gif",
  8490. "ief": "ief",
  8491. "jpeg": ["jpeg", "jpg", "jpe"],
  8492. "pcx": "pcx",
  8493. "png": "png",
  8494. "svg+xml": ["svg", "svgz"],
  8495. "tiff": ["tiff", "tif"],
  8496. "vnd.djvu": ["djvu", "djv"],
  8497. "vnd.wap.wbmp": "wbmp",
  8498. "x-canon-cr2": "cr2",
  8499. "x-canon-crw": "crw",
  8500. "x-cmu-raster": "ras",
  8501. "x-coreldraw": "cdr",
  8502. "x-coreldrawpattern": "pat",
  8503. "x-coreldrawtemplate": "cdt",
  8504. "x-corelphotopaint": "cpt",
  8505. "x-epson-erf": "erf",
  8506. "x-icon": "ico",
  8507. "x-jg": "art",
  8508. "x-jng": "jng",
  8509. "x-nikon-nef": "nef",
  8510. "x-olympus-orf": "orf",
  8511. "x-photoshop": "psd",
  8512. "x-portable-anymap": "pnm",
  8513. "x-portable-bitmap": "pbm",
  8514. "x-portable-graymap": "pgm",
  8515. "x-portable-pixmap": "ppm",
  8516. "x-rgb": "rgb",
  8517. "x-xbitmap": "xbm",
  8518. "x-xpixmap": "xpm",
  8519. "x-xwindowdump": "xwd",
  8520. "bmp": "bmp",
  8521. "cgm": "cgm",
  8522. "g3fax": "g3",
  8523. "ktx": "ktx",
  8524. "prs.btif": "btif",
  8525. "sgi": "sgi",
  8526. "vnd.dece.graphic": ["uvi", "uvvi", "uvg", "uvvg"],
  8527. "vnd.dwg": "dwg",
  8528. "vnd.dxf": "dxf",
  8529. "vnd.fastbidsheet": "fbs",
  8530. "vnd.fpx": "fpx",
  8531. "vnd.fst": "fst",
  8532. "vnd.fujixerox.edmics-mmr": "mmr",
  8533. "vnd.fujixerox.edmics-rlc": "rlc",
  8534. "vnd.ms-modi": "mdi",
  8535. "vnd.ms-photo": "wdp",
  8536. "vnd.net-fpx": "npx",
  8537. "vnd.xiff": "xif",
  8538. "webp": "webp",
  8539. "x-3ds": "3ds",
  8540. "x-cmx": "cmx",
  8541. "x-freehand": ["fh", "fhc", "fh4", "fh5", "fh7"],
  8542. "x-pict": ["pic", "pct"],
  8543. "x-tga": "tga",
  8544. "cis-cod": "cod",
  8545. "pipeg": "jfif"
  8546. },
  8547. "message": {
  8548. "rfc822": ["eml", "mime", "mht", "mhtml", "nws"]
  8549. },
  8550. "model": {
  8551. "iges": ["igs", "iges"],
  8552. "mesh": ["msh", "mesh", "silo"],
  8553. "vrml": ["wrl", "vrml"],
  8554. "x3d+vrml": ["x3dv", "x3dvz"],
  8555. "x3d+xml": ["x3d", "x3dz"],
  8556. "x3d+binary": ["x3db", "x3dbz"],
  8557. "vnd.collada+xml": "dae",
  8558. "vnd.dwf": "dwf",
  8559. "vnd.gdl": "gdl",
  8560. "vnd.gtw": "gtw",
  8561. "vnd.mts": "mts",
  8562. "vnd.vtu": "vtu"
  8563. },
  8564. "text": {
  8565. "cache-manifest": ["manifest", "appcache"],
  8566. "calendar": ["ics", "icz", "ifb"],
  8567. "css": "css",
  8568. "csv": "csv",
  8569. "h323": "323",
  8570. "html": ["html", "htm", "shtml", "stm"],
  8571. "iuls": "uls",
  8572. "mathml": "mml",
  8573. "plain": ["txt", "text", "brf", "conf", "def", "list", "log", "in", "bas"],
  8574. "richtext": "rtx",
  8575. "scriptlet": ["sct", "wsc"],
  8576. "texmacs": ["tm", "ts"],
  8577. "tab-separated-values": "tsv",
  8578. "vnd.sun.j2me.app-descriptor": "jad",
  8579. "vnd.wap.wml": "wml",
  8580. "vnd.wap.wmlscript": "wmls",
  8581. "x-bibtex": "bib",
  8582. "x-boo": "boo",
  8583. "x-c++hdr": ["h++", "hpp", "hxx", "hh"],
  8584. "x-c++src": ["c++", "cpp", "cxx", "cc"],
  8585. "x-component": "htc",
  8586. "x-dsrc": "d",
  8587. "x-diff": ["diff", "patch"],
  8588. "x-haskell": "hs",
  8589. "x-java": "java",
  8590. "x-literate-haskell": "lhs",
  8591. "x-moc": "moc",
  8592. "x-pascal": ["p", "pas"],
  8593. "x-pcs-gcd": "gcd",
  8594. "x-perl": ["pl", "pm"],
  8595. "x-python": "py",
  8596. "x-scala": "scala",
  8597. "x-setext": "etx",
  8598. "x-tcl": ["tcl", "tk"],
  8599. "x-tex": ["tex", "ltx", "sty", "cls"],
  8600. "x-vcalendar": "vcs",
  8601. "x-vcard": "vcf",
  8602. "n3": "n3",
  8603. "prs.lines.tag": "dsc",
  8604. "sgml": ["sgml", "sgm"],
  8605. "troff": ["t", "tr", "roff", "man", "me", "ms"],
  8606. "turtle": "ttl",
  8607. "uri-list": ["uri", "uris", "urls"],
  8608. "vcard": "vcard",
  8609. "vnd.curl": "curl",
  8610. "vnd.curl.dcurl": "dcurl",
  8611. "vnd.curl.scurl": "scurl",
  8612. "vnd.curl.mcurl": "mcurl",
  8613. "vnd.dvb.subtitle": "sub",
  8614. "vnd.fly": "fly",
  8615. "vnd.fmi.flexstor": "flx",
  8616. "vnd.graphviz": "gv",
  8617. "vnd.in3d.3dml": "3dml",
  8618. "vnd.in3d.spot": "spot",
  8619. "x-asm": ["s", "asm"],
  8620. "x-c": ["c", "cc", "cxx", "cpp", "h", "hh", "dic"],
  8621. "x-fortran": ["f", "for", "f77", "f90"],
  8622. "x-opml": "opml",
  8623. "x-nfo": "nfo",
  8624. "x-sfv": "sfv",
  8625. "x-uuencode": "uu",
  8626. "webviewhtml": "htt"
  8627. },
  8628. "video": {
  8629. "avif": ".avif",
  8630. "3gpp": "3gp",
  8631. "annodex": "axv",
  8632. "dl": "dl",
  8633. "dv": ["dif", "dv"],
  8634. "fli": "fli",
  8635. "gl": "gl",
  8636. "mpeg": ["mpeg", "mpg", "mpe", "m1v", "m2v", "mp2", "mpa", "mpv2"],
  8637. "mp4": ["mp4", "mp4v", "mpg4"],
  8638. "quicktime": ["qt", "mov"],
  8639. "ogg": "ogv",
  8640. "vnd.mpegurl": ["mxu", "m4u"],
  8641. "x-flv": "flv",
  8642. "x-la-asf": ["lsf", "lsx"],
  8643. "x-mng": "mng",
  8644. "x-ms-asf": ["asf", "asx", "asr"],
  8645. "x-ms-wm": "wm",
  8646. "x-ms-wmv": "wmv",
  8647. "x-ms-wmx": "wmx",
  8648. "x-ms-wvx": "wvx",
  8649. "x-msvideo": "avi",
  8650. "x-sgi-movie": "movie",
  8651. "x-matroska": ["mpv", "mkv", "mk3d", "mks"],
  8652. "3gpp2": "3g2",
  8653. "h261": "h261",
  8654. "h263": "h263",
  8655. "h264": "h264",
  8656. "jpeg": "jpgv",
  8657. "jpm": ["jpm", "jpgm"],
  8658. "mj2": ["mj2", "mjp2"],
  8659. "vnd.dece.hd": ["uvh", "uvvh"],
  8660. "vnd.dece.mobile": ["uvm", "uvvm"],
  8661. "vnd.dece.pd": ["uvp", "uvvp"],
  8662. "vnd.dece.sd": ["uvs", "uvvs"],
  8663. "vnd.dece.video": ["uvv", "uvvv"],
  8664. "vnd.dvb.file": "dvb",
  8665. "vnd.fvt": "fvt",
  8666. "vnd.ms-playready.media.pyv": "pyv",
  8667. "vnd.uvvu.mp4": ["uvu", "uvvu"],
  8668. "vnd.vivo": "viv",
  8669. "webm": "webm",
  8670. "x-f4v": "f4v",
  8671. "x-m4v": "m4v",
  8672. "x-ms-vob": "vob",
  8673. "x-smv": "smv"
  8674. },
  8675. "x-conference": {
  8676. "x-cooltalk": "ice"
  8677. },
  8678. "x-world": {
  8679. "x-vrml": ["vrm", "vrml", "wrl", "flr", "wrz", "xaf", "xof"]
  8680. }
  8681. };
  8682. var mimeTypes = function () {
  8683. var mimeTypes = {};
  8684. for (var type in table$1) {
  8685. // eslint-disable-next-line no-prototype-builtins
  8686. if (table$1.hasOwnProperty(type)) {
  8687. for (var subtype in table$1[type]) {
  8688. // eslint-disable-next-line no-prototype-builtins
  8689. if (table$1[type].hasOwnProperty(subtype)) {
  8690. var value = table$1[type][subtype];
  8691. if (typeof value == "string") {
  8692. mimeTypes[value] = type + "/" + subtype;
  8693. } else {
  8694. for (var indexMimeType = 0; indexMimeType < value.length; indexMimeType++) {
  8695. mimeTypes[value[indexMimeType]] = type + "/" + subtype;
  8696. }
  8697. }
  8698. }
  8699. }
  8700. }
  8701. }
  8702. return mimeTypes;
  8703. }();
  8704. function getMimeType(filename) {
  8705. return filename && mimeTypes[filename.split(".").pop().toLowerCase()] || getMimeType$1();
  8706. }
  8707. var $$r = _export;
  8708. var $find = arrayIteration.find;
  8709. var addToUnscopables = addToUnscopables$3;
  8710. var FIND = 'find';
  8711. var SKIPS_HOLES = true;
  8712. // Shouldn't skip holes
  8713. if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });
  8714. // `Array.prototype.find` method
  8715. // https://tc39.es/ecma262/#sec-array.prototype.find
  8716. $$r({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {
  8717. find: function find(callbackfn /* , that = undefined */) {
  8718. return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  8719. }
  8720. });
  8721. // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
  8722. addToUnscopables(FIND);
  8723. var classof$3 = classofRaw$1;
  8724. var global$j = global$F;
  8725. var engineIsNode = classof$3(global$j.process) == 'process';
  8726. var $TypeError$2 = TypeError;
  8727. var validateArgumentsLength$3 = function (passed, required) {
  8728. if (passed < required) throw $TypeError$2('Not enough arguments');
  8729. return passed;
  8730. };
  8731. var userAgent$2 = engineUserAgent;
  8732. var engineIsIos = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent$2);
  8733. var global$i = global$F;
  8734. var apply$2 = functionApply;
  8735. var bind$7 = functionBindContext;
  8736. var isCallable$8 = isCallable$s;
  8737. var hasOwn$9 = hasOwnProperty_1;
  8738. var fails$c = fails$H;
  8739. var html = html$2;
  8740. var arraySlice$4 = arraySlice$9;
  8741. var createElement = documentCreateElement$2;
  8742. var validateArgumentsLength$2 = validateArgumentsLength$3;
  8743. var IS_IOS$1 = engineIsIos;
  8744. var IS_NODE$2 = engineIsNode;
  8745. var set = global$i.setImmediate;
  8746. var clear = global$i.clearImmediate;
  8747. var process$2 = global$i.process;
  8748. var Dispatch = global$i.Dispatch;
  8749. var Function$1 = global$i.Function;
  8750. var MessageChannel = global$i.MessageChannel;
  8751. var String$1 = global$i.String;
  8752. var counter = 0;
  8753. var queue$1 = {};
  8754. var ONREADYSTATECHANGE = 'onreadystatechange';
  8755. var location, defer, channel, port;
  8756. try {
  8757. // Deno throws a ReferenceError on `location` access without `--location` flag
  8758. location = global$i.location;
  8759. } catch (error) { /* empty */ }
  8760. var run = function (id) {
  8761. if (hasOwn$9(queue$1, id)) {
  8762. var fn = queue$1[id];
  8763. delete queue$1[id];
  8764. fn();
  8765. }
  8766. };
  8767. var runner = function (id) {
  8768. return function () {
  8769. run(id);
  8770. };
  8771. };
  8772. var listener = function (event) {
  8773. run(event.data);
  8774. };
  8775. var post = function (id) {
  8776. // old engines have not location.origin
  8777. global$i.postMessage(String$1(id), location.protocol + '//' + location.host);
  8778. };
  8779. // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
  8780. if (!set || !clear) {
  8781. set = function setImmediate(handler) {
  8782. validateArgumentsLength$2(arguments.length, 1);
  8783. var fn = isCallable$8(handler) ? handler : Function$1(handler);
  8784. var args = arraySlice$4(arguments, 1);
  8785. queue$1[++counter] = function () {
  8786. apply$2(fn, undefined, args);
  8787. };
  8788. defer(counter);
  8789. return counter;
  8790. };
  8791. clear = function clearImmediate(id) {
  8792. delete queue$1[id];
  8793. };
  8794. // Node.js 0.8-
  8795. if (IS_NODE$2) {
  8796. defer = function (id) {
  8797. process$2.nextTick(runner(id));
  8798. };
  8799. // Sphere (JS game engine) Dispatch API
  8800. } else if (Dispatch && Dispatch.now) {
  8801. defer = function (id) {
  8802. Dispatch.now(runner(id));
  8803. };
  8804. // Browsers with MessageChannel, includes WebWorkers
  8805. // except iOS - https://github.com/zloirock/core-js/issues/624
  8806. } else if (MessageChannel && !IS_IOS$1) {
  8807. channel = new MessageChannel();
  8808. port = channel.port2;
  8809. channel.port1.onmessage = listener;
  8810. defer = bind$7(port.postMessage, port);
  8811. // Browsers with postMessage, skip WebWorkers
  8812. // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
  8813. } else if (
  8814. global$i.addEventListener &&
  8815. isCallable$8(global$i.postMessage) &&
  8816. !global$i.importScripts &&
  8817. location && location.protocol !== 'file:' &&
  8818. !fails$c(post)
  8819. ) {
  8820. defer = post;
  8821. global$i.addEventListener('message', listener, false);
  8822. // IE8-
  8823. } else if (ONREADYSTATECHANGE in createElement('script')) {
  8824. defer = function (id) {
  8825. html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {
  8826. html.removeChild(this);
  8827. run(id);
  8828. };
  8829. };
  8830. // Rest old browsers
  8831. } else {
  8832. defer = function (id) {
  8833. setTimeout(runner(id), 0);
  8834. };
  8835. }
  8836. }
  8837. var task$1 = {
  8838. set: set,
  8839. clear: clear
  8840. };
  8841. var userAgent$1 = engineUserAgent;
  8842. var global$h = global$F;
  8843. var engineIsIosPebble = /ipad|iphone|ipod/i.test(userAgent$1) && global$h.Pebble !== undefined;
  8844. var userAgent = engineUserAgent;
  8845. var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(userAgent);
  8846. var global$g = global$F;
  8847. var bind$6 = functionBindContext;
  8848. var getOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor.f;
  8849. var macrotask = task$1.set;
  8850. var IS_IOS = engineIsIos;
  8851. var IS_IOS_PEBBLE = engineIsIosPebble;
  8852. var IS_WEBOS_WEBKIT = engineIsWebosWebkit;
  8853. var IS_NODE$1 = engineIsNode;
  8854. var MutationObserver = global$g.MutationObserver || global$g.WebKitMutationObserver;
  8855. var document$2 = global$g.document;
  8856. var process$1 = global$g.process;
  8857. var Promise$1 = global$g.Promise;
  8858. // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
  8859. var queueMicrotaskDescriptor = getOwnPropertyDescriptor$4(global$g, 'queueMicrotask');
  8860. var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
  8861. var flush, head, last, notify$1, toggle, node, promise, then;
  8862. // modern engines have queueMicrotask method
  8863. if (!queueMicrotask) {
  8864. flush = function () {
  8865. var parent, fn;
  8866. if (IS_NODE$1 && (parent = process$1.domain)) parent.exit();
  8867. while (head) {
  8868. fn = head.fn;
  8869. head = head.next;
  8870. try {
  8871. fn();
  8872. } catch (error) {
  8873. if (head) notify$1();
  8874. else last = undefined;
  8875. throw error;
  8876. }
  8877. } last = undefined;
  8878. if (parent) parent.enter();
  8879. };
  8880. // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
  8881. // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898
  8882. if (!IS_IOS && !IS_NODE$1 && !IS_WEBOS_WEBKIT && MutationObserver && document$2) {
  8883. toggle = true;
  8884. node = document$2.createTextNode('');
  8885. new MutationObserver(flush).observe(node, { characterData: true });
  8886. notify$1 = function () {
  8887. node.data = toggle = !toggle;
  8888. };
  8889. // environments with maybe non-completely correct, but existent Promise
  8890. } else if (!IS_IOS_PEBBLE && Promise$1 && Promise$1.resolve) {
  8891. // Promise.resolve without an argument throws an error in LG WebOS 2
  8892. promise = Promise$1.resolve(undefined);
  8893. // workaround of WebKit ~ iOS Safari 10.1 bug
  8894. promise.constructor = Promise$1;
  8895. then = bind$6(promise.then, promise);
  8896. notify$1 = function () {
  8897. then(flush);
  8898. };
  8899. // Node.js without promises
  8900. } else if (IS_NODE$1) {
  8901. notify$1 = function () {
  8902. process$1.nextTick(flush);
  8903. };
  8904. // for other environments - macrotask based on:
  8905. // - setImmediate
  8906. // - MessageChannel
  8907. // - window.postMessage
  8908. // - onreadystatechange
  8909. // - setTimeout
  8910. } else {
  8911. // strange IE + webpack dev server bug - use .bind(global)
  8912. macrotask = bind$6(macrotask, global$g);
  8913. notify$1 = function () {
  8914. macrotask(flush);
  8915. };
  8916. }
  8917. }
  8918. var microtask$1 = queueMicrotask || function (fn) {
  8919. var task = { fn: fn, next: undefined };
  8920. if (last) last.next = task;
  8921. if (!head) {
  8922. head = task;
  8923. notify$1();
  8924. } last = task;
  8925. };
  8926. var global$f = global$F;
  8927. var hostReportErrors$1 = function (a, b) {
  8928. var console = global$f.console;
  8929. if (console && console.error) {
  8930. arguments.length == 1 ? console.error(a) : console.error(a, b);
  8931. }
  8932. };
  8933. var perform$3 = function (exec) {
  8934. try {
  8935. return { error: false, value: exec() };
  8936. } catch (error) {
  8937. return { error: true, value: error };
  8938. }
  8939. };
  8940. var Queue$1 = function () {
  8941. this.head = null;
  8942. this.tail = null;
  8943. };
  8944. Queue$1.prototype = {
  8945. add: function (item) {
  8946. var entry = { item: item, next: null };
  8947. if (this.head) this.tail.next = entry;
  8948. else this.head = entry;
  8949. this.tail = entry;
  8950. },
  8951. get: function () {
  8952. var entry = this.head;
  8953. if (entry) {
  8954. this.head = entry.next;
  8955. if (this.tail === entry) this.tail = null;
  8956. return entry.item;
  8957. }
  8958. }
  8959. };
  8960. var queue = Queue$1;
  8961. var global$e = global$F;
  8962. var promiseNativeConstructor = global$e.Promise;
  8963. var engineIsBrowser = typeof window == 'object' && typeof Deno != 'object';
  8964. var global$d = global$F;
  8965. var NativePromiseConstructor$3 = promiseNativeConstructor;
  8966. var isCallable$7 = isCallable$s;
  8967. var isForced$2 = isForced_1;
  8968. var inspectSource = inspectSource$4;
  8969. var wellKnownSymbol$8 = wellKnownSymbol$t;
  8970. var IS_BROWSER = engineIsBrowser;
  8971. var V8_VERSION = engineV8Version;
  8972. NativePromiseConstructor$3 && NativePromiseConstructor$3.prototype;
  8973. var SPECIES = wellKnownSymbol$8('species');
  8974. var SUBCLASSING = false;
  8975. var NATIVE_PROMISE_REJECTION_EVENT$1 = isCallable$7(global$d.PromiseRejectionEvent);
  8976. var FORCED_PROMISE_CONSTRUCTOR$5 = isForced$2('Promise', function () {
  8977. var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor$3);
  8978. var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor$3);
  8979. // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
  8980. // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
  8981. // We can't detect it synchronously, so just check versions
  8982. if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;
  8983. // We can't use @@species feature detection in V8 since it causes
  8984. // deoptimization and performance degradation
  8985. // https://github.com/zloirock/core-js/issues/679
  8986. if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;
  8987. // Detect correctness of subclassing with @@species support
  8988. var promise = new NativePromiseConstructor$3(function (resolve) { resolve(1); });
  8989. var FakePromise = function (exec) {
  8990. exec(function () { /* empty */ }, function () { /* empty */ });
  8991. };
  8992. var constructor = promise.constructor = {};
  8993. constructor[SPECIES] = FakePromise;
  8994. SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;
  8995. if (!SUBCLASSING) return true;
  8996. // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
  8997. return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_PROMISE_REJECTION_EVENT$1;
  8998. });
  8999. var promiseConstructorDetection = {
  9000. CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR$5,
  9001. REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT$1,
  9002. SUBCLASSING: SUBCLASSING
  9003. };
  9004. var newPromiseCapability$2 = {};
  9005. var aCallable$3 = aCallable$9;
  9006. var PromiseCapability = function (C) {
  9007. var resolve, reject;
  9008. this.promise = new C(function ($$resolve, $$reject) {
  9009. if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
  9010. resolve = $$resolve;
  9011. reject = $$reject;
  9012. });
  9013. this.resolve = aCallable$3(resolve);
  9014. this.reject = aCallable$3(reject);
  9015. };
  9016. // `NewPromiseCapability` abstract operation
  9017. // https://tc39.es/ecma262/#sec-newpromisecapability
  9018. newPromiseCapability$2.f = function (C) {
  9019. return new PromiseCapability(C);
  9020. };
  9021. var $$q = _export;
  9022. var IS_NODE = engineIsNode;
  9023. var global$c = global$F;
  9024. var call$b = functionCall;
  9025. var defineBuiltIn$7 = defineBuiltIn$f;
  9026. var setPrototypeOf = objectSetPrototypeOf;
  9027. var setToStringTag$4 = setToStringTag$8;
  9028. var setSpecies$2 = setSpecies$4;
  9029. var aCallable$2 = aCallable$9;
  9030. var isCallable$6 = isCallable$s;
  9031. var isObject$6 = isObject$k;
  9032. var anInstance$4 = anInstance$7;
  9033. var speciesConstructor = speciesConstructor$4;
  9034. var task = task$1.set;
  9035. var microtask = microtask$1;
  9036. var hostReportErrors = hostReportErrors$1;
  9037. var perform$2 = perform$3;
  9038. var Queue = queue;
  9039. var InternalStateModule$5 = internalState;
  9040. var NativePromiseConstructor$2 = promiseNativeConstructor;
  9041. var PromiseConstructorDetection = promiseConstructorDetection;
  9042. var newPromiseCapabilityModule$3 = newPromiseCapability$2;
  9043. var PROMISE = 'Promise';
  9044. var FORCED_PROMISE_CONSTRUCTOR$4 = PromiseConstructorDetection.CONSTRUCTOR;
  9045. var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;
  9046. var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;
  9047. var getInternalPromiseState = InternalStateModule$5.getterFor(PROMISE);
  9048. var setInternalState$5 = InternalStateModule$5.set;
  9049. var NativePromisePrototype$1 = NativePromiseConstructor$2 && NativePromiseConstructor$2.prototype;
  9050. var PromiseConstructor = NativePromiseConstructor$2;
  9051. var PromisePrototype = NativePromisePrototype$1;
  9052. var TypeError$5 = global$c.TypeError;
  9053. var document$1 = global$c.document;
  9054. var process = global$c.process;
  9055. var newPromiseCapability$1 = newPromiseCapabilityModule$3.f;
  9056. var newGenericPromiseCapability = newPromiseCapability$1;
  9057. var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global$c.dispatchEvent);
  9058. var UNHANDLED_REJECTION = 'unhandledrejection';
  9059. var REJECTION_HANDLED = 'rejectionhandled';
  9060. var PENDING = 0;
  9061. var FULFILLED = 1;
  9062. var REJECTED = 2;
  9063. var HANDLED = 1;
  9064. var UNHANDLED = 2;
  9065. var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
  9066. // helpers
  9067. var isThenable = function (it) {
  9068. var then;
  9069. return isObject$6(it) && isCallable$6(then = it.then) ? then : false;
  9070. };
  9071. var callReaction = function (reaction, state) {
  9072. var value = state.value;
  9073. var ok = state.state == FULFILLED;
  9074. var handler = ok ? reaction.ok : reaction.fail;
  9075. var resolve = reaction.resolve;
  9076. var reject = reaction.reject;
  9077. var domain = reaction.domain;
  9078. var result, then, exited;
  9079. try {
  9080. if (handler) {
  9081. if (!ok) {
  9082. if (state.rejection === UNHANDLED) onHandleUnhandled(state);
  9083. state.rejection = HANDLED;
  9084. }
  9085. if (handler === true) result = value;
  9086. else {
  9087. if (domain) domain.enter();
  9088. result = handler(value); // can throw
  9089. if (domain) {
  9090. domain.exit();
  9091. exited = true;
  9092. }
  9093. }
  9094. if (result === reaction.promise) {
  9095. reject(TypeError$5('Promise-chain cycle'));
  9096. } else if (then = isThenable(result)) {
  9097. call$b(then, result, resolve, reject);
  9098. } else resolve(result);
  9099. } else reject(value);
  9100. } catch (error) {
  9101. if (domain && !exited) domain.exit();
  9102. reject(error);
  9103. }
  9104. };
  9105. var notify = function (state, isReject) {
  9106. if (state.notified) return;
  9107. state.notified = true;
  9108. microtask(function () {
  9109. var reactions = state.reactions;
  9110. var reaction;
  9111. while (reaction = reactions.get()) {
  9112. callReaction(reaction, state);
  9113. }
  9114. state.notified = false;
  9115. if (isReject && !state.rejection) onUnhandled(state);
  9116. });
  9117. };
  9118. var dispatchEvent = function (name, promise, reason) {
  9119. var event, handler;
  9120. if (DISPATCH_EVENT) {
  9121. event = document$1.createEvent('Event');
  9122. event.promise = promise;
  9123. event.reason = reason;
  9124. event.initEvent(name, false, true);
  9125. global$c.dispatchEvent(event);
  9126. } else event = { promise: promise, reason: reason };
  9127. if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global$c['on' + name])) handler(event);
  9128. else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
  9129. };
  9130. var onUnhandled = function (state) {
  9131. call$b(task, global$c, function () {
  9132. var promise = state.facade;
  9133. var value = state.value;
  9134. var IS_UNHANDLED = isUnhandled(state);
  9135. var result;
  9136. if (IS_UNHANDLED) {
  9137. result = perform$2(function () {
  9138. if (IS_NODE) {
  9139. process.emit('unhandledRejection', value, promise);
  9140. } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
  9141. });
  9142. // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
  9143. state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
  9144. if (result.error) throw result.value;
  9145. }
  9146. });
  9147. };
  9148. var isUnhandled = function (state) {
  9149. return state.rejection !== HANDLED && !state.parent;
  9150. };
  9151. var onHandleUnhandled = function (state) {
  9152. call$b(task, global$c, function () {
  9153. var promise = state.facade;
  9154. if (IS_NODE) {
  9155. process.emit('rejectionHandled', promise);
  9156. } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
  9157. });
  9158. };
  9159. var bind$5 = function (fn, state, unwrap) {
  9160. return function (value) {
  9161. fn(state, value, unwrap);
  9162. };
  9163. };
  9164. var internalReject = function (state, value, unwrap) {
  9165. if (state.done) return;
  9166. state.done = true;
  9167. if (unwrap) state = unwrap;
  9168. state.value = value;
  9169. state.state = REJECTED;
  9170. notify(state, true);
  9171. };
  9172. var internalResolve = function (state, value, unwrap) {
  9173. if (state.done) return;
  9174. state.done = true;
  9175. if (unwrap) state = unwrap;
  9176. try {
  9177. if (state.facade === value) throw TypeError$5("Promise can't be resolved itself");
  9178. var then = isThenable(value);
  9179. if (then) {
  9180. microtask(function () {
  9181. var wrapper = { done: false };
  9182. try {
  9183. call$b(then, value,
  9184. bind$5(internalResolve, wrapper, state),
  9185. bind$5(internalReject, wrapper, state)
  9186. );
  9187. } catch (error) {
  9188. internalReject(wrapper, error, state);
  9189. }
  9190. });
  9191. } else {
  9192. state.value = value;
  9193. state.state = FULFILLED;
  9194. notify(state, false);
  9195. }
  9196. } catch (error) {
  9197. internalReject({ done: false }, error, state);
  9198. }
  9199. };
  9200. // constructor polyfill
  9201. if (FORCED_PROMISE_CONSTRUCTOR$4) {
  9202. // 25.4.3.1 Promise(executor)
  9203. PromiseConstructor = function Promise(executor) {
  9204. anInstance$4(this, PromisePrototype);
  9205. aCallable$2(executor);
  9206. call$b(Internal, this);
  9207. var state = getInternalPromiseState(this);
  9208. try {
  9209. executor(bind$5(internalResolve, state), bind$5(internalReject, state));
  9210. } catch (error) {
  9211. internalReject(state, error);
  9212. }
  9213. };
  9214. PromisePrototype = PromiseConstructor.prototype;
  9215. // eslint-disable-next-line no-unused-vars -- required for `.length`
  9216. Internal = function Promise(executor) {
  9217. setInternalState$5(this, {
  9218. type: PROMISE,
  9219. done: false,
  9220. notified: false,
  9221. parent: false,
  9222. reactions: new Queue(),
  9223. rejection: false,
  9224. state: PENDING,
  9225. value: undefined
  9226. });
  9227. };
  9228. // `Promise.prototype.then` method
  9229. // https://tc39.es/ecma262/#sec-promise.prototype.then
  9230. Internal.prototype = defineBuiltIn$7(PromisePrototype, 'then', function then(onFulfilled, onRejected) {
  9231. var state = getInternalPromiseState(this);
  9232. var reaction = newPromiseCapability$1(speciesConstructor(this, PromiseConstructor));
  9233. state.parent = true;
  9234. reaction.ok = isCallable$6(onFulfilled) ? onFulfilled : true;
  9235. reaction.fail = isCallable$6(onRejected) && onRejected;
  9236. reaction.domain = IS_NODE ? process.domain : undefined;
  9237. if (state.state == PENDING) state.reactions.add(reaction);
  9238. else microtask(function () {
  9239. callReaction(reaction, state);
  9240. });
  9241. return reaction.promise;
  9242. });
  9243. OwnPromiseCapability = function () {
  9244. var promise = new Internal();
  9245. var state = getInternalPromiseState(promise);
  9246. this.promise = promise;
  9247. this.resolve = bind$5(internalResolve, state);
  9248. this.reject = bind$5(internalReject, state);
  9249. };
  9250. newPromiseCapabilityModule$3.f = newPromiseCapability$1 = function (C) {
  9251. return C === PromiseConstructor || C === PromiseWrapper
  9252. ? new OwnPromiseCapability(C)
  9253. : newGenericPromiseCapability(C);
  9254. };
  9255. if (isCallable$6(NativePromiseConstructor$2) && NativePromisePrototype$1 !== Object.prototype) {
  9256. nativeThen = NativePromisePrototype$1.then;
  9257. if (!NATIVE_PROMISE_SUBCLASSING) {
  9258. // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs
  9259. defineBuiltIn$7(NativePromisePrototype$1, 'then', function then(onFulfilled, onRejected) {
  9260. var that = this;
  9261. return new PromiseConstructor(function (resolve, reject) {
  9262. call$b(nativeThen, that, resolve, reject);
  9263. }).then(onFulfilled, onRejected);
  9264. // https://github.com/zloirock/core-js/issues/640
  9265. }, { unsafe: true });
  9266. }
  9267. // make `.constructor === Promise` work for native promise-based APIs
  9268. try {
  9269. delete NativePromisePrototype$1.constructor;
  9270. } catch (error) { /* empty */ }
  9271. // make `instanceof Promise` work for native promise-based APIs
  9272. if (setPrototypeOf) {
  9273. setPrototypeOf(NativePromisePrototype$1, PromisePrototype);
  9274. }
  9275. }
  9276. }
  9277. $$q({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR$4 }, {
  9278. Promise: PromiseConstructor
  9279. });
  9280. setToStringTag$4(PromiseConstructor, PROMISE, false);
  9281. setSpecies$2(PROMISE);
  9282. var call$a = functionCall;
  9283. var anObject$6 = anObject$i;
  9284. var getMethod$1 = getMethod$5;
  9285. var iteratorClose$2 = function (iterator, kind, value) {
  9286. var innerResult, innerError;
  9287. anObject$6(iterator);
  9288. try {
  9289. innerResult = getMethod$1(iterator, 'return');
  9290. if (!innerResult) {
  9291. if (kind === 'throw') throw value;
  9292. return value;
  9293. }
  9294. innerResult = call$a(innerResult, iterator);
  9295. } catch (error) {
  9296. innerError = true;
  9297. innerResult = error;
  9298. }
  9299. if (kind === 'throw') throw value;
  9300. if (innerError) throw innerResult;
  9301. anObject$6(innerResult);
  9302. return value;
  9303. };
  9304. var bind$4 = functionBindContext;
  9305. var call$9 = functionCall;
  9306. var anObject$5 = anObject$i;
  9307. var tryToString$1 = tryToString$7;
  9308. var isArrayIteratorMethod$1 = isArrayIteratorMethod$3;
  9309. var lengthOfArrayLike$2 = lengthOfArrayLike$f;
  9310. var isPrototypeOf$3 = objectIsPrototypeOf;
  9311. var getIterator$2 = getIterator$4;
  9312. var getIteratorMethod$2 = getIteratorMethod$5;
  9313. var iteratorClose$1 = iteratorClose$2;
  9314. var $TypeError$1 = TypeError;
  9315. var Result = function (stopped, result) {
  9316. this.stopped = stopped;
  9317. this.result = result;
  9318. };
  9319. var ResultPrototype = Result.prototype;
  9320. var iterate$5 = function (iterable, unboundFunction, options) {
  9321. var that = options && options.that;
  9322. var AS_ENTRIES = !!(options && options.AS_ENTRIES);
  9323. var IS_ITERATOR = !!(options && options.IS_ITERATOR);
  9324. var INTERRUPTED = !!(options && options.INTERRUPTED);
  9325. var fn = bind$4(unboundFunction, that);
  9326. var iterator, iterFn, index, length, result, next, step;
  9327. var stop = function (condition) {
  9328. if (iterator) iteratorClose$1(iterator, 'normal', condition);
  9329. return new Result(true, condition);
  9330. };
  9331. var callFn = function (value) {
  9332. if (AS_ENTRIES) {
  9333. anObject$5(value);
  9334. return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
  9335. } return INTERRUPTED ? fn(value, stop) : fn(value);
  9336. };
  9337. if (IS_ITERATOR) {
  9338. iterator = iterable;
  9339. } else {
  9340. iterFn = getIteratorMethod$2(iterable);
  9341. if (!iterFn) throw $TypeError$1(tryToString$1(iterable) + ' is not iterable');
  9342. // optimisation for array iterators
  9343. if (isArrayIteratorMethod$1(iterFn)) {
  9344. for (index = 0, length = lengthOfArrayLike$2(iterable); length > index; index++) {
  9345. result = callFn(iterable[index]);
  9346. if (result && isPrototypeOf$3(ResultPrototype, result)) return result;
  9347. } return new Result(false);
  9348. }
  9349. iterator = getIterator$2(iterable, iterFn);
  9350. }
  9351. next = iterator.next;
  9352. while (!(step = call$9(next, iterator)).done) {
  9353. try {
  9354. result = callFn(step.value);
  9355. } catch (error) {
  9356. iteratorClose$1(iterator, 'throw', error);
  9357. }
  9358. if (typeof result == 'object' && result && isPrototypeOf$3(ResultPrototype, result)) return result;
  9359. } return new Result(false);
  9360. };
  9361. var NativePromiseConstructor$1 = promiseNativeConstructor;
  9362. var checkCorrectnessOfIteration$2 = checkCorrectnessOfIteration$4;
  9363. var FORCED_PROMISE_CONSTRUCTOR$3 = promiseConstructorDetection.CONSTRUCTOR;
  9364. var promiseStaticsIncorrectIteration = FORCED_PROMISE_CONSTRUCTOR$3 || !checkCorrectnessOfIteration$2(function (iterable) {
  9365. NativePromiseConstructor$1.all(iterable).then(undefined, function () { /* empty */ });
  9366. });
  9367. var $$p = _export;
  9368. var call$8 = functionCall;
  9369. var aCallable$1 = aCallable$9;
  9370. var newPromiseCapabilityModule$2 = newPromiseCapability$2;
  9371. var perform$1 = perform$3;
  9372. var iterate$4 = iterate$5;
  9373. var PROMISE_STATICS_INCORRECT_ITERATION$1 = promiseStaticsIncorrectIteration;
  9374. // `Promise.all` method
  9375. // https://tc39.es/ecma262/#sec-promise.all
  9376. $$p({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION$1 }, {
  9377. all: function all(iterable) {
  9378. var C = this;
  9379. var capability = newPromiseCapabilityModule$2.f(C);
  9380. var resolve = capability.resolve;
  9381. var reject = capability.reject;
  9382. var result = perform$1(function () {
  9383. var $promiseResolve = aCallable$1(C.resolve);
  9384. var values = [];
  9385. var counter = 0;
  9386. var remaining = 1;
  9387. iterate$4(iterable, function (promise) {
  9388. var index = counter++;
  9389. var alreadyCalled = false;
  9390. remaining++;
  9391. call$8($promiseResolve, C, promise).then(function (value) {
  9392. if (alreadyCalled) return;
  9393. alreadyCalled = true;
  9394. values[index] = value;
  9395. --remaining || resolve(values);
  9396. }, reject);
  9397. });
  9398. --remaining || resolve(values);
  9399. });
  9400. if (result.error) reject(result.value);
  9401. return capability.promise;
  9402. }
  9403. });
  9404. var $$o = _export;
  9405. var FORCED_PROMISE_CONSTRUCTOR$2 = promiseConstructorDetection.CONSTRUCTOR;
  9406. var NativePromiseConstructor = promiseNativeConstructor;
  9407. var getBuiltIn$4 = getBuiltIn$b;
  9408. var isCallable$5 = isCallable$s;
  9409. var defineBuiltIn$6 = defineBuiltIn$f;
  9410. var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
  9411. // `Promise.prototype.catch` method
  9412. // https://tc39.es/ecma262/#sec-promise.prototype.catch
  9413. $$o({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR$2, real: true }, {
  9414. 'catch': function (onRejected) {
  9415. return this.then(undefined, onRejected);
  9416. }
  9417. });
  9418. // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`
  9419. if (isCallable$5(NativePromiseConstructor)) {
  9420. var method = getBuiltIn$4('Promise').prototype['catch'];
  9421. if (NativePromisePrototype['catch'] !== method) {
  9422. defineBuiltIn$6(NativePromisePrototype, 'catch', method, { unsafe: true });
  9423. }
  9424. }
  9425. var $$n = _export;
  9426. var call$7 = functionCall;
  9427. var aCallable = aCallable$9;
  9428. var newPromiseCapabilityModule$1 = newPromiseCapability$2;
  9429. var perform = perform$3;
  9430. var iterate$3 = iterate$5;
  9431. var PROMISE_STATICS_INCORRECT_ITERATION = promiseStaticsIncorrectIteration;
  9432. // `Promise.race` method
  9433. // https://tc39.es/ecma262/#sec-promise.race
  9434. $$n({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {
  9435. race: function race(iterable) {
  9436. var C = this;
  9437. var capability = newPromiseCapabilityModule$1.f(C);
  9438. var reject = capability.reject;
  9439. var result = perform(function () {
  9440. var $promiseResolve = aCallable(C.resolve);
  9441. iterate$3(iterable, function (promise) {
  9442. call$7($promiseResolve, C, promise).then(capability.resolve, reject);
  9443. });
  9444. });
  9445. if (result.error) reject(result.value);
  9446. return capability.promise;
  9447. }
  9448. });
  9449. var $$m = _export;
  9450. var call$6 = functionCall;
  9451. var newPromiseCapabilityModule = newPromiseCapability$2;
  9452. var FORCED_PROMISE_CONSTRUCTOR$1 = promiseConstructorDetection.CONSTRUCTOR;
  9453. // `Promise.reject` method
  9454. // https://tc39.es/ecma262/#sec-promise.reject
  9455. $$m({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR$1 }, {
  9456. reject: function reject(r) {
  9457. var capability = newPromiseCapabilityModule.f(this);
  9458. call$6(capability.reject, undefined, r);
  9459. return capability.promise;
  9460. }
  9461. });
  9462. var anObject$4 = anObject$i;
  9463. var isObject$5 = isObject$k;
  9464. var newPromiseCapability = newPromiseCapability$2;
  9465. var promiseResolve$1 = function (C, x) {
  9466. anObject$4(C);
  9467. if (isObject$5(x) && x.constructor === C) return x;
  9468. var promiseCapability = newPromiseCapability.f(C);
  9469. var resolve = promiseCapability.resolve;
  9470. resolve(x);
  9471. return promiseCapability.promise;
  9472. };
  9473. var $$l = _export;
  9474. var getBuiltIn$3 = getBuiltIn$b;
  9475. var FORCED_PROMISE_CONSTRUCTOR = promiseConstructorDetection.CONSTRUCTOR;
  9476. var promiseResolve = promiseResolve$1;
  9477. getBuiltIn$3('Promise');
  9478. // `Promise.resolve` method
  9479. // https://tc39.es/ecma262/#sec-promise.resolve
  9480. $$l({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {
  9481. resolve: function resolve(x) {
  9482. return promiseResolve(this, x);
  9483. }
  9484. });
  9485. var $$k = _export;
  9486. var toObject$3 = toObject$d;
  9487. var toAbsoluteIndex = toAbsoluteIndex$8;
  9488. var toIntegerOrInfinity$1 = toIntegerOrInfinity$9;
  9489. var lengthOfArrayLike$1 = lengthOfArrayLike$f;
  9490. var doesNotExceedSafeInteger = doesNotExceedSafeInteger$2;
  9491. var arraySpeciesCreate = arraySpeciesCreate$3;
  9492. var createProperty$2 = createProperty$6;
  9493. var deletePropertyOrThrow = deletePropertyOrThrow$2;
  9494. var arrayMethodHasSpeciesSupport$1 = arrayMethodHasSpeciesSupport$5;
  9495. var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$1('splice');
  9496. var max$1 = Math.max;
  9497. var min$3 = Math.min;
  9498. // `Array.prototype.splice` method
  9499. // https://tc39.es/ecma262/#sec-array.prototype.splice
  9500. // with adding support of @@species
  9501. $$k({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 }, {
  9502. splice: function splice(start, deleteCount /* , ...items */) {
  9503. var O = toObject$3(this);
  9504. var len = lengthOfArrayLike$1(O);
  9505. var actualStart = toAbsoluteIndex(start, len);
  9506. var argumentsLength = arguments.length;
  9507. var insertCount, actualDeleteCount, A, k, from, to;
  9508. if (argumentsLength === 0) {
  9509. insertCount = actualDeleteCount = 0;
  9510. } else if (argumentsLength === 1) {
  9511. insertCount = 0;
  9512. actualDeleteCount = len - actualStart;
  9513. } else {
  9514. insertCount = argumentsLength - 2;
  9515. actualDeleteCount = min$3(max$1(toIntegerOrInfinity$1(deleteCount), 0), len - actualStart);
  9516. }
  9517. doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);
  9518. A = arraySpeciesCreate(O, actualDeleteCount);
  9519. for (k = 0; k < actualDeleteCount; k++) {
  9520. from = actualStart + k;
  9521. if (from in O) createProperty$2(A, k, O[from]);
  9522. }
  9523. A.length = actualDeleteCount;
  9524. if (insertCount < actualDeleteCount) {
  9525. for (k = actualStart; k < len - actualDeleteCount; k++) {
  9526. from = k + actualDeleteCount;
  9527. to = k + insertCount;
  9528. if (from in O) O[to] = O[from];
  9529. else deletePropertyOrThrow(O, to);
  9530. }
  9531. for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1);
  9532. } else if (insertCount > actualDeleteCount) {
  9533. for (k = len - actualDeleteCount; k > actualStart; k--) {
  9534. from = k + actualDeleteCount - 1;
  9535. to = k + insertCount - 1;
  9536. if (from in O) O[to] = O[from];
  9537. else deletePropertyOrThrow(O, to);
  9538. }
  9539. }
  9540. for (k = 0; k < insertCount; k++) {
  9541. O[k + actualStart] = arguments[k + 2];
  9542. }
  9543. O.length = len - actualDeleteCount + insertCount;
  9544. return A;
  9545. }
  9546. });
  9547. var global$b = global$F;
  9548. var globalIsFinite = global$b.isFinite;
  9549. // `Number.isFinite` method
  9550. // https://tc39.es/ecma262/#sec-number.isfinite
  9551. // eslint-disable-next-line es-x/no-number-isfinite -- safe
  9552. var numberIsFinite$1 = Number.isFinite || function isFinite(it) {
  9553. return typeof it == 'number' && globalIsFinite(it);
  9554. };
  9555. var $$j = _export;
  9556. var numberIsFinite = numberIsFinite$1;
  9557. // `Number.isFinite` method
  9558. // https://tc39.es/ecma262/#sec-number.isfinite
  9559. $$j({ target: 'Number', stat: true }, { isFinite: numberIsFinite });
  9560. var uncurryThis$g = functionUncurryThis;
  9561. // `thisNumberValue` abstract operation
  9562. // https://tc39.es/ecma262/#sec-thisnumbervalue
  9563. var thisNumberValue$1 = uncurryThis$g(1.0.valueOf);
  9564. // a string of all valid unicode whitespaces
  9565. var whitespaces$2 = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
  9566. '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
  9567. var uncurryThis$f = functionUncurryThis;
  9568. var requireObjectCoercible$3 = requireObjectCoercible$8;
  9569. var toString$6 = toString$a;
  9570. var whitespaces$1 = whitespaces$2;
  9571. var replace$6 = uncurryThis$f(''.replace);
  9572. var whitespace = '[' + whitespaces$1 + ']';
  9573. var ltrim = RegExp('^' + whitespace + whitespace + '*');
  9574. var rtrim = RegExp(whitespace + whitespace + '*$');
  9575. // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
  9576. var createMethod$1 = function (TYPE) {
  9577. return function ($this) {
  9578. var string = toString$6(requireObjectCoercible$3($this));
  9579. if (TYPE & 1) string = replace$6(string, ltrim, '');
  9580. if (TYPE & 2) string = replace$6(string, rtrim, '');
  9581. return string;
  9582. };
  9583. };
  9584. var stringTrim = {
  9585. // `String.prototype.{ trimLeft, trimStart }` methods
  9586. // https://tc39.es/ecma262/#sec-string.prototype.trimstart
  9587. start: createMethod$1(1),
  9588. // `String.prototype.{ trimRight, trimEnd }` methods
  9589. // https://tc39.es/ecma262/#sec-string.prototype.trimend
  9590. end: createMethod$1(2),
  9591. // `String.prototype.trim` method
  9592. // https://tc39.es/ecma262/#sec-string.prototype.trim
  9593. trim: createMethod$1(3)
  9594. };
  9595. var DESCRIPTORS$7 = descriptors;
  9596. var global$a = global$F;
  9597. var uncurryThis$e = functionUncurryThis;
  9598. var isForced$1 = isForced_1;
  9599. var defineBuiltIn$5 = defineBuiltIn$f;
  9600. var hasOwn$8 = hasOwnProperty_1;
  9601. var inheritIfRequired$1 = inheritIfRequired$3;
  9602. var isPrototypeOf$2 = objectIsPrototypeOf;
  9603. var isSymbol$2 = isSymbol$6;
  9604. var toPrimitive = toPrimitive$3;
  9605. var fails$b = fails$H;
  9606. var getOwnPropertyNames = objectGetOwnPropertyNames.f;
  9607. var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f;
  9608. var defineProperty$6 = objectDefineProperty.f;
  9609. var thisNumberValue = thisNumberValue$1;
  9610. var trim = stringTrim.trim;
  9611. var NUMBER = 'Number';
  9612. var NativeNumber = global$a[NUMBER];
  9613. var NumberPrototype = NativeNumber.prototype;
  9614. var TypeError$4 = global$a.TypeError;
  9615. var arraySlice$3 = uncurryThis$e(''.slice);
  9616. var charCodeAt$2 = uncurryThis$e(''.charCodeAt);
  9617. // `ToNumeric` abstract operation
  9618. // https://tc39.es/ecma262/#sec-tonumeric
  9619. var toNumeric = function (value) {
  9620. var primValue = toPrimitive(value, 'number');
  9621. return typeof primValue == 'bigint' ? primValue : toNumber(primValue);
  9622. };
  9623. // `ToNumber` abstract operation
  9624. // https://tc39.es/ecma262/#sec-tonumber
  9625. var toNumber = function (argument) {
  9626. var it = toPrimitive(argument, 'number');
  9627. var first, third, radix, maxCode, digits, length, index, code;
  9628. if (isSymbol$2(it)) throw TypeError$4('Cannot convert a Symbol value to a number');
  9629. if (typeof it == 'string' && it.length > 2) {
  9630. it = trim(it);
  9631. first = charCodeAt$2(it, 0);
  9632. if (first === 43 || first === 45) {
  9633. third = charCodeAt$2(it, 2);
  9634. if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
  9635. } else if (first === 48) {
  9636. switch (charCodeAt$2(it, 1)) {
  9637. case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i
  9638. case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i
  9639. default: return +it;
  9640. }
  9641. digits = arraySlice$3(it, 2);
  9642. length = digits.length;
  9643. for (index = 0; index < length; index++) {
  9644. code = charCodeAt$2(digits, index);
  9645. // parseInt parses a string to a first unavailable symbol
  9646. // but ToNumber should return NaN if a string contains unavailable symbols
  9647. if (code < 48 || code > maxCode) return NaN;
  9648. } return parseInt(digits, radix);
  9649. }
  9650. } return +it;
  9651. };
  9652. // `Number` constructor
  9653. // https://tc39.es/ecma262/#sec-number-constructor
  9654. if (isForced$1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {
  9655. var NumberWrapper = function Number(value) {
  9656. var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));
  9657. var dummy = this;
  9658. // check on 1..constructor(foo) case
  9659. return isPrototypeOf$2(NumberPrototype, dummy) && fails$b(function () { thisNumberValue(dummy); })
  9660. ? inheritIfRequired$1(Object(n), dummy, NumberWrapper) : n;
  9661. };
  9662. for (var keys = DESCRIPTORS$7 ? getOwnPropertyNames(NativeNumber) : (
  9663. // ES3:
  9664. 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
  9665. // ES2015 (in case, if modules with ES2015 Number statics required before):
  9666. 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +
  9667. // ESNext
  9668. 'fromString,range'
  9669. ).split(','), j$1 = 0, key; keys.length > j$1; j$1++) {
  9670. if (hasOwn$8(NativeNumber, key = keys[j$1]) && !hasOwn$8(NumberWrapper, key)) {
  9671. defineProperty$6(NumberWrapper, key, getOwnPropertyDescriptor$3(NativeNumber, key));
  9672. }
  9673. }
  9674. NumberWrapper.prototype = NumberPrototype;
  9675. NumberPrototype.constructor = NumberWrapper;
  9676. defineBuiltIn$5(global$a, NUMBER, NumberWrapper, { constructor: true });
  9677. }
  9678. var $$i = _export;
  9679. var $filter = arrayIteration.filter;
  9680. var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$5;
  9681. var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
  9682. // `Array.prototype.filter` method
  9683. // https://tc39.es/ecma262/#sec-array.prototype.filter
  9684. // with adding support of @@species
  9685. $$i({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
  9686. filter: function filter(callbackfn /* , thisArg */) {
  9687. return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  9688. }
  9689. });
  9690. // iterable DOM collections
  9691. // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
  9692. var domIterables = {
  9693. CSSRuleList: 0,
  9694. CSSStyleDeclaration: 0,
  9695. CSSValueList: 0,
  9696. ClientRectList: 0,
  9697. DOMRectList: 0,
  9698. DOMStringList: 0,
  9699. DOMTokenList: 1,
  9700. DataTransferItemList: 0,
  9701. FileList: 0,
  9702. HTMLAllCollection: 0,
  9703. HTMLCollection: 0,
  9704. HTMLFormElement: 0,
  9705. HTMLSelectElement: 0,
  9706. MediaList: 0,
  9707. MimeTypeArray: 0,
  9708. NamedNodeMap: 0,
  9709. NodeList: 1,
  9710. PaintRequestList: 0,
  9711. Plugin: 0,
  9712. PluginArray: 0,
  9713. SVGLengthList: 0,
  9714. SVGNumberList: 0,
  9715. SVGPathSegList: 0,
  9716. SVGPointList: 0,
  9717. SVGStringList: 0,
  9718. SVGTransformList: 0,
  9719. SourceBufferList: 0,
  9720. StyleSheetList: 0,
  9721. TextTrackCueList: 0,
  9722. TextTrackList: 0,
  9723. TouchList: 0
  9724. };
  9725. // in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`
  9726. var documentCreateElement = documentCreateElement$2;
  9727. var classList = documentCreateElement('span').classList;
  9728. var DOMTokenListPrototype$2 = classList && classList.constructor && classList.constructor.prototype;
  9729. var domTokenListPrototype = DOMTokenListPrototype$2 === Object.prototype ? undefined : DOMTokenListPrototype$2;
  9730. var $forEach$1 = arrayIteration.forEach;
  9731. var arrayMethodIsStrict = arrayMethodIsStrict$2;
  9732. var STRICT_METHOD = arrayMethodIsStrict('forEach');
  9733. // `Array.prototype.forEach` method implementation
  9734. // https://tc39.es/ecma262/#sec-array.prototype.foreach
  9735. var arrayForEach = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {
  9736. return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  9737. // eslint-disable-next-line es-x/no-array-prototype-foreach -- safe
  9738. } : [].forEach;
  9739. var global$9 = global$F;
  9740. var DOMIterables$1 = domIterables;
  9741. var DOMTokenListPrototype$1 = domTokenListPrototype;
  9742. var forEach = arrayForEach;
  9743. var createNonEnumerableProperty$1 = createNonEnumerableProperty$9;
  9744. var handlePrototype$1 = function (CollectionPrototype) {
  9745. // some Chrome versions have non-configurable methods on DOMTokenList
  9746. if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {
  9747. createNonEnumerableProperty$1(CollectionPrototype, 'forEach', forEach);
  9748. } catch (error) {
  9749. CollectionPrototype.forEach = forEach;
  9750. }
  9751. };
  9752. for (var COLLECTION_NAME$1 in DOMIterables$1) {
  9753. if (DOMIterables$1[COLLECTION_NAME$1]) {
  9754. handlePrototype$1(global$9[COLLECTION_NAME$1] && global$9[COLLECTION_NAME$1].prototype);
  9755. }
  9756. }
  9757. handlePrototype$1(DOMTokenListPrototype$1);
  9758. // A type of promise-like that resolves synchronously and supports only one observer
  9759. const _Pact = /*#__PURE__*/(function() {
  9760. function _Pact() {}
  9761. _Pact.prototype.then = function(onFulfilled, onRejected) {
  9762. const result = new _Pact();
  9763. const state = this.s;
  9764. if (state) {
  9765. const callback = state & 1 ? onFulfilled : onRejected;
  9766. if (callback) {
  9767. try {
  9768. _settle(result, 1, callback(this.v));
  9769. } catch (e) {
  9770. _settle(result, 2, e);
  9771. }
  9772. return result;
  9773. } else {
  9774. return this;
  9775. }
  9776. }
  9777. this.o = function(_this) {
  9778. try {
  9779. const value = _this.v;
  9780. if (_this.s & 1) {
  9781. _settle(result, 1, onFulfilled ? onFulfilled(value) : value);
  9782. } else if (onRejected) {
  9783. _settle(result, 1, onRejected(value));
  9784. } else {
  9785. _settle(result, 2, value);
  9786. }
  9787. } catch (e) {
  9788. _settle(result, 2, e);
  9789. }
  9790. };
  9791. return result;
  9792. };
  9793. return _Pact;
  9794. })();
  9795. // Settles a pact synchronously
  9796. function _settle(pact, state, value) {
  9797. if (!pact.s) {
  9798. if (value instanceof _Pact) {
  9799. if (value.s) {
  9800. if (state & 1) {
  9801. state = value.s;
  9802. }
  9803. value = value.v;
  9804. } else {
  9805. value.o = _settle.bind(null, pact, state);
  9806. return;
  9807. }
  9808. }
  9809. if (value && value.then) {
  9810. value.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));
  9811. return;
  9812. }
  9813. pact.s = state;
  9814. pact.v = value;
  9815. const observer = pact.o;
  9816. if (observer) {
  9817. observer(pact);
  9818. }
  9819. }
  9820. }
  9821. function _isSettledPact(thenable) {
  9822. return thenable instanceof _Pact && thenable.s & 1;
  9823. }
  9824. // Converts argument to a function that always returns a Promise
  9825. function _async(f) {
  9826. return function() {
  9827. for (var args = [], i = 0; i < arguments.length; i++) {
  9828. args[i] = arguments[i];
  9829. }
  9830. try {
  9831. return Promise.resolve(f.apply(this, args));
  9832. } catch(e) {
  9833. return Promise.reject(e);
  9834. }
  9835. }
  9836. }
  9837. // Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)
  9838. function _await(value, then, direct) {
  9839. if (direct) {
  9840. return then ? then(value) : value;
  9841. }
  9842. if (!value || !value.then) {
  9843. value = Promise.resolve(value);
  9844. }
  9845. return then ? value.then(then) : value;
  9846. }
  9847. // Awaits on a value that may or may not be a Promise, then ignores it
  9848. function _awaitIgnored(value, direct) {
  9849. if (!direct) {
  9850. return value && value.then ? value.then(_empty) : Promise.resolve();
  9851. }
  9852. }
  9853. // Proceeds after a value has resolved, or proceeds immediately if the value is not thenable
  9854. function _continue(value, then) {
  9855. return value && value.then ? value.then(then) : then(value);
  9856. }
  9857. // Proceeds after a value has resolved, or proceeds immediately if the value is not thenable
  9858. function _continueIgnored(value) {
  9859. if (value && value.then) {
  9860. return value.then(_empty);
  9861. }
  9862. }
  9863. // Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)
  9864. function _forTo(array, body, check) {
  9865. var i = -1, pact, reject;
  9866. function _cycle(result) {
  9867. try {
  9868. while (++i < array.length && (!check || !check())) {
  9869. result = body(i);
  9870. if (result && result.then) {
  9871. if (_isSettledPact(result)) {
  9872. result = result.v;
  9873. } else {
  9874. result.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));
  9875. return;
  9876. }
  9877. }
  9878. }
  9879. if (pact) {
  9880. _settle(pact, 1, result);
  9881. } else {
  9882. pact = result;
  9883. }
  9884. } catch (e) {
  9885. _settle(pact || (pact = new _Pact()), 2, e);
  9886. }
  9887. }
  9888. _cycle();
  9889. return pact;
  9890. }
  9891. const _iteratorSymbol = typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
  9892. // Asynchronously iterate through an object's values
  9893. // Uses for...of if the runtime supports it, otherwise iterates until length on a copy
  9894. function _forOf(target, body, check) {
  9895. if (typeof target[_iteratorSymbol] === "function") {
  9896. var iterator = target[_iteratorSymbol](), step, pact, reject;
  9897. function _cycle(result) {
  9898. try {
  9899. while (!(step = iterator.next()).done && (!check || !check())) {
  9900. result = body(step.value);
  9901. if (result && result.then) {
  9902. if (_isSettledPact(result)) {
  9903. result = result.v;
  9904. } else {
  9905. result.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));
  9906. return;
  9907. }
  9908. }
  9909. }
  9910. if (pact) {
  9911. _settle(pact, 1, result);
  9912. } else {
  9913. pact = result;
  9914. }
  9915. } catch (e) {
  9916. _settle(pact || (pact = new _Pact()), 2, e);
  9917. }
  9918. }
  9919. _cycle();
  9920. if (iterator.return) {
  9921. var _fixup = function(value) {
  9922. try {
  9923. if (!step.done) {
  9924. iterator.return();
  9925. }
  9926. } catch(e) {
  9927. }
  9928. return value;
  9929. };
  9930. if (pact && pact.then) {
  9931. return pact.then(_fixup, function(e) {
  9932. throw _fixup(e);
  9933. });
  9934. }
  9935. _fixup();
  9936. }
  9937. return pact;
  9938. }
  9939. // No support for Symbol.iterator
  9940. if (!("length" in target)) {
  9941. throw new TypeError("Object is not iterable");
  9942. }
  9943. // Handle live collections properly
  9944. var values = [];
  9945. for (var i = 0; i < target.length; i++) {
  9946. values.push(target[i]);
  9947. }
  9948. return _forTo(values, function(i) { return body(values[i]); }, check);
  9949. }
  9950. typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
  9951. // Asynchronously implement a generic for loop
  9952. function _for(test, update, body) {
  9953. var stage;
  9954. for (;;) {
  9955. var shouldContinue = test();
  9956. if (_isSettledPact(shouldContinue)) {
  9957. shouldContinue = shouldContinue.v;
  9958. }
  9959. if (!shouldContinue) {
  9960. return result;
  9961. }
  9962. if (shouldContinue.then) {
  9963. stage = 0;
  9964. break;
  9965. }
  9966. var result = body();
  9967. if (result && result.then) {
  9968. if (_isSettledPact(result)) {
  9969. result = result.s;
  9970. } else {
  9971. stage = 1;
  9972. break;
  9973. }
  9974. }
  9975. if (update) {
  9976. var updateValue = update();
  9977. if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
  9978. stage = 2;
  9979. break;
  9980. }
  9981. }
  9982. }
  9983. var pact = new _Pact();
  9984. var reject = _settle.bind(null, pact, 2);
  9985. (stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);
  9986. return pact;
  9987. function _resumeAfterBody(value) {
  9988. result = value;
  9989. do {
  9990. if (update) {
  9991. updateValue = update();
  9992. if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
  9993. updateValue.then(_resumeAfterUpdate).then(void 0, reject);
  9994. return;
  9995. }
  9996. }
  9997. shouldContinue = test();
  9998. if (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {
  9999. _settle(pact, 1, result);
  10000. return;
  10001. }
  10002. if (shouldContinue.then) {
  10003. shouldContinue.then(_resumeAfterTest).then(void 0, reject);
  10004. return;
  10005. }
  10006. result = body();
  10007. if (_isSettledPact(result)) {
  10008. result = result.v;
  10009. }
  10010. } while (!result || !result.then);
  10011. result.then(_resumeAfterBody).then(void 0, reject);
  10012. }
  10013. function _resumeAfterTest(shouldContinue) {
  10014. if (shouldContinue) {
  10015. result = body();
  10016. if (result && result.then) {
  10017. result.then(_resumeAfterBody).then(void 0, reject);
  10018. } else {
  10019. _resumeAfterBody(result);
  10020. }
  10021. } else {
  10022. _settle(pact, 1, result);
  10023. }
  10024. }
  10025. function _resumeAfterUpdate() {
  10026. if (shouldContinue = test()) {
  10027. if (shouldContinue.then) {
  10028. shouldContinue.then(_resumeAfterTest).then(void 0, reject);
  10029. } else {
  10030. _resumeAfterTest(shouldContinue);
  10031. }
  10032. } else {
  10033. _settle(pact, 1, result);
  10034. }
  10035. }
  10036. }
  10037. // Asynchronously implement a do ... while loop
  10038. function _do(body, test) {
  10039. var awaitBody;
  10040. do {
  10041. var result = body();
  10042. if (result && result.then) {
  10043. if (_isSettledPact(result)) {
  10044. result = result.v;
  10045. } else {
  10046. awaitBody = true;
  10047. break;
  10048. }
  10049. }
  10050. var shouldContinue = test();
  10051. if (_isSettledPact(shouldContinue)) {
  10052. shouldContinue = shouldContinue.v;
  10053. }
  10054. if (!shouldContinue) {
  10055. return result;
  10056. }
  10057. } while (!shouldContinue.then);
  10058. const pact = new _Pact();
  10059. const reject = _settle.bind(null, pact, 2);
  10060. (awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);
  10061. return pact;
  10062. function _resumeAfterBody(value) {
  10063. result = value;
  10064. for (;;) {
  10065. shouldContinue = test();
  10066. if (_isSettledPact(shouldContinue)) {
  10067. shouldContinue = shouldContinue.v;
  10068. }
  10069. if (!shouldContinue) {
  10070. break;
  10071. }
  10072. if (shouldContinue.then) {
  10073. shouldContinue.then(_resumeAfterTest).then(void 0, reject);
  10074. return;
  10075. }
  10076. result = body();
  10077. if (result && result.then) {
  10078. if (_isSettledPact(result)) {
  10079. result = result.v;
  10080. } else {
  10081. result.then(_resumeAfterBody).then(void 0, reject);
  10082. return;
  10083. }
  10084. }
  10085. }
  10086. _settle(pact, 1, result);
  10087. }
  10088. function _resumeAfterTest(shouldContinue) {
  10089. if (shouldContinue) {
  10090. do {
  10091. result = body();
  10092. if (result && result.then) {
  10093. if (_isSettledPact(result)) {
  10094. result = result.v;
  10095. } else {
  10096. result.then(_resumeAfterBody).then(void 0, reject);
  10097. return;
  10098. }
  10099. }
  10100. shouldContinue = test();
  10101. if (_isSettledPact(shouldContinue)) {
  10102. shouldContinue = shouldContinue.v;
  10103. }
  10104. if (!shouldContinue) {
  10105. _settle(pact, 1, result);
  10106. return;
  10107. }
  10108. } while (!shouldContinue.then);
  10109. shouldContinue.then(_resumeAfterTest).then(void 0, reject);
  10110. } else {
  10111. _settle(pact, 1, result);
  10112. }
  10113. }
  10114. }
  10115. // Asynchronously call a function and pass the result to explicitly passed continuations
  10116. function _call(body, then, direct) {
  10117. if (direct) {
  10118. return then ? then(body()) : body();
  10119. }
  10120. try {
  10121. var result = Promise.resolve(body());
  10122. return then ? result.then(then) : result;
  10123. } catch (e) {
  10124. return Promise.reject(e);
  10125. }
  10126. }
  10127. // Asynchronously call a function and swallow the result
  10128. function _callIgnored(body, direct) {
  10129. return _call(body, _empty, direct);
  10130. }
  10131. // Asynchronously call a function and pass the result to explicitly passed continuations
  10132. function _invoke(body, then) {
  10133. var result = body();
  10134. if (result && result.then) {
  10135. return result.then(then);
  10136. }
  10137. return then(result);
  10138. }
  10139. // Asynchronously call a function and swallow the result
  10140. function _invokeIgnored(body) {
  10141. var result = body();
  10142. if (result && result.then) {
  10143. return result.then(_empty);
  10144. }
  10145. }
  10146. // Asynchronously call a function and send errors to recovery continuation
  10147. function _catch(body, recover) {
  10148. try {
  10149. var result = body();
  10150. } catch(e) {
  10151. return recover(e);
  10152. }
  10153. if (result && result.then) {
  10154. return result.then(void 0, recover);
  10155. }
  10156. return result;
  10157. }
  10158. // Asynchronously await a promise and pass the result to a finally continuation
  10159. function _finallyRethrows(body, finalizer) {
  10160. try {
  10161. var result = body();
  10162. } catch (e) {
  10163. return finalizer(true, e);
  10164. }
  10165. if (result && result.then) {
  10166. return result.then(finalizer.bind(null, false), finalizer.bind(null, true));
  10167. }
  10168. return finalizer(false, result);
  10169. }
  10170. // Rethrow or return a value from a finally continuation
  10171. function _rethrow(thrown, value) {
  10172. if (thrown)
  10173. throw value;
  10174. return value;
  10175. }
  10176. // Empty function to implement break and other control flow that ignores asynchronous results
  10177. function _empty() {
  10178. }
  10179. var isRegExp = isRegexp;
  10180. var $TypeError = TypeError;
  10181. var notARegexp = function (it) {
  10182. if (isRegExp(it)) {
  10183. throw $TypeError("The method doesn't accept regular expressions");
  10184. } return it;
  10185. };
  10186. var wellKnownSymbol$7 = wellKnownSymbol$t;
  10187. var MATCH = wellKnownSymbol$7('match');
  10188. var correctIsRegexpLogic = function (METHOD_NAME) {
  10189. var regexp = /./;
  10190. try {
  10191. '/./'[METHOD_NAME](regexp);
  10192. } catch (error1) {
  10193. try {
  10194. regexp[MATCH] = false;
  10195. return '/./'[METHOD_NAME](regexp);
  10196. } catch (error2) { /* empty */ }
  10197. } return false;
  10198. };
  10199. var $$h = _export;
  10200. var uncurryThis$d = functionUncurryThis;
  10201. var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;
  10202. var toLength$2 = toLength$a;
  10203. var toString$5 = toString$a;
  10204. var notARegExp$1 = notARegexp;
  10205. var requireObjectCoercible$2 = requireObjectCoercible$8;
  10206. var correctIsRegExpLogic$1 = correctIsRegexpLogic;
  10207. // eslint-disable-next-line es-x/no-string-prototype-startswith -- safe
  10208. var un$StartsWith = uncurryThis$d(''.startsWith);
  10209. var stringSlice$5 = uncurryThis$d(''.slice);
  10210. var min$2 = Math.min;
  10211. var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegExpLogic$1('startsWith');
  10212. // https://github.com/zloirock/core-js/pull/702
  10213. var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () {
  10214. var descriptor = getOwnPropertyDescriptor$2(String.prototype, 'startsWith');
  10215. return descriptor && !descriptor.writable;
  10216. }();
  10217. // `String.prototype.startsWith` method
  10218. // https://tc39.es/ecma262/#sec-string.prototype.startswith
  10219. $$h({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 }, {
  10220. startsWith: function startsWith(searchString /* , position = 0 */) {
  10221. var that = toString$5(requireObjectCoercible$2(this));
  10222. notARegExp$1(searchString);
  10223. var index = toLength$2(min$2(arguments.length > 1 ? arguments[1] : undefined, that.length));
  10224. var search = toString$5(searchString);
  10225. return un$StartsWith
  10226. ? un$StartsWith(that, search, index)
  10227. : stringSlice$5(that, index, index + search.length) === search;
  10228. }
  10229. });
  10230. /*
  10231. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  10232. Redistribution and use in source and binary forms, with or without
  10233. modification, are permitted provided that the following conditions are met:
  10234. 1. Redistributions of source code must retain the above copyright notice,
  10235. this list of conditions and the following disclaimer.
  10236. 2. Redistributions in binary form must reproduce the above copyright
  10237. notice, this list of conditions and the following disclaimer in
  10238. the documentation and/or other materials provided with the distribution.
  10239. 3. The names of the authors may not be used to endorse or promote products
  10240. derived from this software without specific prior written permission.
  10241. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  10242. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  10243. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  10244. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  10245. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  10246. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  10247. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  10248. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  10249. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  10250. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  10251. */
  10252. var table = [];
  10253. for (var i = 0; i < 256; i++) {
  10254. var t = i;
  10255. for (var j = 0; j < 8; j++) {
  10256. if (t & 1) {
  10257. t = t >>> 1 ^ 0xEDB88320;
  10258. } else {
  10259. t = t >>> 1;
  10260. }
  10261. }
  10262. table[i] = t;
  10263. }
  10264. var Crc32 = /*#__PURE__*/function () {
  10265. function Crc32(crc) {
  10266. _classCallCheck(this, Crc32);
  10267. this.crc = crc || -1;
  10268. }
  10269. _createClass(Crc32, [{
  10270. key: "append",
  10271. value: function append(data) {
  10272. var crc = this.crc | 0;
  10273. for (var offset = 0, length = data.length | 0; offset < length; offset++) {
  10274. crc = crc >>> 8 ^ table[(crc ^ data[offset]) & 0xFF];
  10275. }
  10276. this.crc = crc;
  10277. }
  10278. }, {
  10279. key: "get",
  10280. value: function get() {
  10281. return ~this.crc;
  10282. }
  10283. }]);
  10284. return Crc32;
  10285. }();
  10286. var global$8 = global$F;
  10287. var DOMIterables = domIterables;
  10288. var DOMTokenListPrototype = domTokenListPrototype;
  10289. var ArrayIteratorMethods = es_array_iterator;
  10290. var createNonEnumerableProperty = createNonEnumerableProperty$9;
  10291. var wellKnownSymbol$6 = wellKnownSymbol$t;
  10292. var ITERATOR$2 = wellKnownSymbol$6('iterator');
  10293. var TO_STRING_TAG = wellKnownSymbol$6('toStringTag');
  10294. var ArrayValues = ArrayIteratorMethods.values;
  10295. var handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {
  10296. if (CollectionPrototype) {
  10297. // some Chrome versions have non-configurable methods on DOMTokenList
  10298. if (CollectionPrototype[ITERATOR$2] !== ArrayValues) try {
  10299. createNonEnumerableProperty(CollectionPrototype, ITERATOR$2, ArrayValues);
  10300. } catch (error) {
  10301. CollectionPrototype[ITERATOR$2] = ArrayValues;
  10302. }
  10303. if (!CollectionPrototype[TO_STRING_TAG]) {
  10304. createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);
  10305. }
  10306. if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {
  10307. // some Chrome versions have non-configurable methods on DOMTokenList
  10308. if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {
  10309. createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);
  10310. } catch (error) {
  10311. CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
  10312. }
  10313. }
  10314. }
  10315. };
  10316. for (var COLLECTION_NAME in DOMIterables) {
  10317. handlePrototype(global$8[COLLECTION_NAME] && global$8[COLLECTION_NAME].prototype, COLLECTION_NAME);
  10318. }
  10319. handlePrototype(DOMTokenListPrototype, 'DOMTokenList');
  10320. var anObject$3 = anObject$i;
  10321. var iteratorClose = iteratorClose$2;
  10322. // call something on iterator step with safe closing on error
  10323. var callWithSafeIterationClosing$1 = function (iterator, fn, value, ENTRIES) {
  10324. try {
  10325. return ENTRIES ? fn(anObject$3(value)[0], value[1]) : fn(value);
  10326. } catch (error) {
  10327. iteratorClose(iterator, 'throw', error);
  10328. }
  10329. };
  10330. var bind$3 = functionBindContext;
  10331. var call$5 = functionCall;
  10332. var toObject$2 = toObject$d;
  10333. var callWithSafeIterationClosing = callWithSafeIterationClosing$1;
  10334. var isArrayIteratorMethod = isArrayIteratorMethod$3;
  10335. var isConstructor = isConstructor$4;
  10336. var lengthOfArrayLike = lengthOfArrayLike$f;
  10337. var createProperty$1 = createProperty$6;
  10338. var getIterator$1 = getIterator$4;
  10339. var getIteratorMethod$1 = getIteratorMethod$5;
  10340. var $Array = Array;
  10341. // `Array.from` method implementation
  10342. // https://tc39.es/ecma262/#sec-array.from
  10343. var arrayFrom$1 = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
  10344. var O = toObject$2(arrayLike);
  10345. var IS_CONSTRUCTOR = isConstructor(this);
  10346. var argumentsLength = arguments.length;
  10347. var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
  10348. var mapping = mapfn !== undefined;
  10349. if (mapping) mapfn = bind$3(mapfn, argumentsLength > 2 ? arguments[2] : undefined);
  10350. var iteratorMethod = getIteratorMethod$1(O);
  10351. var index = 0;
  10352. var length, result, step, iterator, next, value;
  10353. // if the target is not iterable or it's an array with the default iterator - use a simple case
  10354. if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {
  10355. iterator = getIterator$1(O, iteratorMethod);
  10356. next = iterator.next;
  10357. result = IS_CONSTRUCTOR ? new this() : [];
  10358. for (;!(step = call$5(next, iterator)).done; index++) {
  10359. value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
  10360. createProperty$1(result, index, value);
  10361. }
  10362. } else {
  10363. length = lengthOfArrayLike(O);
  10364. result = IS_CONSTRUCTOR ? new this(length) : $Array(length);
  10365. for (;length > index; index++) {
  10366. value = mapping ? mapfn(O[index], index) : O[index];
  10367. createProperty$1(result, index, value);
  10368. }
  10369. }
  10370. result.length = index;
  10371. return result;
  10372. };
  10373. var $$g = _export;
  10374. var from = arrayFrom$1;
  10375. var checkCorrectnessOfIteration$1 = checkCorrectnessOfIteration$4;
  10376. var INCORRECT_ITERATION = !checkCorrectnessOfIteration$1(function (iterable) {
  10377. // eslint-disable-next-line es-x/no-array-from -- required for testing
  10378. Array.from(iterable);
  10379. });
  10380. // `Array.from` method
  10381. // https://tc39.es/ecma262/#sec-array.from
  10382. $$g({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
  10383. from: from
  10384. });
  10385. var charAt$4 = stringMultibyte.charAt;
  10386. var toString$4 = toString$a;
  10387. var InternalStateModule$4 = internalState;
  10388. var defineIterator$1 = defineIterator$3;
  10389. var STRING_ITERATOR = 'String Iterator';
  10390. var setInternalState$4 = InternalStateModule$4.set;
  10391. var getInternalState$1 = InternalStateModule$4.getterFor(STRING_ITERATOR);
  10392. // `String.prototype[@@iterator]` method
  10393. // https://tc39.es/ecma262/#sec-string.prototype-@@iterator
  10394. defineIterator$1(String, 'String', function (iterated) {
  10395. setInternalState$4(this, {
  10396. type: STRING_ITERATOR,
  10397. string: toString$4(iterated),
  10398. index: 0
  10399. });
  10400. // `%StringIteratorPrototype%.next` method
  10401. // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
  10402. }, function next() {
  10403. var state = getInternalState$1(this);
  10404. var string = state.string;
  10405. var index = state.index;
  10406. var point;
  10407. if (index >= string.length) return { value: undefined, done: true };
  10408. point = charAt$4(string, index);
  10409. state.index += point.length;
  10410. return { value: point, done: false };
  10411. });
  10412. function encodeText(value) {
  10413. if (typeof TextEncoder == "undefined") {
  10414. value = unescape(encodeURIComponent(value));
  10415. var result = new Uint8Array(value.length);
  10416. for (var i = 0; i < result.length; i++) {
  10417. result[i] = value.charCodeAt(i);
  10418. }
  10419. return result;
  10420. } else {
  10421. return new TextEncoder().encode(value);
  10422. }
  10423. }
  10424. var createTypedArrayConstructor = typedArrayConstructor.exports;
  10425. // `Uint32Array` constructor
  10426. // https://tc39.es/ecma262/#sec-typedarray-objects
  10427. createTypedArrayConstructor('Uint32', function (init) {
  10428. return function Uint32Array(data, byteOffset, length) {
  10429. return init(this, data, byteOffset, length);
  10430. };
  10431. });
  10432. var $$f = _export;
  10433. var global$7 = global$F;
  10434. var arrayBufferModule = arrayBuffer;
  10435. var setSpecies$1 = setSpecies$4;
  10436. var ARRAY_BUFFER = 'ArrayBuffer';
  10437. var ArrayBuffer$1 = arrayBufferModule[ARRAY_BUFFER];
  10438. var NativeArrayBuffer = global$7[ARRAY_BUFFER];
  10439. // `ArrayBuffer` constructor
  10440. // https://tc39.es/ecma262/#sec-arraybuffer-constructor
  10441. $$f({ global: true, constructor: true, forced: NativeArrayBuffer !== ArrayBuffer$1 }, {
  10442. ArrayBuffer: ArrayBuffer$1
  10443. });
  10444. setSpecies$1(ARRAY_BUFFER);
  10445. // Derived from https://github.com/xqdoo00o/jszip/blob/master/lib/sjcl.js and https://github.com/bitwiseshiftleft/sjcl
  10446. /*// deno-lint-ignore-file no-this-alias *
  10447. /*
  10448. * SJCL is open. You can use, modify and redistribute it under a BSD
  10449. * license or under the GNU GPL, version 2.0.
  10450. */
  10451. /** @fileOverview Javascript cryptography implementation.
  10452. *
  10453. * Crush to remove comments, shorten variable names and
  10454. * generally reduce transmission size.
  10455. *
  10456. * @author Emily Stark
  10457. * @author Mike Hamburg
  10458. * @author Dan Boneh
  10459. */
  10460. /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
  10461. /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
  10462. *
  10463. * @author Emily Stark
  10464. * @author Mike Hamburg
  10465. * @author Dan Boneh
  10466. */
  10467. /**
  10468. * Arrays of bits, encoded as arrays of Numbers.
  10469. * @namespace
  10470. * @description
  10471. * <p>
  10472. * These objects are the currency accepted by SJCL's crypto functions.
  10473. * </p>
  10474. *
  10475. * <p>
  10476. * Most of our crypto primitives operate on arrays of 4-byte words internally,
  10477. * but many of them can take arguments that are not a multiple of 4 bytes.
  10478. * This library encodes arrays of bits (whose size need not be a multiple of 8
  10479. * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
  10480. * array of words, 32 bits at a time. Since the words are double-precision
  10481. * floating point numbers, they fit some extra data. We use this (in a private,
  10482. * possibly-changing manner) to encode the number of bits actually present
  10483. * in the last word of the array.
  10484. * </p>
  10485. *
  10486. * <p>
  10487. * Because bitwise ops clear this out-of-band data, these arrays can be passed
  10488. * to ciphers like AES which want arrays of words.
  10489. * </p>
  10490. */
  10491. var bitArray = {
  10492. /**
  10493. * Concatenate two bit arrays.
  10494. * @param {bitArray} a1 The first array.
  10495. * @param {bitArray} a2 The second array.
  10496. * @return {bitArray} The concatenation of a1 and a2.
  10497. */
  10498. concat: function concat(a1, a2) {
  10499. if (a1.length === 0 || a2.length === 0) {
  10500. return a1.concat(a2);
  10501. }
  10502. var last = a1[a1.length - 1],
  10503. shift = bitArray.getPartial(last);
  10504. if (shift === 32) {
  10505. return a1.concat(a2);
  10506. } else {
  10507. return bitArray._shiftRight(a2, shift, last | 0, a1.slice(0, a1.length - 1));
  10508. }
  10509. },
  10510. /**
  10511. * Find the length of an array of bits.
  10512. * @param {bitArray} a The array.
  10513. * @return {Number} The length of a, in bits.
  10514. */
  10515. bitLength: function bitLength(a) {
  10516. var l = a.length;
  10517. if (l === 0) {
  10518. return 0;
  10519. }
  10520. var x = a[l - 1];
  10521. return (l - 1) * 32 + bitArray.getPartial(x);
  10522. },
  10523. /**
  10524. * Truncate an array.
  10525. * @param {bitArray} a The array.
  10526. * @param {Number} len The length to truncate to, in bits.
  10527. * @return {bitArray} A new array, truncated to len bits.
  10528. */
  10529. clamp: function clamp(a, len) {
  10530. if (a.length * 32 < len) {
  10531. return a;
  10532. }
  10533. a = a.slice(0, Math.ceil(len / 32));
  10534. var l = a.length;
  10535. len = len & 31;
  10536. if (l > 0 && len) {
  10537. a[l - 1] = bitArray.partial(len, a[l - 1] & 0x80000000 >> len - 1, 1);
  10538. }
  10539. return a;
  10540. },
  10541. /**
  10542. * Make a partial word for a bit array.
  10543. * @param {Number} len The number of bits in the word.
  10544. * @param {Number} x The bits.
  10545. * @param {Number} [_end=0] Pass 1 if x has already been shifted to the high side.
  10546. * @return {Number} The partial word.
  10547. */
  10548. partial: function partial(len, x, _end) {
  10549. if (len === 32) {
  10550. return x;
  10551. }
  10552. return (_end ? x | 0 : x << 32 - len) + len * 0x10000000000;
  10553. },
  10554. /**
  10555. * Get the number of bits used by a partial word.
  10556. * @param {Number} x The partial word.
  10557. * @return {Number} The number of bits used by the partial word.
  10558. */
  10559. getPartial: function getPartial(x) {
  10560. return Math.round(x / 0x10000000000) || 32;
  10561. },
  10562. /** Shift an array right.
  10563. * @param {bitArray} a The array to shift.
  10564. * @param {Number} shift The number of bits to shift.
  10565. * @param {Number} [carry=0] A byte to carry in
  10566. * @param {bitArray} [out=[]] An array to prepend to the output.
  10567. * @private
  10568. */
  10569. _shiftRight: function _shiftRight(a, shift, carry, out) {
  10570. if (out === undefined) {
  10571. out = [];
  10572. }
  10573. for (; shift >= 32; shift -= 32) {
  10574. out.push(carry);
  10575. carry = 0;
  10576. }
  10577. if (shift === 0) {
  10578. return out.concat(a);
  10579. }
  10580. for (var i = 0; i < a.length; i++) {
  10581. out.push(carry | a[i] >>> shift);
  10582. carry = a[i] << 32 - shift;
  10583. }
  10584. var last2 = a.length ? a[a.length - 1] : 0;
  10585. var shift2 = bitArray.getPartial(last2);
  10586. out.push(bitArray.partial(shift + shift2 & 31, shift + shift2 > 32 ? carry : out.pop(), 1));
  10587. return out;
  10588. }
  10589. };
  10590. /** @fileOverview Bit array codec implementations.
  10591. *
  10592. * @author Emily Stark
  10593. * @author Mike Hamburg
  10594. * @author Dan Boneh
  10595. */
  10596. /**
  10597. * Arrays of bytes
  10598. * @namespace
  10599. */
  10600. var codec = {
  10601. bytes: {
  10602. /** Convert from a bitArray to an array of bytes. */
  10603. fromBits: function fromBits(arr) {
  10604. var bl = bitArray.bitLength(arr);
  10605. var byteLength = bl / 8;
  10606. var out = new Uint8Array(byteLength);
  10607. var tmp;
  10608. for (var i = 0; i < byteLength; i++) {
  10609. if ((i & 3) === 0) {
  10610. tmp = arr[i / 4];
  10611. }
  10612. out[i] = tmp >>> 24;
  10613. tmp <<= 8;
  10614. }
  10615. return out;
  10616. },
  10617. /** Convert from an array of bytes to a bitArray. */
  10618. toBits: function toBits(bytes) {
  10619. var out = [];
  10620. var i;
  10621. var tmp = 0;
  10622. for (i = 0; i < bytes.length; i++) {
  10623. tmp = tmp << 8 | bytes[i];
  10624. if ((i & 3) === 3) {
  10625. out.push(tmp);
  10626. tmp = 0;
  10627. }
  10628. }
  10629. if (i & 3) {
  10630. out.push(bitArray.partial(8 * (i & 3), tmp));
  10631. }
  10632. return out;
  10633. }
  10634. }
  10635. };
  10636. var hash = {};
  10637. /**
  10638. * Context for a SHA-1 operation in progress.
  10639. * @constructor
  10640. */
  10641. hash.sha1 = function (hash) {
  10642. if (hash) {
  10643. this._h = hash._h.slice(0);
  10644. this._buffer = hash._buffer.slice(0);
  10645. this._length = hash._length;
  10646. } else {
  10647. this.reset();
  10648. }
  10649. };
  10650. hash.sha1.prototype = {
  10651. /**
  10652. * The hash's block size, in bits.
  10653. * @constant
  10654. */
  10655. blockSize: 512,
  10656. /**
  10657. * Reset the hash state.
  10658. * @return this
  10659. */
  10660. reset: function reset() {
  10661. var sha1 = this;
  10662. sha1._h = this._init.slice(0);
  10663. sha1._buffer = [];
  10664. sha1._length = 0;
  10665. return sha1;
  10666. },
  10667. /**
  10668. * Input several words to the hash.
  10669. * @param {bitArray|String} data the data to hash.
  10670. * @return this
  10671. */
  10672. update: function update(data) {
  10673. var sha1 = this;
  10674. if (typeof data === "string") {
  10675. data = codec.utf8String.toBits(data);
  10676. }
  10677. var b = sha1._buffer = bitArray.concat(sha1._buffer, data);
  10678. var ol = sha1._length;
  10679. var nl = sha1._length = ol + bitArray.bitLength(data);
  10680. if (nl > 9007199254740991) {
  10681. throw new Error("Cannot hash more than 2^53 - 1 bits");
  10682. }
  10683. var c = new Uint32Array(b);
  10684. var j = 0;
  10685. for (var i = sha1.blockSize + ol - (sha1.blockSize + ol & sha1.blockSize - 1); i <= nl; i += sha1.blockSize) {
  10686. sha1._block(c.subarray(16 * j, 16 * (j + 1)));
  10687. j += 1;
  10688. }
  10689. b.splice(0, 16 * j);
  10690. return sha1;
  10691. },
  10692. /**
  10693. * Complete hashing and output the hash value.
  10694. * @return {bitArray} The hash value, an array of 5 big-endian words. TODO
  10695. */
  10696. finalize: function finalize() {
  10697. var sha1 = this;
  10698. var b = sha1._buffer;
  10699. var h = sha1._h; // Round out and push the buffer
  10700. b = bitArray.concat(b, [bitArray.partial(1, 1)]); // Round out the buffer to a multiple of 16 words, less the 2 length words.
  10701. for (var i = b.length + 2; i & 15; i++) {
  10702. b.push(0);
  10703. } // append the length
  10704. b.push(Math.floor(sha1._length / 0x100000000));
  10705. b.push(sha1._length | 0);
  10706. while (b.length) {
  10707. sha1._block(b.splice(0, 16));
  10708. }
  10709. sha1.reset();
  10710. return h;
  10711. },
  10712. /**
  10713. * The SHA-1 initialization vector.
  10714. * @private
  10715. */
  10716. _init: [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0],
  10717. /**
  10718. * The SHA-1 hash key.
  10719. * @private
  10720. */
  10721. _key: [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6],
  10722. /**
  10723. * The SHA-1 logical functions f(0), f(1), ..., f(79).
  10724. * @private
  10725. */
  10726. _f: function _f(t, b, c, d) {
  10727. if (t <= 19) {
  10728. return b & c | ~b & d;
  10729. } else if (t <= 39) {
  10730. return b ^ c ^ d;
  10731. } else if (t <= 59) {
  10732. return b & c | b & d | c & d;
  10733. } else if (t <= 79) {
  10734. return b ^ c ^ d;
  10735. }
  10736. },
  10737. /**
  10738. * Circular left-shift operator.
  10739. * @private
  10740. */
  10741. _S: function _S(n, x) {
  10742. return x << n | x >>> 32 - n;
  10743. },
  10744. /**
  10745. * Perform one cycle of SHA-1.
  10746. * @param {Uint32Array|bitArray} words one block of words.
  10747. * @private
  10748. */
  10749. _block: function _block(words) {
  10750. var sha1 = this;
  10751. var h = sha1._h; // When words is passed to _block, it has 16 elements. SHA1 _block
  10752. // function extends words with new elements (at the end there are 80 elements).
  10753. // The problem is that if we use Uint32Array instead of Array,
  10754. // the length of Uint32Array cannot be changed. Thus, we replace words with a
  10755. // normal Array here.
  10756. var w = Array(80); // do not use Uint32Array here as the instantiation is slower
  10757. for (var j = 0; j < 16; j++) {
  10758. w[j] = words[j];
  10759. }
  10760. var a = h[0];
  10761. var b = h[1];
  10762. var c = h[2];
  10763. var d = h[3];
  10764. var e = h[4];
  10765. for (var t = 0; t <= 79; t++) {
  10766. if (t >= 16) {
  10767. w[t] = sha1._S(1, w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16]);
  10768. }
  10769. var tmp = sha1._S(5, a) + sha1._f(t, b, c, d) + e + w[t] + sha1._key[Math.floor(t / 20)] | 0;
  10770. e = d;
  10771. d = c;
  10772. c = sha1._S(30, b);
  10773. b = a;
  10774. a = tmp;
  10775. }
  10776. h[0] = h[0] + a | 0;
  10777. h[1] = h[1] + b | 0;
  10778. h[2] = h[2] + c | 0;
  10779. h[3] = h[3] + d | 0;
  10780. h[4] = h[4] + e | 0;
  10781. }
  10782. };
  10783. /** @fileOverview Low-level AES implementation.
  10784. *
  10785. * This file contains a low-level implementation of AES, optimized for
  10786. * size and for efficiency on several browsers. It is based on
  10787. * OpenSSL's aes_core.c, a public-domain implementation by Vincent
  10788. * Rijmen, Antoon Bosselaers and Paulo Barreto.
  10789. *
  10790. * An older version of this implementation is available in the public
  10791. * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
  10792. * Stanford University 2008-2010 and BSD-licensed for liability
  10793. * reasons.
  10794. *
  10795. * @author Emily Stark
  10796. * @author Mike Hamburg
  10797. * @author Dan Boneh
  10798. */
  10799. var cipher = {};
  10800. /**
  10801. * Schedule out an AES key for both encryption and decryption. This
  10802. * is a low-level class. Use a cipher mode to do bulk encryption.
  10803. *
  10804. * @constructor
  10805. * @param {Array} key The key as an array of 4, 6 or 8 words.
  10806. */
  10807. cipher.aes = /*#__PURE__*/function () {
  10808. function _class(key) {
  10809. _classCallCheck(this, _class);
  10810. /**
  10811. * The expanded S-box and inverse S-box tables. These will be computed
  10812. * on the client so that we don't have to send them down the wire.
  10813. *
  10814. * There are two tables, _tables[0] is for encryption and
  10815. * _tables[1] is for decryption.
  10816. *
  10817. * The first 4 sub-tables are the expanded S-box with MixColumns. The
  10818. * last (_tables[01][4]) is the S-box itself.
  10819. *
  10820. * @private
  10821. */
  10822. var aes = this;
  10823. aes._tables = [[[], [], [], [], []], [[], [], [], [], []]];
  10824. if (!aes._tables[0][0][0]) {
  10825. aes._precompute();
  10826. }
  10827. var sbox = aes._tables[0][4];
  10828. var decTable = aes._tables[1];
  10829. var keyLen = key.length;
  10830. var i,
  10831. encKey,
  10832. decKey,
  10833. rcon = 1;
  10834. if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {
  10835. throw new Error("invalid aes key size");
  10836. }
  10837. aes._key = [encKey = key.slice(0), decKey = []]; // schedule encryption keys
  10838. for (i = keyLen; i < 4 * keyLen + 28; i++) {
  10839. var tmp = encKey[i - 1]; // apply sbox
  10840. if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {
  10841. tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; // shift rows and add rcon
  10842. if (i % keyLen === 0) {
  10843. tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;
  10844. rcon = rcon << 1 ^ (rcon >> 7) * 283;
  10845. }
  10846. }
  10847. encKey[i] = encKey[i - keyLen] ^ tmp;
  10848. } // schedule decryption keys
  10849. for (var j = 0; i; j++, i--) {
  10850. var _tmp = encKey[j & 3 ? i : i - 4];
  10851. if (i <= 4 || j < 4) {
  10852. decKey[j] = _tmp;
  10853. } else {
  10854. decKey[j] = decTable[0][sbox[_tmp >>> 24]] ^ decTable[1][sbox[_tmp >> 16 & 255]] ^ decTable[2][sbox[_tmp >> 8 & 255]] ^ decTable[3][sbox[_tmp & 255]];
  10855. }
  10856. }
  10857. } // public
  10858. /* Something like this might appear here eventually
  10859. name: "AES",
  10860. blockSize: 4,
  10861. keySizes: [4,6,8],
  10862. */
  10863. /**
  10864. * Encrypt an array of 4 big-endian words.
  10865. * @param {Array} data The plaintext.
  10866. * @return {Array} The ciphertext.
  10867. */
  10868. _createClass(_class, [{
  10869. key: "encrypt",
  10870. value: function encrypt(data) {
  10871. return this._crypt(data, 0);
  10872. }
  10873. /**
  10874. * Decrypt an array of 4 big-endian words.
  10875. * @param {Array} data The ciphertext.
  10876. * @return {Array} The plaintext.
  10877. */
  10878. }, {
  10879. key: "decrypt",
  10880. value: function decrypt(data) {
  10881. return this._crypt(data, 1);
  10882. }
  10883. /**
  10884. * Expand the S-box tables.
  10885. *
  10886. * @private
  10887. */
  10888. }, {
  10889. key: "_precompute",
  10890. value: function _precompute() {
  10891. var encTable = this._tables[0];
  10892. var decTable = this._tables[1];
  10893. var sbox = encTable[4];
  10894. var sboxInv = decTable[4];
  10895. var d = [];
  10896. var th = [];
  10897. var xInv, x2, x4, x8; // Compute double and third tables
  10898. for (var i = 0; i < 256; i++) {
  10899. th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;
  10900. }
  10901. for (var x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {
  10902. // Compute sbox
  10903. var s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;
  10904. s = s >> 8 ^ s & 255 ^ 99;
  10905. sbox[x] = s;
  10906. sboxInv[s] = x; // Compute MixColumns
  10907. x8 = d[x4 = d[x2 = d[x]]];
  10908. var tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;
  10909. var tEnc = d[s] * 0x101 ^ s * 0x1010100;
  10910. for (var _i = 0; _i < 4; _i++) {
  10911. encTable[_i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;
  10912. decTable[_i][s] = tDec = tDec << 24 ^ tDec >>> 8;
  10913. }
  10914. } // Compactify. Considerable speedup on Firefox.
  10915. for (var _i2 = 0; _i2 < 5; _i2++) {
  10916. encTable[_i2] = encTable[_i2].slice(0);
  10917. decTable[_i2] = decTable[_i2].slice(0);
  10918. }
  10919. }
  10920. /**
  10921. * Encryption and decryption core.
  10922. * @param {Array} input Four words to be encrypted or decrypted.
  10923. * @param dir The direction, 0 for encrypt and 1 for decrypt.
  10924. * @return {Array} The four encrypted or decrypted words.
  10925. * @private
  10926. */
  10927. }, {
  10928. key: "_crypt",
  10929. value: function _crypt(input, dir) {
  10930. if (input.length !== 4) {
  10931. throw new Error("invalid aes block size");
  10932. }
  10933. var key = this._key[dir];
  10934. var nInnerRounds = key.length / 4 - 2;
  10935. var out = [0, 0, 0, 0];
  10936. var table = this._tables[dir]; // load up the tables
  10937. var t0 = table[0];
  10938. var t1 = table[1];
  10939. var t2 = table[2];
  10940. var t3 = table[3];
  10941. var sbox = table[4]; // state variables a,b,c,d are loaded with pre-whitened data
  10942. var a = input[0] ^ key[0];
  10943. var b = input[dir ? 3 : 1] ^ key[1];
  10944. var c = input[2] ^ key[2];
  10945. var d = input[dir ? 1 : 3] ^ key[3];
  10946. var kIndex = 4;
  10947. var a2, b2, c2; // Inner rounds. Cribbed from OpenSSL.
  10948. for (var i = 0; i < nInnerRounds; i++) {
  10949. a2 = t0[a >>> 24] ^ t1[b >> 16 & 255] ^ t2[c >> 8 & 255] ^ t3[d & 255] ^ key[kIndex];
  10950. b2 = t0[b >>> 24] ^ t1[c >> 16 & 255] ^ t2[d >> 8 & 255] ^ t3[a & 255] ^ key[kIndex + 1];
  10951. c2 = t0[c >>> 24] ^ t1[d >> 16 & 255] ^ t2[a >> 8 & 255] ^ t3[b & 255] ^ key[kIndex + 2];
  10952. d = t0[d >>> 24] ^ t1[a >> 16 & 255] ^ t2[b >> 8 & 255] ^ t3[c & 255] ^ key[kIndex + 3];
  10953. kIndex += 4;
  10954. a = a2;
  10955. b = b2;
  10956. c = c2;
  10957. } // Last round.
  10958. for (var _i3 = 0; _i3 < 4; _i3++) {
  10959. out[dir ? 3 & -_i3 : _i3] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];
  10960. a2 = a;
  10961. a = b;
  10962. b = c;
  10963. c = d;
  10964. d = a2;
  10965. }
  10966. return out;
  10967. }
  10968. }]);
  10969. return _class;
  10970. }();
  10971. /**
  10972. * Random values
  10973. * @namespace
  10974. */
  10975. var random = {
  10976. /**
  10977. * Generate random words with pure js, cryptographically not as strong & safe as native implementation.
  10978. * @param {TypedArray} typedArray The array to fill.
  10979. * @return {TypedArray} The random values.
  10980. */
  10981. getRandomValues: function getRandomValues(typedArray) {
  10982. var words = new Uint32Array(typedArray.buffer);
  10983. var r = function r(m_w) {
  10984. var m_z = 0x3ade68b1;
  10985. var mask = 0xffffffff;
  10986. return function () {
  10987. m_z = 0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10) & mask;
  10988. m_w = 0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10) & mask;
  10989. var result = ((m_z << 0x10) + m_w & mask) / 0x100000000 + .5;
  10990. return result * (Math.random() > .5 ? 1 : -1);
  10991. };
  10992. };
  10993. for (var i = 0, rcache; i < typedArray.length; i += 4) {
  10994. var _r = r((rcache || Math.random()) * 0x100000000);
  10995. rcache = _r() * 0x3ade67b7;
  10996. words[i / 4] = _r() * 0x100000000 | 0;
  10997. }
  10998. return typedArray;
  10999. }
  11000. };
  11001. /** @fileOverview CTR mode implementation.
  11002. *
  11003. * Special thanks to Roy Nicholson for pointing out a bug in our
  11004. * implementation.
  11005. *
  11006. * @author Emily Stark
  11007. * @author Mike Hamburg
  11008. * @author Dan Boneh
  11009. */
  11010. /** Brian Gladman's CTR Mode.
  11011. * @constructor
  11012. * @param {Object} _prf The aes instance to generate key.
  11013. * @param {bitArray} _iv The iv for ctr mode, it must be 128 bits.
  11014. */
  11015. var mode = {};
  11016. /**
  11017. * Brian Gladman's CTR Mode.
  11018. * @namespace
  11019. */
  11020. mode.ctrGladman = /*#__PURE__*/function () {
  11021. function _class2(prf, iv) {
  11022. _classCallCheck(this, _class2);
  11023. this._prf = prf;
  11024. this._initIv = iv;
  11025. this._iv = iv;
  11026. }
  11027. _createClass(_class2, [{
  11028. key: "reset",
  11029. value: function reset() {
  11030. this._iv = this._initIv;
  11031. }
  11032. /** Input some data to calculate.
  11033. * @param {bitArray} data the data to process, it must be intergral multiple of 128 bits unless it's the last.
  11034. */
  11035. }, {
  11036. key: "update",
  11037. value: function update(data) {
  11038. return this.calculate(this._prf, data, this._iv);
  11039. }
  11040. }, {
  11041. key: "incWord",
  11042. value: function incWord(word) {
  11043. if ((word >> 24 & 0xff) === 0xff) {
  11044. //overflow
  11045. var b1 = word >> 16 & 0xff;
  11046. var b2 = word >> 8 & 0xff;
  11047. var b3 = word & 0xff;
  11048. if (b1 === 0xff) {
  11049. // overflow b1
  11050. b1 = 0;
  11051. if (b2 === 0xff) {
  11052. b2 = 0;
  11053. if (b3 === 0xff) {
  11054. b3 = 0;
  11055. } else {
  11056. ++b3;
  11057. }
  11058. } else {
  11059. ++b2;
  11060. }
  11061. } else {
  11062. ++b1;
  11063. }
  11064. word = 0;
  11065. word += b1 << 16;
  11066. word += b2 << 8;
  11067. word += b3;
  11068. } else {
  11069. word += 0x01 << 24;
  11070. }
  11071. return word;
  11072. }
  11073. }, {
  11074. key: "incCounter",
  11075. value: function incCounter(counter) {
  11076. if ((counter[0] = this.incWord(counter[0])) === 0) {
  11077. // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8
  11078. counter[1] = this.incWord(counter[1]);
  11079. }
  11080. }
  11081. }, {
  11082. key: "calculate",
  11083. value: function calculate(prf, data, iv) {
  11084. var l;
  11085. if (!(l = data.length)) {
  11086. return [];
  11087. }
  11088. var bl = bitArray.bitLength(data);
  11089. for (var i = 0; i < l; i += 4) {
  11090. this.incCounter(iv);
  11091. var e = prf.encrypt(iv);
  11092. data[i] ^= e[0];
  11093. data[i + 1] ^= e[1];
  11094. data[i + 2] ^= e[2];
  11095. data[i + 3] ^= e[3];
  11096. }
  11097. return bitArray.clamp(data, bl);
  11098. }
  11099. }]);
  11100. return _class2;
  11101. }();
  11102. var misc = {
  11103. importKey: function importKey(password) {
  11104. return new misc.hmacSha1(codec.bytes.toBits(password));
  11105. },
  11106. pbkdf2: function pbkdf2(prf, salt, count, length) {
  11107. count = count || 10000;
  11108. if (length < 0 || count < 0) {
  11109. throw new Error("invalid params to pbkdf2");
  11110. }
  11111. var byteLength = (length >> 5) + 1 << 2;
  11112. var u, ui, i, j, k;
  11113. var arrayBuffer = new ArrayBuffer(byteLength);
  11114. var out = new DataView(arrayBuffer);
  11115. var outLength = 0;
  11116. var b = bitArray;
  11117. salt = codec.bytes.toBits(salt);
  11118. for (k = 1; outLength < (byteLength || 1); k++) {
  11119. u = ui = prf.encrypt(b.concat(salt, [k]));
  11120. for (i = 1; i < count; i++) {
  11121. ui = prf.encrypt(ui);
  11122. for (j = 0; j < ui.length; j++) {
  11123. u[j] ^= ui[j];
  11124. }
  11125. }
  11126. for (i = 0; outLength < (byteLength || 1) && i < u.length; i++) {
  11127. out.setInt32(outLength, u[i]);
  11128. outLength += 4;
  11129. }
  11130. }
  11131. return arrayBuffer.slice(0, length / 8);
  11132. }
  11133. };
  11134. /** @fileOverview HMAC implementation.
  11135. *
  11136. * @author Emily Stark
  11137. * @author Mike Hamburg
  11138. * @author Dan Boneh
  11139. */
  11140. /** HMAC with the specified hash function.
  11141. * @constructor
  11142. * @param {bitArray} key the key for HMAC.
  11143. * @param {Object} [Hash=hash.sha1] The hash function to use.
  11144. */
  11145. misc.hmacSha1 = /*#__PURE__*/function () {
  11146. function _class3(key) {
  11147. _classCallCheck(this, _class3);
  11148. var hmac = this;
  11149. var Hash = hmac._hash = hash.sha1;
  11150. var exKey = [[], []];
  11151. var bs = Hash.prototype.blockSize / 32;
  11152. hmac._baseHash = [new Hash(), new Hash()];
  11153. if (key.length > bs) {
  11154. key = Hash.hash(key);
  11155. }
  11156. for (var i = 0; i < bs; i++) {
  11157. exKey[0][i] = key[i] ^ 0x36363636;
  11158. exKey[1][i] = key[i] ^ 0x5C5C5C5C;
  11159. }
  11160. hmac._baseHash[0].update(exKey[0]);
  11161. hmac._baseHash[1].update(exKey[1]);
  11162. hmac._resultHash = new Hash(hmac._baseHash[0]);
  11163. }
  11164. _createClass(_class3, [{
  11165. key: "reset",
  11166. value: function reset() {
  11167. var hmac = this;
  11168. hmac._resultHash = new hmac._hash(hmac._baseHash[0]);
  11169. hmac._updated = false;
  11170. }
  11171. }, {
  11172. key: "update",
  11173. value: function update(data) {
  11174. var hmac = this;
  11175. hmac._updated = true;
  11176. hmac._resultHash.update(data);
  11177. }
  11178. }, {
  11179. key: "digest",
  11180. value: function digest() {
  11181. var hmac = this;
  11182. var w = hmac._resultHash.finalize();
  11183. var result = new hmac._hash(hmac._baseHash[1]).update(w).finalize();
  11184. hmac.reset();
  11185. return result;
  11186. }
  11187. }, {
  11188. key: "encrypt",
  11189. value: function encrypt(data) {
  11190. if (!this._updated) {
  11191. this.update(data);
  11192. return this.digest(data);
  11193. } else {
  11194. throw new Error("encrypt on already updated hmac called!");
  11195. }
  11196. }
  11197. }]);
  11198. return _class3;
  11199. }();
  11200. var deriveBits = _async(function (algorithm, baseKey, length) {
  11201. if (CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof crypto.subtle.deriveBits == "function") {
  11202. return crypto.subtle.deriveBits(algorithm, baseKey, length);
  11203. } else {
  11204. return misc.pbkdf2(baseKey, algorithm.salt, DERIVED_BITS_ALGORITHM.iterations, length);
  11205. }
  11206. });
  11207. var createKeys$1 = _async(function (target, password, salt) {
  11208. var encodedPassword = encodeText(password);
  11209. return _await(importKey(RAW_FORMAT, encodedPassword, BASE_KEY_ALGORITHM, false, DERIVED_BITS_USAGE), function (basekey) {
  11210. return _await(deriveBits(Object.assign({
  11211. salt: salt
  11212. }, DERIVED_BITS_ALGORITHM), basekey, 8 * (KEY_LENGTH[target.strength] * 2 + 2)), function (derivedBits) {
  11213. var compositeKey = new Uint8Array(derivedBits);
  11214. target.keys = {
  11215. key: codecBytes.toBits(subarray(compositeKey, 0, KEY_LENGTH[target.strength])),
  11216. authentication: codecBytes.toBits(subarray(compositeKey, KEY_LENGTH[target.strength], KEY_LENGTH[target.strength] * 2)),
  11217. passwordVerification: subarray(compositeKey, KEY_LENGTH[target.strength] * 2)
  11218. };
  11219. });
  11220. });
  11221. });
  11222. var createEncryptionKeys = _async(function (encrypt, password) {
  11223. var salt = getRandomValues(new Uint8Array(SALT_LENGTH[encrypt.strength]));
  11224. return _await(createKeys$1(encrypt, password, salt), function () {
  11225. return concat$1(salt, encrypt.keys.passwordVerification);
  11226. });
  11227. });
  11228. var createDecryptionKeys = _async(function (decrypt, preambleArray, password) {
  11229. return _await(createKeys$1(decrypt, password, subarray(preambleArray, 0, SALT_LENGTH[decrypt.strength])), function () {
  11230. var passwordVerification = subarray(preambleArray, SALT_LENGTH[decrypt.strength]);
  11231. var passwordVerificationKey = decrypt.keys.passwordVerification;
  11232. if (passwordVerificationKey[0] != passwordVerification[0] || passwordVerificationKey[1] != passwordVerification[1]) {
  11233. throw new Error(ERR_INVALID_PASSWORD);
  11234. }
  11235. });
  11236. });
  11237. var ERR_INVALID_PASSWORD = "Invalid pasword";
  11238. var BLOCK_LENGTH = 16;
  11239. var RAW_FORMAT = "raw";
  11240. var PBKDF2_ALGORITHM = {
  11241. name: "PBKDF2"
  11242. };
  11243. var HASH_ALGORITHM = {
  11244. name: "HMAC"
  11245. };
  11246. var HASH_FUNCTION = "SHA-1";
  11247. var BASE_KEY_ALGORITHM = Object.assign({
  11248. hash: HASH_ALGORITHM
  11249. }, PBKDF2_ALGORITHM);
  11250. var DERIVED_BITS_ALGORITHM = Object.assign({
  11251. iterations: 1000,
  11252. hash: {
  11253. name: HASH_FUNCTION
  11254. }
  11255. }, PBKDF2_ALGORITHM);
  11256. var DERIVED_BITS_USAGE = ["deriveBits"];
  11257. var SALT_LENGTH = [8, 12, 16];
  11258. var KEY_LENGTH = [16, 24, 32];
  11259. var SIGNATURE_LENGTH = 10;
  11260. var COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];
  11261. var CRYPTO_API_SUPPORTED = typeof crypto != "undefined";
  11262. var SUBTLE_API_SUPPORTED = CRYPTO_API_SUPPORTED && typeof crypto.subtle != "undefined";
  11263. var codecBytes = codec.bytes;
  11264. var Aes = cipher.aes;
  11265. var CtrGladman = mode.ctrGladman;
  11266. var HmacSha1 = misc.hmacSha1;
  11267. var AESDecrypt = /*#__PURE__*/function () {
  11268. function AESDecrypt(password, signed, strength) {
  11269. _classCallCheck(this, AESDecrypt);
  11270. Object.assign(this, {
  11271. password: password,
  11272. signed: signed,
  11273. strength: strength - 1,
  11274. pendingInput: new Uint8Array(0)
  11275. });
  11276. }
  11277. _createClass(AESDecrypt, [{
  11278. key: "append",
  11279. value: function append(input) {
  11280. try {
  11281. var _this2 = this;
  11282. var aesCrypto = _this2;
  11283. return _await(_invoke(function () {
  11284. if (aesCrypto.password) {
  11285. var preamble = subarray(input, 0, SALT_LENGTH[aesCrypto.strength] + 2);
  11286. return _await(createDecryptionKeys(aesCrypto, preamble, aesCrypto.password), function () {
  11287. aesCrypto.password = null;
  11288. aesCrypto.aesCtrGladman = new CtrGladman(new Aes(aesCrypto.keys.key), Array.from(COUNTER_DEFAULT_VALUE));
  11289. aesCrypto.hmac = new HmacSha1(aesCrypto.keys.authentication);
  11290. input = subarray(input, SALT_LENGTH[aesCrypto.strength] + 2);
  11291. });
  11292. }
  11293. }, function () {
  11294. var output = new Uint8Array(input.length - SIGNATURE_LENGTH - (input.length - SIGNATURE_LENGTH) % BLOCK_LENGTH);
  11295. return _append(aesCrypto, input, output, 0, SIGNATURE_LENGTH, true);
  11296. }));
  11297. } catch (e) {
  11298. return Promise.reject(e);
  11299. }
  11300. }
  11301. }, {
  11302. key: "flush",
  11303. value: function flush() {
  11304. var aesCrypto = this;
  11305. var pendingInput = aesCrypto.pendingInput;
  11306. var chunkToDecrypt = subarray(pendingInput, 0, pendingInput.length - SIGNATURE_LENGTH);
  11307. var originalSignature = subarray(pendingInput, pendingInput.length - SIGNATURE_LENGTH);
  11308. var decryptedChunkArray = new Uint8Array(0);
  11309. if (chunkToDecrypt.length) {
  11310. var encryptedChunk = codecBytes.toBits(chunkToDecrypt);
  11311. aesCrypto.hmac.update(encryptedChunk);
  11312. var decryptedChunk = aesCrypto.aesCtrGladman.update(encryptedChunk);
  11313. decryptedChunkArray = codecBytes.fromBits(decryptedChunk);
  11314. }
  11315. var valid = true;
  11316. if (aesCrypto.signed) {
  11317. var signature = subarray(codecBytes.fromBits(aesCrypto.hmac.digest()), 0, SIGNATURE_LENGTH);
  11318. for (var indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
  11319. if (signature[indexSignature] != originalSignature[indexSignature]) {
  11320. valid = false;
  11321. }
  11322. }
  11323. }
  11324. return {
  11325. valid: valid,
  11326. data: decryptedChunkArray
  11327. };
  11328. }
  11329. }]);
  11330. return AESDecrypt;
  11331. }();
  11332. var AESEncrypt = /*#__PURE__*/function () {
  11333. function AESEncrypt(password, strength) {
  11334. _classCallCheck(this, AESEncrypt);
  11335. Object.assign(this, {
  11336. password: password,
  11337. strength: strength - 1,
  11338. pendingInput: new Uint8Array(0)
  11339. });
  11340. }
  11341. _createClass(AESEncrypt, [{
  11342. key: "append",
  11343. value: function append(input) {
  11344. try {
  11345. var _this4 = this;
  11346. var aesCrypto = _this4;
  11347. var preamble = new Uint8Array(0);
  11348. return _await(_invoke(function () {
  11349. if (aesCrypto.password) {
  11350. return _await(createEncryptionKeys(aesCrypto, aesCrypto.password), function (_createEncryptionKeys) {
  11351. preamble = _createEncryptionKeys;
  11352. aesCrypto.password = null;
  11353. aesCrypto.aesCtrGladman = new CtrGladman(new Aes(aesCrypto.keys.key), Array.from(COUNTER_DEFAULT_VALUE));
  11354. aesCrypto.hmac = new HmacSha1(aesCrypto.keys.authentication);
  11355. });
  11356. }
  11357. }, function () {
  11358. var output = new Uint8Array(preamble.length + input.length - input.length % BLOCK_LENGTH);
  11359. output.set(preamble, 0);
  11360. return _append(aesCrypto, input, output, preamble.length, 0);
  11361. }));
  11362. } catch (e) {
  11363. return Promise.reject(e);
  11364. }
  11365. }
  11366. }, {
  11367. key: "flush",
  11368. value: function flush() {
  11369. var aesCrypto = this;
  11370. var encryptedChunkArray = new Uint8Array(0);
  11371. if (aesCrypto.pendingInput.length) {
  11372. var encryptedChunk = aesCrypto.aesCtrGladman.update(codecBytes.toBits(aesCrypto.pendingInput));
  11373. aesCrypto.hmac.update(encryptedChunk);
  11374. encryptedChunkArray = codecBytes.fromBits(encryptedChunk);
  11375. }
  11376. var signature = subarray(codecBytes.fromBits(aesCrypto.hmac.digest()), 0, SIGNATURE_LENGTH);
  11377. return {
  11378. data: concat$1(encryptedChunkArray, signature),
  11379. signature: signature
  11380. };
  11381. }
  11382. }]);
  11383. return AESEncrypt;
  11384. }();
  11385. function _append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
  11386. var inputLength = input.length - paddingEnd;
  11387. if (aesCrypto.pendingInput.length) {
  11388. input = concat$1(aesCrypto.pendingInput, input);
  11389. output = expand(output, inputLength - inputLength % BLOCK_LENGTH);
  11390. }
  11391. var offset;
  11392. for (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {
  11393. var inputChunk = codecBytes.toBits(subarray(input, offset, offset + BLOCK_LENGTH));
  11394. if (verifySignature) {
  11395. aesCrypto.hmac.update(inputChunk);
  11396. }
  11397. var outputChunk = aesCrypto.aesCtrGladman.update(inputChunk);
  11398. if (!verifySignature) {
  11399. aesCrypto.hmac.update(outputChunk);
  11400. }
  11401. output.set(codecBytes.fromBits(outputChunk), offset + paddingStart);
  11402. }
  11403. aesCrypto.pendingInput = subarray(input, offset);
  11404. return output;
  11405. }
  11406. function getRandomValues(array) {
  11407. if (CRYPTO_API_SUPPORTED && typeof crypto.getRandomValues == "function") {
  11408. return crypto.getRandomValues(array);
  11409. } else {
  11410. return random.getRandomValues(array);
  11411. }
  11412. }
  11413. function importKey(format, password, algorithm, extractable, keyUsages) {
  11414. if (CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof crypto.subtle.importKey == "function") {
  11415. return crypto.subtle.importKey(format, password, algorithm, extractable, keyUsages);
  11416. } else {
  11417. return misc.importKey(password);
  11418. }
  11419. }
  11420. function concat$1(leftArray, rightArray) {
  11421. var array = leftArray;
  11422. if (leftArray.length + rightArray.length) {
  11423. array = new Uint8Array(leftArray.length + rightArray.length);
  11424. array.set(leftArray, 0);
  11425. array.set(rightArray, leftArray.length);
  11426. }
  11427. return array;
  11428. }
  11429. function expand(inputArray, length) {
  11430. if (length && length > inputArray.length) {
  11431. var array = inputArray;
  11432. inputArray = new Uint8Array(length);
  11433. inputArray.set(array, 0);
  11434. }
  11435. return inputArray;
  11436. }
  11437. function subarray(array, begin, end) {
  11438. return array.subarray(begin, end);
  11439. }
  11440. var $$e = _export;
  11441. var fails$a = fails$H;
  11442. // eslint-disable-next-line es-x/no-math-imul -- required for testing
  11443. var $imul = Math.imul;
  11444. var FORCED$1 = fails$a(function () {
  11445. return $imul(0xFFFFFFFF, 5) != -5 || $imul.length != 2;
  11446. });
  11447. // `Math.imul` method
  11448. // https://tc39.es/ecma262/#sec-math.imul
  11449. // some WebKit versions fails with big numbers, some has wrong arity
  11450. $$e({ target: 'Math', stat: true, forced: FORCED$1 }, {
  11451. imul: function imul(x, y) {
  11452. var UINT16 = 0xFFFF;
  11453. var xn = +x;
  11454. var yn = +y;
  11455. var xl = UINT16 & xn;
  11456. var yl = UINT16 & yn;
  11457. return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
  11458. }
  11459. });
  11460. var HEADER_LENGTH = 12;
  11461. var ZipCryptoDecrypt = /*#__PURE__*/function () {
  11462. function ZipCryptoDecrypt(password, passwordVerification) {
  11463. _classCallCheck(this, ZipCryptoDecrypt);
  11464. var zipCrypto = this;
  11465. Object.assign(zipCrypto, {
  11466. password: password,
  11467. passwordVerification: passwordVerification
  11468. });
  11469. createKeys(zipCrypto, password);
  11470. }
  11471. _createClass(ZipCryptoDecrypt, [{
  11472. key: "append",
  11473. value: function append(input) {
  11474. var zipCrypto = this;
  11475. if (zipCrypto.password) {
  11476. var decryptedHeader = decrypt(zipCrypto, input.subarray(0, HEADER_LENGTH));
  11477. zipCrypto.password = null;
  11478. if (decryptedHeader[HEADER_LENGTH - 1] != zipCrypto.passwordVerification) {
  11479. throw new Error(ERR_INVALID_PASSWORD);
  11480. }
  11481. input = input.subarray(HEADER_LENGTH);
  11482. }
  11483. return decrypt(zipCrypto, input);
  11484. }
  11485. }, {
  11486. key: "flush",
  11487. value: function flush() {
  11488. return {
  11489. valid: true,
  11490. data: new Uint8Array(0)
  11491. };
  11492. }
  11493. }]);
  11494. return ZipCryptoDecrypt;
  11495. }();
  11496. var ZipCryptoEncrypt = /*#__PURE__*/function () {
  11497. function ZipCryptoEncrypt(password, passwordVerification) {
  11498. _classCallCheck(this, ZipCryptoEncrypt);
  11499. var zipCrypto = this;
  11500. Object.assign(zipCrypto, {
  11501. password: password,
  11502. passwordVerification: passwordVerification
  11503. });
  11504. createKeys(zipCrypto, password);
  11505. }
  11506. _createClass(ZipCryptoEncrypt, [{
  11507. key: "append",
  11508. value: function append(input) {
  11509. var zipCrypto = this;
  11510. var output;
  11511. var offset;
  11512. if (zipCrypto.password) {
  11513. zipCrypto.password = null;
  11514. var header = crypto.getRandomValues(new Uint8Array(HEADER_LENGTH));
  11515. header[HEADER_LENGTH - 1] = zipCrypto.passwordVerification;
  11516. output = new Uint8Array(input.length + header.length);
  11517. output.set(encrypt(zipCrypto, header), 0);
  11518. offset = HEADER_LENGTH;
  11519. } else {
  11520. output = new Uint8Array(input.length);
  11521. offset = 0;
  11522. }
  11523. output.set(encrypt(zipCrypto, input), offset);
  11524. return output;
  11525. }
  11526. }, {
  11527. key: "flush",
  11528. value: function flush() {
  11529. return {
  11530. data: new Uint8Array(0)
  11531. };
  11532. }
  11533. }]);
  11534. return ZipCryptoEncrypt;
  11535. }();
  11536. function decrypt(target, input) {
  11537. var output = new Uint8Array(input.length);
  11538. for (var index = 0; index < input.length; index++) {
  11539. output[index] = getByte(target) ^ input[index];
  11540. updateKeys(target, output[index]);
  11541. }
  11542. return output;
  11543. }
  11544. function encrypt(target, input) {
  11545. var output = new Uint8Array(input.length);
  11546. for (var index = 0; index < input.length; index++) {
  11547. output[index] = getByte(target) ^ input[index];
  11548. updateKeys(target, input[index]);
  11549. }
  11550. return output;
  11551. }
  11552. function createKeys(target, password) {
  11553. target.keys = [0x12345678, 0x23456789, 0x34567890];
  11554. target.crcKey0 = new Crc32(target.keys[0]);
  11555. target.crcKey2 = new Crc32(target.keys[2]);
  11556. for (var index = 0; index < password.length; index++) {
  11557. updateKeys(target, password.charCodeAt(index));
  11558. }
  11559. }
  11560. function updateKeys(target, byte) {
  11561. target.crcKey0.append([byte]);
  11562. target.keys[0] = ~target.crcKey0.get();
  11563. target.keys[1] = getInt32(target.keys[1] + getInt8(target.keys[0]));
  11564. target.keys[1] = getInt32(Math.imul(target.keys[1], 134775813) + 1);
  11565. target.crcKey2.append([target.keys[1] >>> 24]);
  11566. target.keys[2] = ~target.crcKey2.get();
  11567. }
  11568. function getByte(target) {
  11569. var temp = target.keys[2] | 2;
  11570. return getInt8(Math.imul(temp, temp ^ 1) >>> 8);
  11571. }
  11572. function getInt8(number) {
  11573. return number & 0xFF;
  11574. }
  11575. function getInt32(number) {
  11576. return number & 0xFFFFFFFF;
  11577. }
  11578. var CODEC_DEFLATE = "deflate";
  11579. var CODEC_INFLATE = "inflate";
  11580. var ERR_INVALID_SIGNATURE = "Invalid signature";
  11581. var Inflate = /*#__PURE__*/function () {
  11582. function Inflate(codecConstructor, _ref, _ref2) {
  11583. var signature = _ref.signature,
  11584. password = _ref.password,
  11585. signed = _ref.signed,
  11586. compressed = _ref.compressed,
  11587. zipCrypto = _ref.zipCrypto,
  11588. passwordVerification = _ref.passwordVerification,
  11589. encryptionStrength = _ref.encryptionStrength;
  11590. var chunkSize = _ref2.chunkSize;
  11591. _classCallCheck(this, Inflate);
  11592. var encrypted = Boolean(password);
  11593. Object.assign(this, {
  11594. signature: signature,
  11595. encrypted: encrypted,
  11596. signed: signed,
  11597. compressed: compressed,
  11598. inflate: compressed && new codecConstructor({
  11599. chunkSize: chunkSize
  11600. }),
  11601. crc32: signed && new Crc32(),
  11602. zipCrypto: zipCrypto,
  11603. decrypt: encrypted && zipCrypto ? new ZipCryptoDecrypt(password, passwordVerification) : new AESDecrypt(password, signed, encryptionStrength)
  11604. });
  11605. }
  11606. _createClass(Inflate, [{
  11607. key: "append",
  11608. value: function append(data) {
  11609. try {
  11610. var _this2 = this;
  11611. var codec = _this2;
  11612. return _await(_invoke(function () {
  11613. if (codec.encrypted && data.length) {
  11614. return _await(codec.decrypt.append(data), function (_codec$decrypt$append) {
  11615. data = _codec$decrypt$append;
  11616. });
  11617. }
  11618. }, function () {
  11619. return _invoke(function () {
  11620. if (codec.compressed && data.length) {
  11621. return _await(codec.inflate.append(data), function (_codec$inflate$append) {
  11622. data = _codec$inflate$append;
  11623. });
  11624. }
  11625. }, function () {
  11626. if ((!codec.encrypted || codec.zipCrypto) && codec.signed && data.length) {
  11627. codec.crc32.append(data);
  11628. }
  11629. return data;
  11630. });
  11631. }));
  11632. } catch (e) {
  11633. return Promise.reject(e);
  11634. }
  11635. }
  11636. }, {
  11637. key: "flush",
  11638. value: function flush() {
  11639. try {
  11640. var _this4 = this;
  11641. var codec = _this4;
  11642. var signature;
  11643. var data = new Uint8Array(0);
  11644. if (codec.encrypted) {
  11645. var result = codec.decrypt.flush();
  11646. if (!result.valid) {
  11647. throw new Error(ERR_INVALID_SIGNATURE);
  11648. }
  11649. data = result.data;
  11650. }
  11651. if ((!codec.encrypted || codec.zipCrypto) && codec.signed) {
  11652. var dataViewSignature = new DataView(new Uint8Array(4).buffer);
  11653. signature = codec.crc32.get();
  11654. dataViewSignature.setUint32(0, signature);
  11655. if (codec.signature != dataViewSignature.getUint32(0, false)) {
  11656. throw new Error(ERR_INVALID_SIGNATURE);
  11657. }
  11658. }
  11659. return _await(_invoke(function () {
  11660. if (codec.compressed) {
  11661. return _await(codec.inflate.append(data), function (_codec$inflate$append2) {
  11662. data = _codec$inflate$append2 || new Uint8Array(0);
  11663. return _awaitIgnored(codec.inflate.flush());
  11664. });
  11665. }
  11666. }, function () {
  11667. return {
  11668. data: data,
  11669. signature: signature
  11670. };
  11671. }));
  11672. } catch (e) {
  11673. return Promise.reject(e);
  11674. }
  11675. }
  11676. }]);
  11677. return Inflate;
  11678. }();
  11679. var Deflate = /*#__PURE__*/function () {
  11680. function Deflate(codecConstructor, _ref3, _ref4) {
  11681. var encrypted = _ref3.encrypted,
  11682. signed = _ref3.signed,
  11683. compressed = _ref3.compressed,
  11684. level = _ref3.level,
  11685. zipCrypto = _ref3.zipCrypto,
  11686. password = _ref3.password,
  11687. passwordVerification = _ref3.passwordVerification,
  11688. encryptionStrength = _ref3.encryptionStrength;
  11689. var chunkSize = _ref4.chunkSize;
  11690. _classCallCheck(this, Deflate);
  11691. Object.assign(this, {
  11692. encrypted: encrypted,
  11693. signed: signed,
  11694. compressed: compressed,
  11695. deflate: compressed && new codecConstructor({
  11696. level: level || 5,
  11697. chunkSize: chunkSize
  11698. }),
  11699. crc32: signed && new Crc32(),
  11700. zipCrypto: zipCrypto,
  11701. encrypt: encrypted && zipCrypto ? new ZipCryptoEncrypt(password, passwordVerification) : new AESEncrypt(password, encryptionStrength)
  11702. });
  11703. }
  11704. _createClass(Deflate, [{
  11705. key: "append",
  11706. value: function append(inputData) {
  11707. try {
  11708. var _this6 = this;
  11709. var codec = _this6;
  11710. var data = inputData;
  11711. return _await(_invoke(function () {
  11712. if (codec.compressed && inputData.length) {
  11713. return _await(codec.deflate.append(inputData), function (_codec$deflate$append) {
  11714. data = _codec$deflate$append;
  11715. });
  11716. }
  11717. }, function () {
  11718. return _invoke(function () {
  11719. if (codec.encrypted && data.length) {
  11720. return _await(codec.encrypt.append(data), function (_codec$encrypt$append) {
  11721. data = _codec$encrypt$append;
  11722. });
  11723. }
  11724. }, function () {
  11725. if ((!codec.encrypted || codec.zipCrypto) && codec.signed && inputData.length) {
  11726. codec.crc32.append(inputData);
  11727. }
  11728. return data;
  11729. });
  11730. }));
  11731. } catch (e) {
  11732. return Promise.reject(e);
  11733. }
  11734. }
  11735. }, {
  11736. key: "flush",
  11737. value: function flush() {
  11738. try {
  11739. var _this8 = this;
  11740. var codec = _this8;
  11741. var signature;
  11742. var data = new Uint8Array(0);
  11743. return _await(_invoke(function () {
  11744. if (codec.compressed) {
  11745. return _await(codec.deflate.flush(), function (_codec$deflate$flush) {
  11746. data = _codec$deflate$flush || new Uint8Array(0);
  11747. });
  11748. }
  11749. }, function () {
  11750. return _invoke(function () {
  11751. if (codec.encrypted) {
  11752. return _await(codec.encrypt.append(data), function (_codec$encrypt$append2) {
  11753. data = _codec$encrypt$append2;
  11754. var result = codec.encrypt.flush();
  11755. signature = result.signature;
  11756. var newData = new Uint8Array(data.length + result.data.length);
  11757. newData.set(data, 0);
  11758. newData.set(result.data, data.length);
  11759. data = newData;
  11760. });
  11761. }
  11762. }, function () {
  11763. if ((!codec.encrypted || codec.zipCrypto) && codec.signed) {
  11764. signature = codec.crc32.get();
  11765. }
  11766. return {
  11767. data: data,
  11768. signature: signature
  11769. };
  11770. });
  11771. }));
  11772. } catch (e) {
  11773. return Promise.reject(e);
  11774. }
  11775. }
  11776. }]);
  11777. return Deflate;
  11778. }();
  11779. function createCodec$1(codecConstructor, options, config) {
  11780. if (options.codecType.startsWith(CODEC_DEFLATE)) {
  11781. return new Deflate(codecConstructor, options, config);
  11782. } else if (options.codecType.startsWith(CODEC_INFLATE)) {
  11783. return new Inflate(codecConstructor, options, config);
  11784. }
  11785. }
  11786. var fails$9 = fails$H;
  11787. var wellKnownSymbol$5 = wellKnownSymbol$t;
  11788. var IS_PURE = isPure;
  11789. var ITERATOR$1 = wellKnownSymbol$5('iterator');
  11790. var nativeUrl = !fails$9(function () {
  11791. // eslint-disable-next-line unicorn/relative-url-style -- required for testing
  11792. var url = new URL('b?a=1&b=2&c=3', 'http://a');
  11793. var searchParams = url.searchParams;
  11794. var result = '';
  11795. url.pathname = 'c%20d';
  11796. searchParams.forEach(function (value, key) {
  11797. searchParams['delete']('b');
  11798. result += key + value;
  11799. });
  11800. return (IS_PURE && !url.toJSON)
  11801. || !searchParams.sort
  11802. || url.href !== 'http://a/c%20d?a=1&c=3'
  11803. || searchParams.get('c') !== '3'
  11804. || String(new URLSearchParams('?a=1')) !== 'a=1'
  11805. || !searchParams[ITERATOR$1]
  11806. // throws in Edge
  11807. || new URL('https://a@b').username !== 'a'
  11808. || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
  11809. // not punycoded in Edge
  11810. || new URL('http://тест').host !== 'xn--e1aybc'
  11811. // not escaped in Chrome 62-
  11812. || new URL('http://a#б').hash !== '#%D0%B1'
  11813. // fails in Chrome 66-
  11814. || result !== 'a1c3'
  11815. // throws in Safari
  11816. || new URL('http://x', undefined).host !== 'x';
  11817. });
  11818. var makeBuiltIn = makeBuiltIn$3.exports;
  11819. var defineProperty$5 = objectDefineProperty;
  11820. var defineBuiltInAccessor$1 = function (target, name, descriptor) {
  11821. if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
  11822. if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
  11823. return defineProperty$5.f(target, name, descriptor);
  11824. };
  11825. // based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js
  11826. var uncurryThis$c = functionUncurryThis;
  11827. var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
  11828. var base = 36;
  11829. var tMin = 1;
  11830. var tMax = 26;
  11831. var skew = 38;
  11832. var damp = 700;
  11833. var initialBias = 72;
  11834. var initialN = 128; // 0x80
  11835. var delimiter = '-'; // '\x2D'
  11836. var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars
  11837. var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
  11838. var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';
  11839. var baseMinusTMin = base - tMin;
  11840. var $RangeError = RangeError;
  11841. var exec$2 = uncurryThis$c(regexSeparators.exec);
  11842. var floor$2 = Math.floor;
  11843. var fromCharCode = String.fromCharCode;
  11844. var charCodeAt$1 = uncurryThis$c(''.charCodeAt);
  11845. var join$2 = uncurryThis$c([].join);
  11846. var push$5 = uncurryThis$c([].push);
  11847. var replace$5 = uncurryThis$c(''.replace);
  11848. var split$2 = uncurryThis$c(''.split);
  11849. var toLowerCase$1 = uncurryThis$c(''.toLowerCase);
  11850. /**
  11851. * Creates an array containing the numeric code points of each Unicode
  11852. * character in the string. While JavaScript uses UCS-2 internally,
  11853. * this function will convert a pair of surrogate halves (each of which
  11854. * UCS-2 exposes as separate characters) into a single code point,
  11855. * matching UTF-16.
  11856. */
  11857. var ucs2decode = function (string) {
  11858. var output = [];
  11859. var counter = 0;
  11860. var length = string.length;
  11861. while (counter < length) {
  11862. var value = charCodeAt$1(string, counter++);
  11863. if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
  11864. // It's a high surrogate, and there is a next character.
  11865. var extra = charCodeAt$1(string, counter++);
  11866. if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
  11867. push$5(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
  11868. } else {
  11869. // It's an unmatched surrogate; only append this code unit, in case the
  11870. // next code unit is the high surrogate of a surrogate pair.
  11871. push$5(output, value);
  11872. counter--;
  11873. }
  11874. } else {
  11875. push$5(output, value);
  11876. }
  11877. }
  11878. return output;
  11879. };
  11880. /**
  11881. * Converts a digit/integer into a basic code point.
  11882. */
  11883. var digitToBasic = function (digit) {
  11884. // 0..25 map to ASCII a..z or A..Z
  11885. // 26..35 map to ASCII 0..9
  11886. return digit + 22 + 75 * (digit < 26);
  11887. };
  11888. /**
  11889. * Bias adaptation function as per section 3.4 of RFC 3492.
  11890. * https://tools.ietf.org/html/rfc3492#section-3.4
  11891. */
  11892. var adapt = function (delta, numPoints, firstTime) {
  11893. var k = 0;
  11894. delta = firstTime ? floor$2(delta / damp) : delta >> 1;
  11895. delta += floor$2(delta / numPoints);
  11896. while (delta > baseMinusTMin * tMax >> 1) {
  11897. delta = floor$2(delta / baseMinusTMin);
  11898. k += base;
  11899. }
  11900. return floor$2(k + (baseMinusTMin + 1) * delta / (delta + skew));
  11901. };
  11902. /**
  11903. * Converts a string of Unicode symbols (e.g. a domain name label) to a
  11904. * Punycode string of ASCII-only symbols.
  11905. */
  11906. var encode = function (input) {
  11907. var output = [];
  11908. // Convert the input in UCS-2 to an array of Unicode code points.
  11909. input = ucs2decode(input);
  11910. // Cache the length.
  11911. var inputLength = input.length;
  11912. // Initialize the state.
  11913. var n = initialN;
  11914. var delta = 0;
  11915. var bias = initialBias;
  11916. var i, currentValue;
  11917. // Handle the basic code points.
  11918. for (i = 0; i < input.length; i++) {
  11919. currentValue = input[i];
  11920. if (currentValue < 0x80) {
  11921. push$5(output, fromCharCode(currentValue));
  11922. }
  11923. }
  11924. var basicLength = output.length; // number of basic code points.
  11925. var handledCPCount = basicLength; // number of code points that have been handled;
  11926. // Finish the basic string with a delimiter unless it's empty.
  11927. if (basicLength) {
  11928. push$5(output, delimiter);
  11929. }
  11930. // Main encoding loop:
  11931. while (handledCPCount < inputLength) {
  11932. // All non-basic code points < n have been handled already. Find the next larger one:
  11933. var m = maxInt;
  11934. for (i = 0; i < input.length; i++) {
  11935. currentValue = input[i];
  11936. if (currentValue >= n && currentValue < m) {
  11937. m = currentValue;
  11938. }
  11939. }
  11940. // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.
  11941. var handledCPCountPlusOne = handledCPCount + 1;
  11942. if (m - n > floor$2((maxInt - delta) / handledCPCountPlusOne)) {
  11943. throw $RangeError(OVERFLOW_ERROR);
  11944. }
  11945. delta += (m - n) * handledCPCountPlusOne;
  11946. n = m;
  11947. for (i = 0; i < input.length; i++) {
  11948. currentValue = input[i];
  11949. if (currentValue < n && ++delta > maxInt) {
  11950. throw $RangeError(OVERFLOW_ERROR);
  11951. }
  11952. if (currentValue == n) {
  11953. // Represent delta as a generalized variable-length integer.
  11954. var q = delta;
  11955. var k = base;
  11956. while (true) {
  11957. var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  11958. if (q < t) break;
  11959. var qMinusT = q - t;
  11960. var baseMinusT = base - t;
  11961. push$5(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
  11962. q = floor$2(qMinusT / baseMinusT);
  11963. k += base;
  11964. }
  11965. push$5(output, fromCharCode(digitToBasic(q)));
  11966. bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
  11967. delta = 0;
  11968. handledCPCount++;
  11969. }
  11970. }
  11971. delta++;
  11972. n++;
  11973. }
  11974. return join$2(output, '');
  11975. };
  11976. var stringPunycodeToAscii = function (input) {
  11977. var encoded = [];
  11978. var labels = split$2(replace$5(toLowerCase$1(input), regexSeparators, '\u002E'), '.');
  11979. var i, label;
  11980. for (i = 0; i < labels.length; i++) {
  11981. label = labels[i];
  11982. push$5(encoded, exec$2(regexNonASCII, label) ? 'xn--' + encode(label) : label);
  11983. }
  11984. return join$2(encoded, '.');
  11985. };
  11986. // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
  11987. var $$d = _export;
  11988. var global$6 = global$F;
  11989. var call$4 = functionCall;
  11990. var uncurryThis$b = functionUncurryThis;
  11991. var DESCRIPTORS$6 = descriptors;
  11992. var USE_NATIVE_URL$1 = nativeUrl;
  11993. var defineBuiltIn$4 = defineBuiltIn$f;
  11994. var defineBuiltIns$1 = defineBuiltIns$3;
  11995. var setToStringTag$3 = setToStringTag$8;
  11996. var createIteratorConstructor = createIteratorConstructor$2;
  11997. var InternalStateModule$3 = internalState;
  11998. var anInstance$3 = anInstance$7;
  11999. var isCallable$4 = isCallable$s;
  12000. var hasOwn$7 = hasOwnProperty_1;
  12001. var bind$2 = functionBindContext;
  12002. var classof$2 = classof$d;
  12003. var anObject$2 = anObject$i;
  12004. var isObject$4 = isObject$k;
  12005. var $toString$2 = toString$a;
  12006. var create$1 = objectCreate;
  12007. var createPropertyDescriptor$1 = createPropertyDescriptor$7;
  12008. var getIterator = getIterator$4;
  12009. var getIteratorMethod = getIteratorMethod$5;
  12010. var validateArgumentsLength$1 = validateArgumentsLength$3;
  12011. var wellKnownSymbol$4 = wellKnownSymbol$t;
  12012. var arraySort = arraySort$1;
  12013. var ITERATOR = wellKnownSymbol$4('iterator');
  12014. var URL_SEARCH_PARAMS = 'URLSearchParams';
  12015. var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';
  12016. var setInternalState$3 = InternalStateModule$3.set;
  12017. var getInternalParamsState = InternalStateModule$3.getterFor(URL_SEARCH_PARAMS);
  12018. var getInternalIteratorState = InternalStateModule$3.getterFor(URL_SEARCH_PARAMS_ITERATOR);
  12019. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  12020. var getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor;
  12021. // Avoid NodeJS experimental warning
  12022. var safeGetBuiltIn = function (name) {
  12023. if (!DESCRIPTORS$6) return global$6[name];
  12024. var descriptor = getOwnPropertyDescriptor$1(global$6, name);
  12025. return descriptor && descriptor.value;
  12026. };
  12027. var nativeFetch = safeGetBuiltIn('fetch');
  12028. var NativeRequest = safeGetBuiltIn('Request');
  12029. var Headers = safeGetBuiltIn('Headers');
  12030. var RequestPrototype = NativeRequest && NativeRequest.prototype;
  12031. var HeadersPrototype = Headers && Headers.prototype;
  12032. var RegExp$1 = global$6.RegExp;
  12033. var TypeError$3 = global$6.TypeError;
  12034. var decodeURIComponent = global$6.decodeURIComponent;
  12035. var encodeURIComponent$1 = global$6.encodeURIComponent;
  12036. var charAt$3 = uncurryThis$b(''.charAt);
  12037. var join$1 = uncurryThis$b([].join);
  12038. var push$4 = uncurryThis$b([].push);
  12039. var replace$4 = uncurryThis$b(''.replace);
  12040. var shift$1 = uncurryThis$b([].shift);
  12041. var splice = uncurryThis$b([].splice);
  12042. var split$1 = uncurryThis$b(''.split);
  12043. var stringSlice$4 = uncurryThis$b(''.slice);
  12044. var plus = /\+/g;
  12045. var sequences = Array(4);
  12046. var percentSequence = function (bytes) {
  12047. return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp$1('((?:%[\\da-f]{2}){' + bytes + '})', 'gi'));
  12048. };
  12049. var percentDecode = function (sequence) {
  12050. try {
  12051. return decodeURIComponent(sequence);
  12052. } catch (error) {
  12053. return sequence;
  12054. }
  12055. };
  12056. var deserialize = function (it) {
  12057. var result = replace$4(it, plus, ' ');
  12058. var bytes = 4;
  12059. try {
  12060. return decodeURIComponent(result);
  12061. } catch (error) {
  12062. while (bytes) {
  12063. result = replace$4(result, percentSequence(bytes--), percentDecode);
  12064. }
  12065. return result;
  12066. }
  12067. };
  12068. var find = /[!'()~]|%20/g;
  12069. var replacements = {
  12070. '!': '%21',
  12071. "'": '%27',
  12072. '(': '%28',
  12073. ')': '%29',
  12074. '~': '%7E',
  12075. '%20': '+'
  12076. };
  12077. var replacer = function (match) {
  12078. return replacements[match];
  12079. };
  12080. var serialize = function (it) {
  12081. return replace$4(encodeURIComponent$1(it), find, replacer);
  12082. };
  12083. var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {
  12084. setInternalState$3(this, {
  12085. type: URL_SEARCH_PARAMS_ITERATOR,
  12086. iterator: getIterator(getInternalParamsState(params).entries),
  12087. kind: kind
  12088. });
  12089. }, 'Iterator', function next() {
  12090. var state = getInternalIteratorState(this);
  12091. var kind = state.kind;
  12092. var step = state.iterator.next();
  12093. var entry = step.value;
  12094. if (!step.done) {
  12095. step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];
  12096. } return step;
  12097. }, true);
  12098. var URLSearchParamsState = function (init) {
  12099. this.entries = [];
  12100. this.url = null;
  12101. if (init !== undefined) {
  12102. if (isObject$4(init)) this.parseObject(init);
  12103. else this.parseQuery(typeof init == 'string' ? charAt$3(init, 0) === '?' ? stringSlice$4(init, 1) : init : $toString$2(init));
  12104. }
  12105. };
  12106. URLSearchParamsState.prototype = {
  12107. type: URL_SEARCH_PARAMS,
  12108. bindURL: function (url) {
  12109. this.url = url;
  12110. this.update();
  12111. },
  12112. parseObject: function (object) {
  12113. var iteratorMethod = getIteratorMethod(object);
  12114. var iterator, next, step, entryIterator, entryNext, first, second;
  12115. if (iteratorMethod) {
  12116. iterator = getIterator(object, iteratorMethod);
  12117. next = iterator.next;
  12118. while (!(step = call$4(next, iterator)).done) {
  12119. entryIterator = getIterator(anObject$2(step.value));
  12120. entryNext = entryIterator.next;
  12121. if (
  12122. (first = call$4(entryNext, entryIterator)).done ||
  12123. (second = call$4(entryNext, entryIterator)).done ||
  12124. !call$4(entryNext, entryIterator).done
  12125. ) throw TypeError$3('Expected sequence with length 2');
  12126. push$4(this.entries, { key: $toString$2(first.value), value: $toString$2(second.value) });
  12127. }
  12128. } else for (var key in object) if (hasOwn$7(object, key)) {
  12129. push$4(this.entries, { key: key, value: $toString$2(object[key]) });
  12130. }
  12131. },
  12132. parseQuery: function (query) {
  12133. if (query) {
  12134. var attributes = split$1(query, '&');
  12135. var index = 0;
  12136. var attribute, entry;
  12137. while (index < attributes.length) {
  12138. attribute = attributes[index++];
  12139. if (attribute.length) {
  12140. entry = split$1(attribute, '=');
  12141. push$4(this.entries, {
  12142. key: deserialize(shift$1(entry)),
  12143. value: deserialize(join$1(entry, '='))
  12144. });
  12145. }
  12146. }
  12147. }
  12148. },
  12149. serialize: function () {
  12150. var entries = this.entries;
  12151. var result = [];
  12152. var index = 0;
  12153. var entry;
  12154. while (index < entries.length) {
  12155. entry = entries[index++];
  12156. push$4(result, serialize(entry.key) + '=' + serialize(entry.value));
  12157. } return join$1(result, '&');
  12158. },
  12159. update: function () {
  12160. this.entries.length = 0;
  12161. this.parseQuery(this.url.query);
  12162. },
  12163. updateURL: function () {
  12164. if (this.url) this.url.update();
  12165. }
  12166. };
  12167. // `URLSearchParams` constructor
  12168. // https://url.spec.whatwg.org/#interface-urlsearchparams
  12169. var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
  12170. anInstance$3(this, URLSearchParamsPrototype);
  12171. var init = arguments.length > 0 ? arguments[0] : undefined;
  12172. setInternalState$3(this, new URLSearchParamsState(init));
  12173. };
  12174. var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;
  12175. defineBuiltIns$1(URLSearchParamsPrototype, {
  12176. // `URLSearchParams.prototype.append` method
  12177. // https://url.spec.whatwg.org/#dom-urlsearchparams-append
  12178. append: function append(name, value) {
  12179. validateArgumentsLength$1(arguments.length, 2);
  12180. var state = getInternalParamsState(this);
  12181. push$4(state.entries, { key: $toString$2(name), value: $toString$2(value) });
  12182. state.updateURL();
  12183. },
  12184. // `URLSearchParams.prototype.delete` method
  12185. // https://url.spec.whatwg.org/#dom-urlsearchparams-delete
  12186. 'delete': function (name) {
  12187. validateArgumentsLength$1(arguments.length, 1);
  12188. var state = getInternalParamsState(this);
  12189. var entries = state.entries;
  12190. var key = $toString$2(name);
  12191. var index = 0;
  12192. while (index < entries.length) {
  12193. if (entries[index].key === key) splice(entries, index, 1);
  12194. else index++;
  12195. }
  12196. state.updateURL();
  12197. },
  12198. // `URLSearchParams.prototype.get` method
  12199. // https://url.spec.whatwg.org/#dom-urlsearchparams-get
  12200. get: function get(name) {
  12201. validateArgumentsLength$1(arguments.length, 1);
  12202. var entries = getInternalParamsState(this).entries;
  12203. var key = $toString$2(name);
  12204. var index = 0;
  12205. for (; index < entries.length; index++) {
  12206. if (entries[index].key === key) return entries[index].value;
  12207. }
  12208. return null;
  12209. },
  12210. // `URLSearchParams.prototype.getAll` method
  12211. // https://url.spec.whatwg.org/#dom-urlsearchparams-getall
  12212. getAll: function getAll(name) {
  12213. validateArgumentsLength$1(arguments.length, 1);
  12214. var entries = getInternalParamsState(this).entries;
  12215. var key = $toString$2(name);
  12216. var result = [];
  12217. var index = 0;
  12218. for (; index < entries.length; index++) {
  12219. if (entries[index].key === key) push$4(result, entries[index].value);
  12220. }
  12221. return result;
  12222. },
  12223. // `URLSearchParams.prototype.has` method
  12224. // https://url.spec.whatwg.org/#dom-urlsearchparams-has
  12225. has: function has(name) {
  12226. validateArgumentsLength$1(arguments.length, 1);
  12227. var entries = getInternalParamsState(this).entries;
  12228. var key = $toString$2(name);
  12229. var index = 0;
  12230. while (index < entries.length) {
  12231. if (entries[index++].key === key) return true;
  12232. }
  12233. return false;
  12234. },
  12235. // `URLSearchParams.prototype.set` method
  12236. // https://url.spec.whatwg.org/#dom-urlsearchparams-set
  12237. set: function set(name, value) {
  12238. validateArgumentsLength$1(arguments.length, 1);
  12239. var state = getInternalParamsState(this);
  12240. var entries = state.entries;
  12241. var found = false;
  12242. var key = $toString$2(name);
  12243. var val = $toString$2(value);
  12244. var index = 0;
  12245. var entry;
  12246. for (; index < entries.length; index++) {
  12247. entry = entries[index];
  12248. if (entry.key === key) {
  12249. if (found) splice(entries, index--, 1);
  12250. else {
  12251. found = true;
  12252. entry.value = val;
  12253. }
  12254. }
  12255. }
  12256. if (!found) push$4(entries, { key: key, value: val });
  12257. state.updateURL();
  12258. },
  12259. // `URLSearchParams.prototype.sort` method
  12260. // https://url.spec.whatwg.org/#dom-urlsearchparams-sort
  12261. sort: function sort() {
  12262. var state = getInternalParamsState(this);
  12263. arraySort(state.entries, function (a, b) {
  12264. return a.key > b.key ? 1 : -1;
  12265. });
  12266. state.updateURL();
  12267. },
  12268. // `URLSearchParams.prototype.forEach` method
  12269. forEach: function forEach(callback /* , thisArg */) {
  12270. var entries = getInternalParamsState(this).entries;
  12271. var boundFunction = bind$2(callback, arguments.length > 1 ? arguments[1] : undefined);
  12272. var index = 0;
  12273. var entry;
  12274. while (index < entries.length) {
  12275. entry = entries[index++];
  12276. boundFunction(entry.value, entry.key, this);
  12277. }
  12278. },
  12279. // `URLSearchParams.prototype.keys` method
  12280. keys: function keys() {
  12281. return new URLSearchParamsIterator(this, 'keys');
  12282. },
  12283. // `URLSearchParams.prototype.values` method
  12284. values: function values() {
  12285. return new URLSearchParamsIterator(this, 'values');
  12286. },
  12287. // `URLSearchParams.prototype.entries` method
  12288. entries: function entries() {
  12289. return new URLSearchParamsIterator(this, 'entries');
  12290. }
  12291. }, { enumerable: true });
  12292. // `URLSearchParams.prototype[@@iterator]` method
  12293. defineBuiltIn$4(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });
  12294. // `URLSearchParams.prototype.toString` method
  12295. // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
  12296. defineBuiltIn$4(URLSearchParamsPrototype, 'toString', function toString() {
  12297. return getInternalParamsState(this).serialize();
  12298. }, { enumerable: true });
  12299. setToStringTag$3(URLSearchParamsConstructor, URL_SEARCH_PARAMS);
  12300. $$d({ global: true, constructor: true, forced: !USE_NATIVE_URL$1 }, {
  12301. URLSearchParams: URLSearchParamsConstructor
  12302. });
  12303. // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`
  12304. if (!USE_NATIVE_URL$1 && isCallable$4(Headers)) {
  12305. var headersHas = uncurryThis$b(HeadersPrototype.has);
  12306. var headersSet = uncurryThis$b(HeadersPrototype.set);
  12307. var wrapRequestOptions = function (init) {
  12308. if (isObject$4(init)) {
  12309. var body = init.body;
  12310. var headers;
  12311. if (classof$2(body) === URL_SEARCH_PARAMS) {
  12312. headers = init.headers ? new Headers(init.headers) : new Headers();
  12313. if (!headersHas(headers, 'content-type')) {
  12314. headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
  12315. }
  12316. return create$1(init, {
  12317. body: createPropertyDescriptor$1(0, $toString$2(body)),
  12318. headers: createPropertyDescriptor$1(0, headers)
  12319. });
  12320. }
  12321. } return init;
  12322. };
  12323. if (isCallable$4(nativeFetch)) {
  12324. $$d({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, {
  12325. fetch: function fetch(input /* , init */) {
  12326. return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
  12327. }
  12328. });
  12329. }
  12330. if (isCallable$4(NativeRequest)) {
  12331. var RequestConstructor = function Request(input /* , init */) {
  12332. anInstance$3(this, RequestPrototype);
  12333. return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
  12334. };
  12335. RequestPrototype.constructor = RequestConstructor;
  12336. RequestConstructor.prototype = RequestPrototype;
  12337. $$d({ global: true, constructor: true, dontCallGetSet: true, forced: true }, {
  12338. Request: RequestConstructor
  12339. });
  12340. }
  12341. }
  12342. var web_urlSearchParams_constructor = {
  12343. URLSearchParams: URLSearchParamsConstructor,
  12344. getState: getInternalParamsState
  12345. };
  12346. // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
  12347. var $$c = _export;
  12348. var DESCRIPTORS$5 = descriptors;
  12349. var USE_NATIVE_URL = nativeUrl;
  12350. var global$5 = global$F;
  12351. var bind$1 = functionBindContext;
  12352. var uncurryThis$a = functionUncurryThis;
  12353. var defineBuiltIn$3 = defineBuiltIn$f;
  12354. var defineBuiltInAccessor = defineBuiltInAccessor$1;
  12355. var anInstance$2 = anInstance$7;
  12356. var hasOwn$6 = hasOwnProperty_1;
  12357. var assign = objectAssign;
  12358. var arrayFrom = arrayFrom$1;
  12359. var arraySlice$2 = arraySliceSimple;
  12360. var codeAt = stringMultibyte.codeAt;
  12361. var toASCII = stringPunycodeToAscii;
  12362. var $toString$1 = toString$a;
  12363. var setToStringTag$2 = setToStringTag$8;
  12364. var validateArgumentsLength = validateArgumentsLength$3;
  12365. var URLSearchParamsModule = web_urlSearchParams_constructor;
  12366. var InternalStateModule$2 = internalState;
  12367. var setInternalState$2 = InternalStateModule$2.set;
  12368. var getInternalURLState = InternalStateModule$2.getterFor('URL');
  12369. var URLSearchParams$1 = URLSearchParamsModule.URLSearchParams;
  12370. var getInternalSearchParamsState = URLSearchParamsModule.getState;
  12371. var NativeURL = global$5.URL;
  12372. var TypeError$2 = global$5.TypeError;
  12373. var parseInt$1 = global$5.parseInt;
  12374. var floor$1 = Math.floor;
  12375. var pow = Math.pow;
  12376. var charAt$2 = uncurryThis$a(''.charAt);
  12377. var exec$1 = uncurryThis$a(/./.exec);
  12378. var join = uncurryThis$a([].join);
  12379. var numberToString$1 = uncurryThis$a(1.0.toString);
  12380. var pop = uncurryThis$a([].pop);
  12381. var push$3 = uncurryThis$a([].push);
  12382. var replace$3 = uncurryThis$a(''.replace);
  12383. var shift = uncurryThis$a([].shift);
  12384. var split = uncurryThis$a(''.split);
  12385. var stringSlice$3 = uncurryThis$a(''.slice);
  12386. var toLowerCase = uncurryThis$a(''.toLowerCase);
  12387. var unshift = uncurryThis$a([].unshift);
  12388. var INVALID_AUTHORITY = 'Invalid authority';
  12389. var INVALID_SCHEME = 'Invalid scheme';
  12390. var INVALID_HOST = 'Invalid host';
  12391. var INVALID_PORT = 'Invalid port';
  12392. var ALPHA = /[a-z]/i;
  12393. // eslint-disable-next-line regexp/no-obscure-range -- safe
  12394. var ALPHANUMERIC = /[\d+-.a-z]/i;
  12395. var DIGIT = /\d/;
  12396. var HEX_START = /^0x/i;
  12397. var OCT = /^[0-7]+$/;
  12398. var DEC = /^\d+$/;
  12399. var HEX = /^[\da-f]+$/i;
  12400. /* eslint-disable regexp/no-control-character -- safe */
  12401. var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/;
  12402. var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/;
  12403. var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u0020]+|[\u0000-\u0020]+$/g;
  12404. var TAB_AND_NEW_LINE = /[\t\n\r]/g;
  12405. /* eslint-enable regexp/no-control-character -- safe */
  12406. var EOF;
  12407. // https://url.spec.whatwg.org/#ipv4-number-parser
  12408. var parseIPv4 = function (input) {
  12409. var parts = split(input, '.');
  12410. var partsLength, numbers, index, part, radix, number, ipv4;
  12411. if (parts.length && parts[parts.length - 1] == '') {
  12412. parts.length--;
  12413. }
  12414. partsLength = parts.length;
  12415. if (partsLength > 4) return input;
  12416. numbers = [];
  12417. for (index = 0; index < partsLength; index++) {
  12418. part = parts[index];
  12419. if (part == '') return input;
  12420. radix = 10;
  12421. if (part.length > 1 && charAt$2(part, 0) == '0') {
  12422. radix = exec$1(HEX_START, part) ? 16 : 8;
  12423. part = stringSlice$3(part, radix == 8 ? 1 : 2);
  12424. }
  12425. if (part === '') {
  12426. number = 0;
  12427. } else {
  12428. if (!exec$1(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;
  12429. number = parseInt$1(part, radix);
  12430. }
  12431. push$3(numbers, number);
  12432. }
  12433. for (index = 0; index < partsLength; index++) {
  12434. number = numbers[index];
  12435. if (index == partsLength - 1) {
  12436. if (number >= pow(256, 5 - partsLength)) return null;
  12437. } else if (number > 255) return null;
  12438. }
  12439. ipv4 = pop(numbers);
  12440. for (index = 0; index < numbers.length; index++) {
  12441. ipv4 += numbers[index] * pow(256, 3 - index);
  12442. }
  12443. return ipv4;
  12444. };
  12445. // https://url.spec.whatwg.org/#concept-ipv6-parser
  12446. // eslint-disable-next-line max-statements -- TODO
  12447. var parseIPv6 = function (input) {
  12448. var address = [0, 0, 0, 0, 0, 0, 0, 0];
  12449. var pieceIndex = 0;
  12450. var compress = null;
  12451. var pointer = 0;
  12452. var value, length, numbersSeen, ipv4Piece, number, swaps, swap;
  12453. var chr = function () {
  12454. return charAt$2(input, pointer);
  12455. };
  12456. if (chr() == ':') {
  12457. if (charAt$2(input, 1) != ':') return;
  12458. pointer += 2;
  12459. pieceIndex++;
  12460. compress = pieceIndex;
  12461. }
  12462. while (chr()) {
  12463. if (pieceIndex == 8) return;
  12464. if (chr() == ':') {
  12465. if (compress !== null) return;
  12466. pointer++;
  12467. pieceIndex++;
  12468. compress = pieceIndex;
  12469. continue;
  12470. }
  12471. value = length = 0;
  12472. while (length < 4 && exec$1(HEX, chr())) {
  12473. value = value * 16 + parseInt$1(chr(), 16);
  12474. pointer++;
  12475. length++;
  12476. }
  12477. if (chr() == '.') {
  12478. if (length == 0) return;
  12479. pointer -= length;
  12480. if (pieceIndex > 6) return;
  12481. numbersSeen = 0;
  12482. while (chr()) {
  12483. ipv4Piece = null;
  12484. if (numbersSeen > 0) {
  12485. if (chr() == '.' && numbersSeen < 4) pointer++;
  12486. else return;
  12487. }
  12488. if (!exec$1(DIGIT, chr())) return;
  12489. while (exec$1(DIGIT, chr())) {
  12490. number = parseInt$1(chr(), 10);
  12491. if (ipv4Piece === null) ipv4Piece = number;
  12492. else if (ipv4Piece == 0) return;
  12493. else ipv4Piece = ipv4Piece * 10 + number;
  12494. if (ipv4Piece > 255) return;
  12495. pointer++;
  12496. }
  12497. address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
  12498. numbersSeen++;
  12499. if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;
  12500. }
  12501. if (numbersSeen != 4) return;
  12502. break;
  12503. } else if (chr() == ':') {
  12504. pointer++;
  12505. if (!chr()) return;
  12506. } else if (chr()) return;
  12507. address[pieceIndex++] = value;
  12508. }
  12509. if (compress !== null) {
  12510. swaps = pieceIndex - compress;
  12511. pieceIndex = 7;
  12512. while (pieceIndex != 0 && swaps > 0) {
  12513. swap = address[pieceIndex];
  12514. address[pieceIndex--] = address[compress + swaps - 1];
  12515. address[compress + --swaps] = swap;
  12516. }
  12517. } else if (pieceIndex != 8) return;
  12518. return address;
  12519. };
  12520. var findLongestZeroSequence = function (ipv6) {
  12521. var maxIndex = null;
  12522. var maxLength = 1;
  12523. var currStart = null;
  12524. var currLength = 0;
  12525. var index = 0;
  12526. for (; index < 8; index++) {
  12527. if (ipv6[index] !== 0) {
  12528. if (currLength > maxLength) {
  12529. maxIndex = currStart;
  12530. maxLength = currLength;
  12531. }
  12532. currStart = null;
  12533. currLength = 0;
  12534. } else {
  12535. if (currStart === null) currStart = index;
  12536. ++currLength;
  12537. }
  12538. }
  12539. if (currLength > maxLength) {
  12540. maxIndex = currStart;
  12541. maxLength = currLength;
  12542. }
  12543. return maxIndex;
  12544. };
  12545. // https://url.spec.whatwg.org/#host-serializing
  12546. var serializeHost = function (host) {
  12547. var result, index, compress, ignore0;
  12548. // ipv4
  12549. if (typeof host == 'number') {
  12550. result = [];
  12551. for (index = 0; index < 4; index++) {
  12552. unshift(result, host % 256);
  12553. host = floor$1(host / 256);
  12554. } return join(result, '.');
  12555. // ipv6
  12556. } else if (typeof host == 'object') {
  12557. result = '';
  12558. compress = findLongestZeroSequence(host);
  12559. for (index = 0; index < 8; index++) {
  12560. if (ignore0 && host[index] === 0) continue;
  12561. if (ignore0) ignore0 = false;
  12562. if (compress === index) {
  12563. result += index ? ':' : '::';
  12564. ignore0 = true;
  12565. } else {
  12566. result += numberToString$1(host[index], 16);
  12567. if (index < 7) result += ':';
  12568. }
  12569. }
  12570. return '[' + result + ']';
  12571. } return host;
  12572. };
  12573. var C0ControlPercentEncodeSet = {};
  12574. var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {
  12575. ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1
  12576. });
  12577. var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {
  12578. '#': 1, '?': 1, '{': 1, '}': 1
  12579. });
  12580. var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {
  12581. '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1
  12582. });
  12583. var percentEncode = function (chr, set) {
  12584. var code = codeAt(chr, 0);
  12585. return code > 0x20 && code < 0x7F && !hasOwn$6(set, chr) ? chr : encodeURIComponent(chr);
  12586. };
  12587. // https://url.spec.whatwg.org/#special-scheme
  12588. var specialSchemes = {
  12589. ftp: 21,
  12590. file: null,
  12591. http: 80,
  12592. https: 443,
  12593. ws: 80,
  12594. wss: 443
  12595. };
  12596. // https://url.spec.whatwg.org/#windows-drive-letter
  12597. var isWindowsDriveLetter = function (string, normalized) {
  12598. var second;
  12599. return string.length == 2 && exec$1(ALPHA, charAt$2(string, 0))
  12600. && ((second = charAt$2(string, 1)) == ':' || (!normalized && second == '|'));
  12601. };
  12602. // https://url.spec.whatwg.org/#start-with-a-windows-drive-letter
  12603. var startsWithWindowsDriveLetter = function (string) {
  12604. var third;
  12605. return string.length > 1 && isWindowsDriveLetter(stringSlice$3(string, 0, 2)) && (
  12606. string.length == 2 ||
  12607. ((third = charAt$2(string, 2)) === '/' || third === '\\' || third === '?' || third === '#')
  12608. );
  12609. };
  12610. // https://url.spec.whatwg.org/#single-dot-path-segment
  12611. var isSingleDot = function (segment) {
  12612. return segment === '.' || toLowerCase(segment) === '%2e';
  12613. };
  12614. // https://url.spec.whatwg.org/#double-dot-path-segment
  12615. var isDoubleDot = function (segment) {
  12616. segment = toLowerCase(segment);
  12617. return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';
  12618. };
  12619. // States:
  12620. var SCHEME_START = {};
  12621. var SCHEME = {};
  12622. var NO_SCHEME = {};
  12623. var SPECIAL_RELATIVE_OR_AUTHORITY = {};
  12624. var PATH_OR_AUTHORITY = {};
  12625. var RELATIVE = {};
  12626. var RELATIVE_SLASH = {};
  12627. var SPECIAL_AUTHORITY_SLASHES = {};
  12628. var SPECIAL_AUTHORITY_IGNORE_SLASHES = {};
  12629. var AUTHORITY = {};
  12630. var HOST = {};
  12631. var HOSTNAME = {};
  12632. var PORT = {};
  12633. var FILE = {};
  12634. var FILE_SLASH = {};
  12635. var FILE_HOST = {};
  12636. var PATH_START = {};
  12637. var PATH = {};
  12638. var CANNOT_BE_A_BASE_URL_PATH = {};
  12639. var QUERY = {};
  12640. var FRAGMENT = {};
  12641. var URLState = function (url, isBase, base) {
  12642. var urlString = $toString$1(url);
  12643. var baseState, failure, searchParams;
  12644. if (isBase) {
  12645. failure = this.parse(urlString);
  12646. if (failure) throw TypeError$2(failure);
  12647. this.searchParams = null;
  12648. } else {
  12649. if (base !== undefined) baseState = new URLState(base, true);
  12650. failure = this.parse(urlString, null, baseState);
  12651. if (failure) throw TypeError$2(failure);
  12652. searchParams = getInternalSearchParamsState(new URLSearchParams$1());
  12653. searchParams.bindURL(this);
  12654. this.searchParams = searchParams;
  12655. }
  12656. };
  12657. URLState.prototype = {
  12658. type: 'URL',
  12659. // https://url.spec.whatwg.org/#url-parsing
  12660. // eslint-disable-next-line max-statements -- TODO
  12661. parse: function (input, stateOverride, base) {
  12662. var url = this;
  12663. var state = stateOverride || SCHEME_START;
  12664. var pointer = 0;
  12665. var buffer = '';
  12666. var seenAt = false;
  12667. var seenBracket = false;
  12668. var seenPasswordToken = false;
  12669. var codePoints, chr, bufferCodePoints, failure;
  12670. input = $toString$1(input);
  12671. if (!stateOverride) {
  12672. url.scheme = '';
  12673. url.username = '';
  12674. url.password = '';
  12675. url.host = null;
  12676. url.port = null;
  12677. url.path = [];
  12678. url.query = null;
  12679. url.fragment = null;
  12680. url.cannotBeABaseURL = false;
  12681. input = replace$3(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');
  12682. }
  12683. input = replace$3(input, TAB_AND_NEW_LINE, '');
  12684. codePoints = arrayFrom(input);
  12685. while (pointer <= codePoints.length) {
  12686. chr = codePoints[pointer];
  12687. switch (state) {
  12688. case SCHEME_START:
  12689. if (chr && exec$1(ALPHA, chr)) {
  12690. buffer += toLowerCase(chr);
  12691. state = SCHEME;
  12692. } else if (!stateOverride) {
  12693. state = NO_SCHEME;
  12694. continue;
  12695. } else return INVALID_SCHEME;
  12696. break;
  12697. case SCHEME:
  12698. if (chr && (exec$1(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {
  12699. buffer += toLowerCase(chr);
  12700. } else if (chr == ':') {
  12701. if (stateOverride && (
  12702. (url.isSpecial() != hasOwn$6(specialSchemes, buffer)) ||
  12703. (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||
  12704. (url.scheme == 'file' && !url.host)
  12705. )) return;
  12706. url.scheme = buffer;
  12707. if (stateOverride) {
  12708. if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;
  12709. return;
  12710. }
  12711. buffer = '';
  12712. if (url.scheme == 'file') {
  12713. state = FILE;
  12714. } else if (url.isSpecial() && base && base.scheme == url.scheme) {
  12715. state = SPECIAL_RELATIVE_OR_AUTHORITY;
  12716. } else if (url.isSpecial()) {
  12717. state = SPECIAL_AUTHORITY_SLASHES;
  12718. } else if (codePoints[pointer + 1] == '/') {
  12719. state = PATH_OR_AUTHORITY;
  12720. pointer++;
  12721. } else {
  12722. url.cannotBeABaseURL = true;
  12723. push$3(url.path, '');
  12724. state = CANNOT_BE_A_BASE_URL_PATH;
  12725. }
  12726. } else if (!stateOverride) {
  12727. buffer = '';
  12728. state = NO_SCHEME;
  12729. pointer = 0;
  12730. continue;
  12731. } else return INVALID_SCHEME;
  12732. break;
  12733. case NO_SCHEME:
  12734. if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;
  12735. if (base.cannotBeABaseURL && chr == '#') {
  12736. url.scheme = base.scheme;
  12737. url.path = arraySlice$2(base.path);
  12738. url.query = base.query;
  12739. url.fragment = '';
  12740. url.cannotBeABaseURL = true;
  12741. state = FRAGMENT;
  12742. break;
  12743. }
  12744. state = base.scheme == 'file' ? FILE : RELATIVE;
  12745. continue;
  12746. case SPECIAL_RELATIVE_OR_AUTHORITY:
  12747. if (chr == '/' && codePoints[pointer + 1] == '/') {
  12748. state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
  12749. pointer++;
  12750. } else {
  12751. state = RELATIVE;
  12752. continue;
  12753. } break;
  12754. case PATH_OR_AUTHORITY:
  12755. if (chr == '/') {
  12756. state = AUTHORITY;
  12757. break;
  12758. } else {
  12759. state = PATH;
  12760. continue;
  12761. }
  12762. case RELATIVE:
  12763. url.scheme = base.scheme;
  12764. if (chr == EOF) {
  12765. url.username = base.username;
  12766. url.password = base.password;
  12767. url.host = base.host;
  12768. url.port = base.port;
  12769. url.path = arraySlice$2(base.path);
  12770. url.query = base.query;
  12771. } else if (chr == '/' || (chr == '\\' && url.isSpecial())) {
  12772. state = RELATIVE_SLASH;
  12773. } else if (chr == '?') {
  12774. url.username = base.username;
  12775. url.password = base.password;
  12776. url.host = base.host;
  12777. url.port = base.port;
  12778. url.path = arraySlice$2(base.path);
  12779. url.query = '';
  12780. state = QUERY;
  12781. } else if (chr == '#') {
  12782. url.username = base.username;
  12783. url.password = base.password;
  12784. url.host = base.host;
  12785. url.port = base.port;
  12786. url.path = arraySlice$2(base.path);
  12787. url.query = base.query;
  12788. url.fragment = '';
  12789. state = FRAGMENT;
  12790. } else {
  12791. url.username = base.username;
  12792. url.password = base.password;
  12793. url.host = base.host;
  12794. url.port = base.port;
  12795. url.path = arraySlice$2(base.path);
  12796. url.path.length--;
  12797. state = PATH;
  12798. continue;
  12799. } break;
  12800. case RELATIVE_SLASH:
  12801. if (url.isSpecial() && (chr == '/' || chr == '\\')) {
  12802. state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
  12803. } else if (chr == '/') {
  12804. state = AUTHORITY;
  12805. } else {
  12806. url.username = base.username;
  12807. url.password = base.password;
  12808. url.host = base.host;
  12809. url.port = base.port;
  12810. state = PATH;
  12811. continue;
  12812. } break;
  12813. case SPECIAL_AUTHORITY_SLASHES:
  12814. state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
  12815. if (chr != '/' || charAt$2(buffer, pointer + 1) != '/') continue;
  12816. pointer++;
  12817. break;
  12818. case SPECIAL_AUTHORITY_IGNORE_SLASHES:
  12819. if (chr != '/' && chr != '\\') {
  12820. state = AUTHORITY;
  12821. continue;
  12822. } break;
  12823. case AUTHORITY:
  12824. if (chr == '@') {
  12825. if (seenAt) buffer = '%40' + buffer;
  12826. seenAt = true;
  12827. bufferCodePoints = arrayFrom(buffer);
  12828. for (var i = 0; i < bufferCodePoints.length; i++) {
  12829. var codePoint = bufferCodePoints[i];
  12830. if (codePoint == ':' && !seenPasswordToken) {
  12831. seenPasswordToken = true;
  12832. continue;
  12833. }
  12834. var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);
  12835. if (seenPasswordToken) url.password += encodedCodePoints;
  12836. else url.username += encodedCodePoints;
  12837. }
  12838. buffer = '';
  12839. } else if (
  12840. chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
  12841. (chr == '\\' && url.isSpecial())
  12842. ) {
  12843. if (seenAt && buffer == '') return INVALID_AUTHORITY;
  12844. pointer -= arrayFrom(buffer).length + 1;
  12845. buffer = '';
  12846. state = HOST;
  12847. } else buffer += chr;
  12848. break;
  12849. case HOST:
  12850. case HOSTNAME:
  12851. if (stateOverride && url.scheme == 'file') {
  12852. state = FILE_HOST;
  12853. continue;
  12854. } else if (chr == ':' && !seenBracket) {
  12855. if (buffer == '') return INVALID_HOST;
  12856. failure = url.parseHost(buffer);
  12857. if (failure) return failure;
  12858. buffer = '';
  12859. state = PORT;
  12860. if (stateOverride == HOSTNAME) return;
  12861. } else if (
  12862. chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
  12863. (chr == '\\' && url.isSpecial())
  12864. ) {
  12865. if (url.isSpecial() && buffer == '') return INVALID_HOST;
  12866. if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;
  12867. failure = url.parseHost(buffer);
  12868. if (failure) return failure;
  12869. buffer = '';
  12870. state = PATH_START;
  12871. if (stateOverride) return;
  12872. continue;
  12873. } else {
  12874. if (chr == '[') seenBracket = true;
  12875. else if (chr == ']') seenBracket = false;
  12876. buffer += chr;
  12877. } break;
  12878. case PORT:
  12879. if (exec$1(DIGIT, chr)) {
  12880. buffer += chr;
  12881. } else if (
  12882. chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
  12883. (chr == '\\' && url.isSpecial()) ||
  12884. stateOverride
  12885. ) {
  12886. if (buffer != '') {
  12887. var port = parseInt$1(buffer, 10);
  12888. if (port > 0xFFFF) return INVALID_PORT;
  12889. url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;
  12890. buffer = '';
  12891. }
  12892. if (stateOverride) return;
  12893. state = PATH_START;
  12894. continue;
  12895. } else return INVALID_PORT;
  12896. break;
  12897. case FILE:
  12898. url.scheme = 'file';
  12899. if (chr == '/' || chr == '\\') state = FILE_SLASH;
  12900. else if (base && base.scheme == 'file') {
  12901. if (chr == EOF) {
  12902. url.host = base.host;
  12903. url.path = arraySlice$2(base.path);
  12904. url.query = base.query;
  12905. } else if (chr == '?') {
  12906. url.host = base.host;
  12907. url.path = arraySlice$2(base.path);
  12908. url.query = '';
  12909. state = QUERY;
  12910. } else if (chr == '#') {
  12911. url.host = base.host;
  12912. url.path = arraySlice$2(base.path);
  12913. url.query = base.query;
  12914. url.fragment = '';
  12915. state = FRAGMENT;
  12916. } else {
  12917. if (!startsWithWindowsDriveLetter(join(arraySlice$2(codePoints, pointer), ''))) {
  12918. url.host = base.host;
  12919. url.path = arraySlice$2(base.path);
  12920. url.shortenPath();
  12921. }
  12922. state = PATH;
  12923. continue;
  12924. }
  12925. } else {
  12926. state = PATH;
  12927. continue;
  12928. } break;
  12929. case FILE_SLASH:
  12930. if (chr == '/' || chr == '\\') {
  12931. state = FILE_HOST;
  12932. break;
  12933. }
  12934. if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice$2(codePoints, pointer), ''))) {
  12935. if (isWindowsDriveLetter(base.path[0], true)) push$3(url.path, base.path[0]);
  12936. else url.host = base.host;
  12937. }
  12938. state = PATH;
  12939. continue;
  12940. case FILE_HOST:
  12941. if (chr == EOF || chr == '/' || chr == '\\' || chr == '?' || chr == '#') {
  12942. if (!stateOverride && isWindowsDriveLetter(buffer)) {
  12943. state = PATH;
  12944. } else if (buffer == '') {
  12945. url.host = '';
  12946. if (stateOverride) return;
  12947. state = PATH_START;
  12948. } else {
  12949. failure = url.parseHost(buffer);
  12950. if (failure) return failure;
  12951. if (url.host == 'localhost') url.host = '';
  12952. if (stateOverride) return;
  12953. buffer = '';
  12954. state = PATH_START;
  12955. } continue;
  12956. } else buffer += chr;
  12957. break;
  12958. case PATH_START:
  12959. if (url.isSpecial()) {
  12960. state = PATH;
  12961. if (chr != '/' && chr != '\\') continue;
  12962. } else if (!stateOverride && chr == '?') {
  12963. url.query = '';
  12964. state = QUERY;
  12965. } else if (!stateOverride && chr == '#') {
  12966. url.fragment = '';
  12967. state = FRAGMENT;
  12968. } else if (chr != EOF) {
  12969. state = PATH;
  12970. if (chr != '/') continue;
  12971. } break;
  12972. case PATH:
  12973. if (
  12974. chr == EOF || chr == '/' ||
  12975. (chr == '\\' && url.isSpecial()) ||
  12976. (!stateOverride && (chr == '?' || chr == '#'))
  12977. ) {
  12978. if (isDoubleDot(buffer)) {
  12979. url.shortenPath();
  12980. if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
  12981. push$3(url.path, '');
  12982. }
  12983. } else if (isSingleDot(buffer)) {
  12984. if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
  12985. push$3(url.path, '');
  12986. }
  12987. } else {
  12988. if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {
  12989. if (url.host) url.host = '';
  12990. buffer = charAt$2(buffer, 0) + ':'; // normalize windows drive letter
  12991. }
  12992. push$3(url.path, buffer);
  12993. }
  12994. buffer = '';
  12995. if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {
  12996. while (url.path.length > 1 && url.path[0] === '') {
  12997. shift(url.path);
  12998. }
  12999. }
  13000. if (chr == '?') {
  13001. url.query = '';
  13002. state = QUERY;
  13003. } else if (chr == '#') {
  13004. url.fragment = '';
  13005. state = FRAGMENT;
  13006. }
  13007. } else {
  13008. buffer += percentEncode(chr, pathPercentEncodeSet);
  13009. } break;
  13010. case CANNOT_BE_A_BASE_URL_PATH:
  13011. if (chr == '?') {
  13012. url.query = '';
  13013. state = QUERY;
  13014. } else if (chr == '#') {
  13015. url.fragment = '';
  13016. state = FRAGMENT;
  13017. } else if (chr != EOF) {
  13018. url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);
  13019. } break;
  13020. case QUERY:
  13021. if (!stateOverride && chr == '#') {
  13022. url.fragment = '';
  13023. state = FRAGMENT;
  13024. } else if (chr != EOF) {
  13025. if (chr == "'" && url.isSpecial()) url.query += '%27';
  13026. else if (chr == '#') url.query += '%23';
  13027. else url.query += percentEncode(chr, C0ControlPercentEncodeSet);
  13028. } break;
  13029. case FRAGMENT:
  13030. if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);
  13031. break;
  13032. }
  13033. pointer++;
  13034. }
  13035. },
  13036. // https://url.spec.whatwg.org/#host-parsing
  13037. parseHost: function (input) {
  13038. var result, codePoints, index;
  13039. if (charAt$2(input, 0) == '[') {
  13040. if (charAt$2(input, input.length - 1) != ']') return INVALID_HOST;
  13041. result = parseIPv6(stringSlice$3(input, 1, -1));
  13042. if (!result) return INVALID_HOST;
  13043. this.host = result;
  13044. // opaque host
  13045. } else if (!this.isSpecial()) {
  13046. if (exec$1(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;
  13047. result = '';
  13048. codePoints = arrayFrom(input);
  13049. for (index = 0; index < codePoints.length; index++) {
  13050. result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);
  13051. }
  13052. this.host = result;
  13053. } else {
  13054. input = toASCII(input);
  13055. if (exec$1(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;
  13056. result = parseIPv4(input);
  13057. if (result === null) return INVALID_HOST;
  13058. this.host = result;
  13059. }
  13060. },
  13061. // https://url.spec.whatwg.org/#cannot-have-a-username-password-port
  13062. cannotHaveUsernamePasswordPort: function () {
  13063. return !this.host || this.cannotBeABaseURL || this.scheme == 'file';
  13064. },
  13065. // https://url.spec.whatwg.org/#include-credentials
  13066. includesCredentials: function () {
  13067. return this.username != '' || this.password != '';
  13068. },
  13069. // https://url.spec.whatwg.org/#is-special
  13070. isSpecial: function () {
  13071. return hasOwn$6(specialSchemes, this.scheme);
  13072. },
  13073. // https://url.spec.whatwg.org/#shorten-a-urls-path
  13074. shortenPath: function () {
  13075. var path = this.path;
  13076. var pathSize = path.length;
  13077. if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {
  13078. path.length--;
  13079. }
  13080. },
  13081. // https://url.spec.whatwg.org/#concept-url-serializer
  13082. serialize: function () {
  13083. var url = this;
  13084. var scheme = url.scheme;
  13085. var username = url.username;
  13086. var password = url.password;
  13087. var host = url.host;
  13088. var port = url.port;
  13089. var path = url.path;
  13090. var query = url.query;
  13091. var fragment = url.fragment;
  13092. var output = scheme + ':';
  13093. if (host !== null) {
  13094. output += '//';
  13095. if (url.includesCredentials()) {
  13096. output += username + (password ? ':' + password : '') + '@';
  13097. }
  13098. output += serializeHost(host);
  13099. if (port !== null) output += ':' + port;
  13100. } else if (scheme == 'file') output += '//';
  13101. output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';
  13102. if (query !== null) output += '?' + query;
  13103. if (fragment !== null) output += '#' + fragment;
  13104. return output;
  13105. },
  13106. // https://url.spec.whatwg.org/#dom-url-href
  13107. setHref: function (href) {
  13108. var failure = this.parse(href);
  13109. if (failure) throw TypeError$2(failure);
  13110. this.searchParams.update();
  13111. },
  13112. // https://url.spec.whatwg.org/#dom-url-origin
  13113. getOrigin: function () {
  13114. var scheme = this.scheme;
  13115. var port = this.port;
  13116. if (scheme == 'blob') try {
  13117. return new URLConstructor(scheme.path[0]).origin;
  13118. } catch (error) {
  13119. return 'null';
  13120. }
  13121. if (scheme == 'file' || !this.isSpecial()) return 'null';
  13122. return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');
  13123. },
  13124. // https://url.spec.whatwg.org/#dom-url-protocol
  13125. getProtocol: function () {
  13126. return this.scheme + ':';
  13127. },
  13128. setProtocol: function (protocol) {
  13129. this.parse($toString$1(protocol) + ':', SCHEME_START);
  13130. },
  13131. // https://url.spec.whatwg.org/#dom-url-username
  13132. getUsername: function () {
  13133. return this.username;
  13134. },
  13135. setUsername: function (username) {
  13136. var codePoints = arrayFrom($toString$1(username));
  13137. if (this.cannotHaveUsernamePasswordPort()) return;
  13138. this.username = '';
  13139. for (var i = 0; i < codePoints.length; i++) {
  13140. this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);
  13141. }
  13142. },
  13143. // https://url.spec.whatwg.org/#dom-url-password
  13144. getPassword: function () {
  13145. return this.password;
  13146. },
  13147. setPassword: function (password) {
  13148. var codePoints = arrayFrom($toString$1(password));
  13149. if (this.cannotHaveUsernamePasswordPort()) return;
  13150. this.password = '';
  13151. for (var i = 0; i < codePoints.length; i++) {
  13152. this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);
  13153. }
  13154. },
  13155. // https://url.spec.whatwg.org/#dom-url-host
  13156. getHost: function () {
  13157. var host = this.host;
  13158. var port = this.port;
  13159. return host === null ? ''
  13160. : port === null ? serializeHost(host)
  13161. : serializeHost(host) + ':' + port;
  13162. },
  13163. setHost: function (host) {
  13164. if (this.cannotBeABaseURL) return;
  13165. this.parse(host, HOST);
  13166. },
  13167. // https://url.spec.whatwg.org/#dom-url-hostname
  13168. getHostname: function () {
  13169. var host = this.host;
  13170. return host === null ? '' : serializeHost(host);
  13171. },
  13172. setHostname: function (hostname) {
  13173. if (this.cannotBeABaseURL) return;
  13174. this.parse(hostname, HOSTNAME);
  13175. },
  13176. // https://url.spec.whatwg.org/#dom-url-port
  13177. getPort: function () {
  13178. var port = this.port;
  13179. return port === null ? '' : $toString$1(port);
  13180. },
  13181. setPort: function (port) {
  13182. if (this.cannotHaveUsernamePasswordPort()) return;
  13183. port = $toString$1(port);
  13184. if (port == '') this.port = null;
  13185. else this.parse(port, PORT);
  13186. },
  13187. // https://url.spec.whatwg.org/#dom-url-pathname
  13188. getPathname: function () {
  13189. var path = this.path;
  13190. return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';
  13191. },
  13192. setPathname: function (pathname) {
  13193. if (this.cannotBeABaseURL) return;
  13194. this.path = [];
  13195. this.parse(pathname, PATH_START);
  13196. },
  13197. // https://url.spec.whatwg.org/#dom-url-search
  13198. getSearch: function () {
  13199. var query = this.query;
  13200. return query ? '?' + query : '';
  13201. },
  13202. setSearch: function (search) {
  13203. search = $toString$1(search);
  13204. if (search == '') {
  13205. this.query = null;
  13206. } else {
  13207. if ('?' == charAt$2(search, 0)) search = stringSlice$3(search, 1);
  13208. this.query = '';
  13209. this.parse(search, QUERY);
  13210. }
  13211. this.searchParams.update();
  13212. },
  13213. // https://url.spec.whatwg.org/#dom-url-searchparams
  13214. getSearchParams: function () {
  13215. return this.searchParams.facade;
  13216. },
  13217. // https://url.spec.whatwg.org/#dom-url-hash
  13218. getHash: function () {
  13219. var fragment = this.fragment;
  13220. return fragment ? '#' + fragment : '';
  13221. },
  13222. setHash: function (hash) {
  13223. hash = $toString$1(hash);
  13224. if (hash == '') {
  13225. this.fragment = null;
  13226. return;
  13227. }
  13228. if ('#' == charAt$2(hash, 0)) hash = stringSlice$3(hash, 1);
  13229. this.fragment = '';
  13230. this.parse(hash, FRAGMENT);
  13231. },
  13232. update: function () {
  13233. this.query = this.searchParams.serialize() || null;
  13234. }
  13235. };
  13236. // `URL` constructor
  13237. // https://url.spec.whatwg.org/#url-class
  13238. var URLConstructor = function URL(url /* , base */) {
  13239. var that = anInstance$2(this, URLPrototype);
  13240. var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;
  13241. var state = setInternalState$2(that, new URLState(url, false, base));
  13242. if (!DESCRIPTORS$5) {
  13243. that.href = state.serialize();
  13244. that.origin = state.getOrigin();
  13245. that.protocol = state.getProtocol();
  13246. that.username = state.getUsername();
  13247. that.password = state.getPassword();
  13248. that.host = state.getHost();
  13249. that.hostname = state.getHostname();
  13250. that.port = state.getPort();
  13251. that.pathname = state.getPathname();
  13252. that.search = state.getSearch();
  13253. that.searchParams = state.getSearchParams();
  13254. that.hash = state.getHash();
  13255. }
  13256. };
  13257. var URLPrototype = URLConstructor.prototype;
  13258. var accessorDescriptor = function (getter, setter) {
  13259. return {
  13260. get: function () {
  13261. return getInternalURLState(this)[getter]();
  13262. },
  13263. set: setter && function (value) {
  13264. return getInternalURLState(this)[setter](value);
  13265. },
  13266. configurable: true,
  13267. enumerable: true
  13268. };
  13269. };
  13270. if (DESCRIPTORS$5) {
  13271. // `URL.prototype.href` accessors pair
  13272. // https://url.spec.whatwg.org/#dom-url-href
  13273. defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));
  13274. // `URL.prototype.origin` getter
  13275. // https://url.spec.whatwg.org/#dom-url-origin
  13276. defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));
  13277. // `URL.prototype.protocol` accessors pair
  13278. // https://url.spec.whatwg.org/#dom-url-protocol
  13279. defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));
  13280. // `URL.prototype.username` accessors pair
  13281. // https://url.spec.whatwg.org/#dom-url-username
  13282. defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));
  13283. // `URL.prototype.password` accessors pair
  13284. // https://url.spec.whatwg.org/#dom-url-password
  13285. defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));
  13286. // `URL.prototype.host` accessors pair
  13287. // https://url.spec.whatwg.org/#dom-url-host
  13288. defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));
  13289. // `URL.prototype.hostname` accessors pair
  13290. // https://url.spec.whatwg.org/#dom-url-hostname
  13291. defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));
  13292. // `URL.prototype.port` accessors pair
  13293. // https://url.spec.whatwg.org/#dom-url-port
  13294. defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));
  13295. // `URL.prototype.pathname` accessors pair
  13296. // https://url.spec.whatwg.org/#dom-url-pathname
  13297. defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));
  13298. // `URL.prototype.search` accessors pair
  13299. // https://url.spec.whatwg.org/#dom-url-search
  13300. defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));
  13301. // `URL.prototype.searchParams` getter
  13302. // https://url.spec.whatwg.org/#dom-url-searchparams
  13303. defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));
  13304. // `URL.prototype.hash` accessors pair
  13305. // https://url.spec.whatwg.org/#dom-url-hash
  13306. defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));
  13307. }
  13308. // `URL.prototype.toJSON` method
  13309. // https://url.spec.whatwg.org/#dom-url-tojson
  13310. defineBuiltIn$3(URLPrototype, 'toJSON', function toJSON() {
  13311. return getInternalURLState(this).serialize();
  13312. }, { enumerable: true });
  13313. // `URL.prototype.toString` method
  13314. // https://url.spec.whatwg.org/#URL-stringification-behavior
  13315. defineBuiltIn$3(URLPrototype, 'toString', function toString() {
  13316. return getInternalURLState(this).serialize();
  13317. }, { enumerable: true });
  13318. if (NativeURL) {
  13319. var nativeCreateObjectURL = NativeURL.createObjectURL;
  13320. var nativeRevokeObjectURL = NativeURL.revokeObjectURL;
  13321. // `URL.createObjectURL` method
  13322. // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  13323. if (nativeCreateObjectURL) defineBuiltIn$3(URLConstructor, 'createObjectURL', bind$1(nativeCreateObjectURL, NativeURL));
  13324. // `URL.revokeObjectURL` method
  13325. // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL
  13326. if (nativeRevokeObjectURL) defineBuiltIn$3(URLConstructor, 'revokeObjectURL', bind$1(nativeRevokeObjectURL, NativeURL));
  13327. }
  13328. setToStringTag$2(URLConstructor, 'URL');
  13329. $$c({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS$5 }, {
  13330. URL: URLConstructor
  13331. });
  13332. var MESSAGE_INIT = "init";
  13333. var MESSAGE_APPEND = "append";
  13334. var MESSAGE_FLUSH = "flush";
  13335. var MESSAGE_EVENT_TYPE = "message";
  13336. var classicWorkersSupported = true;
  13337. var getWorker = (function (workerData, codecConstructor, options, config, _onTaskFinished, webWorker, scripts) {
  13338. Object.assign(workerData, {
  13339. busy: true,
  13340. codecConstructor: codecConstructor,
  13341. options: Object.assign({}, options),
  13342. scripts: scripts,
  13343. terminate: function terminate() {
  13344. if (workerData.worker && !workerData.busy) {
  13345. workerData.worker.terminate();
  13346. workerData.interface = null;
  13347. }
  13348. },
  13349. onTaskFinished: function onTaskFinished() {
  13350. workerData.busy = false;
  13351. _onTaskFinished(workerData);
  13352. }
  13353. });
  13354. return webWorker ? createWebWorkerInterface(workerData, config) : createWorkerInterface(workerData, config);
  13355. });
  13356. function createWorkerInterface(workerData, config) {
  13357. var interfaceCodec = createCodec$1(workerData.codecConstructor, workerData.options, config);
  13358. return {
  13359. append: function append(data) {
  13360. try {
  13361. return _await(_catch(function () {
  13362. return _await(interfaceCodec.append(data));
  13363. }, function (error) {
  13364. workerData.onTaskFinished();
  13365. throw error;
  13366. }));
  13367. } catch (e) {
  13368. return Promise.reject(e);
  13369. }
  13370. },
  13371. flush: function flush() {
  13372. try {
  13373. return _await(_finallyRethrows(function () {
  13374. return _await(interfaceCodec.flush());
  13375. }, function (_wasThrown, _result) {
  13376. workerData.onTaskFinished();
  13377. return _rethrow(_wasThrown, _result);
  13378. }));
  13379. } catch (e) {
  13380. return Promise.reject(e);
  13381. }
  13382. },
  13383. abort: function abort() {
  13384. workerData.onTaskFinished();
  13385. }
  13386. };
  13387. }
  13388. function createWebWorkerInterface(workerData, config) {
  13389. var initAndSendMessage = _async(function (message) {
  13390. return _invoke(function () {
  13391. if (!messageTask) {
  13392. var options = workerData.options;
  13393. var scripts = workerData.scripts.slice(1);
  13394. return _awaitIgnored(sendMessage({
  13395. scripts: scripts,
  13396. type: MESSAGE_INIT,
  13397. options: options,
  13398. config: {
  13399. chunkSize: config.chunkSize
  13400. }
  13401. }));
  13402. }
  13403. }, function () {
  13404. return sendMessage(message);
  13405. });
  13406. });
  13407. var messageTask;
  13408. var workerOptions = {
  13409. type: "module"
  13410. };
  13411. if (!workerData.interface) {
  13412. if (!classicWorkersSupported) {
  13413. workerData.worker = getWorker(workerOptions, config.baseURL);
  13414. } else {
  13415. try {
  13416. workerData.worker = getWorker({}, config.baseURL);
  13417. } catch (_error) {
  13418. classicWorkersSupported = false;
  13419. workerData.worker = getWorker(workerOptions, config.baseURL);
  13420. }
  13421. }
  13422. workerData.worker.addEventListener(MESSAGE_EVENT_TYPE, onMessage, false);
  13423. workerData.interface = {
  13424. append: function append(data) {
  13425. return initAndSendMessage({
  13426. type: MESSAGE_APPEND,
  13427. data: data
  13428. });
  13429. },
  13430. flush: function flush() {
  13431. return initAndSendMessage({
  13432. type: MESSAGE_FLUSH
  13433. });
  13434. },
  13435. abort: function abort() {
  13436. workerData.onTaskFinished();
  13437. }
  13438. };
  13439. }
  13440. return workerData.interface;
  13441. function getWorker(options, baseURL) {
  13442. var url, scriptUrl;
  13443. url = workerData.scripts[0];
  13444. if (typeof url == "function") {
  13445. url = url();
  13446. }
  13447. try {
  13448. scriptUrl = new URL(url, baseURL);
  13449. } catch (_error) {
  13450. scriptUrl = url;
  13451. }
  13452. return new Worker(scriptUrl, options);
  13453. }
  13454. function sendMessage(message) {
  13455. var worker = workerData.worker;
  13456. var result = new Promise(function (resolve, reject) {
  13457. return messageTask = {
  13458. resolve: resolve,
  13459. reject: reject
  13460. };
  13461. });
  13462. try {
  13463. if (message.data) {
  13464. try {
  13465. message.data = message.data.buffer;
  13466. worker.postMessage(message, [message.data]);
  13467. } catch (_error) {
  13468. worker.postMessage(message);
  13469. }
  13470. } else {
  13471. worker.postMessage(message);
  13472. }
  13473. } catch (error) {
  13474. messageTask.reject(error);
  13475. messageTask = null;
  13476. workerData.onTaskFinished();
  13477. }
  13478. return result;
  13479. }
  13480. function onMessage(event) {
  13481. var message = event.data;
  13482. if (messageTask) {
  13483. var reponseError = message.error;
  13484. var type = message.type;
  13485. if (reponseError) {
  13486. var error = new Error(reponseError.message);
  13487. error.stack = reponseError.stack;
  13488. messageTask.reject(error);
  13489. messageTask = null;
  13490. workerData.onTaskFinished();
  13491. } else if (type == MESSAGE_INIT || type == MESSAGE_FLUSH || type == MESSAGE_APPEND) {
  13492. var data = message.data;
  13493. if (type == MESSAGE_FLUSH) {
  13494. messageTask.resolve({
  13495. data: new Uint8Array(data),
  13496. signature: message.signature
  13497. });
  13498. messageTask = null;
  13499. workerData.onTaskFinished();
  13500. } else {
  13501. messageTask.resolve(data && new Uint8Array(data));
  13502. }
  13503. }
  13504. }
  13505. }
  13506. }
  13507. var pool = [];
  13508. var pendingRequests = [];
  13509. function createCodec(codecConstructor, options, config) {
  13510. var streamCopy = !options.compressed && !options.signed && !options.encrypted;
  13511. var webWorker = !streamCopy && (options.useWebWorkers || options.useWebWorkers === undefined && config.useWebWorkers);
  13512. var scripts = webWorker && config.workerScripts ? config.workerScripts[options.codecType] : [];
  13513. if (pool.length < config.maxWorkers) {
  13514. var workerData = {};
  13515. pool.push(workerData);
  13516. return getWorker(workerData, codecConstructor, options, config, onTaskFinished, webWorker, scripts);
  13517. } else {
  13518. var _workerData = pool.find(function (workerData) {
  13519. return !workerData.busy;
  13520. });
  13521. if (_workerData) {
  13522. clearTerminateTimeout(_workerData);
  13523. return getWorker(_workerData, codecConstructor, options, config, onTaskFinished, webWorker, scripts);
  13524. } else {
  13525. return new Promise(function (resolve) {
  13526. return pendingRequests.push({
  13527. resolve: resolve,
  13528. codecConstructor: codecConstructor,
  13529. options: options,
  13530. webWorker: webWorker,
  13531. scripts: scripts
  13532. });
  13533. });
  13534. }
  13535. }
  13536. function onTaskFinished(workerData) {
  13537. if (pendingRequests.length) {
  13538. var _pendingRequests$spli = pendingRequests.splice(0, 1),
  13539. _pendingRequests$spli2 = _slicedToArray(_pendingRequests$spli, 1),
  13540. _pendingRequests$spli3 = _pendingRequests$spli2[0],
  13541. resolve = _pendingRequests$spli3.resolve,
  13542. _codecConstructor = _pendingRequests$spli3.codecConstructor,
  13543. _options = _pendingRequests$spli3.options,
  13544. _webWorker = _pendingRequests$spli3.webWorker,
  13545. _scripts = _pendingRequests$spli3.scripts;
  13546. resolve(getWorker(workerData, _codecConstructor, _options, config, onTaskFinished, _webWorker, _scripts));
  13547. } else if (workerData.worker) {
  13548. clearTerminateTimeout(workerData);
  13549. if (Number.isFinite(config.terminateWorkerTimeout) && config.terminateWorkerTimeout >= 0) {
  13550. workerData.terminateTimeout = setTimeout(function () {
  13551. pool = pool.filter(function (data) {
  13552. return data != workerData;
  13553. });
  13554. workerData.terminate();
  13555. }, config.terminateWorkerTimeout);
  13556. }
  13557. } else {
  13558. pool = pool.filter(function (data) {
  13559. return data != workerData;
  13560. });
  13561. }
  13562. }
  13563. }
  13564. function clearTerminateTimeout(workerData) {
  13565. if (workerData.terminateTimeout) {
  13566. clearTimeout(workerData.terminateTimeout);
  13567. workerData.terminateTimeout = null;
  13568. }
  13569. }
  13570. function terminateWorkers() {
  13571. pool.forEach(function (workerData) {
  13572. clearTerminateTimeout(workerData);
  13573. workerData.terminate();
  13574. });
  13575. }
  13576. var d = function d(_d) {
  13577. if ("function" == typeof URL.createObjectURL) {
  13578. var m = function m() {
  13579. return URL.createObjectURL(new Blob([atob("dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSx0PWZ1bmN0aW9uKHIpe3JldHVybiByJiZyLk1hdGg9PU1hdGgmJnJ9LG49dCgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHx0KCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHx0KCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHQoIm9iamVjdCI9PXR5cGVvZiByJiZyKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxlPXt9LGk9ZnVuY3Rpb24ocil7dHJ5e3JldHVybiEhcigpfWNhdGNoKHIpe3JldHVybiEwfX0sbz0haSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLHU9IWkoKGZ1bmN0aW9uKCl7dmFyIHI9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2Ygcnx8ci5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSksZj1mdW5jdGlvbigpe30uY2FsbCxhPXU/Zi5iaW5kKGYpOmZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkoZixhcmd1bWVudHMpfSxjPXt9LHM9e30ucHJvcGVydHlJc0VudW1lcmFibGUsdj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9diYmIXMuY2FsbCh7MToyfSwxKTtjLmY9aD9mdW5jdGlvbihyKXt2YXIgdD12KHRoaXMscik7cmV0dXJuISF0JiZ0LnR9OnM7dmFyIGwsZCx5PWZ1bmN0aW9uKHIsdCl7cmV0dXJue3Q6ISgxJnIpLGk6ISgyJnIpLHdyaXRhYmxlOiEoNCZyKSx2YWx1ZTp0fX0sdz11LGI9RnVuY3Rpb24ucHJvdG90eXBlLHA9Yi5iaW5kLGc9Yi5jYWxsLG09dyYmcC5iaW5kKGcsZyksUz13P2Z1bmN0aW9uKHIpe3JldHVybiByJiZtKHIpfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmZnVuY3Rpb24oKXtyZXR1cm4gZy5hcHBseShyLGFyZ3VtZW50cyl9fSxBPVMsaj1BKHt9LnRvU3RyaW5nKSxPPUEoIiIuc2xpY2UpLGs9ZnVuY3Rpb24ocil7cmV0dXJuIE8oaihyKSw4LC0xKX0sRT1pLFQ9ayx4PU9iamVjdCxVPVMoIiIuc3BsaXQpLE09RSgoZnVuY3Rpb24oKXtyZXR1cm4heCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHIpe3JldHVybiJTdHJpbmciPT1UKHIpP1UociwiIik6eChyKX06eCxJPVR5cGVFcnJvcixMPWZ1bmN0aW9uKHIpe2lmKG51bGw9PXIpdGhyb3cgSSgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIityKTtyZXR1cm4gcn0sUD1NLF89TCxSPWZ1bmN0aW9uKHIpe3JldHVybiBQKF8ocikpfSxGPWZ1bmN0aW9uKHIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByfSxOPUYsQz1mdW5jdGlvbihyKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHI/bnVsbCE9PXI6TihyKX0sQj1uLEc9RixEPWZ1bmN0aW9uKHIpe3JldHVybiBHKHIpP3I6dm9pZCAwfSxWPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIDI+YXJndW1lbnRzLmxlbmd0aD9EKEJbcl0pOkJbcl0mJkJbcl1bdF19LFk9Uyh7fS5pc1Byb3RvdHlwZU9mKSx6PVYoIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIixXPW4sJD16LEg9Vy5wcm9jZXNzLEs9Vy5vLHE9SCYmSC51fHxLJiZLLnZlcnNpb24sSj1xJiZxLnY7SiYmKGQ9KGw9Si5zcGxpdCgiLiIpKVswXT4wJiY0PmxbMF0/MTorKGxbMF0rbFsxXSkpLCFkJiYkJiYoKGw9JC5tYXRjaCgvRWRnZVwvKFxkKykvKSkmJjc0PmxbMV18fChsPSQubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihkPStsWzFdKSk7dmFyIFg9ZCxRPVgsWj0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFpKChmdW5jdGlvbigpe3ZhciByPVN5bWJvbCgpO3JldHVybiEocisiIil8fCEoT2JqZWN0KHIpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLmgmJlEmJjQxPlF9KSkscnI9WiYmIVN5bWJvbC5oJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcix0cj1WLG5yPUYsZXI9WSxpcj1PYmplY3Qsb3I9cnI/ZnVuY3Rpb24ocil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiByfTpmdW5jdGlvbihyKXt2YXIgdD10cigiU3ltYm9sIik7cmV0dXJuIG5yKHQpJiZlcih0LnByb3RvdHlwZSxpcihyKSl9LHVyPVN0cmluZyxmcj1mdW5jdGlvbihyKXt0cnl7cmV0dXJuIHVyKHIpfWNhdGNoKHIpe3JldHVybiJPYmplY3QifX0sYXI9Rixjcj1mcixzcj1UeXBlRXJyb3IsdnI9ZnVuY3Rpb24ocil7aWYoYXIocikpcmV0dXJuIHI7dGhyb3cgc3IoY3IocikrIiBpcyBub3QgYSBmdW5jdGlvbiIpfSxocj12cixscj1mdW5jdGlvbihyLHQpe3ZhciBuPXJbdF07cmV0dXJuIG51bGw9PW4/dm9pZCAwOmhyKG4pfSxkcj1hLHlyPUYsd3I9Qyxicj1UeXBlRXJyb3IscHI9e2V4cG9ydHM6e319LGdyPW4sbXI9T2JqZWN0LmRlZmluZVByb3BlcnR5LFNyPWZ1bmN0aW9uKHIsdCl7dHJ5e21yKGdyLHIse3ZhbHVlOnQsaTohMCx3cml0YWJsZTohMH0pfWNhdGNoKG4pe2dyW3JdPXR9cmV0dXJuIHR9LEFyPVNyLGpyPW5bImwiXXx8QXIoIl9fY29yZS1qc19zaGFyZWRfXyIse30pLE9yPWpyOyhwci5leHBvcnRzPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIE9yW3JdfHwoT3Jbcl09dm9pZCAwIT09dD90Ont9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMjMuMiIsbW9kZToiZ2xvYmFsIixwOiLCqSAyMDE0LTIwMjIgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkiLGc6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMjMuMi9MSUNFTlNFIixzb3VyY2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzIn0pO3ZhciBrcj1MLEVyPU9iamVjdCxUcj1mdW5jdGlvbihyKXtyZXR1cm4gRXIoa3IocikpfSx4cj1UcixVcj1TKHt9Lmhhc093blByb3BlcnR5KSxNcj1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihyLHQpe3JldHVybiBVcih4cihyKSx0KX0sSXI9UyxMcj0wLFByPU1hdGgucmFuZG9tKCksX3I9SXIoMS4udG9TdHJpbmcpLFJyPWZ1bmN0aW9uKHIpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09cj8iIjpyKSsiKV8iK19yKCsrTHIrUHIsMzYpfSxGcj1uLE5yPXByLmV4cG9ydHMsQ3I9TXIsQnI9UnIsR3I9WixEcj1ycixWcj1Ocigid2tzIiksWXI9RnIuU3ltYm9sLHpyPVlyJiZZci5mb3IsV3I9RHI/WXI6WXImJllyLm18fEJyLCRyPWZ1bmN0aW9uKHIpe2lmKCFDcihWcixyKXx8IUdyJiYic3RyaW5nIiE9dHlwZW9mIFZyW3JdKXt2YXIgdD0iU3ltYm9sLiIrcjtHciYmQ3IoWXIscik/VnJbcl09WXJbcl06VnJbcl09RHImJnpyP3pyKHQpOldyKHQpfXJldHVybiBWcltyXX0sSHI9YSxLcj1DLHFyPW9yLEpyPWxyLFhyPVR5cGVFcnJvcixRcj0kcigidG9QcmltaXRpdmUiKSxacj1mdW5jdGlvbihyLHQpe2lmKCFLcihyKXx8cXIocikpcmV0dXJuIHI7dmFyIG4sZT1KcihyLFFyKTtpZihlKXtpZih2b2lkIDA9PT10JiYodD0iZGVmYXVsdCIpLG49SHIoZSxyLHQpLCFLcihuKXx8cXIobikpcmV0dXJuIG47dGhyb3cgWHIoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT10JiYodD0ibnVtYmVyIiksZnVuY3Rpb24ocix0KXt2YXIgbixlO2lmKCJzdHJpbmciPT09dCYmeXIobj1yLnRvU3RyaW5nKSYmIXdyKGU9ZHIobixyKSkpcmV0dXJuIGU7aWYoeXIobj1yLnZhbHVlT2YpJiYhd3IoZT1kcihuLHIpKSlyZXR1cm4gZTtpZigic3RyaW5nIiE9PXQmJnlyKG49ci50b1N0cmluZykmJiF3cihlPWRyKG4scikpKXJldHVybiBlO3Rocm93IGJyKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX0ocix0KX0scnQ9WnIsdHQ9b3IsbnQ9ZnVuY3Rpb24ocil7dmFyIHQ9cnQociwic3RyaW5nIik7cmV0dXJuIHR0KHQpP3Q6dCsiIn0sZXQ9QyxpdD1uLmRvY3VtZW50LG90PWV0KGl0KSYmZXQoaXQuY3JlYXRlRWxlbWVudCksdXQ9ZnVuY3Rpb24ocil7cmV0dXJuIG90P2l0LmNyZWF0ZUVsZW1lbnQocik6e319LGZ0PXV0LGF0PSFvJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGZ0KCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSksY3Q9byxzdD1hLHZ0PWMsaHQ9eSxsdD1SLGR0PW50LHl0PU1yLHd0PWF0LGJ0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ZS5mPWN0P2J0OmZ1bmN0aW9uKHIsdCl7aWYocj1sdChyKSx0PWR0KHQpLHd0KXRyeXtyZXR1cm4gYnQocix0KX1jYXRjaChyKXt9aWYoeXQocix0KSlyZXR1cm4gaHQoIXN0KHZ0LmYscix0KSxyW3RdKX07dmFyIHB0PXt9LGd0PW8mJmkoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT1PYmplY3QuZGVmaW5lUHJvcGVydHkoKGZ1bmN0aW9uKCl7fSksInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSkpLG10PUMsU3Q9U3RyaW5nLEF0PVR5cGVFcnJvcixqdD1mdW5jdGlvbihyKXtpZihtdChyKSlyZXR1cm4gcjt0aHJvdyBBdChTdChyKSsiIGlzIG5vdCBhbiBvYmplY3QiKX0sT3Q9byxrdD1hdCxFdD1ndCxUdD1qdCx4dD1udCxVdD1UeXBlRXJyb3IsTXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LEl0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7cHQuZj1PdD9FdD9mdW5jdGlvbihyLHQsbil7aWYoVHQociksdD14dCh0KSxUdChuKSwiZnVuY3Rpb24iPT10eXBlb2YgciYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gbiYmIndyaXRhYmxlImluIG4mJiFuLndyaXRhYmxlKXt2YXIgZT1JdChyLHQpO2UmJmUud3JpdGFibGUmJihyW3RdPW4udmFsdWUsbj17aToiaSJpbiBuP24uaTplLmksdDoidCJpbiBuP24udDplLnQsd3JpdGFibGU6ITF9KX1yZXR1cm4gTXQocix0LG4pfTpNdDpmdW5jdGlvbihyLHQsbil7aWYoVHQociksdD14dCh0KSxUdChuKSxrdCl0cnl7cmV0dXJuIE10KHIsdCxuKX1jYXRjaChyKXt9aWYoImdldCJpbiBufHwic2V0ImluIG4pdGhyb3cgVXQoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJihyW3RdPW4udmFsdWUpLHJ9O3ZhciBMdD1wdCxQdD15LF90PW8/ZnVuY3Rpb24ocix0LG4pe3JldHVybiBMdC5mKHIsdCxQdCgxLG4pKX06ZnVuY3Rpb24ocix0LG4pe3JldHVybiByW3RdPW4scn0sUnQ9e2V4cG9ydHM6e319LEZ0PW8sTnQ9RnVuY3Rpb24ucHJvdG90eXBlLEN0PUZ0JiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEJ0PU1yKE50LCJuYW1lIiksR3Q9e1M6QnQsQTpCdCYmITEsajpCdCYmKCFGdHx8RnQmJkN0KE50LCJuYW1lIikuaSl9LER0PUYsVnQ9anIsWXQ9UyhGdW5jdGlvbi50b1N0cmluZyk7RHQoVnQuTyl8fChWdC5PPWZ1bmN0aW9uKHIpe3JldHVybiBZdChyKX0pO3ZhciB6dCxXdCwkdCxIdD1WdC5PLEt0PUYscXQ9SHQsSnQ9bi5XZWFrTWFwLFh0PUt0KEp0KSYmL25hdGl2ZSBjb2RlLy50ZXN0KHF0KEp0KSksUXQ9cHIuZXhwb3J0cyxadD1Scixybj1RdCgia2V5cyIpLHRuPWZ1bmN0aW9uKHIpe3JldHVybiBybltyXXx8KHJuW3JdPVp0KHIpKX0sbm49e30sZW49WHQsb249bix1bj1TLGZuPUMsYW49X3QsY249TXIsc249anIsdm49dG4saG49bm4sbG49b24uVHlwZUVycm9yLGRuPW9uLldlYWtNYXA7aWYoZW58fHNuLnN0YXRlKXt2YXIgeW49c24uc3RhdGV8fChzbi5zdGF0ZT1uZXcgZG4pLHduPXVuKHluLmdldCksYm49dW4oeW4uaGFzKSxwbj11bih5bi5zZXQpO3p0PWZ1bmN0aW9uKHIsdCl7aWYoYm4oeW4scikpdGhyb3cgbmV3IGxuKCJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIpO3JldHVybiB0Lms9cixwbih5bixyLHQpLHR9LFd0PWZ1bmN0aW9uKHIpe3JldHVybiB3bih5bixyKXx8e319LCR0PWZ1bmN0aW9uKHIpe3JldHVybiBibih5bixyKX19ZWxzZXt2YXIgZ249dm4oInN0YXRlIik7aG5bZ25dPSEwLHp0PWZ1bmN0aW9uKHIsdCl7aWYoY24ocixnbikpdGhyb3cgbmV3IGxuKCJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIpO3JldHVybiB0Lms9cixhbihyLGduLHQpLHR9LFd0PWZ1bmN0aW9uKHIpe3JldHVybiBjbihyLGduKT9yW2duXTp7fX0sJHQ9ZnVuY3Rpb24ocil7cmV0dXJuIGNuKHIsZ24pfX12YXIgbW49e3NldDp6dCxnZXQ6V3QsaGFzOiR0LFQ6ZnVuY3Rpb24ocil7cmV0dXJuICR0KHIpP1d0KHIpOnp0KHIse30pfSxVOmZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbjtpZighZm4odCl8fChuPVd0KHQpKS50eXBlIT09cil0aHJvdyBsbigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3IrIiByZXF1aXJlZCIpO3JldHVybiBufX19LFNuPUYsQW49TXIsam49byxPbj1HdC5qLGtuPUh0LEVuPW1uLlQsVG49bW4uZ2V0LHhuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxVbj1qbiYmIWkoKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT14bigoZnVuY3Rpb24oKXt9KSwibGVuZ3RoIix7dmFsdWU6OH0pLmxlbmd0aH0pKSxNbj0oU3RyaW5nKyIiKS5zcGxpdCgiU3RyaW5nIiksSW49UnQuZXhwb3J0cz1mdW5jdGlvbihyLHQsbil7IlN5bWJvbCgiPT09KHQrIiIpLnNsaWNlKDAsNykmJih0PSJbIisodCsiIikucmVwbGFjZSgvXlN5bWJvbFwoKFteKV0qKVwpLywiJDEiKSsiXSIpLG4mJm4uTSYmKHQ9ImdldCAiK3QpLG4mJm4uSSYmKHQ9InNldCAiK3QpLCghQW4ociwibmFtZSIpfHxPbiYmci5uYW1lIT09dCkmJnhuKHIsIm5hbWUiLHt2YWx1ZTp0LGk6ITB9KSxVbiYmbiYmQW4obiwiYXJpdHkiKSYmci5sZW5ndGghPT1uLkwmJnhuKHIsImxlbmd0aCIse3ZhbHVlOm4uTH0pO3RyeXtuJiZBbihuLCJjb25zdHJ1Y3RvciIpJiZuLmNvbnN0cnVjdG9yP2puJiZ4bihyLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOnIucHJvdG90eXBlJiYoci5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaChyKXt9dmFyIGU9RW4ocik7cmV0dXJuIEFuKGUsInNvdXJjZSIpfHwoZS5zb3VyY2U9TW4uam9pbigic3RyaW5nIj09dHlwZW9mIHQ/dDoiIikpLHJ9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1JbigoZnVuY3Rpb24oKXtyZXR1cm4gU24odGhpcykmJlRuKHRoaXMpLnNvdXJjZXx8a24odGhpcyl9KSwidG9TdHJpbmciKTt2YXIgTG49RixQbj1wdCxfbj1SdC5leHBvcnRzLFJuPVNyLEZuPWZ1bmN0aW9uKHIsdCxuLGUpe2V8fChlPXt9KTt2YXIgaT1lLnQsbz12b2lkIDAhPT1lLm5hbWU/ZS5uYW1lOnQ7cmV0dXJuIExuKG4pJiZfbihuLG8sZSksZS5nbG9iYWw/aT9yW3RdPW46Um4odCxuKTooZS5QP3JbdF0mJihpPSEwKTpkZWxldGUgclt0XSxpP3JbdF09bjpQbi5mKHIsdCx7dmFsdWU6bix0OiExLGk6IWUuXyx3cml0YWJsZTohZS5SfSkpLHJ9LE5uPXt9LENuPU1hdGguY2VpbCxCbj1NYXRoLmZsb29yLEduPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHIpe3ZhciB0PStyO3JldHVybih0PjA/Qm46Q24pKHQpfSxEbj1mdW5jdGlvbihyKXt2YXIgdD0rcjtyZXR1cm4gdCE9dHx8MD09PXQ/MDpHbih0KX0sVm49RG4sWW49TWF0aC5tYXgsem49TWF0aC5taW4sV249ZnVuY3Rpb24ocix0KXt2YXIgbj1WbihyKTtyZXR1cm4gMD5uP1luKG4rdCwwKTp6bihuLHQpfSwkbj1EbixIbj1NYXRoLm1pbixLbj1mdW5jdGlvbihyKXtyZXR1cm4gcj4wP0huKCRuKHIpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LHFuPUtuLEpuPWZ1bmN0aW9uKHIpe3JldHVybiBxbihyLmxlbmd0aCl9LFhuPVIsUW49V24sWm49Sm4scmU9ZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXt2YXIgaSxvPVhuKHQpLHU9Wm4obyksZj1RbihlLHUpO2lmKHImJm4hPW4pe2Zvcig7dT5mOylpZigoaT1vW2YrK10pIT1pKXJldHVybiEwfWVsc2UgZm9yKDt1PmY7ZisrKWlmKChyfHxmIGluIG8pJiZvW2ZdPT09bilyZXR1cm4gcnx8Znx8MDtyZXR1cm4hciYmLTF9fSx0ZT17aW5jbHVkZXM6cmUoITApLGluZGV4T2Y6cmUoITEpfSxuZT1NcixlZT1SLGllPXRlLmluZGV4T2Ysb2U9bm4sdWU9UyhbXS5wdXNoKSxmZT1mdW5jdGlvbihyLHQpe3ZhciBuLGU9ZWUociksaT0wLG89W107Zm9yKG4gaW4gZSkhbmUob2UsbikmJm5lKGUsbikmJnVlKG8sbik7Zm9yKDt0Lmxlbmd0aD5pOyluZShlLG49dFtpKytdKSYmKH5pZShvLG4pfHx1ZShvLG4pKTtyZXR1cm4gb30sYWU9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXSxjZT1mZSxzZT1hZS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO05uLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHIpe3JldHVybiBjZShyLHNlKX07dmFyIHZlPXt9O3ZlLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczt2YXIgaGU9VixsZT1ObixkZT12ZSx5ZT1qdCx3ZT1TKFtdLmNvbmNhdCksYmU9aGUoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHIpe3ZhciB0PWxlLmYoeWUocikpLG49ZGUuZjtyZXR1cm4gbj93ZSh0LG4ocikpOnR9LHBlPU1yLGdlPWJlLG1lPWUsU2U9cHQsQWU9ZnVuY3Rpb24ocix0LG4pe2Zvcih2YXIgZT1nZSh0KSxpPVNlLmYsbz1tZS5mLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGY9ZVt1XTtwZShyLGYpfHxuJiZwZShuLGYpfHxpKHIsZixvKHQsZikpfX0samU9aSxPZT1GLGtlPS8jfFwucHJvdG90eXBlXC4vLEVlPWZ1bmN0aW9uKHIsdCl7dmFyIG49eGVbVGUocildO3JldHVybiBuPT1NZXx8biE9VWUmJihPZSh0KT9qZSh0KTohIXQpfSxUZT1FZS5ub3JtYWxpemU9ZnVuY3Rpb24ocil7cmV0dXJuKHIrIiIpLnJlcGxhY2Uoa2UsIi4iKS50b0xvd2VyQ2FzZSgpfSx4ZT1FZS5kYXRhPXt9LFVlPUVlLkY9Ik4iLE1lPUVlLk49IlAiLEllPUVlLExlPW4sUGU9ZS5mLF9lPV90LFJlPUZuLEZlPVNyLE5lPUFlLENlPUllLEJlPWZ1bmN0aW9uKHIsdCl7dmFyIG4sZSxpLG8sdSxmPXIudGFyZ2V0LGE9ci5nbG9iYWwsYz1yLkM7aWYobj1hP0xlOmM/TGVbZl18fEZlKGYse30pOihMZVtmXXx8e30pLnByb3RvdHlwZSlmb3IoZSBpbiB0KXtpZihvPXRbZV0saT1yLkI/KHU9UGUobixlKSkmJnUudmFsdWU6bltlXSwhQ2UoYT9lOmYrKGM/Ii4iOiIjIikrZSxyLkcpJiZ2b2lkIDAhPT1pKXtpZih0eXBlb2Ygbz09dHlwZW9mIGkpY29udGludWU7TmUobyxpKX0oci5ofHxpJiZpLmgpJiZfZShvLCJzaGFtIiwhMCksUmUobixlLG8scil9fSxHZT17fTtHZVskcigidG9TdHJpbmdUYWciKV09InoiO3ZhciBEZSxWZT1HZSsiIj09IltvYmplY3Qgel0iLFllPVZlLHplPUYsV2U9aywkZT0kcigidG9TdHJpbmdUYWciKSxIZT1PYmplY3QsS2U9IkFyZ3VtZW50cyI9PVdlKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSkscWU9WWU/V2U6ZnVuY3Rpb24ocil7dmFyIHQsbixlO3JldHVybiB2b2lkIDA9PT1yPyJVbmRlZmluZWQiOm51bGw9PT1yPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49ZnVuY3Rpb24ocix0KXt0cnl7cmV0dXJuIHJbdF19Y2F0Y2gocil7fX0odD1IZShyKSwkZSkpP246S2U/V2UodCk6Ik9iamVjdCI9PShlPVdlKHQpKSYmemUodC5EKT8iQXJndW1lbnRzIjplfSxKZT1xZSxYZT1TdHJpbmcsUWU9ZnVuY3Rpb24ocil7aWYoIlN5bWJvbCI9PT1KZShyKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIFhlKHIpfSxaZT1DLHJpPWssdGk9JHIoIm1hdGNoIiksbmk9VHlwZUVycm9yLGVpPSRyKCJtYXRjaCIpLGlpPUJlLG9pPVMsdWk9ZS5mLGZpPUtuLGFpPVFlLGNpPWZ1bmN0aW9uKHIpe2lmKGZ1bmN0aW9uKHIpe3ZhciB0O3JldHVybiBaZShyKSYmKHZvaWQgMCE9PSh0PXJbdGldKT8hIXQ6IlJlZ0V4cCI9PXJpKHIpKX0ocikpdGhyb3cgbmkoIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9ucyIpO3JldHVybiByfSxzaT1MLHZpPW9pKCIiLnN0YXJ0c1dpdGgpLGhpPW9pKCIiLnNsaWNlKSxsaT1NYXRoLm1pbixkaT1mdW5jdGlvbigpe3ZhciByPS8uLzt0cnl7Ii8uLyIuc3RhcnRzV2l0aChyKX1jYXRjaCh0KXt0cnl7cmV0dXJuIHJbZWldPSExLCIvLi8iLnN0YXJ0c1dpdGgocil9Y2F0Y2gocil7fX1yZXR1cm4hMX0oKTtpaSh7dGFyZ2V0OiJTdHJpbmciLFY6ITAsRzohKCFkaSYmKERlPXVpKFN0cmluZy5wcm90b3R5cGUsInN0YXJ0c1dpdGgiKSxEZSYmIURlLndyaXRhYmxlKXx8ZGkpfSx7c3RhcnRzV2l0aDpmdW5jdGlvbihyKXt2YXIgdD1haShzaSh0aGlzKSk7Y2kocik7dmFyIG49ZmkobGkoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdC5sZW5ndGgpKSxlPWFpKHIpO3JldHVybiB2aT92aSh0LGUsbik6aGkodCxuLG4rZS5sZW5ndGgpPT09ZX19KTt2YXIgeWk9e30sd2k9ZmUsYmk9YWUscGk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHIpe3JldHVybiB3aShyLGJpKX0sZ2k9byxtaT1ndCxTaT1wdCxBaT1qdCxqaT1SLE9pPXBpO3lpLmY9Z2kmJiFtaT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihyLHQpe0FpKHIpO2Zvcih2YXIgbixlPWppKHQpLGk9T2kodCksbz1pLmxlbmd0aCx1PTA7bz51OylTaS5mKHIsbj1pW3UrK10sZVtuXSk7cmV0dXJuIHJ9O3ZhciBraSxFaT1WKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpLFRpPWp0LHhpPXlpLFVpPWFlLE1pPW5uLElpPUVpLExpPXV0LFBpPXRuKCJJRV9QUk9UTyIpLF9pPWZ1bmN0aW9uKCl7fSxSaT1mdW5jdGlvbihyKXtyZXR1cm4iPHNjcmlwdD4iK3IrIjxcL3NjcmlwdD4ifSxGaT1mdW5jdGlvbihyKXtyLndyaXRlKFJpKCIiKSksci5jbG9zZSgpO3ZhciB0PXIucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gcj1udWxsLHR9LE5pPWZ1bmN0aW9uKCl7dHJ5e2tpPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKHIpe312YXIgcix0O05pPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZraT9GaShraSk6KCh0PUxpKCJpZnJhbWUiKSkuc3R5bGUuZGlzcGxheT0ibm9uZSIsSWkuYXBwZW5kQ2hpbGQodCksdC5zcmM9ImphdmFzY3JpcHQ6Iiwocj10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxyLndyaXRlKFJpKCJkb2N1bWVudC5GPU9iamVjdCIpKSxyLmNsb3NlKCksci5ZKTpGaShraSk7Zm9yKHZhciBuPVVpLmxlbmd0aDtuLS07KWRlbGV0ZSBOaS5wcm90b3R5cGVbVWlbbl1dO3JldHVybiBOaSgpfTtNaVtQaV09ITA7dmFyIENpPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHIsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1yPyhfaS5wcm90b3R5cGU9VGkociksbj1uZXcgX2ksX2kucHJvdG90eXBlPW51bGwsbltQaV09cik6bj1OaSgpLHZvaWQgMD09PXQ/bjp4aS5mKG4sdCl9LEJpPSRyLEdpPUNpLERpPXB0LmYsVmk9QmkoInVuc2NvcGFibGVzIiksWWk9QXJyYXkucHJvdG90eXBlO251bGw9PVlpW1ZpXSYmRGkoWWksVmkse2k6ITAsdmFsdWU6R2kobnVsbCl9KTt2YXIgemksV2ksJGksSGk9ZnVuY3Rpb24ocil7WWlbVmldW3JdPSEwfSxLaT17fSxxaT0haSgoZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7fXJldHVybiByLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgcikhPT1yLnByb3RvdHlwZX0pKSxKaT1NcixYaT1GLFFpPVRyLFppPXFpLHJvPXRuKCJJRV9QUk9UTyIpLHRvPU9iamVjdCxubz10by5wcm90b3R5cGUsZW89Wmk/dG8uZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24ocil7dmFyIHQ9UWkocik7aWYoSmkodCxybykpcmV0dXJuIHRbcm9dO3ZhciBuPXQuY29uc3RydWN0b3I7cmV0dXJuIFhpKG4pJiZ0IGluc3RhbmNlb2Ygbj9uLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgdG8/bm86bnVsbH0saW89aSxvbz1GLHVvPWVvLGZvPUZuLGFvPSRyKCJpdGVyYXRvciIpLGNvPSExO1tdLmtleXMmJigibmV4dCJpbigkaT1bXS5rZXlzKCkpPyhXaT11byh1bygkaSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJih6aT1XaSk6Y289ITApO3ZhciBzbz1udWxsPT16aXx8aW8oKGZ1bmN0aW9uKCl7dmFyIHI9e307cmV0dXJuIHppW2FvXS5jYWxsKHIpIT09cn0pKTtzbyYmKHppPXt9KSxvbyh6aVthb10pfHxmbyh6aSxhbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdm89e1c6emksJDpjb30saG89cHQuZixsbz1Ncix5bz0kcigidG9TdHJpbmdUYWciKSx3bz1mdW5jdGlvbihyLHQsbil7ciYmIW4mJihyPXIucHJvdG90eXBlKSxyJiYhbG8ocix5bykmJmhvKHIseW8se2k6ITAsdmFsdWU6dH0pfSxibz12by5XLHBvPUNpLGdvPXksbW89d28sU289S2ksQW89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sam89RixPbz1TdHJpbmcsa289VHlwZUVycm9yLEVvPVMsVG89anQseG89T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHIsdD0hMSxuPXt9O3RyeXsocj1FbyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCkpKG4sW10pLHQ9biBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKHIpe31yZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gVG8obiksZnVuY3Rpb24ocil7aWYoIm9iamVjdCI9PXR5cGVvZiByfHxqbyhyKSlyZXR1cm4gcjt0aHJvdyBrbygiQ2FuJ3Qgc2V0ICIrT28ocikrIiBhcyBhIHByb3RvdHlwZSIpfShlKSx0P3IobixlKTpuLl9fcHJvdG9fXz1lLG59fSgpOnZvaWQgMCksVW89QmUsTW89YSxJbz1GLExvPWVvLFBvPXhvLF9vPXdvLFJvPV90LEZvPUZuLE5vPUtpLENvPUd0LkEsQm89R3QuaixHbz12by5XLERvPXZvLiQsVm89JHIoIml0ZXJhdG9yIiksWW89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sem89ZnVuY3Rpb24ocix0LG4sZSxpLG8sdSl7IWZ1bmN0aW9uKHIsdCxuKXt2YXIgZT10KyIgSXRlcmF0b3IiO3IucHJvdG90eXBlPXBvKGJvLHtuZXh0OmdvKDEsbil9KSxtbyhyLGUsITEpLFNvW2VdPUFvfShuLHQsZSk7dmFyIGYsYSxjLHM9ZnVuY3Rpb24ocil7aWYocj09PWkmJnkpcmV0dXJuIHk7aWYoIURvJiZyIGluIGwpcmV0dXJuIGxbcl07c3dpdGNoKHIpe2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOmNhc2UiZW50cmllcyI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMscil9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LHY9dCsiIEl0ZXJhdG9yIixoPSExLGw9ci5wcm90b3R5cGUsZD1sW1ZvXXx8bFsiQEBpdGVyYXRvciJdfHxpJiZsW2ldLHk9IURvJiZkfHxzKGkpLHc9IkFycmF5Ij09dCYmbC5lbnRyaWVzfHxkO2lmKHcmJihmPUxvKHcuY2FsbChuZXcgcikpKSE9PU9iamVjdC5wcm90b3R5cGUmJmYubmV4dCYmKExvKGYpIT09R28mJihQbz9QbyhmLEdvKTpJbyhmW1ZvXSl8fEZvKGYsVm8sWW8pKSxfbyhmLHYsITApKSxDbyYmInZhbHVlcyI9PWkmJmQmJiJ2YWx1ZXMiIT09ZC5uYW1lJiYoQm8/Um8obCwibmFtZSIsInZhbHVlcyIpOihoPSEwLHk9ZnVuY3Rpb24oKXtyZXR1cm4gTW8oZCx0aGlzKX0pKSxpKWlmKGE9e3ZhbHVlczpzKCJ2YWx1ZXMiKSxrZXlzOm8/eTpzKCJrZXlzIiksZW50cmllczpzKCJlbnRyaWVzIil9LHUpZm9yKGMgaW4gYSkoRG98fGh8fCEoYyBpbiBsKSkmJkZvKGwsYyxhW2NdKTtlbHNlIFVvKHt0YXJnZXQ6dCxWOiEwLEc6RG98fGh9LGEpO3JldHVybiBsW1ZvXSE9PXkmJkZvKGwsVm8seSx7bmFtZTppfSksTm9bdF09eSxhfSxXbz1SLCRvPUhpLEhvPUtpLEtvPW1uLHFvPXB0LmYsSm89em8sWG89byxRbz1Lby5zZXQsWm89S28uVSgiQXJyYXkgSXRlcmF0b3IiKSxydT1KbyhBcnJheSwiQXJyYXkiLChmdW5jdGlvbihyLHQpe1FvKHRoaXMse3R5cGU6IkFycmF5IEl0ZXJhdG9yIix0YXJnZXQ6V28ociksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciByPVpvKHRoaXMpLHQ9ci50YXJnZXQsbj1yLmtpbmQsZT1yLmluZGV4Kys7cmV0dXJuIHQmJmU8dC5sZW5ndGg/ImtleXMiPT1uP3t2YWx1ZTplLGRvbmU6ITF9OiJ2YWx1ZXMiPT1uP3t2YWx1ZTp0W2VdLGRvbmU6ITF9Ont2YWx1ZTpbZSx0W2VdXSxkb25lOiExfTooci50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSksInZhbHVlcyIpLHR1PUhvLkg9SG8uQXJyYXk7aWYoJG8oImtleXMiKSwkbygidmFsdWVzIiksJG8oImVudHJpZXMiKSxYbyYmInZhbHVlcyIhPT10dS5uYW1lKXRyeXtxbyh0dSwibmFtZSIse3ZhbHVlOiJ2YWx1ZXMifSl9Y2F0Y2gocil7fXZhciBudT0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3LGV1PUZuLGl1PVksb3U9VHlwZUVycm9yLHV1PWZ1bmN0aW9uKHIsdCl7aWYoaXUodCxyKSlyZXR1cm4gcjt0aHJvdyBvdSgiSW5jb3JyZWN0IGludm9jYXRpb24iKX0sZnU9RG4sYXU9S24sY3U9UmFuZ2VFcnJvcixzdT1mdW5jdGlvbihyKXtpZih2b2lkIDA9PT1yKXJldHVybiAwO3ZhciB0PWZ1KHIpLG49YXUodCk7aWYodCE9PW4pdGhyb3cgY3UoIldyb25nIGxlbmd0aCBvciBpbmRleCIpO3JldHVybiBufSx2dT1BcnJheSxodT1NYXRoLmFicyxsdT1NYXRoLnBvdyxkdT1NYXRoLmZsb29yLHl1PU1hdGgubG9nLHd1PVRyLGJ1PVduLHB1PUpuLGd1PWZ1bmN0aW9uKHIpe2Zvcih2YXIgdD13dSh0aGlzKSxuPXB1KHQpLGU9YXJndW1lbnRzLmxlbmd0aCxpPWJ1KGU+MT9hcmd1bWVudHNbMV06dm9pZCAwLG4pLG89ZT4yP2FyZ3VtZW50c1syXTp2b2lkIDAsdT12b2lkIDA9PT1vP246YnUobyxuKTt1Pmk7KXRbaSsrXT1yO3JldHVybiB0fSxtdT1udCxTdT1wdCxBdT15LGp1PWZ1bmN0aW9uKHIsdCxuKXt2YXIgZT1tdSh0KTtlIGluIHI/U3UuZihyLGUsQXUoMCxuKSk6cltlXT1ufSxPdT1XbixrdT1KbixFdT1qdSxUdT1BcnJheSx4dT1NYXRoLm1heCxVdT1mdW5jdGlvbihyLHQsbil7Zm9yKHZhciBlPWt1KHIpLGk9T3UodCxlKSxvPU91KHZvaWQgMD09PW4/ZTpuLGUpLHU9VHUoeHUoby1pLDApKSxmPTA7bz5pO2krKyxmKyspRXUodSxmLHJbaV0pO3JldHVybiB1Lmxlbmd0aD1mLHV9LE11PW4sSXU9UyxMdT1vLFB1PW51LF91PUd0LFJ1PV90LEZ1PWZ1bmN0aW9uKHIsdCxuKXtmb3IodmFyIGUgaW4gdClldShyLGUsdFtlXSxuKTtyZXR1cm4gcn0sTnU9aSxDdT11dSxCdT1EbixHdT1LbixEdT1zdSxWdT1lbyxZdT14byx6dT1Obi5mLFd1PXB0LmYsJHU9Z3UsSHU9VXUsS3U9d28scXU9X3UuQSxKdT1fdS5qLFh1PW1uLmdldCxRdT1tbi5zZXQsWnU9TXUuQXJyYXlCdWZmZXIscmY9WnUsdGY9cmYmJnJmLnByb3RvdHlwZSxuZj1NdS5EYXRhVmlldyxlZj1uZiYmbmYucHJvdG90eXBlLG9mPU9iamVjdC5wcm90b3R5cGUsdWY9TXUuQXJyYXksZmY9TXUuUmFuZ2VFcnJvcixhZj1JdSgkdSksY2Y9SXUoW10ucmV2ZXJzZSksc2Y9ZnVuY3Rpb24ocix0LG4pe3ZhciBlLGksbyx1PXZ1KG4pLGY9OCpuLXQtMSxhPSgxPDxmKS0xLGM9YT4+MSxzPTIzPT09dD9sdSgyLC0yNCktbHUoMiwtNzcpOjAsdj0wPnJ8fDA9PT1yJiYwPjEvcj8xOjAsaD0wO2Zvcigocj1odShyKSkhPXJ8fHI9PT0xLzA/KGk9ciE9cj8xOjAsZT1hKTooZT1kdSh5dShyKS8uNjkzMTQ3MTgwNTU5OTQ1MyksMT5yKihvPWx1KDIsLWUpKSYmKGUtLSxvKj0yKSwyPihyKz0xPmUrYz9zKmx1KDIsMS1jKTpzL28pKm98fChlKyssby89MiksYT5lK2M/MT5lK2M/KGk9cipsdSgyLGMtMSkqbHUoMix0KSxlPTApOihpPShyKm8tMSkqbHUoMix0KSxlKz1jKTooaT0wLGU9YSkpO3Q+PTg7KXVbaCsrXT0yNTUmaSxpLz0yNTYsdC09ODtmb3IoZT1lPDx0fGksZis9dDtmPjA7KXVbaCsrXT0yNTUmZSxlLz0yNTYsZi09ODtyZXR1cm4gdVstLWhdfD0xMjgqdix1fSx2Zj1mdW5jdGlvbihyLHQpe3ZhciBuLGU9ci5sZW5ndGgsaT04KmUtdC0xLG89KDE8PGkpLTEsdT1vPj4xLGY9aS03LGE9ZS0xLGM9clthLS1dLHM9MTI3JmM7Zm9yKGM+Pj03O2Y+MDspcz0yNTYqcytyW2EtLV0sZi09ODtmb3Iobj1zJigxPDwtZiktMSxzPj49LWYsZis9dDtmPjA7KW49MjU2Km4rclthLS1dLGYtPTg7aWYoMD09PXMpcz0xLXU7ZWxzZXtpZihzPT09bylyZXR1cm4gbj9OYU46Yz8tMS8wOjEvMDtuKz1sdSgyLHQpLHMtPXV9cmV0dXJuKGM/LTE6MSkqbipsdSgyLHMtdCl9LGhmPWZ1bmN0aW9uKHIpe3JldHVyblsyNTUmcl19LGxmPWZ1bmN0aW9uKHIpe3JldHVyblsyNTUmcixyPj44JjI1NV19LGRmPWZ1bmN0aW9uKHIpe3JldHVyblsyNTUmcixyPj44JjI1NSxyPj4xNiYyNTUscj4+MjQmMjU1XX0seWY9ZnVuY3Rpb24ocil7cmV0dXJuIHJbM108PDI0fHJbMl08PDE2fHJbMV08PDh8clswXX0sd2Y9ZnVuY3Rpb24ocil7cmV0dXJuIHNmKHIsMjMsNCl9LGJmPWZ1bmN0aW9uKHIpe3JldHVybiBzZihyLDUyLDgpfSxwZj1mdW5jdGlvbihyLHQpe1d1KHIucHJvdG90eXBlLHQse2dldDpmdW5jdGlvbigpe3JldHVybiBYdSh0aGlzKVt0XX19KX0sZ2Y9ZnVuY3Rpb24ocix0LG4sZSl7dmFyIGk9RHUobiksbz1YdShyKTtpZihpK3Q+by5ieXRlTGVuZ3RoKXRocm93IGZmKCJXcm9uZyBpbmRleCIpO3ZhciB1PVh1KG8uYnVmZmVyKS5LLGY9aStvLmJ5dGVPZmZzZXQsYT1IdSh1LGYsZit0KTtyZXR1cm4gZT9hOmNmKGEpfSxtZj1mdW5jdGlvbihyLHQsbixlLGksbyl7dmFyIHU9RHUobiksZj1YdShyKTtpZih1K3Q+Zi5ieXRlTGVuZ3RoKXRocm93IGZmKCJXcm9uZyBpbmRleCIpO2Zvcih2YXIgYT1YdShmLmJ1ZmZlcikuSyxjPXUrZi5ieXRlT2Zmc2V0LHM9ZSgraSksdj0wO3Q+djt2KyspYVtjK3ZdPXNbbz92OnQtdi0xXX07aWYoUHUpe3ZhciBTZj1xdSYmIkFycmF5QnVmZmVyIiE9PVp1Lm5hbWU7aWYoTnUoKGZ1bmN0aW9uKCl7WnUoMSl9KSkmJk51KChmdW5jdGlvbigpe25ldyBadSgtMSl9KSkmJiFOdSgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFp1LG5ldyBadSgxLjUpLG5ldyBadShOYU4pLFNmJiYhSnV9KSkpU2YmJkp1JiZSdShadSwibmFtZSIsIkFycmF5QnVmZmVyIik7ZWxzZXsocmY9ZnVuY3Rpb24ocil7cmV0dXJuIEN1KHRoaXMsdGYpLG5ldyBadShEdShyKSl9KS5wcm90b3R5cGU9dGY7Zm9yKHZhciBBZixqZj16dShadSksT2Y9MDtqZi5sZW5ndGg+T2Y7KShBZj1qZltPZisrXSlpbiByZnx8UnUocmYsQWYsWnVbQWZdKTt0Zi5jb25zdHJ1Y3Rvcj1yZn1ZdSYmVnUoZWYpIT09b2YmJll1KGVmLG9mKTt2YXIga2Y9bmV3IG5mKG5ldyByZigyKSksRWY9SXUoZWYuc2V0SW50OCk7a2Yuc2V0SW50OCgwLDIxNDc0ODM2NDgpLGtmLnNldEludDgoMSwyMTQ3NDgzNjQ5KSwha2YuZ2V0SW50OCgwKSYma2YuZ2V0SW50OCgxKXx8RnUoZWYse3NldEludDg6ZnVuY3Rpb24ocix0KXtFZih0aGlzLHIsdDw8MjQ+PjI0KX0sc2V0VWludDg6ZnVuY3Rpb24ocix0KXtFZih0aGlzLHIsdDw8MjQ+PjI0KX19LHtQOiEwfSl9ZWxzZSB0Zj0ocmY9ZnVuY3Rpb24ocil7Q3UodGhpcyx0Zik7dmFyIHQ9RHUocik7UXUodGhpcyx7SzphZih1Zih0KSwwKSxieXRlTGVuZ3RoOnR9KSxMdXx8KHRoaXMuYnl0ZUxlbmd0aD10KX0pLnByb3RvdHlwZSxlZj0obmY9ZnVuY3Rpb24ocix0LG4pe0N1KHRoaXMsZWYpLEN1KHIsdGYpO3ZhciBlPVh1KHIpLmJ5dGVMZW5ndGgsaT1CdSh0KTtpZigwPml8fGk+ZSl0aHJvdyBmZigiV3Jvbmcgb2Zmc2V0Iik7aWYoaSsobj12b2lkIDA9PT1uP2UtaTpHdShuKSk+ZSl0aHJvdyBmZigiV3JvbmcgbGVuZ3RoIik7UXUodGhpcyx7YnVmZmVyOnIsYnl0ZUxlbmd0aDpuLGJ5dGVPZmZzZXQ6aX0pLEx1fHwodGhpcy5idWZmZXI9cix0aGlzLmJ5dGVMZW5ndGg9bix0aGlzLmJ5dGVPZmZzZXQ9aSl9KS5wcm90b3R5cGUsTHUmJihwZihyZiwiYnl0ZUxlbmd0aCIpLHBmKG5mLCJidWZmZXIiKSxwZihuZiwiYnl0ZUxlbmd0aCIpLHBmKG5mLCJieXRlT2Zmc2V0IikpLEZ1KGVmLHtnZXRJbnQ4OmZ1bmN0aW9uKHIpe3JldHVybiBnZih0aGlzLDEscilbMF08PDI0Pj4yNH0sZ2V0VWludDg6ZnVuY3Rpb24ocil7cmV0dXJuIGdmKHRoaXMsMSxyKVswXX0sZ2V0SW50MTY6ZnVuY3Rpb24ocil7dmFyIHQ9Z2YodGhpcywyLHIsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybih0WzFdPDw4fHRbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbihyKXt2YXIgdD1nZih0aGlzLDIscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuIHRbMV08PDh8dFswXX0sZ2V0SW50MzI6ZnVuY3Rpb24ocil7cmV0dXJuIHlmKGdmKHRoaXMsNCxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGdldFVpbnQzMjpmdW5jdGlvbihyKXtyZXR1cm4geWYoZ2YodGhpcyw0LHIsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKT4+PjB9LGdldEZsb2F0MzI6ZnVuY3Rpb24ocil7cmV0dXJuIHZmKGdmKHRoaXMsNCxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSwyMyl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24ocil7cmV0dXJuIHZmKGdmKHRoaXMsOCxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSw1Mil9LHNldEludDg6ZnVuY3Rpb24ocix0KXttZih0aGlzLDEscixoZix0KX0sc2V0VWludDg6ZnVuY3Rpb24ocix0KXttZih0aGlzLDEscixoZix0KX0sc2V0SW50MTY6ZnVuY3Rpb24ocix0KXttZih0aGlzLDIscixsZix0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDE2OmZ1bmN0aW9uKHIsdCl7bWYodGhpcywyLHIsbGYsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEludDMyOmZ1bmN0aW9uKHIsdCl7bWYodGhpcyw0LHIsZGYsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQzMjpmdW5jdGlvbihyLHQpe21mKHRoaXMsNCxyLGRmLHQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKHIsdCl7bWYodGhpcyw0LHIsd2YsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0NjQ6ZnVuY3Rpb24ocix0KXttZih0aGlzLDgscixiZix0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX19KTtLdShyZiwiQXJyYXlCdWZmZXIiKSxLdShuZiwiRGF0YVZpZXciKTt2YXIgVGY9e0FycmF5QnVmZmVyOnJmLERhdGFWaWV3Om5mfSx4Zj1TLFVmPWksTWY9RixJZj1xZSxMZj1IdCxQZj1mdW5jdGlvbigpe30sX2Y9W10sUmY9VigiUmVmbGVjdCIsImNvbnN0cnVjdCIpLEZmPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLE5mPXhmKEZmLmV4ZWMpLENmPSFGZi5leGVjKFBmKSxCZj1mdW5jdGlvbihyKXtpZighTWYocikpcmV0dXJuITE7dHJ5e3JldHVybiBSZihQZixfZixyKSwhMH1jYXRjaChyKXtyZXR1cm4hMX19LEdmPWZ1bmN0aW9uKHIpe2lmKCFNZihyKSlyZXR1cm4hMTtzd2l0Y2goSWYocikpe2Nhc2UiQXN5bmNGdW5jdGlvbiI6Y2FzZSJHZW5lcmF0b3JGdW5jdGlvbiI6Y2FzZSJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIjpyZXR1cm4hMX10cnl7cmV0dXJuIENmfHwhIU5mKEZmLExmKHIpKX1jYXRjaChyKXtyZXR1cm4hMH19O0dmLmg9ITA7dmFyIERmPSFSZnx8VWYoKGZ1bmN0aW9uKCl7dmFyIHI7cmV0dXJuIEJmKEJmLmNhbGwpfHwhQmYoT2JqZWN0KXx8IUJmKChmdW5jdGlvbigpe3I9ITB9KSl8fHJ9KSk/R2Y6QmYsVmY9RGYsWWY9ZnIsemY9VHlwZUVycm9yLFdmPWZ1bmN0aW9uKHIpe2lmKFZmKHIpKXJldHVybiByO3Rocm93IHpmKFlmKHIpKyIgaXMgbm90IGEgY29uc3RydWN0b3IiKX0sJGY9anQsSGY9V2YsS2Y9JHIoInNwZWNpZXMiKSxxZj1mdW5jdGlvbihyLHQpe3ZhciBuLGU9JGYocikuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWV8fG51bGw9PShuPSRmKGUpW0tmXSk/dDpIZihuKX0sSmY9QmUsWGY9UyxRZj1pLFpmPWp0LHJhPVduLHRhPUtuLG5hPXFmLGVhPVRmLkFycmF5QnVmZmVyLGlhPVRmLkRhdGFWaWV3LG9hPWlhLnByb3RvdHlwZSx1YT1YZihlYS5wcm90b3R5cGUuc2xpY2UpLGZhPVhmKG9hLmdldFVpbnQ4KSxhYT1YZihvYS5zZXRVaW50OCk7SmYoe3RhcmdldDoiQXJyYXlCdWZmZXIiLFY6ITAsUDohMCxHOlFmKChmdW5jdGlvbigpe3JldHVybiFuZXcgZWEoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSl9LHtzbGljZTpmdW5jdGlvbihyLHQpe2lmKHVhJiZ2b2lkIDA9PT10KXJldHVybiB1YShaZih0aGlzKSxyKTtmb3IodmFyIG49WmYodGhpcykuYnl0ZUxlbmd0aCxlPXJhKHIsbiksaT1yYSh2b2lkIDA9PT10P246dCxuKSxvPW5ldyhuYSh0aGlzLGVhKSkodGEoaS1lKSksdT1uZXcgaWEodGhpcyksZj1uZXcgaWEobyksYT0wO2k+ZTspYWEoZixhKyssZmEodSxlKyspKTtyZXR1cm4gb319KTt2YXIgY2E9cWU7VmV8fEZuKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixWZT97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrY2EodGhpcykrIl0ifSx7UDohMH0pO3ZhciBzYT17ZXhwb3J0czp7fX0sdmE9JHIoIml0ZXJhdG9yIiksaGE9ITE7dHJ5e3ZhciBsYT0wLGRhPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFsYSsrfX0scTpmdW5jdGlvbigpe2hhPSEwfX07ZGFbdmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oZGEsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChyKXt9dmFyIHlhLHdhLGJhLHBhPWZ1bmN0aW9uKHIsdCl7aWYoIXQmJiFoYSlyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGU9e307ZVt2YV09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fX19LHIoZSl9Y2F0Y2gocil7fXJldHVybiBufSxnYT1udSxtYT1vLFNhPW4sQWE9RixqYT1DLE9hPU1yLGthPXFlLEVhPWZyLFRhPV90LHhhPUZuLFVhPXB0LmYsTWE9WSxJYT1lbyxMYT14byxQYT0kcixfYT1ScixSYT1tbi5ULEZhPW1uLmdldCxOYT1TYS5JbnQ4QXJyYXksQ2E9TmEmJk5hLnByb3RvdHlwZSxCYT1TYS5VaW50OENsYW1wZWRBcnJheSxHYT1CYSYmQmEucHJvdG90eXBlLERhPU5hJiZJYShOYSksVmE9Q2EmJklhKENhKSxZYT1PYmplY3QucHJvdG90eXBlLHphPVNhLlR5cGVFcnJvcixXYT1QYSgidG9TdHJpbmdUYWciKSwkYT1fYSgiVFlQRURfQVJSQVlfVEFHIiksSGE9Z2EmJiEhTGEmJiJPcGVyYSIhPT1rYShTYS5vcGVyYSksS2E9ITEscWE9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxKYT17QmlnSW50NjRBcnJheTo4LEJpZ1VpbnQ2NEFycmF5Ojh9LFhhPWZ1bmN0aW9uKHIpe3ZhciB0PUlhKHIpO2lmKGphKHQpKXt2YXIgbj1GYSh0KTtyZXR1cm4gbiYmT2EobiwiVHlwZWRBcnJheUNvbnN0cnVjdG9yIik/bi5KOlhhKHQpfX0sUWE9ZnVuY3Rpb24ocil7aWYoIWphKHIpKXJldHVybiExO3ZhciB0PWthKHIpO3JldHVybiBPYShxYSx0KXx8T2EoSmEsdCl9O2Zvcih5YSBpbiBxYSkoYmE9KHdhPVNhW3lhXSkmJndhLnByb3RvdHlwZSk/UmEoYmEpLko9d2E6SGE9ITE7Zm9yKHlhIGluIEphKShiYT0od2E9U2FbeWFdKSYmd2EucHJvdG90eXBlKSYmKFJhKGJhKS5KPXdhKTtpZigoIUhhfHwhQWEoRGEpfHxEYT09PUZ1bmN0aW9uLnByb3RvdHlwZSkmJihEYT1mdW5jdGlvbigpe3Rocm93IHphKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxIYSkpZm9yKHlhIGluIHFhKVNhW3lhXSYmTGEoU2FbeWFdLERhKTtpZigoIUhhfHwhVmF8fFZhPT09WWEpJiYoVmE9RGEucHJvdG90eXBlLEhhKSlmb3IoeWEgaW4gcWEpU2FbeWFdJiZMYShTYVt5YV0ucHJvdG90eXBlLFZhKTtpZihIYSYmSWEoR2EpIT09VmEmJkxhKEdhLFZhKSxtYSYmIU9hKFZhLFdhKSlmb3IoeWEgaW4gS2E9ITAsVWEoVmEsV2Ese2dldDpmdW5jdGlvbigpe3JldHVybiBqYSh0aGlzKT90aGlzWyRhXTp2b2lkIDB9fSkscWEpU2FbeWFdJiZUYShTYVt5YV0sJGEseWEpO3ZhciBaYT17WDpIYSxaOkthJiYkYSxycjpmdW5jdGlvbihyKXtpZihRYShyKSlyZXR1cm4gcjt0aHJvdyB6YSgiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LHRyOmZ1bmN0aW9uKHIpe2lmKEFhKHIpJiYoIUxhfHxNYShEYSxyKSkpcmV0dXJuIHI7dGhyb3cgemEoRWEocikrIiBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxucjpmdW5jdGlvbihyLHQsbixlKXtpZihtYSl7aWYobilmb3IodmFyIGkgaW4gcWEpe3ZhciBvPVNhW2ldO2lmKG8mJk9hKG8ucHJvdG90eXBlLHIpKXRyeXtkZWxldGUgby5wcm90b3R5cGVbcl19Y2F0Y2gobil7dHJ5e28ucHJvdG90eXBlW3JdPXR9Y2F0Y2gocil7fX19VmFbcl0mJiFufHx4YShWYSxyLG4/dDpIYSYmQ2Fbcl18fHQsZSl9fSxlcjpmdW5jdGlvbihyLHQsbil7dmFyIGUsaTtpZihtYSl7aWYoTGEpe2lmKG4pZm9yKGUgaW4gcWEpaWYoKGk9U2FbZV0pJiZPYShpLHIpKXRyeXtkZWxldGUgaVtyXX1jYXRjaChyKXt9aWYoRGFbcl0mJiFuKXJldHVybjt0cnl7cmV0dXJuIHhhKERhLHIsbj90OkhhJiZEYVtyXXx8dCl9Y2F0Y2gocil7fX1mb3IoZSBpbiBxYSkhKGk9U2FbZV0pfHxpW3JdJiYhbnx8eGEoaSxyLHQpfX0saXI6WGEsaXNWaWV3OmZ1bmN0aW9uKHIpe2lmKCFqYShyKSlyZXR1cm4hMTt2YXIgdD1rYShyKTtyZXR1cm4iRGF0YVZpZXciPT09dHx8T2EocWEsdCl8fE9hKEphLHQpfSx1cjpRYSxhcjpEYSxjcjpWYX0scmM9bix0Yz1pLG5jPXBhLGVjPVphLlgsaWM9cmMuQXJyYXlCdWZmZXIsb2M9cmMuSW50OEFycmF5LHVjPSFlY3x8IXRjKChmdW5jdGlvbigpe29jKDEpfSkpfHwhdGMoKGZ1bmN0aW9uKCl7bmV3IG9jKC0xKX0pKXx8IW5jKChmdW5jdGlvbihyKXtuZXcgb2MsbmV3IG9jKG51bGwpLG5ldyBvYygxLjUpLG5ldyBvYyhyKX0pLCEwKXx8dGMoKGZ1bmN0aW9uKCl7cmV0dXJuIDEhPT1uZXcgb2MobmV3IGljKDIpLDEsdm9pZCAwKS5sZW5ndGh9KSksZmM9QyxhYz1NYXRoLmZsb29yLGNjPU51bWJlci5pc0ludGVnZXJ8fGZ1bmN0aW9uKHIpe3JldHVybiFmYyhyKSYmaXNGaW5pdGUocikmJmFjKHIpPT09cn0sc2M9RG4sdmM9UmFuZ2VFcnJvcixoYz1SYW5nZUVycm9yLGxjPWZ1bmN0aW9uKHIsdCl7dmFyIG49ZnVuY3Rpb24ocil7dmFyIHQ9c2Mocik7aWYoMD50KXRocm93IHZjKCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDAiKTtyZXR1cm4gdH0ocik7aWYobiV0KXRocm93IGhjKCJXcm9uZyBvZmZzZXQiKTtyZXR1cm4gbn0sZGM9dnIseWM9dSx3Yz1TKFMuYmluZCksYmM9ZnVuY3Rpb24ocix0KXtyZXR1cm4gZGMociksdm9pZCAwPT09dD9yOnljP3djKHIsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseSh0LGFyZ3VtZW50cyl9fSxwYz1xZSxnYz1scixtYz1LaSxTYz0kcigiaXRlcmF0b3IiKSxBYz1mdW5jdGlvbihyKXtpZihudWxsIT1yKXJldHVybiBnYyhyLFNjKXx8Z2MociwiQEBpdGVyYXRvciIpfHxtY1twYyhyKV19LGpjPWEsT2M9dnIsa2M9anQsRWM9ZnIsVGM9QWMseGM9VHlwZUVycm9yLFVjPWZ1bmN0aW9uKHIsdCl7dmFyIG49Mj5hcmd1bWVudHMubGVuZ3RoP1RjKHIpOnQ7aWYoT2MobikpcmV0dXJuIGtjKGpjKG4scikpO3Rocm93IHhjKEVjKHIpKyIgaXMgbm90IGl0ZXJhYmxlIil9LE1jPUtpLEljPSRyKCJpdGVyYXRvciIpLExjPUFycmF5LnByb3RvdHlwZSxQYz1mdW5jdGlvbihyKXtyZXR1cm4gdm9pZCAwIT09ciYmKE1jLkFycmF5PT09cnx8TGNbSWNdPT09cil9LF9jPWJjLFJjPWEsRmM9V2YsTmM9VHIsQ2M9Sm4sQmM9VWMsR2M9QWMsRGM9UGMsVmM9WmEudHIsWWM9ayx6Yz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihyKXtyZXR1cm4iQXJyYXkiPT1ZYyhyKX0sV2M9emMsJGM9RGYsSGM9QyxLYz0kcigic3BlY2llcyIpLHFjPUFycmF5LEpjPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIG5ldyhmdW5jdGlvbihyKXt2YXIgdDtyZXR1cm4gV2MocikmJih0PXIuY29uc3RydWN0b3IsKCRjKHQpJiYodD09PXFjfHxXYyh0LnByb3RvdHlwZSkpfHxIYyh0KSYmbnVsbD09PSh0PXRbS2NdKSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/cWM6dH0ocikpKDA9PT10PzA6dCl9LFhjPWJjLFFjPU0sWmM9VHIscnM9Sm4sdHM9SmMsbnM9UyhbXS5wdXNoKSxlcz1mdW5jdGlvbihyKXt2YXIgdD0xPT1yLG49Mj09cixlPTM9PXIsaT00PT1yLG89Nj09cix1PTc9PXIsZj01PT1yfHxvO3JldHVybiBmdW5jdGlvbihhLGMscyx2KXtmb3IodmFyIGgsbCxkPVpjKGEpLHk9UWMoZCksdz1YYyhjLHMpLGI9cnMoeSkscD0wLGc9dnx8dHMsbT10P2coYSxiKTpufHx1P2coYSwwKTp2b2lkIDA7Yj5wO3ArKylpZigoZnx8cCBpbiB5KSYmKGw9dyhoPXlbcF0scCxkKSxyKSlpZih0KW1bcF09bDtlbHNlIGlmKGwpc3dpdGNoKHIpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGg7Y2FzZSA2OnJldHVybiBwO2Nhc2UgMjpucyhtLGgpfWVsc2Ugc3dpdGNoKHIpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6bnMobSxoKX1yZXR1cm4gbz8tMTplfHxpP2k6bX19LGlzPXtmb3JFYWNoOmVzKDApLG1hcDplcygxKSxmaWx0ZXI6ZXMoMiksc29tZTplcygzKSxldmVyeTplcyg0KSxmaW5kOmVzKDUpLGZpbmRJbmRleDplcyg2KSxzcjplcyg3KX0sb3M9Vix1cz1wdCxmcz1vLGFzPSRyKCJzcGVjaWVzIiksY3M9ZnVuY3Rpb24ocil7dmFyIHQ9b3Mociksbj11cy5mO2ZzJiZ0JiYhdFthc10mJm4odCxhcyx7aTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX0sc3M9Rix2cz1DLGhzPXhvLGxzPUJlLGRzPW4seXM9YSx3cz1vLGJzPXVjLHBzPVphLGdzPVRmLG1zPXV1LFNzPXksQXM9X3QsanM9Y2MsT3M9S24sa3M9c3UsRXM9bGMsVHM9bnQseHM9TXIsVXM9cWUsTXM9QyxJcz1vcixMcz1DaSxQcz1ZLF9zPXhvLFJzPU5uLmYsRnM9ZnVuY3Rpb24ocil7dmFyIHQsbixlLGksbyx1LGY9RmModGhpcyksYT1OYyhyKSxjPWFyZ3VtZW50cy5sZW5ndGgscz1jPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx2PXZvaWQgMCE9PXMsaD1HYyhhKTtpZihoJiYhRGMoaCkpZm9yKHU9KG89QmMoYSxoKSkubmV4dCxhPVtdOyEoaT1SYyh1LG8pKS5kb25lOylhLnB1c2goaS52YWx1ZSk7Zm9yKHYmJmM+MiYmKHM9X2Mocyxhcmd1bWVudHNbMl0pKSxuPUNjKGEpLGU9bmV3KFZjKGYpKShuKSx0PTA7bj50O3QrKyllW3RdPXY/cyhhW3RdLHQpOmFbdF07cmV0dXJuIGV9LE5zPWlzLmZvckVhY2gsQ3M9Y3MsQnM9cHQsR3M9ZSxEcz1tbi5nZXQsVnM9bW4uc2V0LFlzPW1uLlQsenM9QnMuZixXcz1Hcy5mLCRzPU1hdGgucm91bmQsSHM9ZHMuUmFuZ2VFcnJvcixLcz1ncy5BcnJheUJ1ZmZlcixxcz1Lcy5wcm90b3R5cGUsSnM9Z3MuRGF0YVZpZXcsWHM9cHMuWCxRcz1wcy5aLFpzPXBzLmFyLHJ2PXBzLmNyLHR2PXBzLnRyLG52PXBzLnVyLGV2PWZ1bmN0aW9uKHIsdCl7dHYocik7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aCxpPW5ldyByKGUpO2U+bjspaVtuXT10W24rK107cmV0dXJuIGl9LGl2PWZ1bmN0aW9uKHIsdCl7enMocix0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRHModGhpcylbdF19fSl9LG92PWZ1bmN0aW9uKHIpe3ZhciB0O3JldHVybiBQcyhxcyxyKXx8IkFycmF5QnVmZmVyIj09KHQ9VXMocikpfHwiU2hhcmVkQXJyYXlCdWZmZXIiPT10fSx1dj1mdW5jdGlvbihyLHQpe3JldHVybiBudihyKSYmIUlzKHQpJiZ0IGluIHImJmpzKCt0KSYmdD49MH0sZnY9ZnVuY3Rpb24ocix0KXtyZXR1cm4gdD1Ucyh0KSx1dihyLHQpP1NzKDIsclt0XSk6V3Mocix0KX0sYXY9ZnVuY3Rpb24ocix0LG4pe3JldHVybiB0PVRzKHQpLCEodXYocix0KSYmTXMobikmJnhzKG4sInZhbHVlIikpfHx4cyhuLCJnZXQiKXx8eHMobiwic2V0Iil8fG4uaXx8eHMobiwid3JpdGFibGUiKSYmIW4ud3JpdGFibGV8fHhzKG4sImVudW1lcmFibGUiKSYmIW4udD96cyhyLHQsbik6KHJbdF09bi52YWx1ZSxyKX07d3M/KFhzfHwoR3MuZj1mdixCcy5mPWF2LGl2KHJ2LCJidWZmZXIiKSxpdihydiwiYnl0ZU9mZnNldCIpLGl2KHJ2LCJieXRlTGVuZ3RoIiksaXYocnYsImxlbmd0aCIpKSxscyh7dGFyZ2V0OiJPYmplY3QiLEM6ITAsRzohWHN9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnYsZGVmaW5lUHJvcGVydHk6YXZ9KSxzYS5leHBvcnRzPWZ1bmN0aW9uKHIsdCxuKXt2YXIgZT1yLm1hdGNoKC9cZCskLylbMF0vOCxpPXIrKG4/IkNsYW1wZWQiOiIiKSsiQXJyYXkiLG89ImdldCIrcix1PSJzZXQiK3IsZj1kc1tpXSxhPWYsYz1hJiZhLnByb3RvdHlwZSxzPXt9LHY9ZnVuY3Rpb24ocix0KXt6cyhyLHQse2dldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihyLHQpe3ZhciBuPURzKHIpO3JldHVybiBuLnZpZXdbb10odCplK24uYnl0ZU9mZnNldCwhMCl9KHRoaXMsdCl9LHNldDpmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24ocix0LGkpe3ZhciBvPURzKHIpO24mJihpPTA+KGk9JHMoaSkpPzA6aT4yNTU/MjU1OjI1NSZpKSxvLnZpZXdbdV0odCplK28uYnl0ZU9mZnNldCxpLCEwKX0odGhpcyx0LHIpfSx0OiEwfSl9O1hzP2JzJiYoYT10KChmdW5jdGlvbihyLHQsbixpKXtyZXR1cm4gbXMocixjKSxmdW5jdGlvbihyLHQsbil7dmFyIGUsaTtyZXR1cm4gaHMmJnNzKGU9dC5jb25zdHJ1Y3RvcikmJmUhPT1uJiZ2cyhpPWUucHJvdG90eXBlKSYmaSE9PW4ucHJvdG90eXBlJiZocyhyLGkpLHJ9KE1zKHQpP292KHQpP3ZvaWQgMCE9PWk/bmV3IGYodCxFcyhuLGUpLGkpOnZvaWQgMCE9PW4/bmV3IGYodCxFcyhuLGUpKTpuZXcgZih0KTpudih0KT9ldihhLHQpOnlzKEZzLGEsdCk6bmV3IGYoa3ModCkpLHIsYSl9KSksX3MmJl9zKGEsWnMpLE5zKFJzKGYpLChmdW5jdGlvbihyKXtyIGluIGF8fEFzKGEscixmW3JdKX0pKSxhLnByb3RvdHlwZT1jKTooYT10KChmdW5jdGlvbihyLHQsbixpKXttcyhyLGMpO3ZhciBvLHUsZixzPTAsaD0wO2lmKE1zKHQpKXtpZighb3YodCkpcmV0dXJuIG52KHQpP2V2KGEsdCk6eXMoRnMsYSx0KTtvPXQsaD1FcyhuLGUpO3ZhciBsPXQuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1pKXtpZihsJWUpdGhyb3cgSHMoIldyb25nIGxlbmd0aCIpO2lmKDA+KHU9bC1oKSl0aHJvdyBIcygiV3JvbmcgbGVuZ3RoIil9ZWxzZSBpZigodT1PcyhpKSplKStoPmwpdGhyb3cgSHMoIldyb25nIGxlbmd0aCIpO2Y9dS9lfWVsc2UgZj1rcyh0KSxvPW5ldyBLcyh1PWYqZSk7Zm9yKFZzKHIse2J1ZmZlcjpvLGJ5dGVPZmZzZXQ6aCxieXRlTGVuZ3RoOnUsbGVuZ3RoOmYsdmlldzpuZXcgSnMobyl9KTtmPnM7KXYocixzKyspfSkpLF9zJiZfcyhhLFpzKSxjPWEucHJvdG90eXBlPUxzKHJ2KSksYy5jb25zdHJ1Y3RvciE9PWEmJkFzKGMsImNvbnN0cnVjdG9yIixhKSxZcyhjKS5KPWEsUXMmJkFzKGMsUXMsaSk7dmFyIGg9YSE9ZjtzW2ldPWEsbHMoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxHOmgsaDohWHN9LHMpLCJCWVRFU19QRVJfRUxFTUVOVCJpbiBhfHxBcyhhLCJCWVRFU19QRVJfRUxFTUVOVCIsZSksIkJZVEVTX1BFUl9FTEVNRU5UImluIGN8fEFzKGMsIkJZVEVTX1BFUl9FTEVNRU5UIixlKSxDcyhpKX0pOnNhLmV4cG9ydHM9ZnVuY3Rpb24oKXt9LCgwLHNhLmV4cG9ydHMpKCJVaW50OCIsKGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIodGhpcyx0LG4sZSl9fSkpO3ZhciBjdj1mcixzdj1UeXBlRXJyb3IsdnY9ZnVuY3Rpb24ocix0KXtpZighZGVsZXRlIHJbdF0pdGhyb3cgc3YoIkNhbm5vdCBkZWxldGUgcHJvcGVydHkgIitjdih0KSsiIG9mICIrY3YocikpfSxodj1Ucixsdj1Xbixkdj1Kbix5dj12dix3dj1NYXRoLm1pbixidj1aYSxwdj1TKFtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHIsdCl7dmFyIG49aHYodGhpcyksZT1kdihuKSxpPWx2KHIsZSksbz1sdih0LGUpLHU9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsZj13digodm9pZCAwPT09dT9lOmx2KHUsZSkpLW8sZS1pKSxhPTE7Zm9yKGk+byYmbytmPmkmJihhPS0xLG8rPWYtMSxpKz1mLTEpO2YtLSA+MDspbyBpbiBuP25baV09bltvXTp5dihuLGkpLGkrPWEsbys9YTtyZXR1cm4gbn0pLGd2PWJ2LnJyOygwLGJ2Lm5yKSgiY29weVdpdGhpbiIsKGZ1bmN0aW9uKHIsdCl7cmV0dXJuIHB2KGd2KHRoaXMpLHIsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9KSk7dmFyIG12PWlzLmV2ZXJ5LFN2PVphLnJyOygwLFphLm5yKSgiZXZlcnkiLChmdW5jdGlvbihyKXtyZXR1cm4gbXYoU3YodGhpcykscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIEF2PVpyLGp2PVR5cGVFcnJvcixPdj1ndSxrdj1mdW5jdGlvbihyKXt2YXIgdD1BdihyLCJudW1iZXIiKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cganYoIkNhbid0IGNvbnZlcnQgbnVtYmVyIHRvIGJpZ2ludCIpO3JldHVybiBCaWdJbnQodCl9LEV2PXFlLFR2PWEseHY9aSxVdj1aYS5ycixNdj1aYS5ucixJdj1TKCIiLnNsaWNlKTtNdigiZmlsbCIsKGZ1bmN0aW9uKHIpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7VXYodGhpcyk7dmFyIG49IkJpZyI9PT1JdihFdih0aGlzKSwwLDMpP2t2KHIpOityO3JldHVybiBUdihPdix0aGlzLG4sdD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSkseHYoKGZ1bmN0aW9uKCl7dmFyIHI9MDtyZXR1cm4gbmV3IEludDhBcnJheSgyKS5maWxsKHt2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHIrK319KSwxIT09cn0pKSk7dmFyIEx2PUpuLFB2PXFmLF92PVphLnRyLFJ2PVphLmlyLEZ2PWZ1bmN0aW9uKHIpe3JldHVybiBfdihQdihyLFJ2KHIpKSl9LE52PUZ2LEN2PWlzLmZpbHRlcixCdj1mdW5jdGlvbihyLHQpe3JldHVybiBmdW5jdGlvbihyLHQpe2Zvcih2YXIgbj0wLGU9THYodCksaT1uZXcgcihlKTtlPm47KWlbbl09dFtuKytdO3JldHVybiBpfShOdihyKSx0KX0sR3Y9WmEucnI7KDAsWmEubnIpKCJmaWx0ZXIiLChmdW5jdGlvbihyKXt2YXIgdD1DdihHdih0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4gQnYodGhpcyx0KX0pKTt2YXIgRHY9aXMuZmluZCxWdj1aYS5ycjsoMCxaYS5ucikoImZpbmQiLChmdW5jdGlvbihyKXtyZXR1cm4gRHYoVnYodGhpcykscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIFl2PWlzLmZpbmRJbmRleCx6dj1aYS5ycjsoMCxaYS5ucikoImZpbmRJbmRleCIsKGZ1bmN0aW9uKHIpe3JldHVybiBZdih6dih0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgV3Y9aXMuZm9yRWFjaCwkdj1aYS5ycjsoMCxaYS5ucikoImZvckVhY2giLChmdW5jdGlvbihyKXtXdigkdih0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgSHY9dGUuaW5jbHVkZXMsS3Y9WmEucnI7KDAsWmEubnIpKCJpbmNsdWRlcyIsKGZ1bmN0aW9uKHIpe3JldHVybiBIdihLdih0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgcXY9dGUuaW5kZXhPZixKdj1aYS5ycjsoMCxaYS5ucikoImluZGV4T2YiLChmdW5jdGlvbihyKXtyZXR1cm4gcXYoSnYodGhpcykscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIFh2PW4sUXY9aSxadj1TLHJoPVphLHRoPXJ1LG5oPSRyKCJpdGVyYXRvciIpLGVoPVh2LlVpbnQ4QXJyYXksaWg9WnYodGgudmFsdWVzKSxvaD1adih0aC5rZXlzKSx1aD1adih0aC5lbnRyaWVzKSxmaD1yaC5ycixhaD1yaC5ucixjaD1laCYmZWgucHJvdG90eXBlLHNoPSFRdigoZnVuY3Rpb24oKXtjaFtuaF0uY2FsbChbMV0pfSkpLHZoPSEhY2gmJmNoLnZhbHVlcyYmY2hbbmhdPT09Y2gudmFsdWVzJiYidmFsdWVzIj09PWNoLnZhbHVlcy5uYW1lLGhoPWZ1bmN0aW9uKCl7cmV0dXJuIGloKGZoKHRoaXMpKX07YWgoImVudHJpZXMiLChmdW5jdGlvbigpe3JldHVybiB1aChmaCh0aGlzKSl9KSxzaCksYWgoImtleXMiLChmdW5jdGlvbigpe3JldHVybiBvaChmaCh0aGlzKSl9KSxzaCksYWgoInZhbHVlcyIsaGgsc2h8fCF2aCx7bmFtZToidmFsdWVzIn0pLGFoKG5oLGhoLHNofHwhdmgse25hbWU6InZhbHVlcyJ9KTt2YXIgbGg9WmEucnIsZGg9WmEubnIseWg9UyhbXS5qb2luKTtkaCgiam9pbiIsKGZ1bmN0aW9uKHIpe3JldHVybiB5aChsaCh0aGlzKSxyKX0pKTt2YXIgd2g9dSxiaD1GdW5jdGlvbi5wcm90b3R5cGUscGg9YmguYXBwbHksZ2g9YmguY2FsbCxtaD0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fCh3aD9naC5iaW5kKHBoKTpmdW5jdGlvbigpe3JldHVybiBnaC5hcHBseShwaCxhcmd1bWVudHMpfSksU2g9aSxBaD1mdW5jdGlvbihyLHQpe3ZhciBuPVtdW3JdO3JldHVybiEhbiYmU2goKGZ1bmN0aW9uKCl7bi5jYWxsKG51bGwsdHx8ZnVuY3Rpb24oKXtyZXR1cm4gMX0sMSl9KSl9LGpoPW1oLE9oPVIsa2g9RG4sRWg9Sm4sVGg9TWF0aC5taW4seGg9W10ubGFzdEluZGV4T2YsVWg9ISF4aCYmITEsTWg9QWgoImxhc3RJbmRleE9mIiksSWg9bWgsTGg9VWh8fCFNaD9mdW5jdGlvbihyKXtpZihVaClyZXR1cm4gamgoeGgsdGhpcyxhcmd1bWVudHMpfHwwO3ZhciB0PU9oKHRoaXMpLG49RWgodCksZT1uLTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGU9VGgoZSxraChhcmd1bWVudHNbMV0pKSksMD5lJiYoZT1uK2UpO2U+PTA7ZS0tKWlmKGUgaW4gdCYmdFtlXT09PXIpcmV0dXJuIGV8fDA7cmV0dXJuLTF9OnhoLFBoPVphLnJyOygwLFphLm5yKSgibGFzdEluZGV4T2YiLChmdW5jdGlvbihyKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBJaChMaCxQaCh0aGlzKSx0PjE/W3IsYXJndW1lbnRzWzFdXTpbcl0pfSkpO3ZhciBfaD1pcy5tYXAsUmg9RnYsRmg9WmEucnI7KDAsWmEubnIpKCJtYXAiLChmdW5jdGlvbihyKXtyZXR1cm4gX2goRmgodGhpcykscixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwoZnVuY3Rpb24ocix0KXtyZXR1cm4gbmV3KFJoKHIpKSh0KX0pKX0pKTt2YXIgTmg9dnIsQ2g9VHIsQmg9TSxHaD1KbixEaD1UeXBlRXJyb3IsVmg9ZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsbixlLGkpe05oKG4pO3ZhciBvPUNoKHQpLHU9QmgobyksZj1HaChvKSxhPXI/Zi0xOjAsYz1yPy0xOjE7aWYoMj5lKWZvcig7Oyl7aWYoYSBpbiB1KXtpPXVbYV0sYSs9YzticmVha31pZihhKz1jLHI/MD5hOmE+PWYpdGhyb3cgRGgoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3I/YT49MDpmPmE7YSs9YylhIGluIHUmJihpPW4oaSx1W2FdLGEsbykpO3JldHVybiBpfX0sWWg9e2xlZnQ6VmgoITEpLHJpZ2h0OlZoKCEwKX0semg9WWgubGVmdCxXaD1aYS5ycjsoMCxaYS5ucikoInJlZHVjZSIsKGZ1bmN0aW9uKHIpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHpoKFdoKHRoaXMpLHIsdCx0PjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyICRoPVloLnJpZ2h0LEhoPVphLnJyOygwLFphLm5yKSgicmVkdWNlUmlnaHQiLChmdW5jdGlvbihyKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiAkaChIaCh0aGlzKSxyLHQsdD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciBLaD1aYS5ycixxaD1NYXRoLmZsb29yOygwLFphLm5yKSgicmV2ZXJzZSIsKGZ1bmN0aW9uKCl7Zm9yKHZhciByLHQ9dGhpcyxuPUtoKHQpLmxlbmd0aCxlPXFoKG4vMiksaT0wO2U+aTspcj10W2ldLHRbaSsrXT10Wy0tbl0sdFtuXT1yO3JldHVybiB0fSkpO3ZhciBKaD1uLFhoPWEsUWg9WmEsWmg9Sm4scmw9bGMsdGw9VHIsbmw9aSxlbD1KaC5SYW5nZUVycm9yLGlsPUpoLkludDhBcnJheSxvbD1pbCYmaWwucHJvdG90eXBlLHVsPW9sJiZvbC5zZXQsZmw9UWgucnIsYWw9UWgubnIsY2w9IW5sKChmdW5jdGlvbigpe3ZhciByPW5ldyBVaW50OENsYW1wZWRBcnJheSgyKTtyZXR1cm4gWGgodWwscix7bGVuZ3RoOjEsMDozfSwxKSwzIT09clsxXX0pKSxzbD1jbCYmUWguWCYmbmwoKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IGlsKDIpO3JldHVybiByLnNldCgxKSxyLnNldCgiMiIsMSksMCE9PXJbMF18fDIhPT1yWzFdfSkpO2FsKCJzZXQiLChmdW5jdGlvbihyKXtmbCh0aGlzKTt2YXIgdD1ybChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwxKSxuPXRsKHIpO2lmKGNsKXJldHVybiBYaCh1bCx0aGlzLG4sdCk7dmFyIGU9dGhpcy5sZW5ndGgsaT1aaChuKSxvPTA7aWYoaSt0PmUpdGhyb3cgZWwoIldyb25nIGxlbmd0aCIpO2Zvcig7aT5vOyl0aGlzW3Qrb109bltvKytdfSksIWNsfHxzbCk7dmFyIHZsPVMoW10uc2xpY2UpLGhsPUZ2LGxsPXZsLGRsPVphLnJyOygwLFphLm5yKSgic2xpY2UiLChmdW5jdGlvbihyLHQpe2Zvcih2YXIgbj1sbChkbCh0aGlzKSxyLHQpLGU9aGwodGhpcyksaT0wLG89bi5sZW5ndGgsdT1uZXcgZShvKTtvPmk7KXVbaV09bltpKytdO3JldHVybiB1fSksaSgoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNsaWNlKCl9KSkpO3ZhciB5bD1pcy5zb21lLHdsPVphLnJyOygwLFphLm5yKSgic29tZSIsKGZ1bmN0aW9uKHIpe3JldHVybiB5bCh3bCh0aGlzKSxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgYmw9VXUscGw9TWF0aC5mbG9vcixnbD1mdW5jdGlvbihyLHQpe3ZhciBuPXIubGVuZ3RoLGU9cGwobi8yKTtyZXR1cm4gOD5uP21sKHIsdCk6U2wocixnbChibChyLDAsZSksdCksZ2woYmwocixlKSx0KSx0KX0sbWw9ZnVuY3Rpb24ocix0KXtmb3IodmFyIG4sZSxpPXIubGVuZ3RoLG89MTtpPm87KXtmb3IoZT1vLG49cltvXTtlJiZ0KHJbZS0xXSxuKT4wOylyW2VdPXJbLS1lXTtlIT09bysrJiYocltlXT1uKX1yZXR1cm4gcn0sU2w9ZnVuY3Rpb24ocix0LG4sZSl7Zm9yKHZhciBpPXQubGVuZ3RoLG89bi5sZW5ndGgsdT0wLGY9MDtpPnV8fG8+Zjspclt1K2ZdPWk+dSYmbz5mP2UodFt1XSxuW2ZdKT4wP25bZisrXTp0W3UrK106aT51P3RbdSsrXTpuW2YrK107cmV0dXJuIHJ9LEFsPWdsLGpsPXoubWF0Y2goL2ZpcmVmb3hcLyhcZCspL2kpLE9sPSEhamwmJitqbFsxXSxrbD0vTVNJRXxUcmlkZW50Ly50ZXN0KHopLEVsPXoubWF0Y2goL0FwcGxlV2ViS2l0XC8oXGQrKVwuLyksVGw9ISFFbCYmK0VsWzFdLHhsPVMsVWw9aSxNbD12cixJbD1BbCxMbD1PbCxQbD1rbCxfbD1YLFJsPVRsLEZsPVphLnJyLE5sPVphLm5yLENsPW4uVWludDE2QXJyYXksQmw9Q2wmJnhsKENsLnByb3RvdHlwZS5zb3J0KSxHbD0hKCFCbHx8VWwoKGZ1bmN0aW9uKCl7QmwobmV3IENsKDIpLG51bGwpfSkpJiZVbCgoZnVuY3Rpb24oKXtCbChuZXcgQ2woMikse30pfSkpKSxEbD0hIUJsJiYhVWwoKGZ1bmN0aW9uKCl7aWYoX2wpcmV0dXJuIDc0Pl9sO2lmKExsKXJldHVybiA2Nz5MbDtpZihQbClyZXR1cm4hMDtpZihSbClyZXR1cm4gNjAyPlJsO3ZhciByLHQsbj1uZXcgQ2woNTE2KSxlPUFycmF5KDUxNik7Zm9yKHI9MDs1MTY+cjtyKyspdD1yJTQsbltyXT01MTUtcixlW3JdPXItMip0KzM7Zm9yKEJsKG4sKGZ1bmN0aW9uKHIsdCl7cmV0dXJuKHIvNHwwKS0odC80fDApfSkpLHI9MDs1MTY+cjtyKyspaWYobltyXSE9PWVbcl0pcmV0dXJuITB9KSk7TmwoInNvcnQiLChmdW5jdGlvbihyKXtyZXR1cm4gdm9pZCAwIT09ciYmTWwociksRGw/QmwodGhpcyxyKTpJbChGbCh0aGlzKSxmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwIT09cj8rcih0LG4pfHwwOm4hPW4/LTE6dCE9dD8xOjA9PT10JiYwPT09bj8xL3Q+MCYmMD4xL24/MTotMTp0Pm59fShyKSl9KSwhRGx8fEdsKTt2YXIgVmw9S24sWWw9V24semw9RnYsV2w9WmEucnI7KDAsWmEubnIpKCJzdWJhcnJheSIsKGZ1bmN0aW9uKHIsdCl7dmFyIG49V2wodGhpcyksZT1uLmxlbmd0aCxpPVlsKHIsZSk7cmV0dXJuIG5ldyh6bChuKSkobi5idWZmZXIsbi5ieXRlT2Zmc2V0K2kqbi5CWVRFU19QRVJfRUxFTUVOVCxWbCgodm9pZCAwPT09dD9lOllsKHQsZSkpLWkpKX0pKTt2YXIgJGw9bWgsSGw9WmEsS2w9aSxxbD12bCxKbD1uLkludDhBcnJheSxYbD1IbC5ycixRbD1IbC5ucixabD1bXS50b0xvY2FsZVN0cmluZyxyZD0hIUpsJiZLbCgoZnVuY3Rpb24oKXtabC5jYWxsKG5ldyBKbCgxKSl9KSk7UWwoInRvTG9jYWxlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gJGwoWmwscmQ/cWwoWGwodGhpcykpOlhsKHRoaXMpLHFsKGFyZ3VtZW50cykpfSksS2woKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IEpsKFsxLDJdKS50b0xvY2FsZVN0cmluZygpfSkpfHwhS2woKGZ1bmN0aW9uKCl7SmwucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpKTt2YXIgdGQ9WmEubnIsbmQ9aSxlZD1TLGlkPW4uVWludDhBcnJheSxvZD1pZCYmaWQucHJvdG90eXBlfHx7fSx1ZD1bXS50b1N0cmluZyxmZD1lZChbXS5qb2luKTtuZCgoZnVuY3Rpb24oKXt1ZC5jYWxsKHt9KX0pKSYmKHVkPWZ1bmN0aW9uKCl7cmV0dXJuIGZkKHRoaXMpfSk7dmFyIGFkPW9kLnRvU3RyaW5nIT11ZDt0ZCgidG9TdHJpbmciLHVkLGFkKTt2YXIgY2Qsc2QsdmQsaGQsbGQ9InByb2Nlc3MiPT1rKG4ucHJvY2VzcyksZGQ9VHlwZUVycm9yLHlkPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHopLHdkPW4sYmQ9bWgscGQ9YmMsZ2Q9RixtZD1NcixTZD1pLEFkPUVpLGpkPXZsLE9kPXV0LGtkPWZ1bmN0aW9uKHIsdCl7aWYodD5yKXRocm93IGRkKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiByfSxFZD15ZCxUZD1sZCx4ZD13ZC5zZXRJbW1lZGlhdGUsVWQ9d2QuY2xlYXJJbW1lZGlhdGUsTWQ9d2QucHJvY2VzcyxJZD13ZC52cixMZD13ZC5GdW5jdGlvbixQZD13ZC5NZXNzYWdlQ2hhbm5lbCxfZD13ZC5TdHJpbmcsUmQ9MCxGZD17fTt0cnl7Y2Q9d2QubG9jYXRpb259Y2F0Y2gocil7fXZhciBOZD1mdW5jdGlvbihyKXtpZihtZChGZCxyKSl7dmFyIHQ9RmRbcl07ZGVsZXRlIEZkW3JdLHQoKX19LENkPWZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbigpe05kKHIpfX0sQmQ9ZnVuY3Rpb24ocil7TmQoci5kYXRhKX0sR2Q9ZnVuY3Rpb24ocil7d2QucG9zdE1lc3NhZ2UoX2QociksY2QucHJvdG9jb2wrIi8vIitjZC5ob3N0KX07eGQmJlVkfHwoeGQ9ZnVuY3Rpb24ocil7a2QoYXJndW1lbnRzLmxlbmd0aCwxKTt2YXIgdD1nZChyKT9yOkxkKHIpLG49amQoYXJndW1lbnRzLDEpO3JldHVybiBGZFsrK1JkXT1mdW5jdGlvbigpe2JkKHQsdm9pZCAwLG4pfSxzZChSZCksUmR9LFVkPWZ1bmN0aW9uKHIpe2RlbGV0ZSBGZFtyXX0sVGQ/c2Q9ZnVuY3Rpb24ocil7TWQuaHIoQ2QocikpfTpJZCYmSWQubm93P3NkPWZ1bmN0aW9uKHIpe0lkLm5vdyhDZChyKSl9OlBkJiYhRWQ/KGhkPSh2ZD1uZXcgUGQpLnBvcnQyLHZkLnBvcnQxLm9ubWVzc2FnZT1CZCxzZD1wZChoZC5wb3N0TWVzc2FnZSxoZCkpOndkLmFkZEV2ZW50TGlzdGVuZXImJmdkKHdkLnBvc3RNZXNzYWdlKSYmIXdkLmxyJiZjZCYmImZpbGU6IiE9PWNkLnByb3RvY29sJiYhU2QoR2QpPyhzZD1HZCx3ZC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixCZCwhMSkpOnNkPSJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gT2QoInNjcmlwdCIpP2Z1bmN0aW9uKHIpe0FkLmFwcGVuZENoaWxkKE9kKCJzY3JpcHQiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7QWQucmVtb3ZlQ2hpbGQodGhpcyksTmQocil9fTpmdW5jdGlvbihyKXtzZXRUaW1lb3V0KENkKHIpLDApfSk7dmFyIERkLFZkLFlkLHpkLFdkLCRkLEhkLEtkLHFkPXtzZXQ6eGQsY2xlYXI6VWR9LEpkPW4sWGQ9L2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHopJiZ2b2lkIDAhPT1KZC5kcixRZD0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHopLFpkPW4scnk9YmMsdHk9ZS5mLG55PXFkLnNldCxleT15ZCxpeT1YZCxveT1RZCx1eT1sZCxmeT1aZC5NdXRhdGlvbk9ic2VydmVyfHxaZC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGF5PVpkLmRvY3VtZW50LGN5PVpkLnByb2Nlc3Msc3k9WmQuUHJvbWlzZSx2eT10eShaZCwicXVldWVNaWNyb3Rhc2siKSxoeT12eSYmdnkudmFsdWU7aHl8fChEZD1mdW5jdGlvbigpe3ZhciByLHQ7Zm9yKHV5JiYocj1jeS5kb21haW4pJiZyLnlyKCk7VmQ7KXt0PVZkLndyLFZkPVZkLm5leHQ7dHJ5e3QoKX1jYXRjaChyKXt0aHJvdyBWZD96ZCgpOllkPXZvaWQgMCxyfX1ZZD12b2lkIDAsciYmci5icigpfSxleXx8dXl8fG95fHwhZnl8fCFheT8haXkmJnN5JiZzeS5yZXNvbHZlPygoSGQ9c3kucmVzb2x2ZSh2b2lkIDApKS5jb25zdHJ1Y3Rvcj1zeSxLZD1yeShIZC50aGVuLEhkKSx6ZD1mdW5jdGlvbigpe0tkKERkKX0pOnV5P3pkPWZ1bmN0aW9uKCl7Y3kuaHIoRGQpfToobnk9cnkobnksWmQpLHpkPWZ1bmN0aW9uKCl7bnkoRGQpfSk6KFdkPSEwLCRkPWF5LmNyZWF0ZVRleHROb2RlKCIiKSxuZXcgZnkoRGQpLm9ic2VydmUoJGQse2NoYXJhY3RlckRhdGE6ITB9KSx6ZD1mdW5jdGlvbigpeyRkLmRhdGE9V2Q9IVdkfSkpO3ZhciBseT1oeXx8ZnVuY3Rpb24ocil7dmFyIHQ9e3dyOnIsbmV4dDp2b2lkIDB9O1lkJiYoWWQubmV4dD10KSxWZHx8KFZkPXQsemQoKSksWWQ9dH0sZHk9bix5eT1mdW5jdGlvbihyKXt0cnl7cmV0dXJue2Vycm9yOiExLHZhbHVlOnIoKX19Y2F0Y2gocil7cmV0dXJue2Vycm9yOiEwLHZhbHVlOnJ9fX0sd3k9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnByPW51bGx9O3d5LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHIpe3ZhciB0PXtpdGVtOnIsbmV4dDpudWxsfTt0aGlzLmhlYWQ/dGhpcy5wci5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy5wcj10fSxnZXQ6ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmhlYWQ7aWYocilyZXR1cm4gdGhpcy5oZWFkPXIubmV4dCx0aGlzLnByPT09ciYmKHRoaXMucHI9bnVsbCksci5pdGVtfX07dmFyIGJ5PXd5LHB5PW4uUHJvbWlzZSxneT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCIhPXR5cGVvZiBEZW5vLG15PW4sU3k9cHksQXk9RixqeT1JZSxPeT1IdCxreT0kcixFeT1neSxUeT1YO1N5JiZTeS5wcm90b3R5cGU7dmFyIHh5PWt5KCJzcGVjaWVzIiksVXk9ITEsTXk9QXkobXkuUHJvbWlzZVJlamVjdGlvbkV2ZW50KSxJeT1qeSgiUHJvbWlzZSIsKGZ1bmN0aW9uKCl7dmFyIHI9T3koU3kpLHQ9ciE9PVN5KyIiO2lmKCF0JiY2Nj09PVR5KXJldHVybiEwO2lmKFR5Pj01MSYmL25hdGl2ZSBjb2RlLy50ZXN0KHIpKXJldHVybiExO3ZhciBuPW5ldyBTeSgoZnVuY3Rpb24ocil7cigxKX0pKSxlPWZ1bmN0aW9uKHIpe3IoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtyZXR1cm4obi5jb25zdHJ1Y3Rvcj17fSlbeHldPWUsIShVeT1uLnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBlKXx8IXQmJkV5JiYhTXl9KSksTHk9e2dyOkl5LG1yOk15LFNyOlV5fSxQeT17fSxfeT12cixSeT1mdW5jdGlvbihyKXt2YXIgdCxuO3RoaXMucHJvbWlzZT1uZXcgcigoZnVuY3Rpb24ocixlKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1uKXRocm93IFR5cGVFcnJvcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PXIsbj1lfSkpLHRoaXMucmVzb2x2ZT1feSh0KSx0aGlzLnJlamVjdD1feShuKX07UHkuZj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IFJ5KHIpfTt2YXIgRnksTnksQ3ksQnk9QmUsR3k9bGQsRHk9bixWeT1hLFl5PUZuLHp5PXhvLFd5PXdvLCR5PWNzLEh5PXZyLEt5PUYscXk9QyxKeT11dSxYeT1xZixReT1xZC5zZXQsWnk9bHkscnc9eXksdHc9Ynksbnc9bW4sZXc9cHksaXc9UHksb3c9THkuZ3IsdXc9THkubXIsZnc9THkuU3IsYXc9bncuVSgiUHJvbWlzZSIpLGN3PW53LnNldCxzdz1ldyYmZXcucHJvdG90eXBlLHZ3PWV3LGh3PXN3LGx3PUR5LlR5cGVFcnJvcixkdz1EeS5kb2N1bWVudCx5dz1EeS5wcm9jZXNzLHd3PWl3LmYsYnc9d3cscHc9ISEoZHcmJmR3LmNyZWF0ZUV2ZW50JiZEeS5kaXNwYXRjaEV2ZW50KSxndz1mdW5jdGlvbihyKXt2YXIgdDtyZXR1cm4hKCFxeShyKXx8IUt5KHQ9ci50aGVuKSkmJnR9LG13PWZ1bmN0aW9uKHIsdCl7dmFyIG4sZSxpLG89dC52YWx1ZSx1PTE9PXQuc3RhdGUsZj11P3Iub2s6ci5BcixhPXIucmVzb2x2ZSxjPXIucmVqZWN0LHM9ci5kb21haW47dHJ5e2Y/KHV8fCgyPT09dC5qciYma3codCksdC5qcj0xKSwhMD09PWY/bj1vOihzJiZzLmJyKCksbj1mKG8pLHMmJihzLnlyKCksaT0hMCkpLG49PT1yLnByb21pc2U/YyhsdygiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKTooZT1ndyhuKSk/VnkoZSxuLGEsYyk6YShuKSk6YyhvKX1jYXRjaChyKXtzJiYhaSYmcy55cigpLGMocil9fSxTdz1mdW5jdGlvbihyLHQpe3IuT3J8fChyLk9yPSEwLFp5KChmdW5jdGlvbigpe2Zvcih2YXIgbixlPXIua3I7bj1lLmdldCgpOyltdyhuLHIpO3IuT3I9ITEsdCYmIXIuanImJmp3KHIpfSkpKX0sQXc9ZnVuY3Rpb24ocix0LG4pe3ZhciBlLGk7cHc/KChlPWR3LmNyZWF0ZUV2ZW50KCJFdmVudCIpKS5wcm9taXNlPXQsZS5yZWFzb249bixlLmluaXRFdmVudChyLCExLCEwKSxEeS5kaXNwYXRjaEV2ZW50KGUpKTplPXtwcm9taXNlOnQscmVhc29uOm59LCF1dyYmKGk9RHlbIm9uIityXSk/aShlKToidW5oYW5kbGVkcmVqZWN0aW9uIj09PXImJmZ1bmN0aW9uKHIsdCl7dmFyIG49ZHkuY29uc29sZTtuJiZuLmVycm9yJiYoMT09YXJndW1lbnRzLmxlbmd0aD9uLmVycm9yKHIpOm4uZXJyb3Iocix0KSl9KCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iLG4pfSxqdz1mdW5jdGlvbihyKXtWeShReSxEeSwoZnVuY3Rpb24oKXt2YXIgdCxuPXIuayxlPXIudmFsdWU7aWYoT3cocikmJih0PXJ3KChmdW5jdGlvbigpe0d5P3l3LkVyKCJ1bmhhbmRsZWRSZWplY3Rpb24iLGUsbik6QXcoInVuaGFuZGxlZHJlamVjdGlvbiIsbixlKX0pKSxyLmpyPUd5fHxPdyhyKT8yOjEsdC5lcnJvcikpdGhyb3cgdC52YWx1ZX0pKX0sT3c9ZnVuY3Rpb24ocil7cmV0dXJuIDEhPT1yLmpyJiYhci5wYXJlbnR9LGt3PWZ1bmN0aW9uKHIpe1Z5KFF5LER5LChmdW5jdGlvbigpe3ZhciB0PXIuaztHeT95dy5FcigicmVqZWN0aW9uSGFuZGxlZCIsdCk6QXcoInJlamVjdGlvbmhhbmRsZWQiLHQsci52YWx1ZSl9KSl9LEV3PWZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cih0LGUsbil9fSxUdz1mdW5jdGlvbihyLHQsbil7ci5kb25lfHwoci5kb25lPSEwLG4mJihyPW4pLHIudmFsdWU9dCxyLnN0YXRlPTIsU3cociwhMCkpfSx4dz1mdW5jdGlvbihyLHQsbil7aWYoIXIuZG9uZSl7ci5kb25lPSEwLG4mJihyPW4pO3RyeXtpZihyLms9PT10KXRocm93IGx3KCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBlPWd3KHQpO2U/WnkoKGZ1bmN0aW9uKCl7dmFyIG49e2RvbmU6ITF9O3RyeXtWeShlLHQsRXcoeHcsbixyKSxFdyhUdyxuLHIpKX1jYXRjaCh0KXtUdyhuLHQscil9fSkpOihyLnZhbHVlPXQsci5zdGF0ZT0xLFN3KHIsITEpKX1jYXRjaCh0KXtUdyh7ZG9uZTohMX0sdCxyKX19fTtpZihvdyYmKGh3PSh2dz1mdW5jdGlvbihyKXtKeSh0aGlzLGh3KSxIeShyKSxWeShGeSx0aGlzKTt2YXIgdD1hdyh0aGlzKTt0cnl7cihFdyh4dyx0KSxFdyhUdyx0KSl9Y2F0Y2gocil7VHcodCxyKX19KS5wcm90b3R5cGUsKEZ5PWZ1bmN0aW9uKCl7Y3codGhpcyx7dHlwZToiUHJvbWlzZSIsZG9uZTohMSxPcjohMSxwYXJlbnQ6ITEsa3I6bmV3IHR3LGpyOiExLHN0YXRlOjAsdmFsdWU6dm9pZCAwfSl9KS5wcm90b3R5cGU9WXkoaHcsInRoZW4iLChmdW5jdGlvbihyLHQpe3ZhciBuPWF3KHRoaXMpLGU9d3coWHkodGhpcyx2dykpO3JldHVybiBuLnBhcmVudD0hMCxlLm9rPSFLeShyKXx8cixlLkFyPUt5KHQpJiZ0LGUuZG9tYWluPUd5P3l3LmRvbWFpbjp2b2lkIDAsMD09bi5zdGF0ZT9uLmtyLmFkZChlKTpaeSgoZnVuY3Rpb24oKXttdyhlLG4pfSkpLGUucHJvbWlzZX0pKSxOeT1mdW5jdGlvbigpe3ZhciByPW5ldyBGeSx0PWF3KHIpO3RoaXMucHJvbWlzZT1yLHRoaXMucmVzb2x2ZT1Fdyh4dyx0KSx0aGlzLnJlamVjdD1FdyhUdyx0KX0saXcuZj13dz1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZ3fHx2b2lkIDA9PT1yP25ldyBOeShyKTpidyhyKX0sS3koZXcpJiZzdyE9PU9iamVjdC5wcm90b3R5cGUpKXtDeT1zdy50aGVuLGZ3fHxZeShzdywidGhlbiIsKGZ1bmN0aW9uKHIsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IHZ3KChmdW5jdGlvbihyLHQpe1Z5KEN5LG4scix0KX0pKS50aGVuKHIsdCl9KSx7UDohMH0pO3RyeXtkZWxldGUgc3cuY29uc3RydWN0b3J9Y2F0Y2gocil7fXp5JiZ6eShzdyxodyl9Qnkoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCx3cmFwOiEwLEc6b3d9LHtQcm9taXNlOnZ3fSksV3kodncsIlByb21pc2UiLCExKSwkeSgiUHJvbWlzZSIpO3ZhciBVdz1hLE13PWp0LEl3PWxyLEx3PWZ1bmN0aW9uKHIsdCxuKXt2YXIgZSxpO013KHIpO3RyeXtpZighKGU9SXcociwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyBuO3JldHVybiBufWU9VXcoZSxyKX1jYXRjaChyKXtpPSEwLGU9cn1pZigidGhyb3ciPT09dCl0aHJvdyBuO2lmKGkpdGhyb3cgZTtyZXR1cm4gTXcoZSksbn0sUHc9YmMsX3c9YSxSdz1qdCxGdz1mcixOdz1QYyxDdz1KbixCdz1ZLEd3PVVjLER3PUFjLFZ3PUx3LFl3PVR5cGVFcnJvcix6dz1mdW5jdGlvbihyLHQpe3RoaXMuc3RvcHBlZD1yLHRoaXMucmVzdWx0PXR9LFd3PXp3LnByb3RvdHlwZSwkdz1mdW5jdGlvbihyLHQsbil7dmFyIGUsaSxvLHUsZixhLGMscz1uJiZuLlRyLHY9ISghbnx8IW4uVXIpLGg9ISghbnx8IW4uTXIpLGw9ISghbnx8IW4uSXIpLGQ9UHcodCxzKSx5PWZ1bmN0aW9uKHIpe3JldHVybiBlJiZWdyhlLCJub3JtYWwiLHIpLG5ldyB6dyghMCxyKX0sdz1mdW5jdGlvbihyKXtyZXR1cm4gdj8oUncociksbD9kKHJbMF0sclsxXSx5KTpkKHJbMF0sclsxXSkpOmw/ZChyLHkpOmQocil9O2lmKGgpZT1yO2Vsc2V7aWYoIShpPUR3KHIpKSl0aHJvdyBZdyhGdyhyKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKE53KGkpKXtmb3Iobz0wLHU9Q3cocik7dT5vO28rKylpZigoZj13KHJbb10pKSYmQncoV3csZikpcmV0dXJuIGY7cmV0dXJuIG5ldyB6dyghMSl9ZT1HdyhyLGkpfWZvcihhPWUubmV4dDshKGM9X3coYSxlKSkuZG9uZTspe3RyeXtmPXcoYy52YWx1ZSl9Y2F0Y2gocil7VncoZSwidGhyb3ciLHIpfWlmKCJvYmplY3QiPT10eXBlb2YgZiYmZiYmQncoV3csZikpcmV0dXJuIGZ9cmV0dXJuIG5ldyB6dyghMSl9LEh3PXB5LEt3PUx5LmdyfHwhcGEoKGZ1bmN0aW9uKHIpe0h3LmFsbChyKS50aGVuKHZvaWQgMCwoZnVuY3Rpb24oKXt9KSl9KSkscXc9YSxKdz12cixYdz1QeSxRdz15eSxadz0kdztCZSh7dGFyZ2V0OiJQcm9taXNlIixDOiEwLEc6S3d9LHthbGw6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpcyxuPVh3LmYodCksZT1uLnJlc29sdmUsaT1uLnJlamVjdCxvPVF3KChmdW5jdGlvbigpe3ZhciBuPUp3KHQucmVzb2x2ZSksbz1bXSx1PTAsZj0xO1p3KHIsKGZ1bmN0aW9uKHIpe3ZhciBhPXUrKyxjPSExO2YrKyxxdyhuLHQscikudGhlbigoZnVuY3Rpb24ocil7Y3x8KGM9ITAsb1thXT1yLC0tZnx8ZShvKSl9KSxpKX0pKSwtLWZ8fGUobyl9KSk7cmV0dXJuIG8uZXJyb3ImJmkoby52YWx1ZSksbi5wcm9taXNlfX0pO3ZhciByYj1CZSx0Yj1MeS5ncixuYj1weSxlYj1WLGliPUYsb2I9Rm4sdWI9bmImJm5iLnByb3RvdHlwZTtpZihyYih7dGFyZ2V0OiJQcm9taXNlIixWOiEwLEc6dGIsTHI6ITB9LHtjYXRjaDpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxyKX19KSxpYihuYikpe3ZhciBmYj1lYigiUHJvbWlzZSIpLnByb3RvdHlwZS5jYXRjaDt1Yi5jYXRjaCE9PWZiJiZvYih1YiwiY2F0Y2giLGZiLHtQOiEwfSl9dmFyIGFiPWEsY2I9dnIsc2I9UHksdmI9eXksaGI9JHc7QmUoe3RhcmdldDoiUHJvbWlzZSIsQzohMCxHOkt3fSx7cmFjZTpmdW5jdGlvbihyKXt2YXIgdD10aGlzLG49c2IuZih0KSxlPW4ucmVqZWN0LGk9dmIoKGZ1bmN0aW9uKCl7dmFyIGk9Y2IodC5yZXNvbHZlKTtoYihyLChmdW5jdGlvbihyKXthYihpLHQscikudGhlbihuLnJlc29sdmUsZSl9KSl9KSk7cmV0dXJuIGkuZXJyb3ImJmUoaS52YWx1ZSksbi5wcm9taXNlfX0pO3ZhciBsYj1hLGRiPVB5O0JlKHt0YXJnZXQ6IlByb21pc2UiLEM6ITAsRzpMeS5ncn0se3JlamVjdDpmdW5jdGlvbihyKXt2YXIgdD1kYi5mKHRoaXMpO3JldHVybiBsYih0LnJlamVjdCx2b2lkIDAsciksdC5wcm9taXNlfX0pO3ZhciB5Yj1qdCx3Yj1DLGJiPVB5LHBiPUJlLGdiPUx5LmdyO1YoIlByb21pc2UiKSxwYih7dGFyZ2V0OiJQcm9taXNlIixDOiEwLEc6Z2J9LHtyZXNvbHZlOmZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbihyLHQpe2lmKHliKHIpLHdiKHQpJiZ0LmNvbnN0cnVjdG9yPT09cilyZXR1cm4gdDt2YXIgbj1iYi5mKHIpO3JldHVybigwLG4ucmVzb2x2ZSkodCksbi5wcm9taXNlfSh0aGlzLHIpfX0pO3ZhciBtYj17fSxTYj1rLEFiPVIsamI9Tm4uZixPYj1VdSxrYj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdO21iLmY9ZnVuY3Rpb24ocil7cmV0dXJuIGtiJiYiV2luZG93Ij09U2Iocik/ZnVuY3Rpb24ocil7dHJ5e3JldHVybiBqYihyKX1jYXRjaChyKXtyZXR1cm4gT2Ioa2IpfX0ocik6amIoQWIocikpfTt2YXIgRWI9e30sVGI9JHI7RWIuZj1UYjt2YXIgeGI9bixVYj1NcixNYj1FYixJYj1wdC5mLExiPWZ1bmN0aW9uKHIpe3ZhciB0PXhiLlN5bWJvbHx8KHhiLlN5bWJvbD17fSk7VWIodCxyKXx8SWIodCxyLHt2YWx1ZTpNYi5mKHIpfSl9LFBiPWEsX2I9VixSYj0kcixGYj1GbixOYj1CZSxDYj1uLEJiPWEsR2I9UyxEYj1vLFZiPVosWWI9aSx6Yj1NcixXYj1ZLCRiPWp0LEhiPVIsS2I9bnQscWI9UWUsSmI9eSxYYj1DaSxRYj1waSxaYj1ObixycD1tYix0cD12ZSxucD1lLGVwPXB0LGlwPXlpLG9wPWMsdXA9Rm4sZnA9cHIuZXhwb3J0cyxhcD1ubixjcD1ScixzcD0kcix2cD1FYixocD1MYixscD13byxkcD1tbix5cD1pcy5mb3JFYWNoLHdwPXRuKCJoaWRkZW4iKSxicD1kcC5zZXQscHA9ZHAuVSgiU3ltYm9sIiksZ3A9T2JqZWN0LnByb3RvdHlwZSxtcD1DYi5TeW1ib2wsU3A9bXAmJm1wLnByb3RvdHlwZSxBcD1DYi5UeXBlRXJyb3IsanA9Q2IuUHIsT3A9bnAuZixrcD1lcC5mLEVwPXJwLmYsVHA9b3AuZix4cD1HYihbXS5wdXNoKSxVcD1mcCgic3ltYm9scyIpLE1wPWZwKCJvcC1zeW1ib2xzIiksSXA9ZnAoIndrcyIpLExwPSFqcHx8IWpwLnByb3RvdHlwZXx8IWpwLnByb3RvdHlwZS5fcixQcD1EYiYmWWIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPVhiKGtwKHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtwKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9mdW5jdGlvbihyLHQsbil7dmFyIGU9T3AoZ3AsdCk7ZSYmZGVsZXRlIGdwW3RdLGtwKHIsdCxuKSxlJiZyIT09Z3AmJmtwKGdwLHQsZSl9OmtwLF9wPWZ1bmN0aW9uKHIsdCl7dmFyIG49VXBbcl09WGIoU3ApO3JldHVybiBicChuLHt0eXBlOiJTeW1ib2wiLHRhZzpyLGRlc2NyaXB0aW9uOnR9KSxEYnx8KG4uZGVzY3JpcHRpb249dCksbn0sUnA9ZnVuY3Rpb24ocix0LG4pe3I9PT1ncCYmUnAoTXAsdCxuKSwkYihyKTt2YXIgZT1LYih0KTtyZXR1cm4gJGIobiksemIoVXAsZSk/KG4udD8oemIocix3cCkmJnJbd3BdW2VdJiYoclt3cF1bZV09ITEpLG49WGIobix7dDpKYigwLCExKX0pKTooemIocix3cCl8fGtwKHIsd3AsSmIoMSx7fSkpLHJbd3BdW2VdPSEwKSxQcChyLGUsbikpOmtwKHIsZSxuKX0sRnA9ZnVuY3Rpb24ocix0KXskYihyKTt2YXIgbj1IYih0KSxlPVFiKG4pLmNvbmNhdChHcChuKSk7cmV0dXJuIHlwKGUsKGZ1bmN0aW9uKHQpe0RiJiYhQmIoTnAsbix0KXx8UnAocix0LG5bdF0pfSkpLHJ9LE5wPWZ1bmN0aW9uKHIpe3ZhciB0PUtiKHIpLG49QmIoVHAsdGhpcyx0KTtyZXR1cm4hKHRoaXM9PT1ncCYmemIoVXAsdCkmJiF6YihNcCx0KSkmJighKG58fCF6Yih0aGlzLHQpfHwhemIoVXAsdCl8fHpiKHRoaXMsd3ApJiZ0aGlzW3dwXVt0XSl8fG4pfSxDcD1mdW5jdGlvbihyLHQpe3ZhciBuPUhiKHIpLGU9S2IodCk7aWYobiE9PWdwfHwhemIoVXAsZSl8fHpiKE1wLGUpKXt2YXIgaT1PcChuLGUpO3JldHVybiFpfHwhemIoVXAsZSl8fHpiKG4sd3ApJiZuW3dwXVtlXXx8KGkudD0hMCksaX19LEJwPWZ1bmN0aW9uKHIpe3ZhciB0PUVwKEhiKHIpKSxuPVtdO3JldHVybiB5cCh0LChmdW5jdGlvbihyKXt6YihVcCxyKXx8emIoYXAscil8fHhwKG4scil9KSksbn0sR3A9ZnVuY3Rpb24ocil7dmFyIHQ9cj09PWdwLG49RXAodD9NcDpIYihyKSksZT1bXTtyZXR1cm4geXAobiwoZnVuY3Rpb24ocil7IXpiKFVwLHIpfHx0JiYhemIoZ3Ascil8fHhwKGUsVXBbcl0pfSkpLGV9O1ZifHwodXAoU3A9KG1wPWZ1bmN0aW9uKCl7aWYoV2IoU3AsdGhpcykpdGhyb3cgQXAoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciByPWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9xYihhcmd1bWVudHNbMF0pOnZvaWQgMCx0PWNwKHIpLG49ZnVuY3Rpb24ocil7dGhpcz09PWdwJiZCYihuLE1wLHIpLHpiKHRoaXMsd3ApJiZ6Yih0aGlzW3dwXSx0KSYmKHRoaXNbd3BdW3RdPSExKSxQcCh0aGlzLHQsSmIoMSxyKSl9O3JldHVybiBEYiYmTHAmJlBwKGdwLHQse2k6ITAsc2V0Om59KSxfcCh0LHIpfSkucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBwKHRoaXMpLnRhZ30pKSx1cChtcCwid2l0aG91dFNldHRlciIsKGZ1bmN0aW9uKHIpe3JldHVybiBfcChjcChyKSxyKX0pKSxvcC5mPU5wLGVwLmY9UnAsaXAuZj1GcCxucC5mPUNwLFpiLmY9cnAuZj1CcCx0cC5mPUdwLHZwLmY9ZnVuY3Rpb24ocil7cmV0dXJuIF9wKHNwKHIpLHIpfSxEYiYmKGtwKFNwLCJkZXNjcmlwdGlvbiIse2k6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHBwKHRoaXMpLmRlc2NyaXB0aW9ufX0pLHVwKGdwLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsTnAse1A6ITB9KSkpLE5iKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxHOiFWYixoOiFWYn0se1N5bWJvbDptcH0pLHlwKFFiKElwKSwoZnVuY3Rpb24ocil7aHAocil9KSksTmIoe3RhcmdldDoiU3ltYm9sIixDOiEwLEc6IVZifSx7UnI6ZnVuY3Rpb24oKXtMcD0hMH0sRnI6ZnVuY3Rpb24oKXtMcD0hMX19KSxOYih7dGFyZ2V0OiJPYmplY3QiLEM6ITAsRzohVmIsaDohRGJ9LHtjcmVhdGU6ZnVuY3Rpb24ocix0KXtyZXR1cm4gdm9pZCAwPT09dD9YYihyKTpGcChYYihyKSx0KX0sZGVmaW5lUHJvcGVydHk6UnAsZGVmaW5lUHJvcGVydGllczpGcCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6Q3B9KSxOYih7dGFyZ2V0OiJPYmplY3QiLEM6ITAsRzohVmJ9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOkJwfSksZnVuY3Rpb24oKXt2YXIgcj1fYigiU3ltYm9sIiksdD1yJiZyLnByb3RvdHlwZSxuPXQmJnQudmFsdWVPZixlPVJiKCJ0b1ByaW1pdGl2ZSIpO3QmJiF0W2VdJiZGYih0LGUsKGZ1bmN0aW9uKCl7cmV0dXJuIFBiKG4sdGhpcyl9KSx7TDoxfSl9KCksbHAobXAsIlN5bWJvbCIpLGFwW3dwXT0hMDt2YXIgRHA9WiYmISFTeW1ib2wuZm9yJiYhIVN5bWJvbC5rZXlGb3IsVnA9QmUsWXA9Vix6cD1NcixXcD1RZSwkcD1wci5leHBvcnRzLEhwPURwLEtwPSRwKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IikscXA9JHAoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtWcCh7dGFyZ2V0OiJTeW1ib2wiLEM6ITAsRzohSHB9LHtmb3I6ZnVuY3Rpb24ocil7dmFyIHQ9V3Aocik7aWYoenAoS3AsdCkpcmV0dXJuIEtwW3RdO3ZhciBuPVlwKCJTeW1ib2wiKSh0KTtyZXR1cm4gS3BbdF09bixxcFtuXT10LG59fSk7dmFyIEpwPUJlLFhwPU1yLFFwPW9yLFpwPWZyLHJnPURwLHRnPSgwLHByLmV4cG9ydHMpKCJzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Iik7SnAoe3RhcmdldDoiU3ltYm9sIixDOiEwLEc6IXJnfSx7a2V5Rm9yOmZ1bmN0aW9uKHIpe2lmKCFRcChyKSl0aHJvdyBUeXBlRXJyb3IoWnAocikrIiBpcyBub3QgYSBzeW1ib2wiKTtpZihYcCh0ZyxyKSlyZXR1cm4gdGdbcl19fSk7dmFyIG5nPUJlLGVnPVYsaWc9bWgsb2c9YSx1Zz1TLGZnPWksYWc9emMsY2c9RixzZz1DLHZnPW9yLGhnPXZsLGxnPVosZGc9ZWcoIkpTT04iLCJzdHJpbmdpZnkiKSx5Zz11ZygvLi8uZXhlYyksd2c9dWcoIiIuY2hhckF0KSxiZz11ZygiIi5jaGFyQ29kZUF0KSxwZz11ZygiIi5yZXBsYWNlKSxnZz11ZygxLi50b1N0cmluZyksbWc9L1tcdUQ4MDAtXHVERkZGXS9nLFNnPS9eW1x1RDgwMC1cdURCRkZdJC8sQWc9L15bXHVEQzAwLVx1REZGRl0kLyxqZz0hbGd8fGZnKChmdW5jdGlvbigpe3ZhciByPWVnKCJTeW1ib2wiKSgpO3JldHVybiJbbnVsbF0iIT1kZyhbcl0pfHwie30iIT1kZyh7YTpyfSl8fCJ7fSIhPWRnKE9iamVjdChyKSl9KSksT2c9ZmcoKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09ZGcoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PWRnKCJcdWRlYWQiKX0pKSxrZz1mdW5jdGlvbihyLHQpe3ZhciBuPWhnKGFyZ3VtZW50cyksZT10O2lmKChzZyh0KXx8dm9pZCAwIT09cikmJiF2ZyhyKSlyZXR1cm4gYWcodCl8fCh0PWZ1bmN0aW9uKHIsdCl7aWYoY2coZSkmJih0PW9nKGUsdGhpcyxyLHQpKSwhdmcodCkpcmV0dXJuIHR9KSxuWzFdPXQsaWcoZGcsbnVsbCxuKX0sRWc9ZnVuY3Rpb24ocix0LG4pe3ZhciBlPXdnKG4sdC0xKSxpPXdnKG4sdCsxKTtyZXR1cm4geWcoU2cscikmJiF5ZyhBZyxpKXx8eWcoQWcscikmJiF5ZyhTZyxlKT8iXFx1IitnZyhiZyhyLDApLDE2KTpyfTtkZyYmbmcoe3RhcmdldDoiSlNPTiIsQzohMCxMOjMsRzpqZ3x8T2d9LHtzdHJpbmdpZnk6ZnVuY3Rpb24ocix0LG4pe3ZhciBlPWhnKGFyZ3VtZW50cyksaT1pZyhqZz9rZzpkZyxudWxsLGUpO3JldHVybiBPZyYmInN0cmluZyI9PXR5cGVvZiBpP3BnKGksbWcsRWcpOml9fSk7dmFyIFRnPXZlLHhnPVRyO0JlKHt0YXJnZXQ6Ik9iamVjdCIsQzohMCxHOiFafHxpKChmdW5jdGlvbigpe1RnLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24ocil7dmFyIHQ9VGcuZjtyZXR1cm4gdD90KHhnKHIpKTpbXX19KTt2YXIgVWc9QmUsTWc9byxJZz1uLExnPVMsUGc9TXIsX2c9RixSZz1ZLEZnPVFlLE5nPXB0LmYsQ2c9QWUsQmc9SWcuU3ltYm9sLEdnPUJnJiZCZy5wcm90b3R5cGU7aWYoTWcmJl9nKEJnKSYmKCEoImRlc2NyaXB0aW9uImluIEdnKXx8dm9pZCAwIT09QmcoKS5kZXNjcmlwdGlvbikpe3ZhciBEZz17fSxWZz1mdW5jdGlvbigpe3ZhciByPTE+YXJndW1lbnRzLmxlbmd0aHx8dm9pZCAwPT09YXJndW1lbnRzWzBdP3ZvaWQgMDpGZyhhcmd1bWVudHNbMF0pLHQ9UmcoR2csdGhpcyk/bmV3IEJnKHIpOnZvaWQgMD09PXI/QmcoKTpCZyhyKTtyZXR1cm4iIj09PXImJihEZ1t0XT0hMCksdH07Q2coVmcsQmcpLFZnLnByb3RvdHlwZT1HZyxHZy5jb25zdHJ1Y3Rvcj1WZzt2YXIgWWc9QmcoInRlc3QiKSsiIj09IlN5bWJvbCh0ZXN0KSIsemc9TGcoR2cudG9TdHJpbmcpLFdnPUxnKEdnLnZhbHVlT2YpLCRnPS9eU3ltYm9sXCgoLiopXClbXildKyQvLEhnPUxnKCIiLnJlcGxhY2UpLEtnPUxnKCIiLnNsaWNlKTtOZyhHZywiZGVzY3JpcHRpb24iLHtpOiEwLGdldDpmdW5jdGlvbigpe3ZhciByPVdnKHRoaXMpLHQ9emcocik7aWYoUGcoRGcscikpcmV0dXJuIiI7dmFyIG49WWc/S2codCw3LC0xKTpIZyh0LCRnLCIkMSIpO3JldHVybiIiPT09bj92b2lkIDA6bn19KSxVZyh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLEc6ITB9LHtTeW1ib2w6Vmd9KX1MYigiaXRlcmF0b3IiKTt2YXIgcWc9UyxKZz1EbixYZz1RZSxRZz1MLFpnPXFnKCIiLmNoYXJBdCkscm09cWcoIiIuY2hhckNvZGVBdCksdG09cWcoIiIuc2xpY2UpLG5tPWZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBlLGksbz1YZyhRZyh0KSksdT1KZyhuKSxmPW8ubGVuZ3RoO3JldHVybiAwPnV8fHU+PWY/cj8iIjp2b2lkIDA6NTUyOTY+KGU9cm0obyx1KSl8fGU+NTYzMTl8fHUrMT09PWZ8fDU2MzIwPihpPXJtKG8sdSsxKSl8fGk+NTczNDM/cj9aZyhvLHUpOmU6cj90bShvLHUsdSsyKTppLTU2MzIwKyhlLTU1Mjk2PDwxMCkrNjU1MzZ9fSxlbT0obm0oITEpLG5tKCEwKSksaW09UWUsb209bW4sdW09em8sZm09b20uc2V0LGFtPW9tLlUoIlN0cmluZyBJdGVyYXRvciIpO3VtKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24ocil7Zm0odGhpcyx7dHlwZToiU3RyaW5nIEl0ZXJhdG9yIixzdHJpbmc6aW0ociksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHIsdD1hbSh0aGlzKSxuPXQuc3RyaW5nLGU9dC5pbmRleDtyZXR1cm4gZTxuLmxlbmd0aD8ocj1lbShuLGUpLHQuaW5kZXgrPXIubGVuZ3RoLHt2YWx1ZTpyLGRvbmU6ITF9KTp7dmFsdWU6dm9pZCAwLGRvbmU6ITB9fSkpO3ZhciBjbT17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH0sc209dXQoInNwYW4iKS5jbGFzc0xpc3Qsdm09c20mJnNtLmNvbnN0cnVjdG9yJiZzbS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsaG09dm09PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDp2bSxsbT1uLGRtPWNtLHltPWhtLHdtPXJ1LGJtPV90LHBtPSRyLGdtPXBtKCJpdGVyYXRvciIpLG1tPXBtKCJ0b1N0cmluZ1RhZyIpLFNtPXdtLnZhbHVlcyxBbT1mdW5jdGlvbihyLHQpe2lmKHIpe2lmKHJbZ21dIT09U20pdHJ5e2JtKHIsZ20sU20pfWNhdGNoKHQpe3JbZ21dPVNtfWlmKHJbbW1dfHxibShyLG1tLHQpLGRtW3RdKWZvcih2YXIgbiBpbiB3bSlpZihyW25dIT09d21bbl0pdHJ5e2JtKHIsbix3bVtuXSl9Y2F0Y2godCl7cltuXT13bVtuXX19fTtmb3IodmFyIGptIGluIGRtKUFtKGxtW2ptXSYmbG1bam1dLnByb3RvdHlwZSxqbSk7QW0oeW0sIkRPTVRva2VuTGlzdCIpLExiKCJhc3luY0l0ZXJhdG9yIik7dmFyIE9tPVYsa209d287TGIoInRvU3RyaW5nVGFnIiksa20oT20oIlN5bWJvbCIpLCJTeW1ib2wiKSx3byhuLkpTT04sIkpTT04iLCEwKSx3byhNYXRoLCJNYXRoIiwhMCk7dmFyIEVtPVRyLFRtPWVvLHhtPXFpO0JlKHt0YXJnZXQ6Ik9iamVjdCIsQzohMCxHOmkoKGZ1bmN0aW9uKCl7VG0oMSl9KSksaDoheG19LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbihyKXtyZXR1cm4gVG0oRW0ocikpfX0pO3ZhciBVbT1pcy5mb3JFYWNoLE1tPW4sSW09Y20sTG09aG0sUG09QWgoImZvckVhY2giKT9bXS5mb3JFYWNoOmZ1bmN0aW9uKHIpe3JldHVybiBVbSh0aGlzLHIsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxfbT1fdCxSbT1mdW5jdGlvbihyKXtpZihyJiZyLmZvckVhY2ghPT1QbSl0cnl7X20ociwiZm9yRWFjaCIsUG0pfWNhdGNoKHQpe3IuZm9yRWFjaD1QbX19O2Zvcih2YXIgRm0gaW4gSW0pSW1bRm1dJiZSbShNbVtGbV0mJk1tW0ZtXS5wcm90b3R5cGUpO1JtKExtKTt2YXIgTm09byxDbT1HdC5TLEJtPVMsR209cHQuZixEbT1GdW5jdGlvbi5wcm90b3R5cGUsVm09Qm0oRG0udG9TdHJpbmcpLFltPS9mdW5jdGlvblxiKD86XHN8XC9cKltcU1xzXSo/XCpcL3xcL1wvW15cblxyXSpbXG5ccl0rKSooW15ccygvXSopLyx6bT1CbShZbS5leGVjKTtObSYmIUNtJiZHbShEbSwibmFtZSIse2k6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB6bShZbSxWbSh0aGlzKSlbMV19Y2F0Y2gocil7cmV0dXJuIiJ9fX0pO3ZhciBXbT1CZSwkbT16YyxIbT1TKFtdLnJldmVyc2UpLEttPVsxLDJdO1dtKHt0YXJnZXQ6IkFycmF5IixWOiEwLEc6S20rIiI9PUttLnJldmVyc2UoKSsiIn0se3JldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gJG0odGhpcykmJih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aCksSG0odGhpcyl9fSk7dmFyIHFtPWksSm09WCxYbT0kcigic3BlY2llcyIpLFFtPWZ1bmN0aW9uKHIpe3JldHVybiBKbT49NTF8fCFxbSgoZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4odC5jb25zdHJ1Y3Rvcj17fSlbWG1dPWZ1bmN0aW9uKCl7cmV0dXJue05yOjF9fSwxIT09dFtyXShCb29sZWFuKS5Ocn0pKX0sWm09QmUsclM9emMsdFM9RGYsblM9QyxlUz1XbixpUz1KbixvUz1SLHVTPWp1LGZTPSRyLGFTPXZsLGNTPVFtKCJzbGljZSIpLHNTPWZTKCJzcGVjaWVzIiksdlM9QXJyYXksaFM9TWF0aC5tYXg7Wm0oe3RhcmdldDoiQXJyYXkiLFY6ITAsRzohY1N9LHtzbGljZTpmdW5jdGlvbihyLHQpe3ZhciBuLGUsaSxvPW9TKHRoaXMpLHU9aVMobyksZj1lUyhyLHUpLGE9ZVModm9pZCAwPT09dD91OnQsdSk7aWYoclMobykmJihuPW8uY29uc3RydWN0b3IsKHRTKG4pJiYobj09PXZTfHxyUyhuLnByb3RvdHlwZSkpfHxuUyhuKSYmbnVsbD09PShuPW5bc1NdKSkmJihuPXZvaWQgMCksbj09PXZTfHx2b2lkIDA9PT1uKSlyZXR1cm4gYVMobyxmLGEpO2ZvcihlPW5ldyh2b2lkIDA9PT1uP3ZTOm4pKGhTKGEtZiwwKSksaT0wO2E+ZjtmKyssaSsrKWYgaW4gbyYmdVMoZSxpLG9bZl0pO3JldHVybiBlLmxlbmd0aD1pLGV9fSk7dmFyIGxTPW8sZFM9YSx5Uz1pLHdTPXBpLGJTPXZlLHBTPWMsZ1M9VHIsbVM9TSxTUz1PYmplY3QuYXNzaWduLEFTPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqUz1TKFtdLmNvbmNhdCksT1M9IVNTfHx5UygoZnVuY3Rpb24oKXtpZihsUyYmMSE9PVNTKHtiOjF9LFNTKEFTKHt9LCJhIix7dDohMCxnZXQ6ZnVuY3Rpb24oKXtBUyh0aGlzLCJiIix7dmFsdWU6Myx0OiExfSl9fSkse2I6Mn0pKS5iKXJldHVybiEwO3ZhciByPXt9LHQ9e30sbj1TeW1ib2woKSxlPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIHJbbl09NyxlLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbihyKXt0W3JdPXJ9KSksNyE9U1Moe30scilbbl18fHdTKFNTKHt9LHQpKS5qb2luKCIiKSE9ZX0pKT9mdW5jdGlvbihyLHQpe2Zvcih2YXIgbj1nUyhyKSxlPWFyZ3VtZW50cy5sZW5ndGgsaT0xLG89YlMuZix1PXBTLmY7ZT5pOylmb3IodmFyIGYsYT1tUyhhcmd1bWVudHNbaSsrXSksYz1vP2pTKHdTKGEpLG8oYSkpOndTKGEpLHM9Yy5sZW5ndGgsdj0wO3M+djspZj1jW3YrK10sbFMmJiFkUyh1LGEsZil8fChuW2ZdPWFbZl0pO3JldHVybiBufTpTUztCZSh7dGFyZ2V0OiJPYmplY3QiLEM6ITAsTDoyLEc6T2JqZWN0LmFzc2lnbiE9PU9TfSx7YXNzaWduOk9TfSk7Zm9yKHZhciBrUz1bXSxFUz0wOzI1Nj5FUztFUysrKXtmb3IodmFyIFRTPUVTLHhTPTA7OD54Uzt4UysrKTEmVFM/VFM9VFM+Pj4xXjM5ODgyOTIzODQ6VFM+Pj49MTtrU1tFU109VFN9dmFyIFVTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0KXshZnVuY3Rpb24ocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxyKSx0aGlzLkNyPXR8fC0xfXJldHVybiBmdW5jdGlvbihyLHQpe3QmJmZ1bmN0aW9uKHIsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBlPXRbbl07ZS50PWUudHx8ITEsZS5pPSEwLCJ2YWx1ZSJpbiBlJiYoZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsZS5rZXksZSl9fShyLnByb3RvdHlwZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0ocixbe2tleToiYXBwZW5kIix2YWx1ZTpmdW5jdGlvbihyKXtmb3IodmFyIHQ9MHx0aGlzLkNyLG49MCxlPTB8ci5sZW5ndGg7ZT5uO24rKyl0PXQ+Pj44XmtTWzI1NSYodF5yW25dKV07dGhpcy5Dcj10fX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybn50aGlzLkNyfX1dKSxyfSgpLE1TPWp0LElTPUx3LExTPWJjLFBTPWEsX1M9VHIsUlM9ZnVuY3Rpb24ocix0LG4sZSl7dHJ5e3JldHVybiBlP3QoTVMobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXtJUyhyLCJ0aHJvdyIsdCl9fSxGUz1QYyxOUz1EZixDUz1KbixCUz1qdSxHUz1VYyxEUz1BYyxWUz1BcnJheTtmdW5jdGlvbiBZUyhyKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFRleHRFbmNvZGVyKXtyPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChyKSk7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT1yLmNoYXJDb2RlQXQobik7cmV0dXJuIHR9cmV0dXJuKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKHIpfUJlKHt0YXJnZXQ6IkFycmF5IixDOiEwLEc6IXBhKChmdW5jdGlvbihyKXtBcnJheS5mcm9tKHIpfSkpfSx7ZnJvbTpmdW5jdGlvbihyKXt2YXIgdD1fUyhyKSxuPU5TKHRoaXMpLGU9YXJndW1lbnRzLmxlbmd0aCxpPWU+MT9hcmd1bWVudHNbMV06dm9pZCAwLG89dm9pZCAwIT09aTtvJiYoaT1MUyhpLGU+Mj9hcmd1bWVudHNbMl06dm9pZCAwKSk7dmFyIHUsZixhLGMscyx2LGg9RFModCksbD0wO2lmKCFofHx0aGlzPT09VlMmJkZTKGgpKWZvcih1PUNTKHQpLGY9bj9uZXcgdGhpcyh1KTpWUyh1KTt1Pmw7bCsrKXY9bz9pKHRbbF0sbCk6dFtsXSxCUyhmLGwsdik7ZWxzZSBmb3Iocz0oYz1HUyh0LGgpKS5uZXh0LGY9bj9uZXcgdGhpczpbXTshKGE9UFMocyxjKSkuZG9uZTtsKyspdj1vP1JTKGMsaSxbYS52YWx1ZSxsXSwhMCk6YS52YWx1ZSxCUyhmLGwsdik7cmV0dXJuIGYubGVuZ3RoPWwsZn19KTt2YXIgelM9VHlwZUVycm9yLFdTPWZ1bmN0aW9uKHIpe2lmKHI+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyB6UygiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIHJ9LCRTPUJlLEhTPWksS1M9emMscVM9QyxKUz1UcixYUz1KbixRUz1XUyxaUz1qdSxyQT1KYyx0QT1RbSxuQT1YLGVBPSRyKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxpQT1uQT49NTF8fCFIUygoZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gcltlQV09ITEsci5jb25jYXQoKVswXSE9PXJ9KSksb0E9dEEoImNvbmNhdCIpLHVBPWZ1bmN0aW9uKHIpe2lmKCFxUyhyKSlyZXR1cm4hMTt2YXIgdD1yW2VBXTtyZXR1cm4gdm9pZCAwIT09dD8hIXQ6S1Mocil9OyRTKHt0YXJnZXQ6IkFycmF5IixWOiEwLEw6MSxHOiFpQXx8IW9BfSx7Y29uY2F0OmZ1bmN0aW9uKHIpe3ZhciB0LG4sZSxpLG8sdT1KUyh0aGlzKSxmPXJBKHUsMCksYT0wO2Zvcih0PS0xLGU9YXJndW1lbnRzLmxlbmd0aDtlPnQ7dCsrKWlmKHVBKG89LTE9PT10P3U6YXJndW1lbnRzW3RdKSlmb3IoaT1YUyhvKSxRUyhhK2kpLG49MDtpPm47bisrLGErKyluIGluIG8mJlpTKGYsYSxvW25dKTtlbHNlIFFTKGErMSksWlMoZixhKyssbyk7cmV0dXJuIGYubGVuZ3RoPWEsZn19KSwoMCxzYS5leHBvcnRzKSgiVWludDMyIiwoZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gcih0aGlzLHQsbixlKX19KSk7dmFyIGZBPUJlLGFBPVRyLGNBPVduLHNBPURuLHZBPUpuLGhBPVdTLGxBPUpjLGRBPWp1LHlBPXZ2LHdBPVFtKCJzcGxpY2UiKSxiQT1NYXRoLm1heCxwQT1NYXRoLm1pbjtmQSh7dGFyZ2V0OiJBcnJheSIsVjohMCxHOiF3QX0se3NwbGljZTpmdW5jdGlvbihyLHQpe3ZhciBuLGUsaSxvLHUsZixhPWFBKHRoaXMpLGM9dkEoYSkscz1jQShyLGMpLHY9YXJndW1lbnRzLmxlbmd0aDtmb3IoMD09PXY/bj1lPTA6MT09PXY/KG49MCxlPWMtcyk6KG49di0yLGU9cEEoYkEoc0EodCksMCksYy1zKSksaEEoYytuLWUpLGk9bEEoYSxlKSxvPTA7ZT5vO28rKykodT1zK28paW4gYSYmZEEoaSxvLGFbdV0pO2lmKGkubGVuZ3RoPWUsZT5uKXtmb3Iobz1zO2MtZT5vO28rKylmPW8rbiwodT1vK2UpaW4gYT9hW2ZdPWFbdV06eUEoYSxmKTtmb3Iobz1jO28+Yy1lK247by0tKXlBKGEsby0xKX1lbHNlIGlmKG4+ZSlmb3Iobz1jLWU7bz5zO28tLSlmPW8rbi0xLCh1PW8rZS0xKWluIGE/YVtmXT1hW3VdOnlBKGEsZik7Zm9yKG89MDtuPm87bysrKWFbbytzXT1hcmd1bWVudHNbbysyXTtyZXR1cm4gYS5sZW5ndGg9Yy1lK24saX19KTt2YXIgZ0E9Y3MsbUE9VGYuQXJyYXlCdWZmZXI7ZnVuY3Rpb24gU0Eocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBBQShyLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgZT10W25dO2UudD1lLnR8fCExLGUuaT0hMCwidmFsdWUiaW4gZSYmKGUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUua2V5LGUpfX1mdW5jdGlvbiBqQShyLHQsbil7cmV0dXJuIHQmJkFBKHIucHJvdG90eXBlLHQpLG4mJkFBKHIsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscn1CZSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLEc6bi5BcnJheUJ1ZmZlciE9PW1BfSx7QXJyYXlCdWZmZXI6bUF9KSxnQSgiQXJyYXlCdWZmZXIiKTt2YXIgT0E9e2NvbmNhdDpmdW5jdGlvbihyLHQpe2lmKDA9PT1yLmxlbmd0aHx8MD09PXQubGVuZ3RoKXJldHVybiByLmNvbmNhdCh0KTt2YXIgbj1yW3IubGVuZ3RoLTFdLGU9T0EuQnIobik7cmV0dXJuIDMyPT09ZT9yLmNvbmNhdCh0KTpPQS5Hcih0LGUsMHxuLHIuc2xpY2UoMCxyLmxlbmd0aC0xKSl9LERyOmZ1bmN0aW9uKHIpe3ZhciB0PXIubGVuZ3RoO2lmKDA9PT10KXJldHVybiAwO3ZhciBuPXJbdC0xXTtyZXR1cm4gMzIqKHQtMSkrT0EuQnIobil9LFZyOmZ1bmN0aW9uKHIsdCl7aWYoMzIqci5sZW5ndGg8dClyZXR1cm4gcjt2YXIgbj0ocj1yLnNsaWNlKDAsTWF0aC5jZWlsKHQvMzIpKSkubGVuZ3RoO3JldHVybiB0Jj0zMSxuPjAmJnQmJihyW24tMV09T0EuWXIodCxyW24tMV0mMjE0NzQ4MzY0OD4+dC0xLDEpKSxyfSxZcjpmdW5jdGlvbihyLHQsbil7cmV0dXJuIDMyPT09cj90OihuPzB8dDp0PDwzMi1yKSsxMDk5NTExNjI3Nzc2KnJ9LEJyOmZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHIvMTA5OTUxMTYyNzc3Nil8fDMyfSxHcjpmdW5jdGlvbihyLHQsbixlKXtmb3Iodm9pZCAwPT09ZSYmKGU9W10pO3Q+PTMyO3QtPTMyKWUucHVzaChuKSxuPTA7aWYoMD09PXQpcmV0dXJuIGUuY29uY2F0KHIpO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKWUucHVzaChufHJbaV0+Pj50KSxuPXJbaV08PDMyLXQ7dmFyIG89ci5sZW5ndGg/cltyLmxlbmd0aC0xXTowLHU9T0EuQnIobyk7cmV0dXJuIGUucHVzaChPQS5Zcih0K3UmMzEsdCt1PjMyP246ZS5wb3AoKSwxKSksZX19LGtBPXtLOnt6cjpmdW5jdGlvbihyKXtmb3IodmFyIHQsbj1PQS5EcihyKS84LGU9bmV3IFVpbnQ4QXJyYXkobiksaT0wO24+aTtpKyspMD09KDMmaSkmJih0PXJbaS80XSksZVtpXT10Pj4+MjQsdDw8PTg7cmV0dXJuIGV9LFdyOmZ1bmN0aW9uKHIpe3ZhciB0LG49W10sZT0wO2Zvcih0PTA7dDxyLmxlbmd0aDt0KyspZT1lPDw4fHJbdF0sMz09KDMmdCkmJihuLnB1c2goZSksZT0wKTtyZXR1cm4gMyZ0JiZuLnB1c2goT0EuWXIoOCooMyZ0KSxlKSksbn19fSxFQT17JHI6ZnVuY3Rpb24ocil7cj8odGhpcy5Icj1yLkhyLnNsaWNlKDApLHRoaXMuS3I9ci5Lci5zbGljZSgwKSx0aGlzLnFyPXIucXIpOnRoaXMucmVzZXQoKX19O0VBLiRyLnByb3RvdHlwZT17YmxvY2tTaXplOjUxMixyZXNldDpmdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIHIuSHI9dGhpcy5Kci5zbGljZSgwKSxyLktyPVtdLHIucXI9MCxyfSx1cGRhdGU6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpczsic3RyaW5nIj09dHlwZW9mIHImJihyPWtBLlhyLldyKHIpKTt2YXIgbj10LktyPU9BLmNvbmNhdCh0LktyLHIpLGU9dC5xcixpPXQucXI9ZStPQS5EcihyKTtpZihpPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgRXJyb3IoIkNhbm5vdCBoYXNoIG1vcmUgdGhhbiAyXjUzIC0gMSBiaXRzIik7Zm9yKHZhciBvPW5ldyBVaW50MzJBcnJheShuKSx1PTAsZj10LmJsb2NrU2l6ZStlLSh0LmJsb2NrU2l6ZStlJnQuYmxvY2tTaXplLTEpO2k+PWY7Zis9dC5ibG9ja1NpemUpdC5RcihvLnN1YmFycmF5KDE2KnUsMTYqKHUrMSkpKSx1Kz0xO3JldHVybiBuLnNwbGljZSgwLDE2KnUpLHR9LFpyOmZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsdD1yLktyLG49ci5IcixlPSh0PU9BLmNvbmNhdCh0LFtPQS5ZcigxLDEpXSkpLmxlbmd0aCsyOzE1JmU7ZSsrKXQucHVzaCgwKTtmb3IodC5wdXNoKE1hdGguZmxvb3Ioci5xci80Mjk0OTY3Mjk2KSksdC5wdXNoKDB8ci5xcik7dC5sZW5ndGg7KXIuUXIodC5zcGxpY2UoMCwxNikpO3JldHVybiByLnJlc2V0KCksbn0sSnI6WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSxydDpbMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml0sdHQ6ZnVuY3Rpb24ocix0LG4sZSl7cmV0dXJuIHI+MTk/cj4zOT9yPjU5P3I+Nzk/dm9pZCAwOnRebl5lOnQmbnx0JmV8biZlOnRebl5lOnQmbnx+dCZlfSxudDpmdW5jdGlvbihyLHQpe3JldHVybiB0PDxyfHQ+Pj4zMi1yfSxRcjpmdW5jdGlvbihyKXtmb3IodmFyIHQ9dGhpcyxuPXQuSHIsZT1BcnJheSg4MCksaT0wOzE2Pmk7aSsrKWVbaV09cltpXTtmb3IodmFyIG89blswXSx1PW5bMV0sZj1uWzJdLGE9blszXSxjPW5bNF0scz0wOzc5Pj1zO3MrKyl7MTY+c3x8KGVbc109dC5udCgxLGVbcy0zXV5lW3MtOF1eZVtzLTE0XV5lW3MtMTZdKSk7dmFyIHY9dC5udCg1LG8pK3QudHQocyx1LGYsYSkrYytlW3NdK3QucnRbTWF0aC5mbG9vcihzLzIwKV18MDtjPWEsYT1mLGY9dC5udCgzMCx1KSx1PW8sbz12fW5bMF09blswXStvfDAsblsxXT1uWzFdK3V8MCxuWzJdPW5bMl0rZnwwLG5bM109blszXSthfDAsbls0XT1uWzRdK2N8MH19O3ZhciBUQT17fTtUQS5ldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCl7U0EodGhpcyxyKTt2YXIgbj10aGlzO24uaXQ9W1tbXSxbXSxbXSxbXSxbXV0sW1tdLFtdLFtdLFtdLFtdXV0sbi5pdFswXVswXVswXXx8bi5vdCgpO3ZhciBlLGksbyx1PW4uaXRbMF1bNF0sZj1uLml0WzFdLGE9dC5sZW5ndGgsYz0xO2lmKDQhPT1hJiY2IT09YSYmOCE9PWEpdGhyb3cgRXJyb3IoImludmFsaWQgYWVzIGtleSBzaXplIik7Zm9yKG4ucnQ9W2k9dC5zbGljZSgwKSxvPVtdXSxlPWE7NCphKzI4PmU7ZSsrKXt2YXIgcz1pW2UtMV07KGUlYT09MHx8OD09PWEmJmUlYT09NCkmJihzPXVbcz4+PjI0XTw8MjRedVtzPj4xNiYyNTVdPDwxNl51W3M+PjgmMjU1XTw8OF51WzI1NSZzXSxlJWE9PTAmJihzPXM8PDhecz4+PjI0XmM8PDI0LGM9Yzw8MV4yODMqKGM+PjcpKSksaVtlXT1pW2UtYV1ec31mb3IodmFyIHY9MDtlO3YrKyxlLS0pe3ZhciBoPWlbMyZ2P2U6ZS00XTtvW3ZdPTQ+PWV8fDQ+dj9oOmZbMF1bdVtoPj4+MjRdXV5mWzFdW3VbaD4+MTYmMjU1XV1eZlsyXVt1W2g+PjgmMjU1XV1eZlszXVt1WzI1NSZoXV19fXJldHVybiBqQShyLFt7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy51dChyLDApfX0se2tleToiZGVjcnlwdCIsdmFsdWU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMudXQociwxKX19LHtrZXk6Il9wcmVjb21wdXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgcix0LG4sZT10aGlzLml0WzBdLGk9dGhpcy5pdFsxXSxvPWVbNF0sdT1pWzRdLGY9W10sYT1bXSxjPTA7MjU2PmM7YysrKWFbKGZbY109Yzw8MV4yODMqKGM+PjcpKV5jXT1jO2Zvcih2YXIgcz1yPTA7IW9bc107c149dHx8MSxyPWFbcl18fDEpe3ZhciB2PXJecjw8MV5yPDwyXnI8PDNecjw8NDt2PXY+PjheMjU1JnZeOTksb1tzXT12LHVbdl09cztmb3IodmFyIGg9MTY4NDMwMDkqZltuPWZbdD1mW3NdXV1eNjU1Mzcqbl4yNTcqdF4xNjg0MzAwOCpzLGw9MjU3KmZbdl1eMTY4NDMwMDgqdixkPTA7ND5kO2QrKyllW2RdW3NdPWw9bDw8MjRebD4+PjgsaVtkXVt2XT1oPWg8PDI0Xmg+Pj44fWZvcih2YXIgeT0wOzU+eTt5KyspZVt5XT1lW3ldLnNsaWNlKDApLGlbeV09aVt5XS5zbGljZSgwKX19LHtrZXk6Il9jcnlwdCIsdmFsdWU6ZnVuY3Rpb24ocix0KXtpZig0IT09ci5sZW5ndGgpdGhyb3cgRXJyb3IoImludmFsaWQgYWVzIGJsb2NrIHNpemUiKTtmb3IodmFyIG4sZSxpLG89dGhpcy5ydFt0XSx1PW8ubGVuZ3RoLzQtMixmPVswLDAsMCwwXSxhPXRoaXMuaXRbdF0sYz1hWzBdLHM9YVsxXSx2PWFbMl0saD1hWzNdLGw9YVs0XSxkPXJbMF1eb1swXSx5PXJbdD8zOjFdXm9bMV0sdz1yWzJdXm9bMl0sYj1yW3Q/MTozXV5vWzNdLHA9NCxnPTA7dT5nO2crKyluPWNbZD4+PjI0XV5zW3k+PjE2JjI1NV1edlt3Pj44JjI1NV1eaFsyNTUmYl1eb1twXSxlPWNbeT4+PjI0XV5zW3c+PjE2JjI1NV1edltiPj44JjI1NV1eaFsyNTUmZF1eb1twKzFdLGk9Y1t3Pj4+MjRdXnNbYj4+MTYmMjU1XV52W2Q+PjgmMjU1XV5oWzI1NSZ5XV5vW3ArMl0sYj1jW2I+Pj4yNF1ec1tkPj4xNiYyNTVdXnZbeT4+OCYyNTVdXmhbMjU1JnddXm9bcCszXSxwKz00LGQ9bix5PWUsdz1pO2Zvcih2YXIgbT0wOzQ+bTttKyspZlt0PzMmLW06bV09bFtkPj4+MjRdPDwyNF5sW3k+PjE2JjI1NV08PDE2Xmxbdz4+OCYyNTVdPDw4XmxbMjU1JmJdXm9bcCsrXSxuPWQsZD15LHk9dyx3PWIsYj1uO3JldHVybiBmfX1dKSxyfSgpO3ZhciB4QT17fTt4QS5mdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxuKXtTQSh0aGlzLHIpLHRoaXMuY3Q9dCx0aGlzLnN0PW4sdGhpcy52dD1ufXJldHVybiBqQShyLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnZ0PXRoaXMuc3R9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmh0KHRoaXMuY3Qscix0aGlzLnZ0KX19LHtrZXk6ImluY1dvcmQiLHZhbHVlOmZ1bmN0aW9uKHIpe2lmKDI1NT09KHI+PjI0JjI1NSkpe3ZhciB0PXI+PjE2JjI1NSxuPXI+PjgmMjU1LGU9MjU1JnI7MjU1PT09dD8odD0wLDI1NT09PW4/KG49MCwyNTU9PT1lP2U9MDorK2UpOisrbik6Kyt0LHI9MCxyKz10PDwxNixyKz1uPDw4LHIrPWV9ZWxzZSByKz0xPDwyNDtyZXR1cm4gcn19LHtrZXk6ImluY0NvdW50ZXIiLHZhbHVlOmZ1bmN0aW9uKHIpezA9PT0oclswXT10aGlzLmx0KHJbMF0pKSYmKHJbMV09dGhpcy5sdChyWzFdKSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHIsdCxuKXt2YXIgZTtpZighKGU9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgaT1PQS5Ecih0KSxvPTA7ZT5vO28rPTQpe3RoaXMuZHQobik7dmFyIHU9ci5lbmNyeXB0KG4pO3Rbb11ePXVbMF0sdFtvKzFdXj11WzFdLHRbbysyXV49dVsyXSx0W28rM11ePXVbM119cmV0dXJuIE9BLlZyKHQsaSl9fV0pLHJ9KCk7dmFyIFVBPXtpbXBvcnRLZXk6ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBVQS55dChrQS5LLldyKHIpKX0sd3Q6ZnVuY3Rpb24ocix0LG4sZSl7aWYobj1ufHwxZTQsMD5lfHwwPm4pdGhyb3cgRXJyb3IoImludmFsaWQgcGFyYW1zIHRvIHBia2RmMiIpO3ZhciBpLG8sdSxmLGEsYz0xKyhlPj41KTw8MixzPW5ldyBBcnJheUJ1ZmZlcihjKSx2PW5ldyBEYXRhVmlldyhzKSxoPTAsbD1PQTtmb3IodD1rQS5LLldyKHQpLGE9MTsoY3x8MSk+aDthKyspe2ZvcihpPW89ci5lbmNyeXB0KGwuY29uY2F0KHQsW2FdKSksdT0xO24+dTt1KyspZm9yKG89ci5lbmNyeXB0KG8pLGY9MDtmPG8ubGVuZ3RoO2YrKylpW2ZdXj1vW2ZdO2Zvcih1PTA7KGN8fDEpPmgmJnU8aS5sZW5ndGg7dSsrKXYuc2V0SW50MzIoaCxpW3VdKSxoKz00fXJldHVybiBzLnNsaWNlKDAsZS84KX19O2Z1bmN0aW9uIE1BKHIpe3JldHVybiBNQT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHJ9OmZ1bmN0aW9uKHIpe3JldHVybiByJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZyLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZyIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Ygcn0sTUEocil9ZnVuY3Rpb24gSUEoKXsvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovSUE9ZnVuY3Rpb24oKXtyZXR1cm4gcn07dmFyIHI9e30sdD1PYmplY3QucHJvdG90eXBlLG49dC5oYXNPd25Qcm9wZXJ0eSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9ZS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89ZS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWUudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBmKHIsdCxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsdCx7dmFsdWU6bix0OiEwLGk6ITAsd3JpdGFibGU6ITB9KSxyW3RdfXRyeXtmKHt9LCIiKX1jYXRjaChyKXtmPWZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gclt0XT1ufX1mdW5jdGlvbiBhKHIsdCxuLGUpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj90OnYsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSx1PW5ldyBqKGV8fFtdKTtyZXR1cm4gby5idD1mdW5jdGlvbihyLHQsbil7dmFyIGU9InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxvKXtpZigiZXhlY3V0aW5nIj09PWUpdGhyb3cgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PWUpe2lmKCJ0aHJvdyI9PT1pKXRocm93IG87cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Iobi5tZXRob2Q9aSxuLmd0PW87Oyl7dmFyIHU9bi5TdDtpZih1KXt2YXIgZj1tKHUsbik7aWYoZil7aWYoZj09PXMpY29udGludWU7cmV0dXJuIGZ9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uQXQ9bi5qdD1uLmd0O2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09ZSl0aHJvdyBlPSJjb21wbGV0ZWQiLG4uZ3Q7bi5PdChuLmd0KX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5rdCgicmV0dXJuIixuLmd0KTtlPSJleGVjdXRpbmciO3ZhciBhPWMocix0LG4pO2lmKCJub3JtYWwiPT09YS50eXBlKXtpZihlPW4uZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGEuZ3Q9PT1zKWNvbnRpbnVlO3JldHVybnt2YWx1ZTphLmd0LGRvbmU6bi5kb25lfX0idGhyb3ciPT09YS50eXBlJiYoZT0iY29tcGxldGVkIixuLm1ldGhvZD0idGhyb3ciLG4uZ3Q9YS5ndCl9fX0ocixuLHUpLG99ZnVuY3Rpb24gYyhyLHQsbil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGd0OnIuY2FsbCh0LG4pfX1jYXRjaChyKXtyZXR1cm57dHlwZToidGhyb3ciLGd0OnJ9fX1yLndyYXA9YTt2YXIgcz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIGgoKXt9ZnVuY3Rpb24gbCgpe312YXIgZD17fTtmKGQsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdz15JiZ5KHkoTyhbXSkpKTt3JiZ3IT09dCYmbi5jYWxsKHcsaSkmJihkPXcpO3ZhciBiPWwucHJvdG90eXBlPXYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZCk7ZnVuY3Rpb24gcChyKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Yocix0LChmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5idCh0LHIpfSkpfSkpfWZ1bmN0aW9uIGcocix0KXtmdW5jdGlvbiBlKGksbyx1LGYpe3ZhciBhPWMocltpXSxyLG8pO2lmKCJ0aHJvdyIhPT1hLnR5cGUpe3ZhciBzPWEuZ3Qsdj1zLnZhbHVlO3JldHVybiB2JiYib2JqZWN0Ij09TUEodikmJm4uY2FsbCh2LCJfX2F3YWl0Iik/dC5yZXNvbHZlKHYuRXQpLnRoZW4oKGZ1bmN0aW9uKHIpe2UoIm5leHQiLHIsdSxmKX0pLChmdW5jdGlvbihyKXtlKCJ0aHJvdyIscix1LGYpfSkpOnQucmVzb2x2ZSh2KS50aGVuKChmdW5jdGlvbihyKXtzLnZhbHVlPXIsdShzKX0pLChmdW5jdGlvbihyKXtyZXR1cm4gZSgidGhyb3ciLHIsdSxmKX0pKX1mKGEuZ3QpfXZhciBpO3RoaXMuYnQ9ZnVuY3Rpb24ocixuKXtmdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LGkpe2UocixuLHQsaSl9KSl9cmV0dXJuIGk9aT9pLnRoZW4obyxvKTpvKCl9fWZ1bmN0aW9uIG0ocix0KXt2YXIgbj1yLml0ZXJhdG9yW3QubWV0aG9kXTtpZih2b2lkIDA9PT1uKXtpZih0LlN0PW51bGwsInRocm93Ij09PXQubWV0aG9kKXtpZihyLml0ZXJhdG9yLnEmJih0Lm1ldGhvZD0icmV0dXJuIix0Lmd0PXZvaWQgMCxtKHIsdCksInRocm93Ij09PXQubWV0aG9kKSlyZXR1cm4gczt0Lm1ldGhvZD0idGhyb3ciLHQuZ3Q9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBzfXZhciBlPWMobixyLml0ZXJhdG9yLHQuZ3QpO2lmKCJ0aHJvdyI9PT1lLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5ndD1lLmd0LHQuU3Q9bnVsbCxzO3ZhciBpPWUuZ3Q7cmV0dXJuIGk/aS5kb25lPyh0W3IuVHRdPWkudmFsdWUsdC5uZXh0PXIueHQsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0Lmd0PXZvaWQgMCksdC5TdD1udWxsLHMpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5ndD1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuU3Q9bnVsbCxzKX1mdW5jdGlvbiBTKHIpe3ZhciB0PXtVdDpyWzBdfTsxIGluIHImJih0Lk10PXJbMV0pLDIgaW4gciYmKHQuSXQ9clsyXSx0Lkx0PXJbM10pLHRoaXMuUHQucHVzaCh0KX1mdW5jdGlvbiBBKHIpe3ZhciB0PXIuX3R8fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5ndCxyLl90PXR9ZnVuY3Rpb24gaihyKXt0aGlzLlB0PVt7VXQ6InJvb3QifV0sci5mb3JFYWNoKFMsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gTyhyKXtpZihyKXt2YXIgdD1yW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChyKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci5uZXh0KXJldHVybiByO2lmKCFpc05hTihyLmxlbmd0aCkpe3ZhciBlPS0xLG89ZnVuY3Rpb24gdCgpe2Zvcig7KytlPHIubGVuZ3RoOylpZihuLmNhbGwocixlKSlyZXR1cm4gdC52YWx1ZT1yW2VdLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIG8ubmV4dD1vfX1yZXR1cm57bmV4dDprfX1mdW5jdGlvbiBrKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gaC5wcm90b3R5cGU9bCxmKGIsImNvbnN0cnVjdG9yIixsKSxmKGwsImNvbnN0cnVjdG9yIixoKSxoLmRpc3BsYXlOYW1lPWYobCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHIuUnQ9ZnVuY3Rpb24ocil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHImJnIuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWh8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LHIubWFyaz1mdW5jdGlvbihyKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihyLGwpOihyLl9fcHJvdG9fXz1sLGYocix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpLHJ9LHIuRnQ9ZnVuY3Rpb24ocil7cmV0dXJue0V0OnJ9fSxwKGcucHJvdG90eXBlKSxmKGcucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksci5OdD1nLHIuYXN5bmM9ZnVuY3Rpb24odCxuLGUsaSxvKXt2b2lkIDA9PT1vJiYobz1Qcm9taXNlKTt2YXIgdT1uZXcgZyhhKHQsbixlLGkpLG8pO3JldHVybiByLlJ0KG4pP3U6dS5uZXh0KCkudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIuZG9uZT9yLnZhbHVlOnUubmV4dCgpfSkpfSxwKGIpLGYoYix1LCJHZW5lcmF0b3IiKSxmKGIsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxmKGIsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxyLmtleXM9ZnVuY3Rpb24ocil7dmFyIHQ9W107Zm9yKHZhciBuIGluIHIpdC5wdXNoKG4pO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciBlPXQucG9wKCk7aWYoZSBpbiByKXJldHVybiBuLnZhbHVlPWUsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sci52YWx1ZXM9TyxqLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aixyZXNldDpmdW5jdGlvbihyKXtpZih0aGlzLkN0PTAsdGhpcy5uZXh0PTAsdGhpcy5BdD10aGlzLmp0PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5TdD1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmd0PXZvaWQgMCx0aGlzLlB0LmZvckVhY2goQSksIXIpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJm4uY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciByPXRoaXMuUHRbMF0uX3Q7aWYoInRocm93Ij09PXIudHlwZSl0aHJvdyByLmd0O3JldHVybiB0aGlzLkJ0fSxPdDpmdW5jdGlvbihyKXtpZih0aGlzLmRvbmUpdGhyb3cgcjt2YXIgdD10aGlzO2Z1bmN0aW9uIGUobixlKXtyZXR1cm4gdS50eXBlPSJ0aHJvdyIsdS5ndD1yLHQubmV4dD1uLGUmJih0Lm1ldGhvZD0ibmV4dCIsdC5ndD12b2lkIDApLCEhZX1mb3IodmFyIGk9dGhpcy5QdC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89dGhpcy5QdFtpXSx1PW8uX3Q7aWYoInJvb3QiPT09by5VdClyZXR1cm4gZSgiZW5kIik7aWYoby5VdDw9dGhpcy5DdCl7dmFyIGY9bi5jYWxsKG8sImNhdGNoTG9jIiksYT1uLmNhbGwobywiZmluYWxseUxvYyIpO2lmKGYmJmEpe2lmKHRoaXMuQ3Q8by5NdClyZXR1cm4gZShvLk10LCEwKTtpZih0aGlzLkN0PG8uSXQpcmV0dXJuIGUoby5JdCl9ZWxzZSBpZihmKXtpZih0aGlzLkN0PG8uTXQpcmV0dXJuIGUoby5NdCwhMCl9ZWxzZXtpZighYSl0aHJvdyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLkN0PG8uSXQpcmV0dXJuIGUoby5JdCl9fX19LGt0OmZ1bmN0aW9uKHIsdCl7Zm9yKHZhciBlPXRoaXMuUHQubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBpPXRoaXMuUHRbZV07aWYoaS5VdDw9dGhpcy5DdCYmbi5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5DdDxpLkl0KXt2YXIgbz1pO2JyZWFrfX1vJiYoImJyZWFrIj09PXJ8fCJjb250aW51ZSI9PT1yKSYmby5VdDw9dCYmdDw9by5JdCYmKG89bnVsbCk7dmFyIHU9bz9vLl90Ont9O3JldHVybiB1LnR5cGU9cix1Lmd0PXQsbz8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1vLkl0LHMpOnRoaXMuY29tcGxldGUodSl9LGNvbXBsZXRlOmZ1bmN0aW9uKHIsdCl7aWYoInRocm93Ij09PXIudHlwZSl0aHJvdyByLmd0O3JldHVybiJicmVhayI9PT1yLnR5cGV8fCJjb250aW51ZSI9PT1yLnR5cGU/dGhpcy5uZXh0PXIuZ3Q6InJldHVybiI9PT1yLnR5cGU/KHRoaXMuQnQ9dGhpcy5ndD1yLmd0LHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1yLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksc30sZmluaXNoOmZ1bmN0aW9uKHIpe2Zvcih2YXIgdD10aGlzLlB0Lmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLlB0W3RdO2lmKG4uSXQ9PT1yKXJldHVybiB0aGlzLmNvbXBsZXRlKG4uX3Qsbi5MdCksQShuKSxzfX0sY2F0Y2g6ZnVuY3Rpb24ocil7Zm9yKHZhciB0PXRoaXMuUHQubGVuZ3RoLTE7dD49MDstLXQpe3ZhciBuPXRoaXMuUHRbdF07aWYobi5VdD09PXIpe3ZhciBlPW4uX3Q7aWYoInRocm93Ij09PWUudHlwZSl7dmFyIGk9ZS5ndDtBKG4pfXJldHVybiBpfX10aHJvdyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LEd0OmZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdGhpcy5TdD17aXRlcmF0b3I6TyhyKSxUdDp0LHh0Om59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5ndD12b2lkIDApLHN9fSxyfWZ1bmN0aW9uIExBKHIsdCxuLGUsaSxvLHUpe3RyeXt2YXIgZj1yW29dKHUpLGE9Zi52YWx1ZX1jYXRjaChyKXtyZXR1cm4gdm9pZCBuKHIpfWYuZG9uZT90KGEpOlByb21pc2UucmVzb2x2ZShhKS50aGVuKGUsaSl9ZnVuY3Rpb24gUEEocil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsaSl7dmFyIG89ci5hcHBseSh0LG4pO2Z1bmN0aW9uIHUocil7TEEobyxlLGksdSxmLCJuZXh0IixyKX1mdW5jdGlvbiBmKHIpe0xBKG8sZSxpLHUsZiwidGhyb3ciLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gX0Eocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBSQShyLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgZT10W25dO2UudD1lLnR8fCExLGUuaT0hMCwidmFsdWUiaW4gZSYmKGUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUua2V5LGUpfX1mdW5jdGlvbiBGQShyLHQsbil7cmV0dXJuIHQmJlJBKHIucHJvdG90eXBlLHQpLG4mJlJBKHIsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscn1VQS55dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCl7U0EodGhpcyxyKTt2YXIgbj10aGlzLGU9bi5EdD1FQS4kcixpPVtbXSxbXV0sbz1lLnByb3RvdHlwZS5ibG9ja1NpemUvMzI7bi5WdD1bbmV3IGUsbmV3IGVdLHQubGVuZ3RoPm8mJih0PWUuaGFzaCh0KSk7Zm9yKHZhciB1PTA7bz51O3UrKylpWzBdW3VdPTkwOTUyMjQ4Nl50W3VdLGlbMV1bdV09MTU0OTU1NjgyOF50W3VdO24uVnRbMF0udXBkYXRlKGlbMF0pLG4uVnRbMV0udXBkYXRlKGlbMV0pLG4uWXQ9bmV3IGUobi5WdFswXSl9cmV0dXJuIGpBKHIsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXM7ci5ZdD1uZXcgci5EdChyLlZ0WzBdKSxyLnp0PSExfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihyKXt0aGlzLnp0PSEwLHRoaXMuWXQudXBkYXRlKHIpfX0se2tleToiZGlnZXN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXMsdD1yLll0LlpyKCksbj1uZXcgci5EdChyLlZ0WzFdKS51cGRhdGUodCkuWnIoKTtyZXR1cm4gci5yZXNldCgpLG59fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihyKXtpZih0aGlzLnp0KXRocm93IEVycm9yKCJlbmNyeXB0IG9uIGFscmVhZHkgdXBkYXRlZCBobWFjIGNhbGxlZCEiKTtyZXR1cm4gdGhpcy51cGRhdGUociksdGhpcy5kaWdlc3Qocil9fV0pLHJ9KCk7dmFyIE5BPXtuYW1lOiJQQktERjIifSxDQT1PYmplY3QuYXNzaWduKHtoYXNoOntuYW1lOiJITUFDIn19LE5BKSxCQT1PYmplY3QuYXNzaWduKHtpdGVyYXRpb25zOjFlMyxoYXNoOntuYW1lOiJTSEEtMSJ9fSxOQSksR0E9WyJkZXJpdmVCaXRzIl0sREE9WzgsMTIsMTZdLFZBPVsxNiwyNCwzMl0sWUE9WzAsMCwwLDBdLHpBPSJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvLFdBPXpBJiZ2b2lkIDAhPT1jcnlwdG8uc3VidGxlLCRBPWtBLkssSEE9VEEuZXQsS0E9eEEuZnQscUE9VUEueXQsSkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQsbixlKXtfQSh0aGlzLHIpLE9iamVjdC5hc3NpZ24odGhpcyx7cGFzc3dvcmQ6dCxzaWduZWQ6bixXdDplLTEsJHQ6bmV3IFVpbnQ4QXJyYXkoMCl9KX12YXIgdDtyZXR1cm4gRkEocixbe2tleToiYXBwZW5kIix2YWx1ZToodD1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCl7dmFyIG4sZSxpO3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZighKG49dGhpcykucGFzc3dvcmQpe3IubmV4dD05O2JyZWFrfXJldHVybiBlPXNqKHQsMCxEQVtuLld0XSsyKSxyLm5leHQ9NSxaQShuLGUsbi5wYXNzd29yZCk7Y2FzZSA1Om4ucGFzc3dvcmQ9bnVsbCxuLkh0PW5ldyBLQShuZXcgSEEobi5rZXlzLmtleSksQXJyYXkuZnJvbShZQSkpLG4uS3Q9bmV3IHFBKG4ua2V5cy5xdCksdD1zaih0LERBW24uV3RdKzIpO2Nhc2UgOTpyZXR1cm4gaT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aC0xMC0odC5sZW5ndGgtMTApJTE2KSxyLmt0KCJyZXR1cm4iLFFBKG4sdCxpLDAsMTAsITApKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSksZnVuY3Rpb24ocil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXMsdD1yLiR0LG49c2oodCwwLHQubGVuZ3RoLTEwKSxlPXNqKHQsdC5sZW5ndGgtMTApLGk9bmV3IFVpbnQ4QXJyYXkoMCk7aWYobi5sZW5ndGgpe3ZhciBvPSRBLldyKG4pO3IuS3QudXBkYXRlKG8pO3ZhciB1PXIuSHQudXBkYXRlKG8pO2k9JEEuenIodSl9dmFyIGY9ITA7aWYoci5zaWduZWQpZm9yKHZhciBhPXNqKCRBLnpyKHIuS3QuZGlnZXN0KCkpLDAsMTApLGM9MDsxMD5jO2MrKylhW2NdIT1lW2NdJiYoZj0hMSk7cmV0dXJue3ZhbGlkOmYsZGF0YTppfX19XSkscn0oKSxYQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxuKXtfQSh0aGlzLHIpLE9iamVjdC5hc3NpZ24odGhpcyx7cGFzc3dvcmQ6dCxXdDpuLTEsJHQ6bmV3IFVpbnQ4QXJyYXkoMCl9KX12YXIgdDtyZXR1cm4gRkEocixbe2tleToiYXBwZW5kIix2YWx1ZToodD1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCl7dmFyIG4sZSxpO3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZihuPXRoaXMsZT1uZXcgVWludDhBcnJheSgwKSwhbi5wYXNzd29yZCl7ci5uZXh0PTk7YnJlYWt9cmV0dXJuIHIubmV4dD01LHRqKG4sbi5wYXNzd29yZCk7Y2FzZSA1OmU9ci5BdCxuLnBhc3N3b3JkPW51bGwsbi5IdD1uZXcgS0EobmV3IEhBKG4ua2V5cy5rZXkpLEFycmF5LmZyb20oWUEpKSxuLkt0PW5ldyBxQShuLmtleXMucXQpO2Nhc2UgOTpyZXR1cm4oaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCt0Lmxlbmd0aC10Lmxlbmd0aCUxNikpLnNldChlLDApLHIua3QoInJldHVybiIsUUEobix0LGksZS5sZW5ndGgsMCkpO2Nhc2UgMTI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKSxmdW5jdGlvbihyKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcyx0PW5ldyBVaW50OEFycmF5KDApO2lmKHIuJHQubGVuZ3RoKXt2YXIgbj1yLkh0LnVwZGF0ZSgkQS5XcihyLiR0KSk7ci5LdC51cGRhdGUobiksdD0kQS56cihuKX12YXIgZT1zaigkQS56cihyLkt0LmRpZ2VzdCgpKSwwLDEwKTtyZXR1cm57ZGF0YTpjaih0LGUpLHNpZ25hdHVyZTplfX19XSkscn0oKTtmdW5jdGlvbiBRQShyLHQsbixlLGksbyl7dmFyIHUsZj10Lmxlbmd0aC1pO2ZvcihyLiR0Lmxlbmd0aCYmKHQ9Y2ooci4kdCx0KSxuPWZ1bmN0aW9uKHIsdCl7aWYodCYmdD5yLmxlbmd0aCl7dmFyIG49cjsocj1uZXcgVWludDhBcnJheSh0KSkuc2V0KG4sMCl9cmV0dXJuIHJ9KG4sZi1mJTE2KSksdT0wO2YtMTY+PXU7dSs9MTYpe3ZhciBhPSRBLldyKHNqKHQsdSx1KzE2KSk7byYmci5LdC51cGRhdGUoYSk7dmFyIGM9ci5IdC51cGRhdGUoYSk7b3x8ci5LdC51cGRhdGUoYyksbi5zZXQoJEEuenIoYyksdStlKX1yZXR1cm4gci4kdD1zaih0LHUpLG59ZnVuY3Rpb24gWkEocix0LG4pe3JldHVybiByai5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcmooKXtyZXR1cm4gcmo9UEEoSUEoKS5tYXJrKChmdW5jdGlvbiByKHQsbixlKXt2YXIgaSxvO3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsZWoodCxlLHNqKG4sMCxEQVt0Lld0XSkpO2Nhc2UgMjppZihpPXNqKG4sREFbdC5XdF0pLChvPXQua2V5cy5wYXNzd29yZFZlcmlmaWNhdGlvbilbMF09PWlbMF0mJm9bMV09PWlbMV0pe3IubmV4dD02O2JyZWFrfXRocm93IEVycm9yKCJJbnZhbGlkIHBhc3dvcmQiKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyKX0pKSkscmouYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRqKHIsdCl7cmV0dXJuIG5qLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBuaigpe3JldHVybiBuaj1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCxuKXt2YXIgZTtyZXR1cm4gSUEoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIuQ3Q9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIGU9b2oobmV3IFVpbnQ4QXJyYXkoREFbdC5XdF0pKSxyLm5leHQ9Myxlaih0LG4sZSk7Y2FzZSAzOnJldHVybiByLmt0KCJyZXR1cm4iLGNqKGUsdC5rZXlzLnBhc3N3b3JkVmVyaWZpY2F0aW9uKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscil9KSkpLG5qLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlaihyLHQsbil7cmV0dXJuIGlqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBpaigpe3JldHVybihpaj1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCxuLGUpe3ZhciBpLG8sdSxmO3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gaT1ZUyhuKSxyLm5leHQ9Myx1aigicmF3IixpLENBLCExLEdBKTtjYXNlIDM6cmV0dXJuIG89ci5BdCxyLm5leHQ9NixmaihPYmplY3QuYXNzaWduKHtzYWx0OmV9LEJBKSxvLDgqKDIqVkFbdC5XdF0rMikpO2Nhc2UgNjp1PXIuQXQsZj1uZXcgVWludDhBcnJheSh1KSx0LmtleXM9e2tleTokQS5XcihzaihmLDAsVkFbdC5XdF0pKSxxdDokQS5XcihzaihmLFZBW3QuV3RdLDIqVkFbdC5XdF0pKSxwYXNzd29yZFZlcmlmaWNhdGlvbjpzaihmLDIqVkFbdC5XdF0pfTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvaihyKXtyZXR1cm4gekEmJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP2NyeXB0by5nZXRSYW5kb21WYWx1ZXMocik6ZnVuY3Rpb24ocil7Zm9yKHZhciB0LG49bmV3IFVpbnQzMkFycmF5KHIuYnVmZmVyKSxlPWZ1bmN0aW9uKHIpe3ZhciB0PTk4NzY1NDMyMSxuPTQyOTQ5NjcyOTU7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuKCgoKHQ9MzY5NjkqKDY1NTM1JnQpKyh0Pj4xNikmbik8PDE2KSsocj0xOGUzKig2NTUzNSZyKSsocj4+MTYpJm4pJm4pLzQyOTQ5NjcyOTYrLjUpKihNYXRoLnJhbmRvbSgpPi41PzE6LTEpfX0saT0wO2k8ci5sZW5ndGg7aSs9NCl7dmFyIG89ZSg0Mjk0OTY3Mjk2Kih0fHxNYXRoLnJhbmRvbSgpKSk7dD05ODc2NTQwNzEqbygpLG5baS80XT00Mjk0OTY3Mjk2Km8oKXwwfXJldHVybiByfShyKX1mdW5jdGlvbiB1aihyLHQsbixlLGkpe3JldHVybiB6QSYmV0EmJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uc3VidGxlLmltcG9ydEtleT9jcnlwdG8uc3VidGxlLmltcG9ydEtleShyLHQsbixlLGkpOlVBLmltcG9ydEtleSh0KX1mdW5jdGlvbiBmaihyLHQsbil7cmV0dXJuIGFqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhaigpe3JldHVybihhaj1QQShJQSgpLm1hcmsoKGZ1bmN0aW9uIHIodCxuLGUpe3JldHVybiBJQSgpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZighekF8fCFXQXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGNyeXB0by5zdWJ0bGUuZGVyaXZlQml0cyl7ci5uZXh0PTY7YnJlYWt9cmV0dXJuIHIubmV4dD0zLGNyeXB0by5zdWJ0bGUuZGVyaXZlQml0cyh0LG4sZSk7Y2FzZSAzOnJldHVybiByLmt0KCJyZXR1cm4iLHIuQXQpO2Nhc2UgNjpyZXR1cm4gci5rdCgicmV0dXJuIixVQS53dChuLHQuc2FsdCxCQS5pdGVyYXRpb25zLGUpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjaihyLHQpe3ZhciBuPXI7cmV0dXJuIHIubGVuZ3RoK3QubGVuZ3RoJiYoKG49bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrdC5sZW5ndGgpKS5zZXQociwwKSxuLnNldCh0LHIubGVuZ3RoKSksbn1mdW5jdGlvbiBzaihyLHQsbil7cmV0dXJuIHIuc3ViYXJyYXkodCxuKX12YXIgdmo9TWF0aC5pbXVsO2Z1bmN0aW9uIGhqKHIsdCl7aWYoIShyIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbGoocix0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGU9dFtuXTtlLnQ9ZS50fHwhMSxlLmk9ITAsInZhbHVlImluIGUmJihlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLmtleSxlKX19ZnVuY3Rpb24gZGoocix0LG4pe3JldHVybiB0JiZsaihyLnByb3RvdHlwZSx0KSxuJiZsaihyLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHJ9QmUoe3RhcmdldDoiTWF0aCIsQzohMCxHOmkoKGZ1bmN0aW9uKCl7cmV0dXJuLTUhPXZqKDQyOTQ5NjcyOTUsNSl8fDIhPXZqLmxlbmd0aH0pKX0se2ltdWw6ZnVuY3Rpb24ocix0KXt2YXIgbj02NTUzNSxlPStyLGk9K3Qsbz1uJmUsdT1uJmk7cmV0dXJuIDB8byp1KygobiZlPj4+MTYpKnUrbyoobiZpPj4+MTYpPDwxNj4+PjApfX0pO3ZhciB5aj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxuKXtoaih0aGlzLHIpLE9iamVjdC5hc3NpZ24odGhpcyx7cGFzc3dvcmQ6dCxwYXNzd29yZFZlcmlmaWNhdGlvbjpufSksZ2oodGhpcyx0KX1yZXR1cm4gZGoocixbe2tleToiYXBwZW5kIix2YWx1ZTpmdW5jdGlvbihyKXt2YXIgdD10aGlzO2lmKHQucGFzc3dvcmQpe3ZhciBuPWJqKHQsci5zdWJhcnJheSgwLDEyKSk7aWYodC5wYXNzd29yZD1udWxsLG5bMTFdIT10LnBhc3N3b3JkVmVyaWZpY2F0aW9uKXRocm93IEVycm9yKCJJbnZhbGlkIHBhc3dvcmQiKTtyPXIuc3ViYXJyYXkoMTIpfXJldHVybiBiaih0LHIpfX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3ZhbGlkOiEwLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9fX1dKSxyfSgpLHdqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LG4pe2hqKHRoaXMsciksT2JqZWN0LmFzc2lnbih0aGlzLHtwYXNzd29yZDp0LHBhc3N3b3JkVmVyaWZpY2F0aW9uOm59KSxnaih0aGlzLHQpfXJldHVybiBkaihyLFt7a2V5OiJhcHBlbmQiLHZhbHVlOmZ1bmN0aW9uKHIpe3ZhciB0LG4sZT10aGlzO2lmKGUucGFzc3dvcmQpe2UucGFzc3dvcmQ9bnVsbDt2YXIgaT1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEyKSk7aVsxMV09ZS5wYXNzd29yZFZlcmlmaWNhdGlvbiwodD1uZXcgVWludDhBcnJheShyLmxlbmd0aCtpLmxlbmd0aCkpLnNldChwaihlLGkpLDApLG49MTJ9ZWxzZSB0PW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKSxuPTA7cmV0dXJuIHQuc2V0KHBqKGUsciksbiksdH19LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntkYXRhOm5ldyBVaW50OEFycmF5KDApfX19XSkscn0oKTtmdW5jdGlvbiBiaihyLHQpe2Zvcih2YXIgbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKW5bZV09U2oociledFtlXSxtaihyLG5bZV0pO3JldHVybiBufWZ1bmN0aW9uIHBqKHIsdCl7Zm9yKHZhciBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspbltlXT1TaihyKV50W2VdLG1qKHIsdFtlXSk7cmV0dXJuIG59ZnVuY3Rpb24gZ2oocix0KXtyLmtleXM9WzMwNTQxOTg5Niw1OTE3NTEwNDksODc4MDgyMTkyXSxyLkp0PW5ldyBVUyhyLmtleXNbMF0pLHIuWHQ9bmV3IFVTKHIua2V5c1syXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspbWoocix0LmNoYXJDb2RlQXQobikpfWZ1bmN0aW9uIG1qKHIsdCl7ci5KdC5hcHBlbmQoW3RdKSxyLmtleXNbMF09fnIuSnQuZ2V0KCksci5rZXlzWzFdPWpqKHIua2V5c1sxXStBaihyLmtleXNbMF0pKSxyLmtleXNbMV09amooTWF0aC5pbXVsKHIua2V5c1sxXSwxMzQ3NzU4MTMpKzEpLHIuWHQuYXBwZW5kKFtyLmtleXNbMV0+Pj4yNF0pLHIua2V5c1syXT1+ci5YdC5nZXQoKX1mdW5jdGlvbiBTaihyKXt2YXIgdD0yfHIua2V5c1syXTtyZXR1cm4gQWooTWF0aC5pbXVsKHQsMV50KT4+PjgpfWZ1bmN0aW9uIEFqKHIpe3JldHVybiAyNTUmcn1mdW5jdGlvbiBqaihyKXtyZXR1cm4gNDI5NDk2NzI5NSZyfWZ1bmN0aW9uIE9qKHIpe3JldHVybiBPaj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHJ9OmZ1bmN0aW9uKHIpe3JldHVybiByJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZyLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZyIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Ygcn0sT2oocil9ZnVuY3Rpb24ga2ooKXsvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICova2o9ZnVuY3Rpb24oKXtyZXR1cm4gcn07dmFyIHI9e30sdD1PYmplY3QucHJvdG90eXBlLG49dC5oYXNPd25Qcm9wZXJ0eSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9ZS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89ZS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWUudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBmKHIsdCxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsdCx7dmFsdWU6bix0OiEwLGk6ITAsd3JpdGFibGU6ITB9KSxyW3RdfXRyeXtmKHt9LCIiKX1jYXRjaChyKXtmPWZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gclt0XT1ufX1mdW5jdGlvbiBhKHIsdCxuLGUpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj90OnYsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSx1PW5ldyBqKGV8fFtdKTtyZXR1cm4gby5idD1mdW5jdGlvbihyLHQsbil7dmFyIGU9InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxvKXtpZigiZXhlY3V0aW5nIj09PWUpdGhyb3cgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PWUpe2lmKCJ0aHJvdyI9PT1pKXRocm93IG87cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Iobi5tZXRob2Q9aSxuLmd0PW87Oyl7dmFyIHU9bi5TdDtpZih1KXt2YXIgZj1tKHUsbik7aWYoZil7aWYoZj09PXMpY29udGludWU7cmV0dXJuIGZ9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uQXQ9bi5qdD1uLmd0O2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09ZSl0aHJvdyBlPSJjb21wbGV0ZWQiLG4uZ3Q7bi5PdChuLmd0KX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5rdCgicmV0dXJuIixuLmd0KTtlPSJleGVjdXRpbmciO3ZhciBhPWMocix0LG4pO2lmKCJub3JtYWwiPT09YS50eXBlKXtpZihlPW4uZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGEuZ3Q9PT1zKWNvbnRpbnVlO3JldHVybnt2YWx1ZTphLmd0LGRvbmU6bi5kb25lfX0idGhyb3ciPT09YS50eXBlJiYoZT0iY29tcGxldGVkIixuLm1ldGhvZD0idGhyb3ciLG4uZ3Q9YS5ndCl9fX0ocixuLHUpLG99ZnVuY3Rpb24gYyhyLHQsbil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGd0OnIuY2FsbCh0LG4pfX1jYXRjaChyKXtyZXR1cm57dHlwZToidGhyb3ciLGd0OnJ9fX1yLndyYXA9YTt2YXIgcz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIGgoKXt9ZnVuY3Rpb24gbCgpe312YXIgZD17fTtmKGQsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdz15JiZ5KHkoTyhbXSkpKTt3JiZ3IT09dCYmbi5jYWxsKHcsaSkmJihkPXcpO3ZhciBiPWwucHJvdG90eXBlPXYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZCk7ZnVuY3Rpb24gcChyKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Yocix0LChmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5idCh0LHIpfSkpfSkpfWZ1bmN0aW9uIGcocix0KXtmdW5jdGlvbiBlKGksbyx1LGYpe3ZhciBhPWMocltpXSxyLG8pO2lmKCJ0aHJvdyIhPT1hLnR5cGUpe3ZhciBzPWEuZ3Qsdj1zLnZhbHVlO3JldHVybiB2JiYib2JqZWN0Ij09T2oodikmJm4uY2FsbCh2LCJfX2F3YWl0Iik/dC5yZXNvbHZlKHYuRXQpLnRoZW4oKGZ1bmN0aW9uKHIpe2UoIm5leHQiLHIsdSxmKX0pLChmdW5jdGlvbihyKXtlKCJ0aHJvdyIscix1LGYpfSkpOnQucmVzb2x2ZSh2KS50aGVuKChmdW5jdGlvbihyKXtzLnZhbHVlPXIsdShzKX0pLChmdW5jdGlvbihyKXtyZXR1cm4gZSgidGhyb3ciLHIsdSxmKX0pKX1mKGEuZ3QpfXZhciBpO3RoaXMuYnQ9ZnVuY3Rpb24ocixuKXtmdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LGkpe2UocixuLHQsaSl9KSl9cmV0dXJuIGk9aT9pLnRoZW4obyxvKTpvKCl9fWZ1bmN0aW9uIG0ocix0KXt2YXIgbj1yLml0ZXJhdG9yW3QubWV0aG9kXTtpZih2b2lkIDA9PT1uKXtpZih0LlN0PW51bGwsInRocm93Ij09PXQubWV0aG9kKXtpZihyLml0ZXJhdG9yLnEmJih0Lm1ldGhvZD0icmV0dXJuIix0Lmd0PXZvaWQgMCxtKHIsdCksInRocm93Ij09PXQubWV0aG9kKSlyZXR1cm4gczt0Lm1ldGhvZD0idGhyb3ciLHQuZ3Q9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBzfXZhciBlPWMobixyLml0ZXJhdG9yLHQuZ3QpO2lmKCJ0aHJvdyI9PT1lLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5ndD1lLmd0LHQuU3Q9bnVsbCxzO3ZhciBpPWUuZ3Q7cmV0dXJuIGk/aS5kb25lPyh0W3IuVHRdPWkudmFsdWUsdC5uZXh0PXIueHQsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0Lmd0PXZvaWQgMCksdC5TdD1udWxsLHMpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5ndD1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuU3Q9bnVsbCxzKX1mdW5jdGlvbiBTKHIpe3ZhciB0PXtVdDpyWzBdfTsxIGluIHImJih0Lk10PXJbMV0pLDIgaW4gciYmKHQuSXQ9clsyXSx0Lkx0PXJbM10pLHRoaXMuUHQucHVzaCh0KX1mdW5jdGlvbiBBKHIpe3ZhciB0PXIuX3R8fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5ndCxyLl90PXR9ZnVuY3Rpb24gaihyKXt0aGlzLlB0PVt7VXQ6InJvb3QifV0sci5mb3JFYWNoKFMsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gTyhyKXtpZihyKXt2YXIgdD1yW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChyKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci5uZXh0KXJldHVybiByO2lmKCFpc05hTihyLmxlbmd0aCkpe3ZhciBlPS0xLG89ZnVuY3Rpb24gdCgpe2Zvcig7KytlPHIubGVuZ3RoOylpZihuLmNhbGwocixlKSlyZXR1cm4gdC52YWx1ZT1yW2VdLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIG8ubmV4dD1vfX1yZXR1cm57bmV4dDprfX1mdW5jdGlvbiBrKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gaC5wcm90b3R5cGU9bCxmKGIsImNvbnN0cnVjdG9yIixsKSxmKGwsImNvbnN0cnVjdG9yIixoKSxoLmRpc3BsYXlOYW1lPWYobCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHIuUnQ9ZnVuY3Rpb24ocil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHImJnIuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWh8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LHIubWFyaz1mdW5jdGlvbihyKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihyLGwpOihyLl9fcHJvdG9fXz1sLGYocix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpLHJ9LHIuRnQ9ZnVuY3Rpb24ocil7cmV0dXJue0V0OnJ9fSxwKGcucHJvdG90eXBlKSxmKGcucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksci5OdD1nLHIuYXN5bmM9ZnVuY3Rpb24odCxuLGUsaSxvKXt2b2lkIDA9PT1vJiYobz1Qcm9taXNlKTt2YXIgdT1uZXcgZyhhKHQsbixlLGkpLG8pO3JldHVybiByLlJ0KG4pP3U6dS5uZXh0KCkudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIuZG9uZT9yLnZhbHVlOnUubmV4dCgpfSkpfSxwKGIpLGYoYix1LCJHZW5lcmF0b3IiKSxmKGIsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxmKGIsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxyLmtleXM9ZnVuY3Rpb24ocil7dmFyIHQ9W107Zm9yKHZhciBuIGluIHIpdC5wdXNoKG4pO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciBlPXQucG9wKCk7aWYoZSBpbiByKXJldHVybiBuLnZhbHVlPWUsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sci52YWx1ZXM9TyxqLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aixyZXNldDpmdW5jdGlvbihyKXtpZih0aGlzLkN0PTAsdGhpcy5uZXh0PTAsdGhpcy5BdD10aGlzLmp0PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5TdD1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmd0PXZvaWQgMCx0aGlzLlB0LmZvckVhY2goQSksIXIpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJm4uY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciByPXRoaXMuUHRbMF0uX3Q7aWYoInRocm93Ij09PXIudHlwZSl0aHJvdyByLmd0O3JldHVybiB0aGlzLkJ0fSxPdDpmdW5jdGlvbihyKXtpZih0aGlzLmRvbmUpdGhyb3cgcjt2YXIgdD10aGlzO2Z1bmN0aW9uIGUobixlKXtyZXR1cm4gdS50eXBlPSJ0aHJvdyIsdS5ndD1yLHQubmV4dD1uLGUmJih0Lm1ldGhvZD0ibmV4dCIsdC5ndD12b2lkIDApLCEhZX1mb3IodmFyIGk9dGhpcy5QdC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89dGhpcy5QdFtpXSx1PW8uX3Q7aWYoInJvb3QiPT09by5VdClyZXR1cm4gZSgiZW5kIik7aWYoby5VdDw9dGhpcy5DdCl7dmFyIGY9bi5jYWxsKG8sImNhdGNoTG9jIiksYT1uLmNhbGwobywiZmluYWxseUxvYyIpO2lmKGYmJmEpe2lmKHRoaXMuQ3Q8by5NdClyZXR1cm4gZShvLk10LCEwKTtpZih0aGlzLkN0PG8uSXQpcmV0dXJuIGUoby5JdCl9ZWxzZSBpZihmKXtpZih0aGlzLkN0PG8uTXQpcmV0dXJuIGUoby5NdCwhMCl9ZWxzZXtpZighYSl0aHJvdyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLkN0PG8uSXQpcmV0dXJuIGUoby5JdCl9fX19LGt0OmZ1bmN0aW9uKHIsdCl7Zm9yKHZhciBlPXRoaXMuUHQubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBpPXRoaXMuUHRbZV07aWYoaS5VdDw9dGhpcy5DdCYmbi5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5DdDxpLkl0KXt2YXIgbz1pO2JyZWFrfX1vJiYoImJyZWFrIj09PXJ8fCJjb250aW51ZSI9PT1yKSYmby5VdDw9dCYmdDw9by5JdCYmKG89bnVsbCk7dmFyIHU9bz9vLl90Ont9O3JldHVybiB1LnR5cGU9cix1Lmd0PXQsbz8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1vLkl0LHMpOnRoaXMuY29tcGxldGUodSl9LGNvbXBsZXRlOmZ1bmN0aW9uKHIsdCl7aWYoInRocm93Ij09PXIudHlwZSl0aHJvdyByLmd0O3JldHVybiJicmVhayI9PT1yLnR5cGV8fCJjb250aW51ZSI9PT1yLnR5cGU/dGhpcy5uZXh0PXIuZ3Q6InJldHVybiI9PT1yLnR5cGU/KHRoaXMuQnQ9dGhpcy5ndD1yLmd0LHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1yLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksc30sZmluaXNoOmZ1bmN0aW9uKHIpe2Zvcih2YXIgdD10aGlzLlB0Lmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLlB0W3RdO2lmKG4uSXQ9PT1yKXJldHVybiB0aGlzLmNvbXBsZXRlKG4uX3Qsbi5MdCksQShuKSxzfX0sY2F0Y2g6ZnVuY3Rpb24ocil7Zm9yKHZhciB0PXRoaXMuUHQubGVuZ3RoLTE7dD49MDstLXQpe3ZhciBuPXRoaXMuUHRbdF07aWYobi5VdD09PXIpe3ZhciBlPW4uX3Q7aWYoInRocm93Ij09PWUudHlwZSl7dmFyIGk9ZS5ndDtBKG4pfXJldHVybiBpfX10aHJvdyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LEd0OmZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdGhpcy5TdD17aXRlcmF0b3I6TyhyKSxUdDp0LHh0Om59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5ndD12b2lkIDApLHN9fSxyfWZ1bmN0aW9uIEVqKHIsdCxuLGUsaSxvLHUpe3RyeXt2YXIgZj1yW29dKHUpLGE9Zi52YWx1ZX1jYXRjaChyKXtyZXR1cm4gdm9pZCBuKHIpfWYuZG9uZT90KGEpOlByb21pc2UucmVzb2x2ZShhKS50aGVuKGUsaSl9ZnVuY3Rpb24gVGoocil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsaSl7dmFyIG89ci5hcHBseSh0LG4pO2Z1bmN0aW9uIHUocil7RWoobyxlLGksdSxmLCJuZXh0IixyKX1mdW5jdGlvbiBmKHIpe0VqKG8sZSxpLHUsZiwidGhyb3ciLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24geGoocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBVaihyLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgZT10W25dO2UudD1lLnR8fCExLGUuaT0hMCwidmFsdWUiaW4gZSYmKGUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUua2V5LGUpfX1mdW5jdGlvbiBNaihyLHQsbil7cmV0dXJuIHQmJlVqKHIucHJvdG90eXBlLHQpLG4mJlVqKHIsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscn12YXIgSWo9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQsbixlKXt2YXIgaT1uLnNpZ25hdHVyZSxvPW4ucGFzc3dvcmQsdT1uLnNpZ25lZCxmPW4uY29tcHJlc3NlZCxhPW4uemlwQ3J5cHRvLGM9bi5wYXNzd29yZFZlcmlmaWNhdGlvbixzPW4uZW5jcnlwdGlvblN0cmVuZ3RoLHY9ZS5RdDt4aih0aGlzLHIpO3ZhciBoPSEhbztPYmplY3QuYXNzaWduKHRoaXMse3NpZ25hdHVyZTppLGVuY3J5cHRlZDpoLHNpZ25lZDp1LGNvbXByZXNzZWQ6ZixadDpmJiZuZXcgdCh7UXQ6dn0pLHJuOnUmJm5ldyBVUyx6aXBDcnlwdG86YSxkZWNyeXB0OmgmJmE/bmV3IHlqKG8sYyk6bmV3IEpBKG8sdSxzKX0pfXZhciB0O3JldHVybiBNaihyLFt7a2V5OiJhcHBlbmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHI9VGooa2ooKS5tYXJrKChmdW5jdGlvbiByKHQpe3ZhciBuO3JldHVybiBraigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZighKG49dGhpcykuZW5jcnlwdGVkfHwhdC5sZW5ndGgpe3IubmV4dD01O2JyZWFrfXJldHVybiByLm5leHQ9NCxuLmRlY3J5cHQuYXBwZW5kKHQpO2Nhc2UgNDp0PXIuQXQ7Y2FzZSA1OmlmKCFuLmNvbXByZXNzZWR8fCF0Lmxlbmd0aCl7ci5uZXh0PTk7YnJlYWt9cmV0dXJuIHIubmV4dD04LG4uWnQuYXBwZW5kKHQpO2Nhc2UgODp0PXIuQXQ7Y2FzZSA5OnJldHVybighbi5lbmNyeXB0ZWR8fG4uemlwQ3J5cHRvKSYmbi5zaWduZWQmJnQubGVuZ3RoJiZuLnJuLmFwcGVuZCh0KSxyLmt0KCJyZXR1cm4iLHQpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0se2tleToiZmx1c2giLHZhbHVlOih0PVRqKGtqKCkubWFyaygoZnVuY3Rpb24gcigpe3ZhciB0LG4sZSxpLG87cmV0dXJuIGtqKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLkN0PXIubmV4dCl7Y2FzZSAwOmlmKHQ9dGhpcyxlPW5ldyBVaW50OEFycmF5KDApLCF0LmVuY3J5cHRlZCl7ci5uZXh0PTc7YnJlYWt9aWYoKGk9dC5kZWNyeXB0LmZsdXNoKCkpLnZhbGlkKXtyLm5leHQ9NjticmVha310aHJvdyBFcnJvcigiSW52YWxpZCBzaWduYXR1cmUiKTtjYXNlIDY6ZT1pLmRhdGE7Y2FzZSA3OmlmKHQuZW5jcnlwdGVkJiYhdC56aXBDcnlwdG98fCF0LnNpZ25lZCl7ci5uZXh0PTEzO2JyZWFrfWlmKG89bmV3IERhdGFWaWV3KG5ldyBVaW50OEFycmF5KDQpLmJ1ZmZlciksbj10LnJuLmdldCgpLG8uc2V0VWludDMyKDAsbiksdC5zaWduYXR1cmU9PW8uZ2V0VWludDMyKDAsITEpKXtyLm5leHQ9MTM7YnJlYWt9dGhyb3cgRXJyb3IoIkludmFsaWQgc2lnbmF0dXJlIik7Y2FzZSAxMzppZighdC5jb21wcmVzc2VkKXtyLm5leHQ9MjI7YnJlYWt9cmV0dXJuIHIubmV4dD0xNix0Llp0LmFwcGVuZChlKTtjYXNlIDE2OmlmKHIudG49ci5BdCxyLnRuKXtyLm5leHQ9MTk7YnJlYWt9ci50bj1uZXcgVWludDhBcnJheSgwKTtjYXNlIDE5OnJldHVybiBlPXIudG4sci5uZXh0PTIyLHQuWnQuZmx1c2goKTtjYXNlIDIyOnJldHVybiByLmt0KCJyZXR1cm4iLHtkYXRhOmUsc2lnbmF0dXJlOm59KTtjYXNlIDIzOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dKSxyfSgpLExqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LG4sZSl7dmFyIGk9bi5lbmNyeXB0ZWQsbz1uLnNpZ25lZCx1PW4uY29tcHJlc3NlZCxmPW4ubGV2ZWwsYT1uLnppcENyeXB0byxjPW4ucGFzc3dvcmQscz1uLnBhc3N3b3JkVmVyaWZpY2F0aW9uLHY9bi5lbmNyeXB0aW9uU3RyZW5ndGgsaD1lLlF0O3hqKHRoaXMsciksT2JqZWN0LmFzc2lnbih0aGlzLHtlbmNyeXB0ZWQ6aSxzaWduZWQ6byxjb21wcmVzc2VkOnUsbm46dSYmbmV3IHQoe2xldmVsOmZ8fDUsUXQ6aH0pLHJuOm8mJm5ldyBVUyx6aXBDcnlwdG86YSxlbmNyeXB0OmkmJmE/bmV3IHdqKGMscyk6bmV3IFhBKGMsdil9KX12YXIgdCxuO3JldHVybiBNaihyLFt7a2V5OiJhcHBlbmQiLHZhbHVlOihuPVRqKGtqKCkubWFyaygoZnVuY3Rpb24gcih0KXt2YXIgbixlO3JldHVybiBraigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5DdD1yLm5leHQpe2Nhc2UgMDppZihlPXQsIShuPXRoaXMpLmNvbXByZXNzZWR8fCF0Lmxlbmd0aCl7ci5uZXh0PTY7YnJlYWt9cmV0dXJuIHIubmV4dD01LG4ubm4uYXBwZW5kKHQpO2Nhc2UgNTplPXIuQXQ7Y2FzZSA2OmlmKCFuLmVuY3J5cHRlZHx8IWUubGVuZ3RoKXtyLm5leHQ9MTA7YnJlYWt9cmV0dXJuIHIubmV4dD05LG4uZW5jcnlwdC5hcHBlbmQoZSk7Y2FzZSA5OmU9ci5BdDtjYXNlIDEwOnJldHVybighbi5lbmNyeXB0ZWR8fG4uemlwQ3J5cHRvKSYmbi5zaWduZWQmJnQubGVuZ3RoJiZuLnJuLmFwcGVuZCh0KSxyLmt0KCJyZXR1cm4iLGUpO2Nhc2UgMTI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKSxmdW5jdGlvbihyKXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmx1c2giLHZhbHVlOih0PVRqKGtqKCkubWFyaygoZnVuY3Rpb24gcigpe3ZhciB0LG4sZSxpLG87cmV0dXJuIGtqKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLkN0PXIubmV4dCl7Y2FzZSAwOmlmKHQ9dGhpcyxlPW5ldyBVaW50OEFycmF5KDApLCF0LmNvbXByZXNzZWQpe3IubmV4dD05O2JyZWFrfXJldHVybiByLm5leHQ9NSx0Lm5uLmZsdXNoKCk7Y2FzZSA1OmlmKHIudG49ci5BdCxyLnRuKXtyLm5leHQ9ODticmVha31yLnRuPW5ldyBVaW50OEFycmF5KDApO2Nhc2UgODplPXIudG47Y2FzZSA5OmlmKCF0LmVuY3J5cHRlZCl7ci5uZXh0PTE5O2JyZWFrfXJldHVybiByLm5leHQ9MTIsdC5lbmNyeXB0LmFwcGVuZChlKTtjYXNlIDEyOmU9ci5BdCxpPXQuZW5jcnlwdC5mbHVzaCgpLG49aS5zaWduYXR1cmUsKG89bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgraS5kYXRhLmxlbmd0aCkpLnNldChlLDApLG8uc2V0KGkuZGF0YSxlLmxlbmd0aCksZT1vO2Nhc2UgMTk6cmV0dXJuIHQuZW5jcnlwdGVkJiYhdC56aXBDcnlwdG98fCF0LnNpZ25lZHx8KG49dC5ybi5nZXQoKSksci5rdCgicmV0dXJuIix7ZGF0YTplLHNpZ25hdHVyZTpufSk7Y2FzZSAyMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSkscn0oKTtmdW5jdGlvbiBQaihyKXtyZXR1cm4gUGo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmci5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmciE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHJ9LFBqKHIpfWZ1bmN0aW9uIF9qKCl7LyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL19qPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9O3ZhciByPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxuPXQuaGFzT3duUHJvcGVydHksZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWUuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWUuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1lLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gZihyLHQsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse3ZhbHVlOm4sdDohMCxpOiEwLHdyaXRhYmxlOiEwfSksclt0XX10cnl7Zih7fSwiIil9Y2F0Y2gocil7Zj1mdW5jdGlvbihyLHQsbil7cmV0dXJuIHJbdF09bn19ZnVuY3Rpb24gYShyLHQsbixlKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHY/dDp2LG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksdT1uZXcgaihlfHxbXSk7cmV0dXJuIG8uYnQ9ZnVuY3Rpb24ocix0LG4pe3ZhciBlPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksbyl7aWYoImV4ZWN1dGluZyI9PT1lKXRocm93IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1lKXtpZigidGhyb3ciPT09aSl0aHJvdyBvO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKG4ubWV0aG9kPWksbi5ndD1vOzspe3ZhciB1PW4uU3Q7aWYodSl7dmFyIGY9bSh1LG4pO2lmKGYpe2lmKGY9PT1zKWNvbnRpbnVlO3JldHVybiBmfX1pZigibmV4dCI9PT1uLm1ldGhvZCluLkF0PW4uanQ9bi5ndDtlbHNlIGlmKCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PWUpdGhyb3cgZT0iY29tcGxldGVkIixuLmd0O24uT3Qobi5ndCl9ZWxzZSJyZXR1cm4iPT09bi5tZXRob2QmJm4ua3QoInJldHVybiIsbi5ndCk7ZT0iZXhlY3V0aW5nIjt2YXIgYT1jKHIsdCxuKTtpZigibm9ybWFsIj09PWEudHlwZSl7aWYoZT1uLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixhLmd0PT09cyljb250aW51ZTtyZXR1cm57dmFsdWU6YS5ndCxkb25lOm4uZG9uZX19InRocm93Ij09PWEudHlwZSYmKGU9ImNvbXBsZXRlZCIsbi5tZXRob2Q9InRocm93IixuLmd0PWEuZ3QpfX19KHIsbix1KSxvfWZ1bmN0aW9uIGMocix0LG4pe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixndDpyLmNhbGwodCxuKX19Y2F0Y2gocil7cmV0dXJue3R5cGU6InRocm93IixndDpyfX19ci53cmFwPWE7dmFyIHM9e307ZnVuY3Rpb24gdigpe31mdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGwoKXt9dmFyIGQ9e307ZihkLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIHk9T2JqZWN0LmdldFByb3RvdHlwZU9mLHc9eSYmeSh5KE8oW10pKSk7dyYmdyE9PXQmJm4uY2FsbCh3LGkpJiYoZD13KTt2YXIgYj1sLnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQpO2Z1bmN0aW9uIHAocil7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtmKHIsdCwoZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuYnQodCxyKX0pKX0pKX1mdW5jdGlvbiBnKHIsdCl7ZnVuY3Rpb24gZShpLG8sdSxmKXt2YXIgYT1jKHJbaV0scixvKTtpZigidGhyb3ciIT09YS50eXBlKXt2YXIgcz1hLmd0LHY9cy52YWx1ZTtyZXR1cm4gdiYmIm9iamVjdCI9PVBqKHYpJiZuLmNhbGwodiwiX19hd2FpdCIpP3QucmVzb2x2ZSh2LkV0KS50aGVuKChmdW5jdGlvbihyKXtlKCJuZXh0IixyLHUsZil9KSwoZnVuY3Rpb24ocil7ZSgidGhyb3ciLHIsdSxmKX0pKTp0LnJlc29sdmUodikudGhlbigoZnVuY3Rpb24ocil7cy52YWx1ZT1yLHUocyl9KSwoZnVuY3Rpb24ocil7cmV0dXJuIGUoInRocm93IixyLHUsZil9KSl9ZihhLmd0KX12YXIgaTt0aGlzLmJ0PWZ1bmN0aW9uKHIsbil7ZnVuY3Rpb24gbygpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxpKXtlKHIsbix0LGkpfSkpfXJldHVybiBpPWk/aS50aGVuKG8sbyk6bygpfX1mdW5jdGlvbiBtKHIsdCl7dmFyIG49ci5pdGVyYXRvclt0Lm1ldGhvZF07aWYodm9pZCAwPT09bil7aWYodC5TdD1udWxsLCJ0aHJvdyI9PT10Lm1ldGhvZCl7aWYoci5pdGVyYXRvci5xJiYodC5tZXRob2Q9InJldHVybiIsdC5ndD12b2lkIDAsbShyLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCkpcmV0dXJuIHM7dC5tZXRob2Q9InRocm93Iix0Lmd0PW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2QiKX1yZXR1cm4gc312YXIgZT1jKG4sci5pdGVyYXRvcix0Lmd0KTtpZigidGhyb3ciPT09ZS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuZ3Q9ZS5ndCx0LlN0PW51bGwsczt2YXIgaT1lLmd0O3JldHVybiBpP2kuZG9uZT8odFtyLlR0XT1pLnZhbHVlLHQubmV4dD1yLnh0LCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5ndD12b2lkIDApLHQuU3Q9bnVsbCxzKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuZ3Q9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LlN0PW51bGwscyl9ZnVuY3Rpb24gUyhyKXt2YXIgdD17VXQ6clswXX07MSBpbiByJiYodC5NdD1yWzFdKSwyIGluIHImJih0Lkl0PXJbMl0sdC5MdD1yWzNdKSx0aGlzLlB0LnB1c2godCl9ZnVuY3Rpb24gQShyKXt2YXIgdD1yLl90fHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuZ3Qsci5fdD10fWZ1bmN0aW9uIGoocil7dGhpcy5QdD1be1V0OiJyb290In1dLHIuZm9yRWFjaChTLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIE8ocil7aWYocil7dmFyIHQ9cltpXTtpZih0KXJldHVybiB0LmNhbGwocik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIubmV4dClyZXR1cm4gcjtpZighaXNOYU4oci5sZW5ndGgpKXt2YXIgZT0tMSxvPWZ1bmN0aW9uIHQoKXtmb3IoOysrZTxyLmxlbmd0aDspaWYobi5jYWxsKHIsZSkpcmV0dXJuIHQudmFsdWU9cltlXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBvLm5leHQ9b319cmV0dXJue25leHQ6a319ZnVuY3Rpb24gaygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGgucHJvdG90eXBlPWwsZihiLCJjb25zdHJ1Y3RvciIsbCksZihsLCJjb25zdHJ1Y3RvciIsaCksaC5kaXNwbGF5TmFtZT1mKGwsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxyLlJ0PWZ1bmN0aW9uKHIpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByJiZyLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1ofHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxyLm1hcms9ZnVuY3Rpb24ocil7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YocixsKTooci5fX3Byb3RvX189bCxmKHIsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSxyfSxyLkZ0PWZ1bmN0aW9uKHIpe3JldHVybntFdDpyfX0scChnLnByb3RvdHlwZSksZihnLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHIuTnQ9ZyxyLmFzeW5jPWZ1bmN0aW9uKHQsbixlLGksbyl7dm9pZCAwPT09byYmKG89UHJvbWlzZSk7dmFyIHU9bmV3IGcoYSh0LG4sZSxpKSxvKTtyZXR1cm4gci5SdChuKT91OnUubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHIpe3JldHVybiByLmRvbmU/ci52YWx1ZTp1Lm5leHQoKX0pKX0scChiKSxmKGIsdSwiR2VuZXJhdG9yIiksZihiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZihiLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksci5rZXlzPWZ1bmN0aW9uKHIpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiByKXQucHVzaChuKTtyZXR1cm4gdC5yZXZlcnNlKCksZnVuY3Rpb24gbigpe2Zvcig7dC5sZW5ndGg7KXt2YXIgZT10LnBvcCgpO2lmKGUgaW4gcilyZXR1cm4gbi52YWx1ZT1lLG4uZG9uZT0hMSxufXJldHVybiBuLmRvbmU9ITAsbn19LHIudmFsdWVzPU8sai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmoscmVzZXQ6ZnVuY3Rpb24ocil7aWYodGhpcy5DdD0wLHRoaXMubmV4dD0wLHRoaXMuQXQ9dGhpcy5qdD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuU3Q9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5ndD12b2lkIDAsdGhpcy5QdC5mb3JFYWNoKEEpLCFyKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZuLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgcj10aGlzLlB0WzBdLl90O2lmKCJ0aHJvdyI9PT1yLnR5cGUpdGhyb3cgci5ndDtyZXR1cm4gdGhpcy5CdH0sT3Q6ZnVuY3Rpb24ocil7aWYodGhpcy5kb25lKXRocm93IHI7dmFyIHQ9dGhpcztmdW5jdGlvbiBlKG4sZSl7cmV0dXJuIHUudHlwZT0idGhyb3ciLHUuZ3Q9cix0Lm5leHQ9bixlJiYodC5tZXRob2Q9Im5leHQiLHQuZ3Q9dm9pZCAwKSwhIWV9Zm9yKHZhciBpPXRoaXMuUHQubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPXRoaXMuUHRbaV0sdT1vLl90O2lmKCJyb290Ij09PW8uVXQpcmV0dXJuIGUoImVuZCIpO2lmKG8uVXQ8PXRoaXMuQ3Qpe3ZhciBmPW4uY2FsbChvLCJjYXRjaExvYyIpLGE9bi5jYWxsKG8sImZpbmFsbHlMb2MiKTtpZihmJiZhKXtpZih0aGlzLkN0PG8uTXQpcmV0dXJuIGUoby5NdCwhMCk7aWYodGhpcy5DdDxvLkl0KXJldHVybiBlKG8uSXQpfWVsc2UgaWYoZil7aWYodGhpcy5DdDxvLk10KXJldHVybiBlKG8uTXQsITApfWVsc2V7aWYoIWEpdGhyb3cgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5DdDxvLkl0KXJldHVybiBlKG8uSXQpfX19fSxrdDpmdW5jdGlvbihyLHQpe2Zvcih2YXIgZT10aGlzLlB0Lmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgaT10aGlzLlB0W2VdO2lmKGkuVXQ8PXRoaXMuQ3QmJm4uY2FsbChpLCJmaW5hbGx5TG9jIikmJnRoaXMuQ3Q8aS5JdCl7dmFyIG89aTticmVha319byYmKCJicmVhayI9PT1yfHwiY29udGludWUiPT09cikmJm8uVXQ8PXQmJnQ8PW8uSXQmJihvPW51bGwpO3ZhciB1PW8/by5fdDp7fTtyZXR1cm4gdS50eXBlPXIsdS5ndD10LG8/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9by5JdCxzKTp0aGlzLmNvbXBsZXRlKHUpfSxjb21wbGV0ZTpmdW5jdGlvbihyLHQpe2lmKCJ0aHJvdyI9PT1yLnR5cGUpdGhyb3cgci5ndDtyZXR1cm4iYnJlYWsiPT09ci50eXBlfHwiY29udGludWUiPT09ci50eXBlP3RoaXMubmV4dD1yLmd0OiJyZXR1cm4iPT09ci50eXBlPyh0aGlzLkJ0PXRoaXMuZ3Q9ci5ndCx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ci50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLHN9LGZpbmlzaDpmdW5jdGlvbihyKXtmb3IodmFyIHQ9dGhpcy5QdC5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIG49dGhpcy5QdFt0XTtpZihuLkl0PT09cilyZXR1cm4gdGhpcy5jb21wbGV0ZShuLl90LG4uTHQpLEEobiksc319LGNhdGNoOmZ1bmN0aW9uKHIpe2Zvcih2YXIgdD10aGlzLlB0Lmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLlB0W3RdO2lmKG4uVXQ9PT1yKXt2YXIgZT1uLl90O2lmKCJ0aHJvdyI9PT1lLnR5cGUpe3ZhciBpPWUuZ3Q7QShuKX1yZXR1cm4gaX19dGhyb3cgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxHdDpmdW5jdGlvbihyLHQsbil7cmV0dXJuIHRoaXMuU3Q9e2l0ZXJhdG9yOk8ociksVHQ6dCx4dDpufSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuZ3Q9dm9pZCAwKSxzfX0scn1mdW5jdGlvbiBSaihyLHQsbixlLGksbyx1KXt0cnl7dmFyIGY9cltvXSh1KSxhPWYudmFsdWV9Y2F0Y2gocil7cmV0dXJuIHZvaWQgbihyKX1mLmRvbmU/dChhKTpQcm9taXNlLnJlc29sdmUoYSkudGhlbihlLGkpfWZ1bmN0aW9uIEZqKHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLGkpe3ZhciBvPXIuYXBwbHkodCxuKTtmdW5jdGlvbiB1KHIpe1JqKG8sZSxpLHUsZiwibmV4dCIscil9ZnVuY3Rpb24gZihyKXtSaihvLGUsaSx1LGYsInRocm93IixyKX11KHZvaWQgMCl9KSl9fXZhciBOaixDaj17aW5pdDpmdW5jdGlvbihyKXtyLnNjcmlwdHMmJnIuc2NyaXB0cy5sZW5ndGgmJmltcG9ydFNjcmlwdHMuYXBwbHkodm9pZCAwLHIuc2NyaXB0cyk7dmFyIHQsbj1yLm9wdGlvbnM7c2VsZi5pbml0Q29kZWMmJnNlbGYuaW5pdENvZGVjKCksbi5jb2RlY1R5cGUuc3RhcnRzV2l0aCgiZGVmbGF0ZSIpP3Q9c2VsZi5EZWZsYXRlOm4uY29kZWNUeXBlLnN0YXJ0c1dpdGgoImluZmxhdGUiKSYmKHQ9c2VsZi5JbmZsYXRlKSxOaj1mdW5jdGlvbihyLHQsbil7cmV0dXJuIHQuY29kZWNUeXBlLnN0YXJ0c1dpdGgoImRlZmxhdGUiKT9uZXcgTGoocix0LG4pOnQuY29kZWNUeXBlLnN0YXJ0c1dpdGgoImluZmxhdGUiKT9uZXcgSWoocix0LG4pOnZvaWQgMH0odCxuLHIuY29uZmlnKX0sYXBwZW5kOmZ1bmN0aW9uKHIpe3JldHVybiBGaihfaigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gX2ooKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQuQ3Q9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLE5qLmFwcGVuZChyLmRhdGEpO2Nhc2UgMjpyZXR1cm4gdC50bj10LkF0LHQua3QoInJldHVybiIse2RhdGE6dC50bn0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSgpfSxmbHVzaDpmdW5jdGlvbigpe3JldHVybiBOai5mbHVzaCgpfX07YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24oKXt2YXIgcj1GaihfaigpLm1hcmsoKGZ1bmN0aW9uIHIodCl7dmFyIG4sZSxpLG87cmV0dXJuIF9qKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLkN0PXIubmV4dCl7Y2FzZSAwOmlmKG49dC5kYXRhLGU9bi50eXBlLCEoaT1DaltlXSkpe3IubmV4dD0xOTticmVha31yZXR1cm4gci5DdD00LG4uZGF0YSYmKG4uZGF0YT1uZXcgVWludDhBcnJheShuLmRhdGEpKSxyLm5leHQ9OCxpKG4pO2Nhc2UgODppZihyLnRuPXIuQXQsci50bil7ci5uZXh0PTExO2JyZWFrfXIudG49e307Y2FzZSAxMTppZigobz1yLnRuKS50eXBlPWUsby5kYXRhKXRyeXtvLmRhdGE9by5kYXRhLmJ1ZmZlcixwb3N0TWVzc2FnZShvLFtvLmRhdGFdKX1jYXRjaChyKXtwb3N0TWVzc2FnZShvKX1lbHNlIHBvc3RNZXNzYWdlKG8pO3IubmV4dD0xOTticmVhaztjYXNlIDE2OnIuQ3Q9MTYsci5lbj1yLmNhdGNoKDQpLHBvc3RNZXNzYWdlKHt0eXBlOmUsZXJyb3I6e21lc3NhZ2U6ci5lbi5tZXNzYWdlLHN0YWNrOnIuZW4uc3RhY2t9fSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsbnVsbCxbWzQsMTZdXSl9KSkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTt2YXIgQmo9aXMubWFwO0JlKHt0YXJnZXQ6IkFycmF5IixWOiEwLEc6IVFtKCJtYXAiKX0se21hcDpmdW5jdGlvbihyKXtyZXR1cm4gQmoodGhpcyxyLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgR2o9SGk7QmUoe3RhcmdldDoiQXJyYXkiLFY6ITB9LHtmaWxsOmd1fSksR2ooImZpbGwiKSwoMCxzYS5leHBvcnRzKSgiVWludDE2IiwoZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gcih0aGlzLHQsbixlKX19KSk7dmFyIERqLFZqLFlqLHpqLFdqPWp0LCRqPWksSGo9bi5SZWdFeHAsS2o9JGooKGZ1bmN0aW9uKCl7dmFyIHI9SGooImEiLCJ5Iik7cmV0dXJuIHIubGFzdEluZGV4PTIsbnVsbCE9ci5leGVjKCJhYmNkIil9KSkscWo9S2p8fCRqKChmdW5jdGlvbigpe3JldHVybiFIaigiYSIsInkiKS5zdGlja3l9KSksSmo9e29uOktqfHwkaigoZnVuY3Rpb24oKXt2YXIgcj1IaigiXnIiLCJneSIpO3JldHVybiByLmxhc3RJbmRleD0yLG51bGwhPXIuZXhlYygic3RyIil9KSksdW46cWosZm46S2p9LFhqPWksUWo9bi5SZWdFeHAsWmo9WGooKGZ1bmN0aW9uKCl7dmFyIHI9UWooIi4iLCJzIik7cmV0dXJuIShyLmRvdEFsbCYmci5leGVjKCJcbiIpJiYicyI9PT1yLmZsYWdzKX0pKSxyTz1pLHRPPW4uUmVnRXhwLG5PPXJPKChmdW5jdGlvbigpe3ZhciByPXRPKCIoPzxhPmIpIiwiZyIpO3JldHVybiJiIiE9PXIuZXhlYygiYiIpLmFuLmF8fCJiYyIhPT0iYiIucmVwbGFjZShyLCIkPGE+YyIpfSkpLGVPPWEsaU89UyxvTz1RZSx1Tz1mdW5jdGlvbigpe3ZhciByPVdqKHRoaXMpLHQ9IiI7cmV0dXJuIHIuaGFzSW5kaWNlcyYmKHQrPSJkIiksci5nbG9iYWwmJih0Kz0iZyIpLHIuaWdub3JlQ2FzZSYmKHQrPSJpIiksci5tdWx0aWxpbmUmJih0Kz0ibSIpLHIuZG90QWxsJiYodCs9InMiKSxyLnVuaWNvZGUmJih0Kz0idSIpLHIuY24mJih0Kz0idiIpLHIuc3RpY2t5JiYodCs9InkiKSx0fSxmTz1KaixhTz1wci5leHBvcnRzLGNPPUNpLHNPPW1uLmdldCx2Tz1aaixoTz1uTyxsTz1hTygibmF0aXZlLXN0cmluZy1yZXBsYWNlIiwiIi5yZXBsYWNlKSxkTz0vdC8uZXhlYyx5Tz1kTyx3Tz1pTygiIi5jaGFyQXQpLGJPPWlPKCIiLmluZGV4T2YpLHBPPWlPKCIiLnJlcGxhY2UpLGdPPWlPKCIiLnNsaWNlKSxtTz0oVmo9L2IqL2csZU8oZE8sRGo9L2EvLCJhIiksZU8oZE8sVmosImEiKSwwIT09RGoubGFzdEluZGV4fHwwIT09VmoubGFzdEluZGV4KSxTTz1mTy5vbixBTz12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07ZnVuY3Rpb24gak8ocil7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKEFycmF5LmlzQXJyYXkocikpcmV0dXJuIGtPKHIpfShyKXx8ZnVuY3Rpb24ocil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXJbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9clsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHIpfShyKXx8T08ocil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gT08ocix0KXtpZihyKXtpZigic3RyaW5nIj09dHlwZW9mIHIpcmV0dXJuIGtPKHIsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnIuY29uc3RydWN0b3ImJihuPXIuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbShyKToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP2tPKHIsdCk6dm9pZCAwfX1mdW5jdGlvbiBrTyhyLHQpeyhudWxsPT10fHx0PnIubGVuZ3RoKSYmKHQ9ci5sZW5ndGgpO2Zvcih2YXIgbj0wLGU9QXJyYXkodCk7dD5uO24rKyllW25dPXJbbl07cmV0dXJuIGV9ZnVuY3Rpb24gRU8ocil7cmV0dXJuIFRPKHIubWFwKChmdW5jdGlvbihyKXt2YXIgdCxuPWZ1bmN0aW9uKHIpe2lmKEFycmF5LmlzQXJyYXkocikpcmV0dXJuIHJ9KHQ9cil8fGZ1bmN0aW9uKHIpe3ZhciB0PW51bGw9PXI/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmcltTeW1ib2wuaXRlcmF0b3JdfHxyWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9dCl7dmFyIG4sZSxpPVtdLG89ITAsdT0hMTt0cnl7Zm9yKHQ9dC5jYWxsKHIpOyEobz0obj10Lm5leHQoKSkuZG9uZSkmJihpLnB1c2gobi52YWx1ZSksMiE9PWkubGVuZ3RoKTtvPSEwKTt9Y2F0Y2gocil7dT0hMCxlPXJ9ZmluYWxseXt0cnl7b3x8bnVsbD09dC5xfHx0LnEoKX1maW5hbGx5e2lmKHUpdGhyb3cgZX19cmV0dXJuIGl9fSh0KXx8T08odCwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpLGU9blswXSxpPW5bMV07cmV0dXJuIEFycmF5KGUpLmZpbGwoaSwwLGUpfSkpKX1mdW5jdGlvbiBUTyhyKXtyZXR1cm4gci5yZWR1Y2UoKGZ1bmN0aW9uKHIsdCl7cmV0dXJuIHIuY29uY2F0KEFycmF5LmlzQXJyYXkodCk/VE8odCk6dCl9KSxbXSl9KG1PfHxBT3x8U098fHZPfHxoTykmJih5Tz1mdW5jdGlvbihyKXt2YXIgdCxuLGUsaSxvLHUsZixhPXRoaXMsYz1zTyhhKSxzPW9PKHIpLHY9Yy5yYXc7aWYodilyZXR1cm4gdi5sYXN0SW5kZXg9YS5sYXN0SW5kZXgsdD1lTyh5Tyx2LHMpLGEubGFzdEluZGV4PXYubGFzdEluZGV4LHQ7dmFyIGg9Yy5hbixsPVNPJiZhLnN0aWNreSxkPWVPKHVPLGEpLHk9YS5zb3VyY2Usdz0wLGI9cztpZihsJiYoZD1wTyhkLCJ5IiwiIiksLTE9PT1iTyhkLCJnIikmJihkKz0iZyIpLGI9Z08ocyxhLmxhc3RJbmRleCksYS5sYXN0SW5kZXg+MCYmKCFhLm11bHRpbGluZXx8YS5tdWx0aWxpbmUmJiJcbiIhPT13TyhzLGEubGFzdEluZGV4LTEpKSYmKHk9Iig/OiAiK3krIikiLGI9IiAiK2IsdysrKSxuPVJlZ0V4cCgiXig/OiIreSsiKSIsZCkpLEFPJiYobj1SZWdFeHAoIl4iK3krIiQoPyFcXHMpIixkKSksbU8mJihlPWEubGFzdEluZGV4KSxpPWVPKGRPLGw/bjphLGIpLGw/aT8oaS5pbnB1dD1nTyhpLmlucHV0LHcpLGlbMF09Z08oaVswXSx3KSxpLmluZGV4PWEubGFzdEluZGV4LGEubGFzdEluZGV4Kz1pWzBdLmxlbmd0aCk6YS5sYXN0SW5kZXg9MDptTyYmaSYmKGEubGFzdEluZGV4PWEuZ2xvYmFsP2kuaW5kZXgraVswXS5sZW5ndGg6ZSksQU8mJmkmJmkubGVuZ3RoPjEmJmVPKGxPLGlbMF0sbiwoZnVuY3Rpb24oKXtmb3Iobz0xO2FyZ3VtZW50cy5sZW5ndGgtMj5vO28rKyl2b2lkIDA9PT1hcmd1bWVudHNbb10mJihpW29dPXZvaWQgMCl9KSksaSYmaClmb3IoaS5hbj11PWNPKG51bGwpLG89MDtvPGgubGVuZ3RoO28rKyl1WyhmPWhbb10pWzBdXT1pW2ZbMV1dO3JldHVybiBpfSksQmUoe3RhcmdldDoiUmVnRXhwIixWOiEwLEc6Ly4vLmV4ZWMhPT15T30se2V4ZWM6eU99KTt2YXIgeE89KFlqPVswLDEsMiwzXSkuY29uY2F0LmFwcGx5KFlqLGpPKEVPKFtbMiw0XSxbMiw1XSxbNCw2XSxbNCw3XSxbOCw4XSxbOCw5XSxbMTYsMTBdLFsxNiwxMV0sWzMyLDEyXSxbMzIsMTNdLFs2NCwxNF0sWzY0LDE1XSxbMiwwXSxbMSwxNl0sWzEsMTddLFsyLDE4XSxbMiwxOV0sWzQsMjBdLFs0LDIxXSxbOCwyMl0sWzgsMjNdLFsxNiwyNF0sWzE2LDI1XSxbMzIsMjZdLFszMiwyN10sWzY0LDI4XSxbNjQsMjldXSkpKTtmdW5jdGlvbiBVTygpe3ZhciByPXRoaXM7ZnVuY3Rpb24gdChyLHQpe3ZhciBuPTA7ZG97bnw9MSZyLHI+Pj49MSxuPDw9MX13aGlsZSgtLXQ+MCk7cmV0dXJuIG4+Pj4xfXIuc249ZnVuY3Rpb24obil7dmFyIGUsaSxvLHU9ci52bixmPXIubG4uaG4sYT1yLmxuLmRuLGM9LTE7Zm9yKG4ueW49MCxuLnduPTU3MyxlPTA7YT5lO2UrKykwIT09dVsyKmVdPyhuLmJuWysrbi55bl09Yz1lLG4ucG5bZV09MCk6dVsyKmUrMV09MDtmb3IoOzI+bi55bjspdVsyKihvPW4uYm5bKytuLnluXT0yPmM/KytjOjApXT0xLG4ucG5bb109MCxuLmduLS0sZiYmKG4ubW4tPWZbMipvKzFdKTtmb3Ioci5Tbj1jLGU9TWF0aC5mbG9vcihuLnluLzIpO2U+PTE7ZS0tKW4uQW4odSxlKTtvPWE7ZG97ZT1uLmJuWzFdLG4uYm5bMV09bi5ibltuLnluLS1dLG4uQW4odSwxKSxpPW4uYm5bMV0sbi5iblstLW4ud25dPWUsbi5iblstLW4ud25dPWksdVsyKm9dPXVbMiplXSt1WzIqaV0sbi5wbltvXT1NYXRoLm1heChuLnBuW2VdLG4ucG5baV0pKzEsdVsyKmUrMV09dVsyKmkrMV09byxuLmJuWzFdPW8rKyxuLkFuKHUsMSl9d2hpbGUobi55bj49Mik7bi5iblstLW4ud25dPW4uYm5bMV0sZnVuY3Rpb24odCl7dmFyIG4sZSxpLG8sdSxmLGE9ci52bixjPXIubG4uaG4scz1yLmxuLmpuLHY9ci5sbi5PbixoPXIubG4ua24sbD0wO2ZvcihvPTA7MTU+PW87bysrKXQuRW5bb109MDtmb3IoYVsyKnQuYm5bdC53bl0rMV09MCxuPXQud24rMTs1NzM+bjtuKyspKG89YVsyKmFbMiooZT10LmJuW25dKSsxXSsxXSsxKT5oJiYobz1oLGwrKyksYVsyKmUrMV09byxlPnIuU258fCh0LkVuW29dKyssdT0wLHY+ZXx8KHU9c1tlLXZdKSxmPWFbMiplXSx0LmduKz1mKihvK3UpLGMmJih0Lm1uKz1mKihjWzIqZSsxXSt1KSkpO2lmKDAhPT1sKXtkb3tmb3Iobz1oLTE7MD09PXQuRW5bb107KW8tLTt0LkVuW29dLS0sdC5FbltvKzFdKz0yLHQuRW5baF0tLSxsLT0yfXdoaWxlKGw+MCk7Zm9yKG89aDswIT09bztvLS0pZm9yKGU9dC5FbltvXTswIT09ZTspKGk9dC5iblstLW5dKT5yLlNufHwoYVsyKmkrMV0hPW8mJih0LmduKz0oby1hWzIqaSsxXSkqYVsyKmldLGFbMippKzFdPW8pLGUtLSl9fShuKSxmdW5jdGlvbihyLG4sZSl7dmFyIGksbyx1LGY9W10sYT0wO2ZvcihpPTE7MTU+PWk7aSsrKWZbaV09YT1hK2VbaS0xXTw8MTtmb3Iobz0wO24+PW87bysrKTAhPT0odT1yWzIqbysxXSkmJihyWzIqb109dChmW3VdKyssdSkpfSh1LHIuU24sbi5Fbil9fWZ1bmN0aW9uIE1PKHIsdCxuLGUsaSl7dmFyIG89dGhpcztvLmhuPXIsby5qbj10LG8uT249bixvLmRuPWUsby5rbj1pfVVPLlRuPSh6aj1bMCwxLDIsMyw0LDUsNiw3XSkuY29uY2F0LmFwcGx5KHpqLGpPKEVPKFtbMiw4XSxbMiw5XSxbMiwxMF0sWzIsMTFdLFs0LDEyXSxbNCwxM10sWzQsMTRdLFs0LDE1XSxbOCwxNl0sWzgsMTddLFs4LDE4XSxbOCwxOV0sWzE2LDIwXSxbMTYsMjFdLFsxNiwyMl0sWzE2LDIzXSxbMzIsMjRdLFszMiwyNV0sWzMyLDI2XSxbMzEsMjddLFsxLDI4XV0pKSksVU8ueG49WzAsMSwyLDMsNCw1LDYsNyw4LDEwLDEyLDE0LDE2LDIwLDI0LDI4LDMyLDQwLDQ4LDU2LDY0LDgwLDk2LDExMiwxMjgsMTYwLDE5MiwyMjQsMF0sVU8uVW49WzAsMSwyLDMsNCw2LDgsMTIsMTYsMjQsMzIsNDgsNjQsOTYsMTI4LDE5MiwyNTYsMzg0LDUxMiw3NjgsMTAyNCwxNTM2LDIwNDgsMzA3Miw0MDk2LDYxNDQsODE5MiwxMjI4OCwxNjM4NCwyNDU3Nl0sVU8uTW49ZnVuY3Rpb24ocil7cmV0dXJuIDI1Nj5yP3hPW3JdOnhPWzI1Nisocj4+PjcpXX0sVU8uSW49WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0sVU8uTG49WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLFVPLlBuPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxVTy5fbj1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07dmFyIElPPUVPKFtbMTQ0LDhdLFsxMTIsOV0sWzI0LDddLFs4LDhdXSk7TU8uUm49VE8oWzEyLDE0MCw3NiwyMDQsNDQsMTcyLDEwOCwyMzYsMjgsMTU2LDkyLDIyMCw2MCwxODgsMTI0LDI1MiwyLDEzMCw2NiwxOTQsMzQsMTYyLDk4LDIyNiwxOCwxNDYsODIsMjEwLDUwLDE3OCwxMTQsMjQyLDEwLDEzOCw3NCwyMDIsNDIsMTcwLDEwNiwyMzQsMjYsMTU0LDkwLDIxOCw1OCwxODYsMTIyLDI1MCw2LDEzNCw3MCwxOTgsMzgsMTY2LDEwMiwyMzAsMjIsMTUwLDg2LDIxNCw1NCwxODIsMTE4LDI0NiwxNCwxNDIsNzgsMjA2LDQ2LDE3NCwxMTAsMjM4LDMwLDE1OCw5NCwyMjIsNjIsMTkwLDEyNiwyNTQsMSwxMjksNjUsMTkzLDMzLDE2MSw5NywyMjUsMTcsMTQ1LDgxLDIwOSw0OSwxNzcsMTEzLDI0MSw5LDEzNyw3MywyMDEsNDEsMTY5LDEwNSwyMzMsMjUsMTUzLDg5LDIxNyw1NywxODUsMTIxLDI0OSw1LDEzMyw2OSwxOTcsMzcsMTY1LDEwMSwyMjksMjEsMTQ5LDg1LDIxMyw1MywxODEsMTE3LDI0NSwxMywxNDEsNzcsMjA1LDQ1LDE3MywxMDksMjM3LDI5LDE1Nyw5MywyMjEsNjEsMTg5LDEyNSwyNTMsMTksMjc1LDE0Nyw0MDMsODMsMzM5LDIxMSw0NjcsNTEsMzA3LDE3OSw0MzUsMTE1LDM3MSwyNDMsNDk5LDExLDI2NywxMzksMzk1LDc1LDMzMSwyMDMsNDU5LDQzLDI5OSwxNzEsNDI3LDEwNywzNjMsMjM1LDQ5MSwyNywyODMsMTU1LDQxMSw5MSwzNDcsMjE5LDQ3NSw1OSwzMTUsMTg3LDQ0MywxMjMsMzc5LDI1MSw1MDcsNywyNjMsMTM1LDM5MSw3MSwzMjcsMTk5LDQ1NSwzOSwyOTUsMTY3LDQyMywxMDMsMzU5LDIzMSw0ODcsMjMsMjc5LDE1MSw0MDcsODcsMzQzLDIxNSw0NzEsNTUsMzExLDE4Myw0MzksMTE5LDM3NSwyNDcsNTAzLDE1LDI3MSwxNDMsMzk5LDc5LDMzNSwyMDcsNDYzLDQ3LDMwMywxNzUsNDMxLDExMSwzNjcsMjM5LDQ5NSwzMSwyODcsMTU5LDQxNSw5NSwzNTEsMjIzLDQ3OSw2MywzMTksMTkxLDQ0NywxMjcsMzgzLDI1NSw1MTEsMCw2NCwzMiw5NiwxNiw4MCw0OCwxMTIsOCw3Miw0MCwxMDQsMjQsODgsNTYsMTIwLDQsNjgsMzYsMTAwLDIwLDg0LDUyLDExNiwzLDEzMSw2NywxOTUsMzUsMTYzLDk5LDIyN10ubWFwKChmdW5jdGlvbihyLHQpe3JldHVybltyLElPW3RdXX0pKSk7dmFyIExPPUVPKFtbMzAsNV1dKTtmdW5jdGlvbiBQTyhyLHQsbixlLGkpe3ZhciBvPXRoaXM7by5Gbj1yLG8uTm49dCxvLkNuPW4sby5Cbj1lLG8uR249aX1NTy5Ebj1UTyhbMCwxNiw4LDI0LDQsMjAsMTIsMjgsMiwxOCwxMCwyNiw2LDIyLDE0LDMwLDEsMTcsOSwyNSw1LDIxLDEzLDI5LDMsMTksMTEsMjcsNywyM10ubWFwKChmdW5jdGlvbihyLHQpe3JldHVybltyLExPW3RdXX0pKSksTU8uVm49bmV3IE1PKE1PLlJuLFVPLkluLDI1NywyODYsMTUpLE1PLlluPW5ldyBNTyhNTy5EbixVTy5MbiwwLDMwLDE1KSxNTy56bj1uZXcgTU8obnVsbCxVTy5QbiwwLDE5LDcpO3ZhciBfTz1bbmV3IFBPKDAsMCwwLDAsMCksbmV3IFBPKDQsNCw4LDQsMSksbmV3IFBPKDQsNSwxNiw4LDEpLG5ldyBQTyg0LDYsMzIsMzIsMSksbmV3IFBPKDQsNCwxNiwxNiwyKSxuZXcgUE8oOCwxNiwzMiwzMiwyKSxuZXcgUE8oOCwxNiwxMjgsMTI4LDIpLG5ldyBQTyg4LDMyLDEyOCwyNTYsMiksbmV3IFBPKDMyLDEyOCwyNTgsMTAyNCwyKSxuZXcgUE8oMzIsMjU4LDI1OCw0MDk2LDIpXSxSTz1bIm5lZWQgZGljdGlvbmFyeSIsInN0cmVhbSBlbmQiLCIiLCIiLCJzdHJlYW0gZXJyb3IiLCJkYXRhIGVycm9yIiwiIiwiYnVmZmVyIGVycm9yIiwiIiwiIl07ZnVuY3Rpb24gRk8ocix0LG4sZSl7dmFyIGk9clsyKnRdLG89clsyKm5dO3JldHVybiBvPml8fGk9PW8mJmVbdF08PWVbbl19ZnVuY3Rpb24gTk8oKXt2YXIgcix0LG4sZSxpLG8sdSxmLGEsYyxzLHYsaCxsLGQseSx3LGIscCxnLG0sUyxBLGosTyxrLEUsVCx4LFUsTSxJLEwsUCxfLFIsRixOLEMsQj10aGlzLEc9bmV3IFVPLEQ9bmV3IFVPLFY9bmV3IFVPO2Z1bmN0aW9uIFkoKXt2YXIgcjtmb3Iocj0wOzI4Nj5yO3IrKylNWzIqcl09MDtmb3Iocj0wOzMwPnI7cisrKUlbMipyXT0wO2ZvcihyPTA7MTk+cjtyKyspTFsyKnJdPTA7TVs1MTJdPTEsQi5nbj1CLm1uPTAsXz1SPTB9ZnVuY3Rpb24geihyLHQpe3ZhciBuLGU9LTEsaT1yWzFdLG89MCx1PTcsZj00OzA9PT1pJiYodT0xMzgsZj0zKSxyWzIqKHQrMSkrMV09NjU1MzU7Zm9yKHZhciBhPTA7dD49YTthKyspbj1pLGk9clsyKihhKzEpKzFdLCsrbzx1JiZuPT1pfHwoZj5vP0xbMipuXSs9bzowIT09bj8obiE9ZSYmTFsyKm5dKyssTFszMl0rKyk6bz4xMD9MWzM2XSsrOkxbMzRdKyssbz0wLGU9biwwPT09aT8odT0xMzgsZj0zKTpuPT1pPyh1PTYsZj0zKToodT03LGY9NCkpfWZ1bmN0aW9uIFcocil7Qi5XbltCLnBlbmRpbmcrK109cn1mdW5jdGlvbiAkKHIpe1coMjU1JnIpLFcocj4+PjgmMjU1KX1mdW5jdGlvbiBIKHIsdCl7dmFyIG4sZT10O0M+MTYtZT8oJChOfD0obj1yKTw8QyY2NTUzNSksTj1uPj4+MTYtQyxDKz1lLTE2KTooTnw9cjw8QyY2NTUzNSxDKz1lKX1mdW5jdGlvbiBLKHIsdCl7dmFyIG49MipyO0goNjU1MzUmdFtuXSw2NTUzNSZ0W24rMV0pfWZ1bmN0aW9uIHEocix0KXt2YXIgbixlLGk9LTEsbz1yWzFdLHU9MCxmPTcsYT00O2ZvcigwPT09byYmKGY9MTM4LGE9Myksbj0wO3Q+PW47bisrKWlmKGU9byxvPXJbMioobisxKSsxXSwrK3U+PWZ8fGUhPW8pe2lmKGE+dSlkb3tLKGUsTCl9d2hpbGUoMCE9LS11KTtlbHNlIDAhPT1lPyhlIT1pJiYoSyhlLEwpLHUtLSksSygxNixMKSxIKHUtMywyKSk6dT4xMD8oSygxOCxMKSxIKHUtMTEsNykpOihLKDE3LEwpLEgodS0zLDMpKTt1PTAsaT1lLDA9PT1vPyhmPTEzOCxhPTMpOmU9PW8/KGY9NixhPTMpOihmPTcsYT00KX19ZnVuY3Rpb24gSigpezE2PT1DPygkKE4pLE49MCxDPTApOjg+Q3x8KFcoMjU1Jk4pLE4+Pj49OCxDLT04KX1mdW5jdGlvbiBYKHIsdCl7dmFyIG4sZSxpO2lmKEIuJG5bX109cixCLkhuW19dPTI1NSZ0LF8rKywwPT09cj9NWzIqdF0rKzooUisrLHItLSxNWzIqKFVPLlRuW3RdKzI1NisxKV0rKyxJWzIqVU8uTW4ocildKyspLDA9PSg4MTkxJl8pJiZFPjIpe2ZvcihuPTgqXyxlPW0tdyxpPTA7MzA+aTtpKyspbis9SVsyKmldKig1K1VPLkxuW2ldKTtpZihuPj4+PTMsTWF0aC5mbG9vcihfLzIpPlImJk1hdGguZmxvb3IoZS8yKT5uKXJldHVybiEwfXJldHVybiBfPT1QLTF9ZnVuY3Rpb24gUShyLHQpe3ZhciBuLGUsaSxvLHU9MDtpZigwIT09Xylkb3tuPUIuJG5bdV0sZT1CLkhuW3VdLHUrKywwPT09bj9LKGUscik6KEsoKGk9VU8uVG5bZV0pKzI1NisxLHIpLDAhPT0obz1VTy5JbltpXSkmJkgoZS09VU8ueG5baV0sbyksbi0tLEsoaT1VTy5NbihuKSx0KSwwIT09KG89VU8uTG5baV0pJiZIKG4tPVVPLlVuW2ldLG8pKX13aGlsZShfPnUpO0soMjU2LHIpLEY9cls1MTNdfWZ1bmN0aW9uIFooKXtDPjg/JChOKTpDPjAmJlcoMjU1Jk4pLE49MCxDPTB9ZnVuY3Rpb24gcnIocix0LG4pe0goMCsobj8xOjApLDMpLGZ1bmN0aW9uKHIsdCl7WigpLEY9OCwkKHQpLCQofnQpLEIuV24uc2V0KGYuc3ViYXJyYXkocixyK3QpLEIucGVuZGluZyksQi5wZW5kaW5nKz10fShyLHQpfWZ1bmN0aW9uIHRyKHQpeyhmdW5jdGlvbihyLHQsbil7dmFyIGUsaSxvPTA7RT4wPyhHLnNuKEIpLEQuc24oQiksbz1mdW5jdGlvbigpe3ZhciByO2Zvcih6KE0sRy5TbikseihJLEQuU24pLFYuc24oQikscj0xODtyPj0zJiYwPT09TFsyKlVPLl9uW3JdKzFdO3ItLSk7cmV0dXJuIEIuZ24rPTE0KzMqKHIrMSkscn0oKSxlPUIuZ24rMys3Pj4+MywoaT1CLm1uKzMrNz4+PjMpPmV8fChlPWkpKTplPWk9dCs1LHQrND5lfHwtMT09cj9pPT1lPyhIKDIrKG4/MTowKSwzKSxRKE1PLlJuLE1PLkRuKSk6KEgoNCsobj8xOjApLDMpLGZ1bmN0aW9uKHIsdCxuKXt2YXIgZTtmb3IoSChyLTI1Nyw1KSxIKHQtMSw1KSxIKG4tNCw0KSxlPTA7bj5lO2UrKylIKExbMipVTy5fbltlXSsxXSwzKTtxKE0sci0xKSxxKEksdC0xKX0oRy5TbisxLEQuU24rMSxvKzEpLFEoTSxJKSk6cnIocix0LG4pLFkoKSxuJiZaKCl9KSgwPnc/LTE6dyxtLXcsdCksdz1tLHIuS24oKX1mdW5jdGlvbiBucigpe3ZhciB0LG4sZSxvO2Rve2lmKDA9PShvPWEtQS1tKSYmMD09PW0mJjA9PT1BKW89aTtlbHNlIGlmKC0xPT1vKW8tLTtlbHNlIGlmKG0+PWkraS0yNjIpe2Yuc2V0KGYuc3ViYXJyYXkoaSxpK2kpLDApLFMtPWksbS09aSx3LT1pLGU9dD1oO2Rve249NjU1MzUmc1stLWVdLHNbZV09aT5uPzA6bi1pfXdoaWxlKDAhPS0tdCk7ZT10PWk7ZG97bj02NTUzNSZjWy0tZV0sY1tlXT1pPm4/MDpuLWl9d2hpbGUoMCE9LS10KTtvKz1pfWlmKDA9PT1yLnFuKXJldHVybjt0PXIuSm4oZixtK0EsbyksMz4oQSs9dCl8fCh2PSgodj0yNTUmZlttXSk8PHleMjU1JmZbbSsxXSkmZCl9d2hpbGUoMjYyPkEmJjAhPT1yLnFuKX1mdW5jdGlvbiBlcihyKXt2YXIgdCxuLGU9TyxvPW0sYT1qLHM9bT5pLTI2Mj9tLShpLTI2Mik6MCx2PVUsaD11LGw9bSsyNTgsZD1mW28rYS0xXSx5PWZbbythXTt4Pmp8fChlPj49Miksdj5BJiYodj1BKTtkb3tpZihmWyh0PXIpK2FdPT15JiZmW3QrYS0xXT09ZCYmZlt0XT09ZltvXSYmZlsrK3RdPT1mW28rMV0pe28rPTIsdCsrO2Rve313aGlsZShmWysrb109PWZbKyt0XSYmZlsrK29dPT1mWysrdF0mJmZbKytvXT09ZlsrK3RdJiZmWysrb109PWZbKyt0XSYmZlsrK29dPT1mWysrdF0mJmZbKytvXT09ZlsrK3RdJiZmWysrb109PWZbKyt0XSYmZlsrK29dPT1mWysrdF0mJmw+byk7aWYobj0yNTgtKGwtbyksbz1sLTI1OCxuPmEpe2lmKFM9cixhPW4sbj49dilicmVhaztkPWZbbythLTFdLHk9ZltvK2FdfX19d2hpbGUoKHI9NjU1MzUmY1tyJmhdKT5zJiYwIT0tLWUpO3JldHVybiBhPkE/QTphfUIucG49W10sQi5Fbj1bXSxCLmJuPVtdLE09W10sST1bXSxMPVtdLEIuQW49ZnVuY3Rpb24ocix0KXtmb3IodmFyIG49Qi5ibixlPW5bdF0saT10PDwxO2k8PUIueW4mJihpPEIueW4mJkZPKHIsbltpKzFdLG5baV0sQi5wbikmJmkrKywhRk8ocixlLG5baV0sQi5wbikpOyluW3RdPW5baV0sdD1pLGk8PD0xO25bdF09ZX0sQi5Ybj1mdW5jdGlvbihyLHAsUyxfLFIseil7cmV0dXJuIF98fChfPTgpLFJ8fChSPTgpLHp8fCh6PTApLHIuUW49bnVsbCwtMT09cCYmKHA9NiksMT5SfHxSPjl8fDghPV98fDk+U3x8Uz4xNXx8MD5wfHxwPjl8fDA+enx8ej4yPy0yOihyLlpuPUIsdT0oaT0xPDwobz1TKSktMSxkPShoPTE8PChsPVIrNykpLTEseT1NYXRoLmZsb29yKChsKzMtMSkvMyksZj1uZXcgVWludDhBcnJheSgyKmkpLGM9W10scz1bXSxQPTE8PFIrNixCLlduPW5ldyBVaW50OEFycmF5KDQqUCksbj00KlAsQi4kbj1uZXcgVWludDE2QXJyYXkoUCksQi5Ibj1uZXcgVWludDhBcnJheShQKSxFPXAsVD16LGZ1bmN0aW9uKHIpe3JldHVybiByLnJlPXIudGU9MCxyLlFuPW51bGwsQi5wZW5kaW5nPTAsQi5uZT0wLHQ9MTEzLGU9MCxHLnZuPU0sRy5sbj1NTy5WbixELnZuPUksRC5sbj1NTy5ZbixWLnZuPUwsVi5sbj1NTy56bixOPTAsQz0wLEY9OCxZKCksZnVuY3Rpb24oKXthPTIqaSxzW2gtMV09MDtmb3IodmFyIHI9MDtoLTE+cjtyKyspc1tyXT0wO2s9X09bRV0uTm4seD1fT1tFXS5GbixVPV9PW0VdLkNuLE89X09bRV0uQm4sbT0wLHc9MCxBPTAsYj1qPTIsZz0wLHY9MH0oKSwwfShyKSl9LEIuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gNDIhPXQmJjExMyE9dCYmNjY2IT10Py0yOihCLkhuPW51bGwsQi4kbj1udWxsLEIuV249bnVsbCxzPW51bGwsYz1udWxsLGY9bnVsbCxCLlpuPW51bGwsMTEzPT10Py0zOjApfSxCLmllPWZ1bmN0aW9uKHIsdCxuKXt2YXIgZT0wO3JldHVybi0xPT10JiYodD02KSwwPnR8fHQ+OXx8MD5ufHxuPjI/LTI6KF9PW0VdLkduIT1fT1t0XS5HbiYmMCE9PXIucmUmJihlPXIubm4oMSkpLEUhPXQmJihrPV9PW0U9dF0uTm4seD1fT1tFXS5GbixVPV9PW0VdLkNuLE89X09bRV0uQm4pLFQ9bixlKX0sQi5vZT1mdW5jdGlvbihyLG4sZSl7dmFyIG8sYT1lLGg9MDtpZighbnx8NDIhPXQpcmV0dXJuLTI7aWYoMz5hKXJldHVybiAwO2ZvcihhPmktMjYyJiYoaD1lLShhPWktMjYyKSksZi5zZXQobi5zdWJhcnJheShoLGgrYSksMCksbT1hLHc9YSx2PSgodj0yNTUmZlswXSk8PHleMjU1JmZbMV0pJmQsbz0wO2EtMz49bztvKyspdj0odjw8eV4yNTUmZltvKzJdKSZkLGNbbyZ1XT1zW3ZdLHNbdl09bztyZXR1cm4gMH0sQi5ubj1mdW5jdGlvbihhLGwpe3ZhciBPLHgsVSxNLEksTDtpZihsPjR8fDA+bClyZXR1cm4tMjtpZighYS51ZXx8IWEuZmUmJjAhPT1hLnFufHw2NjY9PXQmJjQhPWwpcmV0dXJuIGEuUW49Uk9bNF0sLTI7aWYoMD09PWEuYWUpcmV0dXJuIGEuUW49Uk9bN10sLTU7aWYocj1hLE09ZSxlPWwsNDI9PXQmJih4PTgrKG8tODw8NCk8PDgsKFU9KEUtMSYyNTUpPj4xKT4zJiYoVT0zKSx4fD1VPDw2LDAhPT1tJiYoeHw9MzIpLHQ9MTEzLFcoKEw9eCs9MzEteCUzMSk+PjgmMjU1KSxXKDI1NSZMKSksMCE9PUIucGVuZGluZyl7aWYoci5LbigpLDA9PT1yLmFlKXJldHVybiBlPS0xLDB9ZWxzZSBpZigwPT09ci5xbiYmTT49bCYmNCE9bClyZXR1cm4gci5Rbj1ST1s3XSwtNTtpZig2NjY9PXQmJjAhPT1yLnFuKXJldHVybiBhLlFuPVJPWzddLC01O2lmKDAhPT1yLnFufHwwIT09QXx8MCE9bCYmNjY2IT10KXtzd2l0Y2goST0tMSxfT1tFXS5Hbil7Y2FzZSAwOkk9ZnVuY3Rpb24odCl7dmFyIGUsbz02NTUzNTtmb3Iobz5uLTUmJihvPW4tNSk7Oyl7aWYoMT49QSl7aWYobnIoKSwwPT09QSYmMD09dClyZXR1cm4gMDtpZigwPT09QSlicmVha31pZihtKz1BLEE9MCxlPXcrbywoMD09PW18fG0+PWUpJiYoQT1tLWUsbT1lLHRyKCExKSwwPT09ci5hZSkpcmV0dXJuIDA7aWYobS13Pj1pLTI2MiYmKHRyKCExKSwwPT09ci5hZSkpcmV0dXJuIDB9cmV0dXJuIHRyKDQ9PXQpLDA9PT1yLmFlPzQ9PXQ/MjowOjQ9PXQ/MzoxfShsKTticmVhaztjYXNlIDE6ST1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT0wOzspe2lmKDI2Mj5BKXtpZihucigpLDI2Mj5BJiYwPT10KXJldHVybiAwO2lmKDA9PT1BKWJyZWFrfWlmKDM+QXx8KHY9KHY8PHleMjU1JmZbbSsyXSkmZCxlPTY1NTM1JnNbdl0sY1ttJnVdPXNbdl0sc1t2XT1tKSwwPT09ZXx8KG0tZSY2NTUzNSk+aS0yNjJ8fDIhPVQmJihiPWVyKGUpKSwzPmIpbj1YKDAsMjU1JmZbbV0pLEEtLSxtKys7ZWxzZSBpZihuPVgobS1TLGItMyksQS09YixiPmt8fDM+QSltKz1iLGI9MCx2PSgodj0yNTUmZlttXSk8PHleMjU1JmZbbSsxXSkmZDtlbHNle2ItLTtkb3ttKyssdj0odjw8eV4yNTUmZlttKzJdKSZkLGU9NjU1MzUmc1t2XSxjW20mdV09c1t2XSxzW3ZdPW19d2hpbGUoMCE9LS1iKTttKyt9aWYobiYmKHRyKCExKSwwPT09ci5hZSkpcmV0dXJuIDB9cmV0dXJuIHRyKDQ9PXQpLDA9PT1yLmFlPzQ9PXQ/MjowOjQ9PXQ/MzoxfShsKTticmVhaztjYXNlIDI6ST1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxvPTA7Oyl7aWYoMjYyPkEpe2lmKG5yKCksMjYyPkEmJjA9PXQpcmV0dXJuIDA7aWYoMD09PUEpYnJlYWt9aWYoMz5BfHwodj0odjw8eV4yNTUmZlttKzJdKSZkLG89NjU1MzUmc1t2XSxjW20mdV09c1t2XSxzW3ZdPW0pLGo9YixwPVMsYj0yLDAhPT1vJiZrPmomJmktMjYyPj0obS1vJjY1NTM1KSYmKDIhPVQmJihiPWVyKG8pKSw1Pj1iJiYoMT09VHx8Mz09YiYmbS1TPjQwOTYpJiYoYj0yKSksMz5qfHxiPmopaWYoMCE9PWcpe2lmKChuPVgoMCwyNTUmZlttLTFdKSkmJnRyKCExKSxtKyssQS0tLDA9PT1yLmFlKXJldHVybiAwfWVsc2UgZz0xLG0rKyxBLS07ZWxzZXtlPW0rQS0zLG49WChtLTEtcCxqLTMpLEEtPWotMSxqLT0yO2RveysrbT5lfHwodj0odjw8eV4yNTUmZlttKzJdKSZkLG89NjU1MzUmc1t2XSxjW20mdV09c1t2XSxzW3ZdPW0pfXdoaWxlKDAhPS0taik7aWYoZz0wLGI9MixtKyssbiYmKHRyKCExKSwwPT09ci5hZSkpcmV0dXJuIDB9fXJldHVybiAwIT09ZyYmKG49WCgwLDI1NSZmW20tMV0pLGc9MCksdHIoND09dCksMD09PXIuYWU/ND09dD8yOjA6ND09dD8zOjF9KGwpfWlmKDIhPUkmJjMhPUl8fCh0PTY2NiksMD09SXx8Mj09SSlyZXR1cm4gMD09PXIuYWUmJihlPS0xKSwwO2lmKDE9PUkpe2lmKDE9PWwpSCgyLDMpLEsoMjU2LE1PLlJuKSxKKCksOT4xK0YrMTAtQyYmKEgoMiwzKSxLKDI1NixNTy5SbiksSigpKSxGPTc7ZWxzZSBpZihycigwLDAsITEpLDM9PWwpZm9yKE89MDtoPk87TysrKXNbT109MDtpZihyLktuKCksMD09PXIuYWUpcmV0dXJuIGU9LTEsMH19cmV0dXJuIDQhPWw/MDoxfX1mdW5jdGlvbiBDTygpe3ZhciByPXRoaXM7ci5jZT0wLHIuc2U9MCxyLnFuPTAsci5yZT0wLHIuYWU9MCxyLnRlPTB9ZnVuY3Rpb24gQk8ocil7dmFyIHQsbj1uZXcgQ08sZT0odD1yJiZyLlF0P3IuUXQ6NjU1MzYpKzUqKE1hdGguZmxvb3IodC8xNjM4MykrMSksaT1uZXcgVWludDhBcnJheShlKSxvPXI/ci5sZXZlbDotMTt2b2lkIDA9PT1vJiYobz0tMSksbi5YbihvKSxuLnVlPWksdGhpcy5hcHBlbmQ9ZnVuY3Rpb24ocix0KXt2YXIgbyx1PTAsZj0wLGE9MCxjPVtdO2lmKHIubGVuZ3RoKXtuLmNlPTAsbi5mZT1yLG4ucW49ci5sZW5ndGg7ZG97aWYobi5zZT0wLG4uYWU9ZSwwIT1uLm5uKDApKXRocm93IEVycm9yKCJkZWZsYXRpbmc6ICIrbi5Rbik7bi5zZSYmKG4uc2U9PWU/Yy5wdXNoKG5ldyBVaW50OEFycmF5KGkpKTpjLnB1c2goaS5zbGljZSgwLG4uc2UpKSksYSs9bi5zZSx0JiZuLmNlPjAmJm4uY2UhPXUmJih0KG4uY2UpLHU9bi5jZSl9d2hpbGUobi5xbj4wfHwwPT09bi5hZSk7cmV0dXJuIGMubGVuZ3RoPjE/KG89bmV3IFVpbnQ4QXJyYXkoYSksYy5mb3JFYWNoKChmdW5jdGlvbihyKXtvLnNldChyLGYpLGYrPXIubGVuZ3RofSkpKTpvPWNbMF18fG5ldyBVaW50OEFycmF5KDApLG99fSx0aGlzLmZsdXNoPWZ1bmN0aW9uKCl7dmFyIHIsdCxvPTAsdT0wLGY9W107ZG97aWYobi5zZT0wLG4uYWU9ZSwxIT0ocj1uLm5uKDQpKSYmMCE9cil0aHJvdyBFcnJvcigiZGVmbGF0aW5nOiAiK24uUW4pO2Utbi5hZT4wJiZmLnB1c2goaS5zbGljZSgwLG4uc2UpKSx1Kz1uLnNlfXdoaWxlKG4ucW4+MHx8MD09PW4uYWUpO3JldHVybiBuLmVlKCksdD1uZXcgVWludDhBcnJheSh1KSxmLmZvckVhY2goKGZ1bmN0aW9uKHIpe3Quc2V0KHIsbyksbys9ci5sZW5ndGh9KSksdH19Q08ucHJvdG90eXBlPXtYbjpmdW5jdGlvbihyLHQpe3ZhciBuPXRoaXM7cmV0dXJuIG4uWm49bmV3IE5PLHR8fCh0PTE1KSxuLlpuLlhuKG4scix0KX0sbm46ZnVuY3Rpb24ocil7dmFyIHQ9dGhpcztyZXR1cm4gdC5abj90LlpuLm5uKHQscik6LTJ9LGVlOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcztpZighci5abilyZXR1cm4tMjt2YXIgdD1yLlpuLmVlKCk7cmV0dXJuIHIuWm49bnVsbCx0fSxpZTpmdW5jdGlvbihyLHQpe3ZhciBuPXRoaXM7cmV0dXJuIG4uWm4/bi5abi5pZShuLHIsdCk6LTJ9LG9lOmZ1bmN0aW9uKHIsdCl7dmFyIG49dGhpcztyZXR1cm4gbi5abj9uLlpuLm9lKG4scix0KTotMn0sSm46ZnVuY3Rpb24ocix0LG4pe3ZhciBlPXRoaXMsaT1lLnFuO3JldHVybiBpPm4mJihpPW4pLDA9PT1pPzA6KGUucW4tPWksci5zZXQoZS5mZS5zdWJhcnJheShlLmNlLGUuY2UraSksdCksZS5jZSs9aSxlLnJlKz1pLGkpfSxLbjpmdW5jdGlvbigpe3ZhciByPXRoaXMsdD1yLlpuLnBlbmRpbmc7dD5yLmFlJiYodD1yLmFlKSwwIT09dCYmKHIudWUuc2V0KHIuWm4uV24uc3ViYXJyYXkoci5abi5uZSxyLlpuLm5lK3QpLHIuc2UpLHIuc2UrPXQsci5abi5uZSs9dCxyLnRlKz10LHIuYWUtPXQsci5abi5wZW5kaW5nLT10LDA9PT1yLlpuLnBlbmRpbmcmJihyLlpuLm5lPTApKX19LCgwLHNhLmV4cG9ydHMpKCJJbnQzMiIsKGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIodGhpcyx0LG4sZSl9fSkpO3ZhciBHTz1bMCwxLDMsNywxNSwzMSw2MywxMjcsMjU1LDUxMSwxMDIzLDIwNDcsNDA5NSw4MTkxLDE2MzgzLDMyNzY3LDY1NTM1XSxETz1bOTYsNywyNTYsMCw4LDgwLDAsOCwxNiw4NCw4LDExNSw4Miw3LDMxLDAsOCwxMTIsMCw4LDQ4LDAsOSwxOTIsODAsNywxMCwwLDgsOTYsMCw4LDMyLDAsOSwxNjAsMCw4LDAsMCw4LDEyOCwwLDgsNjQsMCw5LDIyNCw4MCw3LDYsMCw4LDg4LDAsOCwyNCwwLDksMTQ0LDgzLDcsNTksMCw4LDEyMCwwLDgsNTYsMCw5LDIwOCw4MSw3LDE3LDAsOCwxMDQsMCw4LDQwLDAsOSwxNzYsMCw4LDgsMCw4LDEzNiwwLDgsNzIsMCw5LDI0MCw4MCw3LDQsMCw4LDg0LDAsOCwyMCw4NSw4LDIyNyw4Myw3LDQzLDAsOCwxMTYsMCw4LDUyLDAsOSwyMDAsODEsNywxMywwLDgsMTAwLDAsOCwzNiwwLDksMTY4LDAsOCw0LDAsOCwxMzIsMCw4LDY4LDAsOSwyMzIsODAsNyw4LDAsOCw5MiwwLDgsMjgsMCw5LDE1Miw4NCw3LDgzLDAsOCwxMjQsMCw4LDYwLDAsOSwyMTYsODIsNywyMywwLDgsMTA4LDAsOCw0NCwwLDksMTg0LDAsOCwxMiwwLDgsMTQwLDAsOCw3NiwwLDksMjQ4LDgwLDcsMywwLDgsODIsMCw4LDE4LDg1LDgsMTYzLDgzLDcsMzUsMCw4LDExNCwwLDgsNTAsMCw5LDE5Niw4MSw3LDExLDAsOCw5OCwwLDgsMzQsMCw5LDE2NCwwLDgsMiwwLDgsMTMwLDAsOCw2NiwwLDksMjI4LDgwLDcsNywwLDgsOTAsMCw4LDI2LDAsOSwxNDgsODQsNyw2NywwLDgsMTIyLDAsOCw1OCwwLDksMjEyLDgyLDcsMTksMCw4LDEwNiwwLDgsNDIsMCw5LDE4MCwwLDgsMTAsMCw4LDEzOCwwLDgsNzQsMCw5LDI0NCw4MCw3LDUsMCw4LDg2LDAsOCwyMiwxOTIsOCwwLDgzLDcsNTEsMCw4LDExOCwwLDgsNTQsMCw5LDIwNCw4MSw3LDE1LDAsOCwxMDIsMCw4LDM4LDAsOSwxNzIsMCw4LDYsMCw4LDEzNCwwLDgsNzAsMCw5LDIzNiw4MCw3LDksMCw4LDk0LDAsOCwzMCwwLDksMTU2LDg0LDcsOTksMCw4LDEyNiwwLDgsNjIsMCw5LDIyMCw4Miw3LDI3LDAsOCwxMTAsMCw4LDQ2LDAsOSwxODgsMCw4LDE0LDAsOCwxNDIsMCw4LDc4LDAsOSwyNTIsOTYsNywyNTYsMCw4LDgxLDAsOCwxNyw4NSw4LDEzMSw4Miw3LDMxLDAsOCwxMTMsMCw4LDQ5LDAsOSwxOTQsODAsNywxMCwwLDgsOTcsMCw4LDMzLDAsOSwxNjIsMCw4LDEsMCw4LDEyOSwwLDgsNjUsMCw5LDIyNiw4MCw3LDYsMCw4LDg5LDAsOCwyNSwwLDksMTQ2LDgzLDcsNTksMCw4LDEyMSwwLDgsNTcsMCw5LDIxMCw4MSw3LDE3LDAsOCwxMDUsMCw4LDQxLDAsOSwxNzgsMCw4LDksMCw4LDEzNywwLDgsNzMsMCw5LDI0Miw4MCw3LDQsMCw4LDg1LDAsOCwyMSw4MCw4LDI1OCw4Myw3LDQzLDAsOCwxMTcsMCw4LDUzLDAsOSwyMDIsODEsNywxMywwLDgsMTAxLDAsOCwzNywwLDksMTcwLDAsOCw1LDAsOCwxMzMsMCw4LDY5LDAsOSwyMzQsODAsNyw4LDAsOCw5MywwLDgsMjksMCw5LDE1NCw4NCw3LDgzLDAsOCwxMjUsMCw4LDYxLDAsOSwyMTgsODIsNywyMywwLDgsMTA5LDAsOCw0NSwwLDksMTg2LDAsOCwxMywwLDgsMTQxLDAsOCw3NywwLDksMjUwLDgwLDcsMywwLDgsODMsMCw4LDE5LDg1LDgsMTk1LDgzLDcsMzUsMCw4LDExNSwwLDgsNTEsMCw5LDE5OCw4MSw3LDExLDAsOCw5OSwwLDgsMzUsMCw5LDE2NiwwLDgsMywwLDgsMTMxLDAsOCw2NywwLDksMjMwLDgwLDcsNywwLDgsOTEsMCw4LDI3LDAsOSwxNTAsODQsNyw2NywwLDgsMTIzLDAsOCw1OSwwLDksMjE0LDgyLDcsMTksMCw4LDEwNywwLDgsNDMsMCw5LDE4MiwwLDgsMTEsMCw4LDEzOSwwLDgsNzUsMCw5LDI0Niw4MCw3LDUsMCw4LDg3LDAsOCwyMywxOTIsOCwwLDgzLDcsNTEsMCw4LDExOSwwLDgsNTUsMCw5LDIwNiw4MSw3LDE1LDAsOCwxMDMsMCw4LDM5LDAsOSwxNzQsMCw4LDcsMCw4LDEzNSwwLDgsNzEsMCw5LDIzOCw4MCw3LDksMCw4LDk1LDAsOCwzMSwwLDksMTU4LDg0LDcsOTksMCw4LDEyNywwLDgsNjMsMCw5LDIyMiw4Miw3LDI3LDAsOCwxMTEsMCw4LDQ3LDAsOSwxOTAsMCw4LDE1LDAsOCwxNDMsMCw4LDc5LDAsOSwyNTQsOTYsNywyNTYsMCw4LDgwLDAsOCwxNiw4NCw4LDExNSw4Miw3LDMxLDAsOCwxMTIsMCw4LDQ4LDAsOSwxOTMsODAsNywxMCwwLDgsOTYsMCw4LDMyLDAsOSwxNjEsMCw4LDAsMCw4LDEyOCwwLDgsNjQsMCw5LDIyNSw4MCw3LDYsMCw4LDg4LDAsOCwyNCwwLDksMTQ1LDgzLDcsNTksMCw4LDEyMCwwLDgsNTYsMCw5LDIwOSw4MSw3LDE3LDAsOCwxMDQsMCw4LDQwLDAsOSwxNzcsMCw4LDgsMCw4LDEzNiwwLDgsNzIsMCw5LDI0MSw4MCw3LDQsMCw4LDg0LDAsOCwyMCw4NSw4LDIyNyw4Myw3LDQzLDAsOCwxMTYsMCw4LDUyLDAsOSwyMDEsODEsNywxMywwLDgsMTAwLDAsOCwzNiwwLDksMTY5LDAsOCw0LDAsOCwxMzIsMCw4LDY4LDAsOSwyMzMsODAsNyw4LDAsOCw5MiwwLDgsMjgsMCw5LDE1Myw4NCw3LDgzLDAsOCwxMjQsMCw4LDYwLDAsOSwyMTcsODIsNywyMywwLDgsMTA4LDAsOCw0NCwwLDksMTg1LDAsOCwxMiwwLDgsMTQwLDAsOCw3NiwwLDksMjQ5LDgwLDcsMywwLDgsODIsMCw4LDE4LDg1LDgsMTYzLDgzLDcsMzUsMCw4LDExNCwwLDgsNTAsMCw5LDE5Nyw4MSw3LDExLDAsOCw5OCwwLDgsMzQsMCw5LDE2NSwwLDgsMiwwLDgsMTMwLDAsOCw2NiwwLDksMjI5LDgwLDcsNywwLDgsOTAsMCw4LDI2LDAsOSwxNDksODQsNyw2NywwLDgsMTIyLDAsOCw1OCwwLDksMjEzLDgyLDcsMTksMCw4LDEwNiwwLDgsNDIsMCw5LDE4MSwwLDgsMTAsMCw4LDEzOCwwLDgsNzQsMCw5LDI0NSw4MCw3LDUsMCw4LDg2LDAsOCwyMiwxOTIsOCwwLDgzLDcsNTEsMCw4LDExOCwwLDgsNTQsMCw5LDIwNSw4MSw3LDE1LDAsOCwxMDIsMCw4LDM4LDAsOSwxNzMsMCw4LDYsMCw4LDEzNCwwLDgsNzAsMCw5LDIzNyw4MCw3LDksMCw4LDk0LDAsOCwzMCwwLDksMTU3LDg0LDcsOTksMCw4LDEyNiwwLDgsNjIsMCw5LDIyMSw4Miw3LDI3LDAsOCwxMTAsMCw4LDQ2LDAsOSwxODksMCw4LDE0LDAsOCwxNDIsMCw4LDc4LDAsOSwyNTMsOTYsNywyNTYsMCw4LDgxLDAsOCwxNyw4NSw4LDEzMSw4Miw3LDMxLDAsOCwxMTMsMCw4LDQ5LDAsOSwxOTUsODAsNywxMCwwLDgsOTcsMCw4LDMzLDAsOSwxNjMsMCw4LDEsMCw4LDEyOSwwLDgsNjUsMCw5LDIyNyw4MCw3LDYsMCw4LDg5LDAsOCwyNSwwLDksMTQ3LDgzLDcsNTksMCw4LDEyMSwwLDgsNTcsMCw5LDIxMSw4MSw3LDE3LDAsOCwxMDUsMCw4LDQxLDAsOSwxNzksMCw4LDksMCw4LDEzNywwLDgsNzMsMCw5LDI0Myw4MCw3LDQsMCw4LDg1LDAsOCwyMSw4MCw4LDI1OCw4Myw3LDQzLDAsOCwxMTcsMCw4LDUzLDAsOSwyMDMsODEsNywxMywwLDgsMTAxLDAsOCwzNywwLDksMTcxLDAsOCw1LDAsOCwxMzMsMCw4LDY5LDAsOSwyMzUsODAsNyw4LDAsOCw5MywwLDgsMjksMCw5LDE1NSw4NCw3LDgzLDAsOCwxMjUsMCw4LDYxLDAsOSwyMTksODIsNywyMywwLDgsMTA5LDAsOCw0NSwwLDksMTg3LDAsOCwxMywwLDgsMTQxLDAsOCw3NywwLDksMjUxLDgwLDcsMywwLDgsODMsMCw4LDE5LDg1LDgsMTk1LDgzLDcsMzUsMCw4LDExNSwwLDgsNTEsMCw5LDE5OSw4MSw3LDExLDAsOCw5OSwwLDgsMzUsMCw5LDE2NywwLDgsMywwLDgsMTMxLDAsOCw2NywwLDksMjMxLDgwLDcsNywwLDgsOTEsMCw4LDI3LDAsOSwxNTEsODQsNyw2NywwLDgsMTIzLDAsOCw1OSwwLDksMjE1LDgyLDcsMTksMCw4LDEwNywwLDgsNDMsMCw5LDE4MywwLDgsMTEsMCw4LDEzOSwwLDgsNzUsMCw5LDI0Nyw4MCw3LDUsMCw4LDg3LDAsOCwyMywxOTIsOCwwLDgzLDcsNTEsMCw4LDExOSwwLDgsNTUsMCw5LDIwNyw4MSw3LDE1LDAsOCwxMDMsMCw4LDM5LDAsOSwxNzUsMCw4LDcsMCw4LDEzNSwwLDgsNzEsMCw5LDIzOSw4MCw3LDksMCw4LDk1LDAsOCwzMSwwLDksMTU5LDg0LDcsOTksMCw4LDEyNywwLDgsNjMsMCw5LDIyMyw4Miw3LDI3LDAsOCwxMTEsMCw4LDQ3LDAsOSwxOTEsMCw4LDE1LDAsOCwxNDMsMCw4LDc5LDAsOSwyNTVdLFZPPVs4MCw1LDEsODcsNSwyNTcsODMsNSwxNyw5MSw1LDQwOTcsODEsNSw1LDg5LDUsMTAyNSw4NSw1LDY1LDkzLDUsMTYzODUsODAsNSwzLDg4LDUsNTEzLDg0LDUsMzMsOTIsNSw4MTkzLDgyLDUsOSw5MCw1LDIwNDksODYsNSwxMjksMTkyLDUsMjQ1NzcsODAsNSwyLDg3LDUsMzg1LDgzLDUsMjUsOTEsNSw2MTQ1LDgxLDUsNyw4OSw1LDE1MzcsODUsNSw5Nyw5Myw1LDI0NTc3LDgwLDUsNCw4OCw1LDc2OSw4NCw1LDQ5LDkyLDUsMTIyODksODIsNSwxMyw5MCw1LDMwNzMsODYsNSwxOTMsMTkyLDUsMjQ1NzddLFlPPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sek89WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwxMTIsMTEyXSxXTz1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSwkTz1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM107ZnVuY3Rpb24gSE8oKXt2YXIgcix0LG4sZSxpLG87ZnVuY3Rpb24gdShyLHQsdSxmLGEsYyxzLHYsaCxsLGQpe3ZhciB5LHcsYixwLGcsbSxTLEEsaixPLGssRSxULHgsVTtPPTAsZz11O2Rve25bclt0K09dXSsrLE8rKyxnLS19d2hpbGUoMCE9PWcpO2lmKG5bMF09PXUpcmV0dXJuIHNbMF09LTEsdlswXT0wLDA7Zm9yKEE9dlswXSxtPTE7MTU+PW0mJjA9PT1uW21dO20rKyk7Zm9yKFM9bSxtPkEmJihBPW0pLGc9MTU7MCE9PWcmJjA9PT1uW2ddO2ctLSk7Zm9yKGI9ZyxBPmcmJihBPWcpLHZbMF09QSx4PTE8PG07Zz5tO20rKyx4PDw9MSlpZigwPih4LT1uW21dKSlyZXR1cm4tMztpZigwPih4LT1uW2ddKSlyZXR1cm4tMztmb3IobltnXSs9eCxvWzFdPW09MCxPPTEsVD0yOzAhPS0tZzspb1tUXT1tKz1uW09dLFQrKyxPKys7Zz0wLE89MDtkb3swIT09KG09clt0K09dKSYmKGRbb1ttXSsrXT1nKSxPKyt9d2hpbGUoKytnPHUpO2Zvcih1PW9bYl0sb1swXT1nPTAsTz0wLHA9LTEsRT0tQSxpWzBdPTAsaz0wLFU9MDtiPj1TO1MrKylmb3IoeT1uW1NdOzAhPXktLTspe2Zvcig7Uz5FK0E7KXtpZihwKyssVT0oVT1iLShFKz1BKSk+QT9BOlUsKHc9MTw8KG09Uy1FKSk+eSsxJiYody09eSsxLFQ9UyxVPm0pKWZvcig7KyttPFUmJih3PDw9MSk+blsrK1RdOyl3LT1uW1RdO2lmKFU9MTw8bSxsWzBdK1U+MTQ0MClyZXR1cm4tMztpW3BdPWs9bFswXSxsWzBdKz1VLDAhPT1wPyhvW3BdPWcsZVswXT1tLGVbMV09QSxtPWc+Pj5FLUEsZVsyXT1rLWlbcC0xXS1tLGguc2V0KGUsMyooaVtwLTFdK20pKSk6c1swXT1rfWZvcihlWzFdPVMtRSx1Pk8/ZFtPXTxmPyhlWzBdPTI1Nj5kW09dPzA6OTYsZVsyXT1kW08rK10pOihlWzBdPWNbZFtPXS1mXSsxNis2NCxlWzJdPWFbZFtPKytdLWZdKTplWzBdPTE5Mix3PTE8PFMtRSxtPWc+Pj5FO1U+bTttKz13KWguc2V0KGUsMyooayttKSk7Zm9yKG09MTw8Uy0xOzAhPShnJm0pO20+Pj49MSlnXj1tO2ZvcihnXj1tLGo9KDE8PEUpLTE7KGcmaikhPW9bcF07KXAtLSxqPSgxPDwoRS09QSkpLTF9cmV0dXJuIDAhPT14JiYxIT1iPy01OjB9ZnVuY3Rpb24gZih1KXt2YXIgZjtmb3Iocnx8KHI9W10sdD1bXSxuPW5ldyBJbnQzMkFycmF5KDE2KSxlPVtdLGk9bmV3IEludDMyQXJyYXkoMTUpLG89bmV3IEludDMyQXJyYXkoMTYpKSx0Lmxlbmd0aDx1JiYodD1bXSksZj0wO3U+ZjtmKyspdFtmXT0wO2ZvcihmPTA7MTY+ZjtmKyspbltmXT0wO2ZvcihmPTA7Mz5mO2YrKyllW2ZdPTA7aS5zZXQobi5zdWJhcnJheSgwLDE1KSwwKSxvLnNldChuLnN1YmFycmF5KDAsMTYpLDApfXRoaXMudmU9ZnVuY3Rpb24obixlLGksbyxhKXt2YXIgYztyZXR1cm4gZigxOSksclswXT0wLC0zPT0oYz11KG4sMCwxOSwxOSxudWxsLG51bGwsaSxlLG8scix0KSk/YS5Rbj0ib3ZlcnN1YnNjcmliZWQgZHluYW1pYyBiaXQgbGVuZ3RocyB0cmVlIjotNSE9YyYmMCE9PWVbMF18fChhLlFuPSJpbmNvbXBsZXRlIGR5bmFtaWMgYml0IGxlbmd0aHMgdHJlZSIsYz0tMyksY30sdGhpcy5oZT1mdW5jdGlvbihuLGUsaSxvLGEsYyxzLHYsaCl7dmFyIGw7cmV0dXJuIGYoMjg4KSxyWzBdPTAsMCE9KGw9dShpLDAsbiwyNTcsWU8sek8sYyxvLHYscix0KSl8fDA9PT1vWzBdPygtMz09bD9oLlFuPSJvdmVyc3Vic2NyaWJlZCBsaXRlcmFsL2xlbmd0aCB0cmVlIjotNCE9bCYmKGguUW49ImluY29tcGxldGUgbGl0ZXJhbC9sZW5ndGggdHJlZSIsbD0tMyksbCk6KGYoMjg4KSwwIT0obD11KGksbixlLDAsV08sJE8scyxhLHYscix0KSl8fDA9PT1hWzBdJiZuPjI1Nz8oLTM9PWw/aC5Rbj0ib3ZlcnN1YnNjcmliZWQgZGlzdGFuY2UgdHJlZSI6LTU9PWw/KGguUW49ImluY29tcGxldGUgZGlzdGFuY2UgdHJlZSIsbD0tMyk6LTQhPWwmJihoLlFuPSJlbXB0eSBkaXN0YW5jZSB0cmVlIHdpdGggbGVuZ3RocyIsbD0tMyksbCk6MCl9fWZ1bmN0aW9uIEtPKCl7dmFyIHIsdCxuLGUsaT10aGlzLG89MCx1PTAsZj0wLGE9MCxjPTAscz0wLHY9MCxoPTAsbD0wLGQ9MDtmdW5jdGlvbiB5KHIsdCxuLGUsaSxvLHUsZil7dmFyIGEsYyxzLHYsaCxsLGQseSx3LGIscCxnLG0sUyxBLGo7ZD1mLmNlLHk9Zi5xbixoPXUubGUsbD11LmRlLGI9KHc9dS53cml0ZSk8dS5yZWFkP3UucmVhZC13LTE6dS5lbmQtdyxwPUdPW3JdLGc9R09bdF07ZG97Zm9yKDsyMD5sOyl5LS0saHw9KDI1NSZmLnllKGQrKykpPDxsLGwrPTg7aWYoMCE9PSh2PShjPW4pW2o9MyooKHM9ZSkrKGE9aCZwKSldKSlmb3IoOzspe2lmKGg+Pj1jW2orMV0sbC09Y1tqKzFdLDAhPSgxNiZ2KSl7Zm9yKHYmPTE1LG09Y1tqKzJdKyhoJkdPW3ZdKSxoPj49dixsLT12OzE1Pmw7KXktLSxofD0oMjU1JmYueWUoZCsrKSk8PGwsbCs9ODtmb3Iodj0oYz1pKVtqPTMqKChzPW8pKyhhPWgmZykpXTs7KXtpZihoPj49Y1tqKzFdLGwtPWNbaisxXSwwIT0oMTYmdikpe2Zvcih2Jj0xNTt2Pmw7KXktLSxofD0oMjU1JmYueWUoZCsrKSk8PGwsbCs9ODtpZihTPWNbaisyXSsoaCZHT1t2XSksaD4+PXYsbC09dixiLT1tLFM+dyl7QT13LVM7ZG97QSs9dS5lbmR9d2hpbGUoMD5BKTtpZihtPih2PXUuZW5kLUEpKXtpZihtLT12LHctQT4wJiZ2PnctQSlkb3t1LndlW3crK109dS53ZVtBKytdfXdoaWxlKDAhPS0tdik7ZWxzZSB1LndlLnNldCh1LndlLnN1YmFycmF5KEEsQSt2KSx3KSx3Kz12LEErPXYsdj0wO0E9MH19ZWxzZSB3LShBPXctUyk+MCYmMj53LUE/KHUud2VbdysrXT11LndlW0ErK10sdS53ZVt3KytdPXUud2VbQSsrXSxtLT0yKToodS53ZS5zZXQodS53ZS5zdWJhcnJheShBLEErMiksdyksdys9MixBKz0yLG0tPTIpO2lmKHctQT4wJiZtPnctQSlkb3t1LndlW3crK109dS53ZVtBKytdfXdoaWxlKDAhPS0tbSk7ZWxzZSB1LndlLnNldCh1LndlLnN1YmFycmF5KEEsQSttKSx3KSx3Kz1tLEErPW0sbT0wO2JyZWFrfWlmKDAhPSg2NCZ2KSlyZXR1cm4gZi5Rbj0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIix5Kz1tPShtPWYucW4teSk+bD4+Mz9sPj4zOm0sZC09bSxsLT1tPDwzLHUubGU9aCx1LmRlPWwsZi5xbj15LGYucmUrPWQtZi5jZSxmLmNlPWQsdS53cml0ZT13LC0zO2ErPWNbaisyXSx2PWNbaj0zKihzKyhhKz1oJkdPW3ZdKSldfWJyZWFrfWlmKDAhPSg2NCZ2KSlyZXR1cm4gMCE9KDMyJnYpPyh5Kz1tPShtPWYucW4teSk+bD4+Mz9sPj4zOm0sZC09bSxsLT1tPDwzLHUubGU9aCx1LmRlPWwsZi5xbj15LGYucmUrPWQtZi5jZSxmLmNlPWQsdS53cml0ZT13LDEpOihmLlFuPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHkrPW09KG09Zi5xbi15KT5sPj4zP2w+PjM6bSxkLT1tLGwtPW08PDMsdS5sZT1oLHUuZGU9bCxmLnFuPXksZi5yZSs9ZC1mLmNlLGYuY2U9ZCx1LndyaXRlPXcsLTMpO2lmKGErPWNbaisyXSwwPT09KHY9Y1tqPTMqKHMrKGErPWgmR09bdl0pKV0pKXtoPj49Y1tqKzFdLGwtPWNbaisxXSx1LndlW3crK109Y1tqKzJdLGItLTticmVha319ZWxzZSBoPj49Y1tqKzFdLGwtPWNbaisxXSx1LndlW3crK109Y1tqKzJdLGItLX13aGlsZShiPj0yNTgmJnk+PTEwKTtyZXR1cm4geSs9bT0obT1mLnFuLXkpPmw+PjM/bD4+MzptLGQtPW0sbC09bTw8Myx1LmxlPWgsdS5kZT1sLGYucW49eSxmLnJlKz1kLWYuY2UsZi5jZT1kLHUud3JpdGU9dywwfWkuaW5pdD1mdW5jdGlvbihpLG8sdSxmLGEsYyl7cj0wLHY9aSxoPW8sbj11LGw9ZixlPWEsZD1jLHQ9bnVsbH0saS5iZT1mdW5jdGlvbihpLHcsYil7dmFyIHAsZyxtLFMsQSxqLE8saz0wLEU9MCxUPTA7Zm9yKFQ9dy5jZSxTPXcucW4saz1pLmxlLEU9aS5kZSxqPShBPWkud3JpdGUpPGkucmVhZD9pLnJlYWQtQS0xOmkuZW5kLUE7Oylzd2l0Y2gocil7Y2FzZSAwOmlmKGo+PTI1OCYmUz49MTAmJihpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxiPXkodixoLG4sbCxlLGQsaSx3KSxUPXcuY2UsUz13LnFuLGs9aS5sZSxFPWkuZGUsaj0oQT1pLndyaXRlKTxpLnJlYWQ/aS5yZWFkLUEtMTppLmVuZC1BLDAhPWIpKXtyPTE9PWI/Nzo5O2JyZWFrfWY9dix0PW4sdT1sLHI9MTtjYXNlIDE6Zm9yKHA9ZjtwPkU7KXtpZigwPT09UylyZXR1cm4gaS5sZT1rLGkuZGU9RSx3LnFuPVMsdy5yZSs9VC13LmNlLHcuY2U9VCxpLndyaXRlPUEsaS5wZSh3LGIpO2I9MCxTLS0sa3w9KDI1NSZ3LnllKFQrKykpPDxFLEUrPTh9aWYoaz4+Pj10WzErKGc9MyoodSsoayZHT1twXSkpKV0sRS09dFtnKzFdLDA9PT0obT10W2ddKSl7YT10W2crMl0scj02O2JyZWFrfWlmKDAhPSgxNiZtKSl7Yz0xNSZtLG89dFtnKzJdLHI9MjticmVha31pZigwPT0oNjQmbSkpe2Y9bSx1PWcvMyt0W2crMl07YnJlYWt9aWYoMCE9KDMyJm0pKXtyPTc7YnJlYWt9cmV0dXJuIHI9OSx3LlFuPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGI9LTMsaS5sZT1rLGkuZGU9RSx3LnFuPVMsdy5yZSs9VC13LmNlLHcuY2U9VCxpLndyaXRlPUEsaS5wZSh3LGIpO2Nhc2UgMjpmb3IocD1jO3A+RTspe2lmKDA9PT1TKXJldHVybiBpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7Yj0wLFMtLSxrfD0oMjU1JncueWUoVCsrKSk8PEUsRSs9OH1vKz1rJkdPW3BdLGs+Pj1wLEUtPXAsZj1oLHQ9ZSx1PWQscj0zO2Nhc2UgMzpmb3IocD1mO3A+RTspe2lmKDA9PT1TKXJldHVybiBpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7Yj0wLFMtLSxrfD0oMjU1JncueWUoVCsrKSk8PEUsRSs9OH1pZihrPj49dFsxKyhnPTMqKHUrKGsmR09bcF0pKSldLEUtPXRbZysxXSwwIT0oMTYmKG09dFtnXSkpKXtjPTE1Jm0scz10W2crMl0scj00O2JyZWFrfWlmKDA9PSg2NCZtKSl7Zj1tLHU9Zy8zK3RbZysyXTticmVha31yZXR1cm4gcj05LHcuUW49ImludmFsaWQgZGlzdGFuY2UgY29kZSIsYj0tMyxpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7Y2FzZSA0OmZvcihwPWM7cD5FOyl7aWYoMD09PVMpcmV0dXJuIGkubGU9ayxpLmRlPUUsdy5xbj1TLHcucmUrPVQtdy5jZSx3LmNlPVQsaS53cml0ZT1BLGkucGUodyxiKTtiPTAsUy0tLGt8PSgyNTUmdy55ZShUKyspKTw8RSxFKz04fXMrPWsmR09bcF0saz4+PXAsRS09cCxyPTU7Y2FzZSA1OmZvcihPPUEtczswPk87KU8rPWkuZW5kO2Zvcig7MCE9PW87KXtpZigwPT09aiYmKEE9PWkuZW5kJiYwIT09aS5yZWFkJiYoaj0oQT0wKTxpLnJlYWQ/aS5yZWFkLUEtMTppLmVuZC1BKSwwPT09aiYmKGkud3JpdGU9QSxiPWkucGUodyxiKSxqPShBPWkud3JpdGUpPGkucmVhZD9pLnJlYWQtQS0xOmkuZW5kLUEsQT09aS5lbmQmJjAhPT1pLnJlYWQmJihqPShBPTApPGkucmVhZD9pLnJlYWQtQS0xOmkuZW5kLUEpLDA9PT1qKSkpcmV0dXJuIGkubGU9ayxpLmRlPUUsdy5xbj1TLHcucmUrPVQtdy5jZSx3LmNlPVQsaS53cml0ZT1BLGkucGUodyxiKTtpLndlW0ErK109aS53ZVtPKytdLGotLSxPPT1pLmVuZCYmKE89MCksby0tfXI9MDticmVhaztjYXNlIDY6aWYoMD09PWomJihBPT1pLmVuZCYmMCE9PWkucmVhZCYmKGo9KEE9MCk8aS5yZWFkP2kucmVhZC1BLTE6aS5lbmQtQSksMD09PWomJihpLndyaXRlPUEsYj1pLnBlKHcsYiksaj0oQT1pLndyaXRlKTxpLnJlYWQ/aS5yZWFkLUEtMTppLmVuZC1BLEE9PWkuZW5kJiYwIT09aS5yZWFkJiYoaj0oQT0wKTxpLnJlYWQ/aS5yZWFkLUEtMTppLmVuZC1BKSwwPT09aikpKXJldHVybiBpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7Yj0wLGkud2VbQSsrXT1hLGotLSxyPTA7YnJlYWs7Y2FzZSA3OmlmKEU+NyYmKEUtPTgsUysrLFQtLSksaS53cml0ZT1BLGI9aS5wZSh3LGIpLGo9KEE9aS53cml0ZSk8aS5yZWFkP2kucmVhZC1BLTE6aS5lbmQtQSxpLnJlYWQhPWkud3JpdGUpcmV0dXJuIGkubGU9ayxpLmRlPUUsdy5xbj1TLHcucmUrPVQtdy5jZSx3LmNlPVQsaS53cml0ZT1BLGkucGUodyxiKTtyPTg7Y2FzZSA4OnJldHVybiBiPTEsaS5sZT1rLGkuZGU9RSx3LnFuPVMsdy5yZSs9VC13LmNlLHcuY2U9VCxpLndyaXRlPUEsaS5wZSh3LGIpO2Nhc2UgOTpyZXR1cm4gYj0tMyxpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYik7ZGVmYXVsdDpyZXR1cm4gYj0tMixpLmxlPWssaS5kZT1FLHcucW49Uyx3LnJlKz1ULXcuY2Usdy5jZT1ULGkud3JpdGU9QSxpLnBlKHcsYil9fSxpLmdlPWZ1bmN0aW9uKCl7fX1ITy5tZT1mdW5jdGlvbihyLHQsbixlKXtyZXR1cm4gclswXT05LHRbMF09NSxuWzBdPURPLGVbMF09Vk8sMH07dmFyIHFPPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtmdW5jdGlvbiBKTyhyLHQpe3ZhciBuLGU9dGhpcyxpPTAsbz0wLHU9MCxmPTAsYT1bMF0sYz1bMF0scz1uZXcgS08sdj0wLGg9bmV3IEludDMyQXJyYXkoNDMyMCksbD1uZXcgSE87ZS5kZT0wLGUubGU9MCxlLndlPW5ldyBVaW50OEFycmF5KHQpLGUuZW5kPXQsZS5yZWFkPTAsZS53cml0ZT0wLGUucmVzZXQ9ZnVuY3Rpb24ocix0KXt0JiYodFswXT0wKSw2PT1pJiZzLmdlKHIpLGk9MCxlLmRlPTAsZS5sZT0wLGUucmVhZD1lLndyaXRlPTB9LGUucmVzZXQocixudWxsKSxlLnBlPWZ1bmN0aW9uKHIsdCl7dmFyIG4saSxvO3JldHVybiBpPXIuc2UsKG49KChvPWUucmVhZCk+ZS53cml0ZT9lLmVuZDplLndyaXRlKS1vKT5yLmFlJiYobj1yLmFlKSwwIT09biYmLTU9PXQmJih0PTApLHIuYWUtPW4sci50ZSs9bixyLnVlLnNldChlLndlLnN1YmFycmF5KG8sbytuKSxpKSxpKz1uLChvKz1uKT09ZS5lbmQmJihvPTAsZS53cml0ZT09ZS5lbmQmJihlLndyaXRlPTApLChuPWUud3JpdGUtbyk+ci5hZSYmKG49ci5hZSksMCE9PW4mJi01PT10JiYodD0wKSxyLmFlLT1uLHIudGUrPW4sci51ZS5zZXQoZS53ZS5zdWJhcnJheShvLG8rbiksaSksaSs9bixvKz1uKSxyLnNlPWksZS5yZWFkPW8sdH0sZS5iZT1mdW5jdGlvbihyLHQpe3ZhciBkLHksdyxiLHAsZyxtLFM7Zm9yKGI9ci5jZSxwPXIucW4seT1lLmxlLHc9ZS5kZSxtPShnPWUud3JpdGUpPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWc7Oyl7dmFyIEE9dm9pZCAwLGo9dm9pZCAwLE89dm9pZCAwLGs9dm9pZCAwLEU9dm9pZCAwLFQ9dm9pZCAwLHg9dm9pZCAwLFU9dm9pZCAwO3N3aXRjaChpKXtjYXNlIDA6Zm9yKDszPnc7KXtpZigwPT09cClyZXR1cm4gZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpO3Q9MCxwLS0seXw9KDI1NSZyLnllKGIrKykpPDx3LHcrPTh9c3dpdGNoKHY9MSYoZD03JnkpLGQ+Pj4xKXtjYXNlIDA6eT4+Pj0zLHk+Pj49ZD03Jih3LT0zKSx3LT1kLGk9MTticmVhaztjYXNlIDE6QT1bXSxqPVtdLE89W1tdXSxrPVtbXV0sSE8ubWUoQSxqLE8saykscy5pbml0KEFbMF0salswXSxPWzBdLDAsa1swXSwwKSx5Pj4+PTMsdy09MyxpPTY7YnJlYWs7Y2FzZSAyOnk+Pj49Myx3LT0zLGk9MzticmVhaztjYXNlIDM6cmV0dXJuIHk+Pj49Myx3LT0zLGk9OSxyLlFuPSJpbnZhbGlkIGJsb2NrIHR5cGUiLHQ9LTMsZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpfWJyZWFrO2Nhc2UgMTpmb3IoOzMyPnc7KXtpZigwPT09cClyZXR1cm4gZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpO3Q9MCxwLS0seXw9KDI1NSZyLnllKGIrKykpPDx3LHcrPTh9aWYoKH55Pj4+MTYmNjU1MzUpIT0oNjU1MzUmeSkpcmV0dXJuIGk9OSxyLlFuPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIix0PS0zLGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtvPTY1NTM1JnkseT13PTAsaT0wIT09bz8yOjAhPT12Pzc6MDticmVhaztjYXNlIDI6aWYoMD09PXApcmV0dXJuIGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtpZigwPT09bSYmKGc9PWUuZW5kJiYwIT09ZS5yZWFkJiYobT0oZz0wKTxlLnJlYWQ/ZS5yZWFkLWctMTplLmVuZC1nKSwwPT09bSYmKGUud3JpdGU9Zyx0PWUucGUocix0KSxtPShnPWUud3JpdGUpPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWcsZz09ZS5lbmQmJjAhPT1lLnJlYWQmJihtPShnPTApPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWcpLDA9PT1tKSkpcmV0dXJuIGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtpZih0PTAsKGQ9byk+cCYmKGQ9cCksZD5tJiYoZD1tKSxlLndlLnNldChyLkpuKGIsZCksZyksYis9ZCxwLT1kLGcrPWQsbS09ZCwwIT0oby09ZCkpYnJlYWs7aT0wIT09dj83OjA7YnJlYWs7Y2FzZSAzOmZvcig7MTQ+dzspe2lmKDA9PT1wKXJldHVybiBlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7dD0wLHAtLSx5fD0oMjU1JnIueWUoYisrKSk8PHcsdys9OH1pZih1PWQ9MTYzODMmeSwoMzEmZCk+Mjl8fChkPj41JjMxKT4yOSlyZXR1cm4gaT05LHIuUW49InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIix0PS0zLGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtpZihkPTI1OCsoMzEmZCkrKGQ+PjUmMzEpLCFufHxuLmxlbmd0aDxkKW49W107ZWxzZSBmb3IoUz0wO2Q+UztTKyspbltTXT0wO3k+Pj49MTQsdy09MTQsZj0wLGk9NDtjYXNlIDQ6Zm9yKDs0Kyh1Pj4+MTApPmY7KXtmb3IoOzM+dzspe2lmKDA9PT1wKXJldHVybiBlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7dD0wLHAtLSx5fD0oMjU1JnIueWUoYisrKSk8PHcsdys9OH1uW3FPW2YrK11dPTcmeSx5Pj4+PTMsdy09M31mb3IoOzE5PmY7KW5bcU9bZisrXV09MDtpZihhWzBdPTcsMCE9KGQ9bC52ZShuLGEsYyxoLHIpKSlyZXR1cm4tMz09KHQ9ZCkmJihuPW51bGwsaT05KSxlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7Zj0wLGk9NTtjYXNlIDU6Zm9yKDtmPDI1OCsoMzEmKGQ9dSkpKyhkPj41JjMxKTspe3ZhciBNPXZvaWQgMCxJPXZvaWQgMDtmb3IoZD1hWzBdO2Q+dzspe2lmKDA9PT1wKXJldHVybiBlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7dD0wLHAtLSx5fD0oMjU1JnIueWUoYisrKSk8PHcsdys9OH1pZihkPWhbMyooY1swXSsoeSZHT1tkXSkpKzFdLDE2PihJPWhbMyooY1swXSsoeSZHT1tkXSkpKzJdKSl5Pj4+PWQsdy09ZCxuW2YrK109STtlbHNle2ZvcihTPTE4PT1JPzc6SS0xNCxNPTE4PT1JPzExOjM7ZCtTPnc7KXtpZigwPT09cClyZXR1cm4gZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpO3Q9MCxwLS0seXw9KDI1NSZyLnllKGIrKykpPDx3LHcrPTh9aWYody09ZCxNKz0oeT4+Pj1kKSZHT1tTXSx5Pj4+PVMsdy09UywoUz1mKStNPjI1OCsoMzEmKGQ9dSkpKyhkPj41JjMxKXx8MTY9PUkmJjE+UylyZXR1cm4gbj1udWxsLGk9OSxyLlFuPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0Iix0PS0zLGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtJPTE2PT1JP25bUy0xXTowO2Rve25bUysrXT1JfXdoaWxlKDAhPS0tTSk7Zj1TfX1pZihjWzBdPS0xLFQ9W10seD1bXSxVPVtdLChFPVtdKVswXT05LFRbMF09NixkPXUsMCE9KGQ9bC5oZSgyNTcrKDMxJmQpLDErKGQ+PjUmMzEpLG4sRSxULHgsVSxoLHIpKSlyZXR1cm4tMz09ZCYmKG49bnVsbCxpPTkpLHQ9ZCxlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7cy5pbml0KEVbMF0sVFswXSxoLHhbMF0saCxVWzBdKSxpPTY7Y2FzZSA2OmlmKGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLDEhPSh0PXMuYmUoZSxyLHQpKSlyZXR1cm4gZS5wZShyLHQpO2lmKHQ9MCxzLmdlKHIpLGI9ci5jZSxwPXIucW4seT1lLmxlLHc9ZS5kZSxtPShnPWUud3JpdGUpPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWcsMD09PXYpe2k9MDticmVha31pPTc7Y2FzZSA3OmlmKGUud3JpdGU9Zyx0PWUucGUocix0KSxtPShnPWUud3JpdGUpPGUucmVhZD9lLnJlYWQtZy0xOmUuZW5kLWcsZS5yZWFkIT1lLndyaXRlKXJldHVybiBlLmxlPXksZS5kZT13LHIucW49cCxyLnJlKz1iLXIuY2Usci5jZT1iLGUud3JpdGU9ZyxlLnBlKHIsdCk7aT04O2Nhc2UgODpyZXR1cm4gdD0xLGUubGU9eSxlLmRlPXcsci5xbj1wLHIucmUrPWItci5jZSxyLmNlPWIsZS53cml0ZT1nLGUucGUocix0KTtjYXNlIDk6cmV0dXJuIHQ9LTMsZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpO2RlZmF1bHQ6cmV0dXJuIHQ9LTIsZS5sZT15LGUuZGU9dyxyLnFuPXAsci5yZSs9Yi1yLmNlLHIuY2U9YixlLndyaXRlPWcsZS5wZShyLHQpfX19LGUuZ2U9ZnVuY3Rpb24ocil7ZS5yZXNldChyLG51bGwpLGUud2U9bnVsbCxoPW51bGx9LGUuU2U9ZnVuY3Rpb24ocix0LG4pe2Uud2Uuc2V0KHIuc3ViYXJyYXkodCx0K24pLDApLGUucmVhZD1lLndyaXRlPW59LGUuQWU9ZnVuY3Rpb24oKXtyZXR1cm4gMT09aT8xOjB9fXZhciBYTz1bMCwwLDI1NSwyNTVdO2Z1bmN0aW9uIFFPKCl7dmFyIHI9dGhpcztmdW5jdGlvbiB0KHIpe3JldHVybiByJiZyLmplPyhyLnJlPXIudGU9MCxyLlFuPW51bGwsci5qZS5tb2RlPTcsci5qZS5PZS5yZXNldChyLG51bGwpLDApOi0yfXIubW9kZT0wLHIubWV0aG9kPTAsci5rZT1bMF0sci5FZT0wLHIubWFya2VyPTAsci5UZT0wLHIueGU9ZnVuY3Rpb24odCl7cmV0dXJuIHIuT2UmJnIuT2UuZ2UodCksci5PZT1udWxsLDB9LHIuVWU9ZnVuY3Rpb24obixlKXtyZXR1cm4gbi5Rbj1udWxsLHIuT2U9bnVsbCw4PmV8fGU+MTU/KHIueGUobiksLTIpOihyLlRlPWUsbi5qZS5PZT1uZXcgSk8obiwxPDxlKSx0KG4pLDApfSxyLlp0PWZ1bmN0aW9uKHIsdCl7dmFyIG4sZTtpZighcnx8IXIuamV8fCFyLmZlKXJldHVybi0yO3ZhciBpPXIuamU7Zm9yKHQ9ND09dD8tNTowLG49LTU7Oylzd2l0Y2goaS5tb2RlKXtjYXNlIDA6aWYoMD09PXIucW4pcmV0dXJuIG47aWYobj10LHIucW4tLSxyLnJlKyssOCE9KDE1JihpLm1ldGhvZD1yLnllKHIuY2UrKykpKSl7aS5tb2RlPTEzLHIuUW49InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixpLm1hcmtlcj01O2JyZWFrfWlmKDgrKGkubWV0aG9kPj40KT5pLlRlKXtpLm1vZGU9MTMsci5Rbj0iaW52YWxpZCB3aW4gc2l6ZSIsaS5tYXJrZXI9NTticmVha31pLm1vZGU9MTtjYXNlIDE6aWYoMD09PXIucW4pcmV0dXJuIG47aWYobj10LHIucW4tLSxyLnJlKyssZT0yNTUmci55ZShyLmNlKyspLCgoaS5tZXRob2Q8PDgpK2UpJTMxIT0wKXtpLm1vZGU9MTMsci5Rbj0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsaS5tYXJrZXI9NTticmVha31pZigwPT0oMzImZSkpe2kubW9kZT03O2JyZWFrfWkubW9kZT0yO2Nhc2UgMjppZigwPT09ci5xbilyZXR1cm4gbjtuPXQsci5xbi0tLHIucmUrKyxpLkVlPSgyNTUmci55ZShyLmNlKyspKTw8MjQmNDI3ODE5MDA4MCxpLm1vZGU9MztjYXNlIDM6aWYoMD09PXIucW4pcmV0dXJuIG47bj10LHIucW4tLSxyLnJlKyssaS5FZSs9KDI1NSZyLnllKHIuY2UrKykpPDwxNiYxNjcxMTY4MCxpLm1vZGU9NDtjYXNlIDQ6aWYoMD09PXIucW4pcmV0dXJuIG47bj10LHIucW4tLSxyLnJlKyssaS5FZSs9KDI1NSZyLnllKHIuY2UrKykpPDw4JjY1MjgwLGkubW9kZT01O2Nhc2UgNTpyZXR1cm4gMD09PXIucW4/bjoobj10LHIucW4tLSxyLnJlKyssaS5FZSs9MjU1JnIueWUoci5jZSsrKSxpLm1vZGU9NiwyKTtjYXNlIDY6cmV0dXJuIGkubW9kZT0xMyxyLlFuPSJuZWVkIGRpY3Rpb25hcnkiLGkubWFya2VyPTAsLTI7Y2FzZSA3OmlmKC0zPT0obj1pLk9lLmJlKHIsbikpKXtpLm1vZGU9MTMsaS5tYXJrZXI9MDticmVha31pZigwPT1uJiYobj10KSwxIT1uKXJldHVybiBuO249dCxpLk9lLnJlc2V0KHIsaS5rZSksaS5tb2RlPTEyO2Nhc2UgMTI6cmV0dXJuIHIucW49MCwxO2Nhc2UgMTM6cmV0dXJuLTM7ZGVmYXVsdDpyZXR1cm4tMn19LHIuTWU9ZnVuY3Rpb24ocix0LG4pe3ZhciBlPTAsaT1uO2lmKCFyfHwhci5qZXx8NiE9ci5qZS5tb2RlKXJldHVybi0yO3ZhciBvPXIuamU7cmV0dXJuIGk8MTw8by5UZXx8KGU9bi0oaT0oMTw8by5UZSktMSkpLG8uT2UuU2UodCxlLGkpLG8ubW9kZT03LDB9LHIuSWU9ZnVuY3Rpb24ocil7dmFyIG4sZSxpLG8sdTtpZighcnx8IXIuamUpcmV0dXJuLTI7dmFyIGY9ci5qZTtpZigxMyE9Zi5tb2RlJiYoZi5tb2RlPTEzLGYubWFya2VyPTApLDA9PT0obj1yLnFuKSlyZXR1cm4tNTtmb3IoZT1yLmNlLGk9Zi5tYXJrZXI7MCE9PW4mJjQ+aTspci55ZShlKT09WE9baV0/aSsrOmk9MCE9PXIueWUoZSk/MDo0LWksZSsrLG4tLTtyZXR1cm4gci5yZSs9ZS1yLmNlLHIuY2U9ZSxyLnFuPW4sZi5tYXJrZXI9aSw0IT1pPy0zOihvPXIucmUsdT1yLnRlLHQociksci5yZT1vLHIudGU9dSxmLm1vZGU9NywwKX0sci5MZT1mdW5jdGlvbihyKXtyZXR1cm4gciYmci5qZSYmci5qZS5PZT9yLmplLk9lLkFlKCk6LTJ9fWZ1bmN0aW9uIFpPKCl7fWZ1bmN0aW9uIHJrKHIpe3ZhciB0PW5ldyBaTyxuPXImJnIuUXQ/TWF0aC5mbG9vcigyKnIuUXQpOjEzMTA3MixlPW5ldyBVaW50OEFycmF5KG4pLGk9ITE7dC5VZSgpLHQudWU9ZSx0aGlzLmFwcGVuZD1mdW5jdGlvbihyLG8pe3ZhciB1LGYsYT1bXSxjPTAscz0wLHY9MDtpZigwIT09ci5sZW5ndGgpe3QuY2U9MCx0LmZlPXIsdC5xbj1yLmxlbmd0aDtkb3tpZih0LnNlPTAsdC5hZT1uLDAhPT10LnFufHxpfHwodC5jZT0wLGk9ITApLHU9dC5adCgwKSxpJiYtNT09PXUpe2lmKDAhPT10LnFuKXRocm93IEVycm9yKCJpbmZsYXRpbmc6IGJhZCBpbnB1dCIpfWVsc2UgaWYoMCE9PXUmJjEhPT11KXRocm93IEVycm9yKCJpbmZsYXRpbmc6ICIrdC5Rbik7aWYoKGl8fDE9PT11KSYmdC5xbj09PXIubGVuZ3RoKXRocm93IEVycm9yKCJpbmZsYXRpbmc6IGJhZCBpbnB1dCIpO3Quc2UmJih0LnNlPT09bj9hLnB1c2gobmV3IFVpbnQ4QXJyYXkoZSkpOmEucHVzaChlLnNsaWNlKDAsdC5zZSkpKSx2Kz10LnNlLG8mJnQuY2U+MCYmdC5jZSE9YyYmKG8odC5jZSksYz10LmNlKX13aGlsZSh0LnFuPjB8fDA9PT10LmFlKTtyZXR1cm4gYS5sZW5ndGg+MT8oZj1uZXcgVWludDhBcnJheSh2KSxhLmZvckVhY2goKGZ1bmN0aW9uKHIpe2Yuc2V0KHIscykscys9ci5sZW5ndGh9KSkpOmY9YVswXXx8bmV3IFVpbnQ4QXJyYXkoMCksZn19LHRoaXMuZmx1c2g9ZnVuY3Rpb24oKXt0LnhlKCl9fVpPLnByb3RvdHlwZT17VWU6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpcztyZXR1cm4gdC5qZT1uZXcgUU8scnx8KHI9MTUpLHQuamUuVWUodCxyKX0sWnQ6ZnVuY3Rpb24ocil7dmFyIHQ9dGhpcztyZXR1cm4gdC5qZT90LmplLlp0KHQscik6LTJ9LHhlOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcztpZighci5qZSlyZXR1cm4tMjt2YXIgdD1yLmplLnhlKHIpO3JldHVybiByLmplPW51bGwsdH0sSWU6ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiByLmplP3IuamUuSWUocik6LTJ9LE1lOmZ1bmN0aW9uKHIsdCl7dmFyIG49dGhpcztyZXR1cm4gbi5qZT9uLmplLk1lKG4scix0KTotMn0seWU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZmVbcl19LEpuOmZ1bmN0aW9uKHIsdCl7cmV0dXJuIHRoaXMuZmUuc3ViYXJyYXkocixyK3QpfX0sc2VsZi5pbml0Q29kZWM9ZnVuY3Rpb24oKXtzZWxmLkRlZmxhdGU9Qk8sc2VsZi5JbmZsYXRlPXJrfTsK")], {
  13580. type: "text/javascript"
  13581. }));
  13582. };
  13583. _d({
  13584. workerScripts: {
  13585. inflate: [m],
  13586. deflate: [m]
  13587. }
  13588. });
  13589. }
  13590. };
  13591. /*
  13592. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  13593. Redistribution and use in source and binary forms, with or without
  13594. modification, are permitted provided that the following conditions are met:
  13595. 1. Redistributions of source code must retain the above copyright notice,
  13596. this list of conditions and the following disclaimer.
  13597. 2. Redistributions in binary form must reproduce the above copyright
  13598. notice, this list of conditions and the following disclaimer in
  13599. the documentation and/or other materials provided with the distribution.
  13600. 3. The names of the authors may not be used to endorse or promote products
  13601. derived from this software without specific prior written permission.
  13602. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  13603. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  13604. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  13605. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  13606. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  13607. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  13608. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  13609. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  13610. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  13611. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  13612. */
  13613. var streamCodecShim = (function (library) {
  13614. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  13615. var registerDataHandler = arguments.length > 2 ? arguments[2] : undefined;
  13616. return {
  13617. Deflate: createCodecClass(library.Deflate, options.deflate, registerDataHandler),
  13618. Inflate: createCodecClass(library.Inflate, options.inflate, registerDataHandler)
  13619. };
  13620. });
  13621. function createCodecClass(constructor, constructorOptions, registerDataHandler) {
  13622. return /*#__PURE__*/function () {
  13623. function _class(options) {
  13624. _classCallCheck(this, _class);
  13625. var codecAdapter = this;
  13626. var onData = function onData(data) {
  13627. if (codecAdapter.pendingData) {
  13628. var pendingData = codecAdapter.pendingData;
  13629. codecAdapter.pendingData = new Uint8Array(pendingData.length + data.length);
  13630. codecAdapter.pendingData.set(pendingData, 0);
  13631. codecAdapter.pendingData.set(data, pendingData.length);
  13632. } else {
  13633. codecAdapter.pendingData = new Uint8Array(data);
  13634. }
  13635. };
  13636. codecAdapter.codec = new constructor(Object.assign({}, constructorOptions, options));
  13637. registerDataHandler(codecAdapter.codec, onData);
  13638. }
  13639. _createClass(_class, [{
  13640. key: "append",
  13641. value: function append(data) {
  13642. this.codec.push(data);
  13643. return getResponse(this);
  13644. }
  13645. }, {
  13646. key: "flush",
  13647. value: function flush() {
  13648. this.codec.push(new Uint8Array(0), true);
  13649. return getResponse(this);
  13650. }
  13651. }]);
  13652. return _class;
  13653. }();
  13654. function getResponse(codec) {
  13655. if (codec.pendingData) {
  13656. var output = codec.pendingData;
  13657. codec.pendingData = null;
  13658. return output;
  13659. } else {
  13660. return new Uint8Array(0);
  13661. }
  13662. }
  13663. }
  13664. var global$4 = global$F;
  13665. var path$1 = global$4;
  13666. var wellKnownSymbolWrapped = {};
  13667. var wellKnownSymbol$3 = wellKnownSymbol$t;
  13668. wellKnownSymbolWrapped.f = wellKnownSymbol$3;
  13669. var path = path$1;
  13670. var hasOwn$5 = hasOwnProperty_1;
  13671. var wrappedWellKnownSymbolModule$1 = wellKnownSymbolWrapped;
  13672. var defineProperty$4 = objectDefineProperty.f;
  13673. var defineWellKnownSymbol$2 = function (NAME) {
  13674. var Symbol = path.Symbol || (path.Symbol = {});
  13675. if (!hasOwn$5(Symbol, NAME)) defineProperty$4(Symbol, NAME, {
  13676. value: wrappedWellKnownSymbolModule$1.f(NAME)
  13677. });
  13678. };
  13679. var defineWellKnownSymbol$1 = defineWellKnownSymbol$2;
  13680. // `Symbol.iterator` well-known symbol
  13681. // https://tc39.es/ecma262/#sec-symbol.iterator
  13682. defineWellKnownSymbol$1('iterator');
  13683. var objectGetOwnPropertyNamesExternal = {};
  13684. /* eslint-disable es-x/no-object-getownpropertynames -- safe */
  13685. var classof$1 = classofRaw$1;
  13686. var toIndexedObject$2 = toIndexedObject$b;
  13687. var $getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
  13688. var arraySlice$1 = arraySliceSimple;
  13689. var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
  13690. ? Object.getOwnPropertyNames(window) : [];
  13691. var getWindowNames = function (it) {
  13692. try {
  13693. return $getOwnPropertyNames$1(it);
  13694. } catch (error) {
  13695. return arraySlice$1(windowNames);
  13696. }
  13697. };
  13698. // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
  13699. objectGetOwnPropertyNamesExternal.f = function getOwnPropertyNames(it) {
  13700. return windowNames && classof$1(it) == 'Window'
  13701. ? getWindowNames(it)
  13702. : $getOwnPropertyNames$1(toIndexedObject$2(it));
  13703. };
  13704. var call$3 = functionCall;
  13705. var getBuiltIn$2 = getBuiltIn$b;
  13706. var wellKnownSymbol$2 = wellKnownSymbol$t;
  13707. var defineBuiltIn$2 = defineBuiltIn$f;
  13708. var symbolDefineToPrimitive = function () {
  13709. var Symbol = getBuiltIn$2('Symbol');
  13710. var SymbolPrototype = Symbol && Symbol.prototype;
  13711. var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
  13712. var TO_PRIMITIVE = wellKnownSymbol$2('toPrimitive');
  13713. if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
  13714. // `Symbol.prototype[@@toPrimitive]` method
  13715. // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
  13716. // eslint-disable-next-line no-unused-vars -- required for .length
  13717. defineBuiltIn$2(SymbolPrototype, TO_PRIMITIVE, function (hint) {
  13718. return call$3(valueOf, this);
  13719. }, { arity: 1 });
  13720. }
  13721. };
  13722. var $$b = _export;
  13723. var global$3 = global$F;
  13724. var call$2 = functionCall;
  13725. var uncurryThis$9 = functionUncurryThis;
  13726. var DESCRIPTORS$4 = descriptors;
  13727. var NATIVE_SYMBOL$4 = nativeSymbol;
  13728. var fails$8 = fails$H;
  13729. var hasOwn$4 = hasOwnProperty_1;
  13730. var isPrototypeOf$1 = objectIsPrototypeOf;
  13731. var anObject$1 = anObject$i;
  13732. var toIndexedObject$1 = toIndexedObject$b;
  13733. var toPropertyKey = toPropertyKey$5;
  13734. var $toString = toString$a;
  13735. var createPropertyDescriptor = createPropertyDescriptor$7;
  13736. var nativeObjectCreate = objectCreate;
  13737. var objectKeys$1 = objectKeys$4;
  13738. var getOwnPropertyNamesModule$1 = objectGetOwnPropertyNames;
  13739. var getOwnPropertyNamesExternal = objectGetOwnPropertyNamesExternal;
  13740. var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols;
  13741. var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor;
  13742. var definePropertyModule = objectDefineProperty;
  13743. var definePropertiesModule = objectDefineProperties;
  13744. var propertyIsEnumerableModule = objectPropertyIsEnumerable;
  13745. var defineBuiltIn$1 = defineBuiltIn$f;
  13746. var shared$2 = shared$7.exports;
  13747. var sharedKey = sharedKey$4;
  13748. var hiddenKeys$1 = hiddenKeys$6;
  13749. var uid$1 = uid$5;
  13750. var wellKnownSymbol$1 = wellKnownSymbol$t;
  13751. var wrappedWellKnownSymbolModule = wellKnownSymbolWrapped;
  13752. var defineWellKnownSymbol = defineWellKnownSymbol$2;
  13753. var defineSymbolToPrimitive = symbolDefineToPrimitive;
  13754. var setToStringTag$1 = setToStringTag$8;
  13755. var InternalStateModule$1 = internalState;
  13756. var $forEach = arrayIteration.forEach;
  13757. var HIDDEN = sharedKey('hidden');
  13758. var SYMBOL = 'Symbol';
  13759. var PROTOTYPE = 'prototype';
  13760. var setInternalState$1 = InternalStateModule$1.set;
  13761. var getInternalState = InternalStateModule$1.getterFor(SYMBOL);
  13762. var ObjectPrototype = Object[PROTOTYPE];
  13763. var $Symbol = global$3.Symbol;
  13764. var SymbolPrototype$1 = $Symbol && $Symbol[PROTOTYPE];
  13765. var TypeError$1 = global$3.TypeError;
  13766. var QObject = global$3.QObject;
  13767. var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
  13768. var nativeDefineProperty = definePropertyModule.f;
  13769. var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
  13770. var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
  13771. var push$2 = uncurryThis$9([].push);
  13772. var AllSymbols = shared$2('symbols');
  13773. var ObjectPrototypeSymbols = shared$2('op-symbols');
  13774. var WellKnownSymbolsStore = shared$2('wks');
  13775. // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
  13776. var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
  13777. // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
  13778. var setSymbolDescriptor = DESCRIPTORS$4 && fails$8(function () {
  13779. return nativeObjectCreate(nativeDefineProperty({}, 'a', {
  13780. get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
  13781. })).a != 7;
  13782. }) ? function (O, P, Attributes) {
  13783. var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
  13784. if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
  13785. nativeDefineProperty(O, P, Attributes);
  13786. if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
  13787. nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
  13788. }
  13789. } : nativeDefineProperty;
  13790. var wrap = function (tag, description) {
  13791. var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype$1);
  13792. setInternalState$1(symbol, {
  13793. type: SYMBOL,
  13794. tag: tag,
  13795. description: description
  13796. });
  13797. if (!DESCRIPTORS$4) symbol.description = description;
  13798. return symbol;
  13799. };
  13800. var $defineProperty = function defineProperty(O, P, Attributes) {
  13801. if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
  13802. anObject$1(O);
  13803. var key = toPropertyKey(P);
  13804. anObject$1(Attributes);
  13805. if (hasOwn$4(AllSymbols, key)) {
  13806. if (!Attributes.enumerable) {
  13807. if (!hasOwn$4(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
  13808. O[HIDDEN][key] = true;
  13809. } else {
  13810. if (hasOwn$4(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
  13811. Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
  13812. } return setSymbolDescriptor(O, key, Attributes);
  13813. } return nativeDefineProperty(O, key, Attributes);
  13814. };
  13815. var $defineProperties = function defineProperties(O, Properties) {
  13816. anObject$1(O);
  13817. var properties = toIndexedObject$1(Properties);
  13818. var keys = objectKeys$1(properties).concat($getOwnPropertySymbols(properties));
  13819. $forEach(keys, function (key) {
  13820. if (!DESCRIPTORS$4 || call$2($propertyIsEnumerable$1, properties, key)) $defineProperty(O, key, properties[key]);
  13821. });
  13822. return O;
  13823. };
  13824. var $create = function create(O, Properties) {
  13825. return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
  13826. };
  13827. var $propertyIsEnumerable$1 = function propertyIsEnumerable(V) {
  13828. var P = toPropertyKey(V);
  13829. var enumerable = call$2(nativePropertyIsEnumerable, this, P);
  13830. if (this === ObjectPrototype && hasOwn$4(AllSymbols, P) && !hasOwn$4(ObjectPrototypeSymbols, P)) return false;
  13831. return enumerable || !hasOwn$4(this, P) || !hasOwn$4(AllSymbols, P) || hasOwn$4(this, HIDDEN) && this[HIDDEN][P]
  13832. ? enumerable : true;
  13833. };
  13834. var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
  13835. var it = toIndexedObject$1(O);
  13836. var key = toPropertyKey(P);
  13837. if (it === ObjectPrototype && hasOwn$4(AllSymbols, key) && !hasOwn$4(ObjectPrototypeSymbols, key)) return;
  13838. var descriptor = nativeGetOwnPropertyDescriptor(it, key);
  13839. if (descriptor && hasOwn$4(AllSymbols, key) && !(hasOwn$4(it, HIDDEN) && it[HIDDEN][key])) {
  13840. descriptor.enumerable = true;
  13841. }
  13842. return descriptor;
  13843. };
  13844. var $getOwnPropertyNames = function getOwnPropertyNames(O) {
  13845. var names = nativeGetOwnPropertyNames(toIndexedObject$1(O));
  13846. var result = [];
  13847. $forEach(names, function (key) {
  13848. if (!hasOwn$4(AllSymbols, key) && !hasOwn$4(hiddenKeys$1, key)) push$2(result, key);
  13849. });
  13850. return result;
  13851. };
  13852. var $getOwnPropertySymbols = function (O) {
  13853. var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
  13854. var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject$1(O));
  13855. var result = [];
  13856. $forEach(names, function (key) {
  13857. if (hasOwn$4(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn$4(ObjectPrototype, key))) {
  13858. push$2(result, AllSymbols[key]);
  13859. }
  13860. });
  13861. return result;
  13862. };
  13863. // `Symbol` constructor
  13864. // https://tc39.es/ecma262/#sec-symbol-constructor
  13865. if (!NATIVE_SYMBOL$4) {
  13866. $Symbol = function Symbol() {
  13867. if (isPrototypeOf$1(SymbolPrototype$1, this)) throw TypeError$1('Symbol is not a constructor');
  13868. var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
  13869. var tag = uid$1(description);
  13870. var setter = function (value) {
  13871. if (this === ObjectPrototype) call$2(setter, ObjectPrototypeSymbols, value);
  13872. if (hasOwn$4(this, HIDDEN) && hasOwn$4(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
  13873. setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
  13874. };
  13875. if (DESCRIPTORS$4 && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
  13876. return wrap(tag, description);
  13877. };
  13878. SymbolPrototype$1 = $Symbol[PROTOTYPE];
  13879. defineBuiltIn$1(SymbolPrototype$1, 'toString', function toString() {
  13880. return getInternalState(this).tag;
  13881. });
  13882. defineBuiltIn$1($Symbol, 'withoutSetter', function (description) {
  13883. return wrap(uid$1(description), description);
  13884. });
  13885. propertyIsEnumerableModule.f = $propertyIsEnumerable$1;
  13886. definePropertyModule.f = $defineProperty;
  13887. definePropertiesModule.f = $defineProperties;
  13888. getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
  13889. getOwnPropertyNamesModule$1.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
  13890. getOwnPropertySymbolsModule$1.f = $getOwnPropertySymbols;
  13891. wrappedWellKnownSymbolModule.f = function (name) {
  13892. return wrap(wellKnownSymbol$1(name), name);
  13893. };
  13894. if (DESCRIPTORS$4) {
  13895. // https://github.com/tc39/proposal-Symbol-description
  13896. nativeDefineProperty(SymbolPrototype$1, 'description', {
  13897. configurable: true,
  13898. get: function description() {
  13899. return getInternalState(this).description;
  13900. }
  13901. });
  13902. {
  13903. defineBuiltIn$1(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable$1, { unsafe: true });
  13904. }
  13905. }
  13906. }
  13907. $$b({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL$4, sham: !NATIVE_SYMBOL$4 }, {
  13908. Symbol: $Symbol
  13909. });
  13910. $forEach(objectKeys$1(WellKnownSymbolsStore), function (name) {
  13911. defineWellKnownSymbol(name);
  13912. });
  13913. $$b({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL$4 }, {
  13914. useSetter: function () { USE_SETTER = true; },
  13915. useSimple: function () { USE_SETTER = false; }
  13916. });
  13917. $$b({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL$4, sham: !DESCRIPTORS$4 }, {
  13918. // `Object.create` method
  13919. // https://tc39.es/ecma262/#sec-object.create
  13920. create: $create,
  13921. // `Object.defineProperty` method
  13922. // https://tc39.es/ecma262/#sec-object.defineproperty
  13923. defineProperty: $defineProperty,
  13924. // `Object.defineProperties` method
  13925. // https://tc39.es/ecma262/#sec-object.defineproperties
  13926. defineProperties: $defineProperties,
  13927. // `Object.getOwnPropertyDescriptor` method
  13928. // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
  13929. getOwnPropertyDescriptor: $getOwnPropertyDescriptor
  13930. });
  13931. $$b({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL$4 }, {
  13932. // `Object.getOwnPropertyNames` method
  13933. // https://tc39.es/ecma262/#sec-object.getownpropertynames
  13934. getOwnPropertyNames: $getOwnPropertyNames
  13935. });
  13936. // `Symbol.prototype[@@toPrimitive]` method
  13937. // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
  13938. defineSymbolToPrimitive();
  13939. // `Symbol.prototype[@@toStringTag]` property
  13940. // https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
  13941. setToStringTag$1($Symbol, SYMBOL);
  13942. hiddenKeys$1[HIDDEN] = true;
  13943. var NATIVE_SYMBOL$3 = nativeSymbol;
  13944. /* eslint-disable es-x/no-symbol -- safe */
  13945. var nativeSymbolRegistry = NATIVE_SYMBOL$3 && !!Symbol['for'] && !!Symbol.keyFor;
  13946. var $$a = _export;
  13947. var getBuiltIn$1 = getBuiltIn$b;
  13948. var hasOwn$3 = hasOwnProperty_1;
  13949. var toString$3 = toString$a;
  13950. var shared$1 = shared$7.exports;
  13951. var NATIVE_SYMBOL_REGISTRY$1 = nativeSymbolRegistry;
  13952. var StringToSymbolRegistry = shared$1('string-to-symbol-registry');
  13953. var SymbolToStringRegistry$1 = shared$1('symbol-to-string-registry');
  13954. // `Symbol.for` method
  13955. // https://tc39.es/ecma262/#sec-symbol.for
  13956. $$a({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY$1 }, {
  13957. 'for': function (key) {
  13958. var string = toString$3(key);
  13959. if (hasOwn$3(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
  13960. var symbol = getBuiltIn$1('Symbol')(string);
  13961. StringToSymbolRegistry[string] = symbol;
  13962. SymbolToStringRegistry$1[symbol] = string;
  13963. return symbol;
  13964. }
  13965. });
  13966. var $$9 = _export;
  13967. var hasOwn$2 = hasOwnProperty_1;
  13968. var isSymbol$1 = isSymbol$6;
  13969. var tryToString = tryToString$7;
  13970. var shared = shared$7.exports;
  13971. var NATIVE_SYMBOL_REGISTRY = nativeSymbolRegistry;
  13972. var SymbolToStringRegistry = shared('symbol-to-string-registry');
  13973. // `Symbol.keyFor` method
  13974. // https://tc39.es/ecma262/#sec-symbol.keyfor
  13975. $$9({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
  13976. keyFor: function keyFor(sym) {
  13977. if (!isSymbol$1(sym)) throw TypeError(tryToString(sym) + ' is not a symbol');
  13978. if (hasOwn$2(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
  13979. }
  13980. });
  13981. var $$8 = _export;
  13982. var getBuiltIn = getBuiltIn$b;
  13983. var apply$1 = functionApply;
  13984. var call$1 = functionCall;
  13985. var uncurryThis$8 = functionUncurryThis;
  13986. var fails$7 = fails$H;
  13987. var isArray = isArray$4;
  13988. var isCallable$3 = isCallable$s;
  13989. var isObject$3 = isObject$k;
  13990. var isSymbol = isSymbol$6;
  13991. var arraySlice = arraySlice$9;
  13992. var NATIVE_SYMBOL$2 = nativeSymbol;
  13993. var $stringify = getBuiltIn('JSON', 'stringify');
  13994. var exec = uncurryThis$8(/./.exec);
  13995. var charAt$1 = uncurryThis$8(''.charAt);
  13996. var charCodeAt = uncurryThis$8(''.charCodeAt);
  13997. var replace$2 = uncurryThis$8(''.replace);
  13998. var numberToString = uncurryThis$8(1.0.toString);
  13999. var tester = /[\uD800-\uDFFF]/g;
  14000. var low = /^[\uD800-\uDBFF]$/;
  14001. var hi = /^[\uDC00-\uDFFF]$/;
  14002. var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL$2 || fails$7(function () {
  14003. var symbol = getBuiltIn('Symbol')();
  14004. // MS Edge converts symbol values to JSON as {}
  14005. return $stringify([symbol]) != '[null]'
  14006. // WebKit converts symbol values to JSON as null
  14007. || $stringify({ a: symbol }) != '{}'
  14008. // V8 throws on boxed symbols
  14009. || $stringify(Object(symbol)) != '{}';
  14010. });
  14011. // https://github.com/tc39/proposal-well-formed-stringify
  14012. var ILL_FORMED_UNICODE = fails$7(function () {
  14013. return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
  14014. || $stringify('\uDEAD') !== '"\\udead"';
  14015. });
  14016. var stringifyWithSymbolsFix = function (it, replacer) {
  14017. var args = arraySlice(arguments);
  14018. var $replacer = replacer;
  14019. if (!isObject$3(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
  14020. if (!isArray(replacer)) replacer = function (key, value) {
  14021. if (isCallable$3($replacer)) value = call$1($replacer, this, key, value);
  14022. if (!isSymbol(value)) return value;
  14023. };
  14024. args[1] = replacer;
  14025. return apply$1($stringify, null, args);
  14026. };
  14027. var fixIllFormed = function (match, offset, string) {
  14028. var prev = charAt$1(string, offset - 1);
  14029. var next = charAt$1(string, offset + 1);
  14030. if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {
  14031. return '\\u' + numberToString(charCodeAt(match, 0), 16);
  14032. } return match;
  14033. };
  14034. if ($stringify) {
  14035. // `JSON.stringify` method
  14036. // https://tc39.es/ecma262/#sec-json.stringify
  14037. $$8({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {
  14038. // eslint-disable-next-line no-unused-vars -- required for `.length`
  14039. stringify: function stringify(it, replacer, space) {
  14040. var args = arraySlice(arguments);
  14041. var result = apply$1(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
  14042. return ILL_FORMED_UNICODE && typeof result == 'string' ? replace$2(result, tester, fixIllFormed) : result;
  14043. }
  14044. });
  14045. }
  14046. var $$7 = _export;
  14047. var NATIVE_SYMBOL$1 = nativeSymbol;
  14048. var fails$6 = fails$H;
  14049. var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols;
  14050. var toObject$1 = toObject$d;
  14051. // V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
  14052. // https://bugs.chromium.org/p/v8/issues/detail?id=3443
  14053. var FORCED = !NATIVE_SYMBOL$1 || fails$6(function () { getOwnPropertySymbolsModule.f(1); });
  14054. // `Object.getOwnPropertySymbols` method
  14055. // https://tc39.es/ecma262/#sec-object.getownpropertysymbols
  14056. $$7({ target: 'Object', stat: true, forced: FORCED }, {
  14057. getOwnPropertySymbols: function getOwnPropertySymbols(it) {
  14058. var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  14059. return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject$1(it)) : [];
  14060. }
  14061. });
  14062. var $$6 = _export;
  14063. var DESCRIPTORS$3 = descriptors;
  14064. var global$2 = global$F;
  14065. var uncurryThis$7 = functionUncurryThis;
  14066. var hasOwn$1 = hasOwnProperty_1;
  14067. var isCallable$2 = isCallable$s;
  14068. var isPrototypeOf = objectIsPrototypeOf;
  14069. var toString$2 = toString$a;
  14070. var defineProperty$3 = objectDefineProperty.f;
  14071. var copyConstructorProperties = copyConstructorProperties$2;
  14072. var NativeSymbol = global$2.Symbol;
  14073. var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
  14074. if (DESCRIPTORS$3 && isCallable$2(NativeSymbol) && (!('description' in SymbolPrototype) ||
  14075. // Safari 12 bug
  14076. NativeSymbol().description !== undefined
  14077. )) {
  14078. var EmptyStringDescriptionStore = {};
  14079. // wrap Symbol constructor for correct work with undefined description
  14080. var SymbolWrapper = function Symbol() {
  14081. var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString$2(arguments[0]);
  14082. var result = isPrototypeOf(SymbolPrototype, this)
  14083. ? new NativeSymbol(description)
  14084. // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'
  14085. : description === undefined ? NativeSymbol() : NativeSymbol(description);
  14086. if (description === '') EmptyStringDescriptionStore[result] = true;
  14087. return result;
  14088. };
  14089. copyConstructorProperties(SymbolWrapper, NativeSymbol);
  14090. SymbolWrapper.prototype = SymbolPrototype;
  14091. SymbolPrototype.constructor = SymbolWrapper;
  14092. var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
  14093. var symbolToString = uncurryThis$7(SymbolPrototype.toString);
  14094. var symbolValueOf = uncurryThis$7(SymbolPrototype.valueOf);
  14095. var regexp = /^Symbol\((.*)\)[^)]+$/;
  14096. var replace$1 = uncurryThis$7(''.replace);
  14097. var stringSlice$2 = uncurryThis$7(''.slice);
  14098. defineProperty$3(SymbolPrototype, 'description', {
  14099. configurable: true,
  14100. get: function description() {
  14101. var symbol = symbolValueOf(this);
  14102. var string = symbolToString(symbol);
  14103. if (hasOwn$1(EmptyStringDescriptionStore, symbol)) return '';
  14104. var desc = NATIVE_SYMBOL ? stringSlice$2(string, 7, -1) : replace$1(string, regexp, '$1');
  14105. return desc === '' ? undefined : desc;
  14106. }
  14107. });
  14108. $$6({ global: true, constructor: true, forced: true }, {
  14109. Symbol: SymbolWrapper
  14110. });
  14111. }
  14112. var $$5 = _export;
  14113. var iterate$2 = iterate$5;
  14114. var createProperty = createProperty$6;
  14115. // `Object.fromEntries` method
  14116. // https://github.com/tc39/proposal-object-from-entries
  14117. $$5({ target: 'Object', stat: true }, {
  14118. fromEntries: function fromEntries(iterable) {
  14119. var obj = {};
  14120. iterate$2(iterable, function (k, v) {
  14121. createProperty(obj, k, v);
  14122. }, { AS_ENTRIES: true });
  14123. return obj;
  14124. }
  14125. });
  14126. var PROPER_FUNCTION_NAME = functionName.PROPER;
  14127. var fails$5 = fails$H;
  14128. var whitespaces = whitespaces$2;
  14129. var non = '\u200B\u0085\u180E';
  14130. // check that a method works with the correct list
  14131. // of whitespaces and has a correct name
  14132. var stringTrimForced = function (METHOD_NAME) {
  14133. return fails$5(function () {
  14134. return !!whitespaces[METHOD_NAME]()
  14135. || non[METHOD_NAME]() !== non
  14136. || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);
  14137. });
  14138. };
  14139. var $$4 = _export;
  14140. var $trim = stringTrim.trim;
  14141. var forcedStringTrimMethod = stringTrimForced;
  14142. // `String.prototype.trim` method
  14143. // https://tc39.es/ecma262/#sec-string.prototype.trim
  14144. $$4({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
  14145. trim: function trim() {
  14146. return $trim(this);
  14147. }
  14148. });
  14149. var uncurryThis$6 = functionUncurryThis;
  14150. var toObject = toObject$d;
  14151. var floor = Math.floor;
  14152. var charAt = uncurryThis$6(''.charAt);
  14153. var replace = uncurryThis$6(''.replace);
  14154. var stringSlice$1 = uncurryThis$6(''.slice);
  14155. var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
  14156. var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
  14157. // `GetSubstitution` abstract operation
  14158. // https://tc39.es/ecma262/#sec-getsubstitution
  14159. var getSubstitution$1 = function (matched, str, position, captures, namedCaptures, replacement) {
  14160. var tailPos = position + matched.length;
  14161. var m = captures.length;
  14162. var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
  14163. if (namedCaptures !== undefined) {
  14164. namedCaptures = toObject(namedCaptures);
  14165. symbols = SUBSTITUTION_SYMBOLS;
  14166. }
  14167. return replace(replacement, symbols, function (match, ch) {
  14168. var capture;
  14169. switch (charAt(ch, 0)) {
  14170. case '$': return '$';
  14171. case '&': return matched;
  14172. case '`': return stringSlice$1(str, 0, position);
  14173. case "'": return stringSlice$1(str, tailPos);
  14174. case '<':
  14175. capture = namedCaptures[stringSlice$1(ch, 1, -1)];
  14176. break;
  14177. default: // \d\d?
  14178. var n = +ch;
  14179. if (n === 0) return match;
  14180. if (n > m) {
  14181. var f = floor(n / 10);
  14182. if (f === 0) return match;
  14183. if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);
  14184. return match;
  14185. }
  14186. capture = captures[n - 1];
  14187. }
  14188. return capture === undefined ? '' : capture;
  14189. });
  14190. };
  14191. var apply = functionApply;
  14192. var call = functionCall;
  14193. var uncurryThis$5 = functionUncurryThis;
  14194. var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic;
  14195. var fails$4 = fails$H;
  14196. var anObject = anObject$i;
  14197. var isCallable$1 = isCallable$s;
  14198. var toIntegerOrInfinity = toIntegerOrInfinity$9;
  14199. var toLength$1 = toLength$a;
  14200. var toString$1 = toString$a;
  14201. var requireObjectCoercible$1 = requireObjectCoercible$8;
  14202. var advanceStringIndex = advanceStringIndex$2;
  14203. var getMethod = getMethod$5;
  14204. var getSubstitution = getSubstitution$1;
  14205. var regExpExec$1 = regexpExecAbstract;
  14206. var wellKnownSymbol = wellKnownSymbol$t;
  14207. var REPLACE = wellKnownSymbol('replace');
  14208. var max = Math.max;
  14209. var min$1 = Math.min;
  14210. var concat = uncurryThis$5([].concat);
  14211. var push$1 = uncurryThis$5([].push);
  14212. var stringIndexOf = uncurryThis$5(''.indexOf);
  14213. var stringSlice = uncurryThis$5(''.slice);
  14214. var maybeToString = function (it) {
  14215. return it === undefined ? it : String(it);
  14216. };
  14217. // IE <= 11 replaces $0 with the whole match, as if it was $&
  14218. // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
  14219. var REPLACE_KEEPS_$0 = (function () {
  14220. // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing
  14221. return 'a'.replace(/./, '$0') === '$0';
  14222. })();
  14223. // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
  14224. var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
  14225. if (/./[REPLACE]) {
  14226. return /./[REPLACE]('a', '$0') === '';
  14227. }
  14228. return false;
  14229. })();
  14230. var REPLACE_SUPPORTS_NAMED_GROUPS = !fails$4(function () {
  14231. var re = /./;
  14232. re.exec = function () {
  14233. var result = [];
  14234. result.groups = { a: '7' };
  14235. return result;
  14236. };
  14237. // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive
  14238. return ''.replace(re, '$<a>') !== '7';
  14239. });
  14240. // @@replace logic
  14241. fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {
  14242. var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';
  14243. return [
  14244. // `String.prototype.replace` method
  14245. // https://tc39.es/ecma262/#sec-string.prototype.replace
  14246. function replace(searchValue, replaceValue) {
  14247. var O = requireObjectCoercible$1(this);
  14248. var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);
  14249. return replacer
  14250. ? call(replacer, searchValue, O, replaceValue)
  14251. : call(nativeReplace, toString$1(O), searchValue, replaceValue);
  14252. },
  14253. // `RegExp.prototype[@@replace]` method
  14254. // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
  14255. function (string, replaceValue) {
  14256. var rx = anObject(this);
  14257. var S = toString$1(string);
  14258. if (
  14259. typeof replaceValue == 'string' &&
  14260. stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&
  14261. stringIndexOf(replaceValue, '$<') === -1
  14262. ) {
  14263. var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
  14264. if (res.done) return res.value;
  14265. }
  14266. var functionalReplace = isCallable$1(replaceValue);
  14267. if (!functionalReplace) replaceValue = toString$1(replaceValue);
  14268. var global = rx.global;
  14269. if (global) {
  14270. var fullUnicode = rx.unicode;
  14271. rx.lastIndex = 0;
  14272. }
  14273. var results = [];
  14274. while (true) {
  14275. var result = regExpExec$1(rx, S);
  14276. if (result === null) break;
  14277. push$1(results, result);
  14278. if (!global) break;
  14279. var matchStr = toString$1(result[0]);
  14280. if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength$1(rx.lastIndex), fullUnicode);
  14281. }
  14282. var accumulatedResult = '';
  14283. var nextSourcePosition = 0;
  14284. for (var i = 0; i < results.length; i++) {
  14285. result = results[i];
  14286. var matched = toString$1(result[0]);
  14287. var position = max(min$1(toIntegerOrInfinity(result.index), S.length), 0);
  14288. var captures = [];
  14289. // NOTE: This is equivalent to
  14290. // captures = result.slice(1).map(maybeToString)
  14291. // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
  14292. // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
  14293. // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
  14294. for (var j = 1; j < result.length; j++) push$1(captures, maybeToString(result[j]));
  14295. var namedCaptures = result.groups;
  14296. if (functionalReplace) {
  14297. var replacerArgs = concat([matched], captures, position, S);
  14298. if (namedCaptures !== undefined) push$1(replacerArgs, namedCaptures);
  14299. var replacement = toString$1(apply(replaceValue, undefined, replacerArgs));
  14300. } else {
  14301. replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
  14302. }
  14303. if (position >= nextSourcePosition) {
  14304. accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
  14305. nextSourcePosition = position + matched.length;
  14306. }
  14307. }
  14308. return accumulatedResult + stringSlice(S, nextSourcePosition);
  14309. }
  14310. ];
  14311. }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
  14312. var internalMetadata = {exports: {}};
  14313. // FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it
  14314. var fails$3 = fails$H;
  14315. var arrayBufferNonExtensible = fails$3(function () {
  14316. if (typeof ArrayBuffer == 'function') {
  14317. var buffer = new ArrayBuffer(8);
  14318. // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-defineproperty -- safe
  14319. if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });
  14320. }
  14321. });
  14322. var fails$2 = fails$H;
  14323. var isObject$2 = isObject$k;
  14324. var classof = classofRaw$1;
  14325. var ARRAY_BUFFER_NON_EXTENSIBLE = arrayBufferNonExtensible;
  14326. // eslint-disable-next-line es-x/no-object-isextensible -- safe
  14327. var $isExtensible = Object.isExtensible;
  14328. var FAILS_ON_PRIMITIVES = fails$2(function () { $isExtensible(1); });
  14329. // `Object.isExtensible` method
  14330. // https://tc39.es/ecma262/#sec-object.isextensible
  14331. var objectIsExtensible = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {
  14332. if (!isObject$2(it)) return false;
  14333. if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;
  14334. return $isExtensible ? $isExtensible(it) : true;
  14335. } : $isExtensible;
  14336. var fails$1 = fails$H;
  14337. var freezing = !fails$1(function () {
  14338. // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-preventextensions -- required for testing
  14339. return Object.isExtensible(Object.preventExtensions({}));
  14340. });
  14341. var $$3 = _export;
  14342. var uncurryThis$4 = functionUncurryThis;
  14343. var hiddenKeys = hiddenKeys$6;
  14344. var isObject$1 = isObject$k;
  14345. var hasOwn = hasOwnProperty_1;
  14346. var defineProperty$2 = objectDefineProperty.f;
  14347. var getOwnPropertyNamesModule = objectGetOwnPropertyNames;
  14348. var getOwnPropertyNamesExternalModule = objectGetOwnPropertyNamesExternal;
  14349. var isExtensible = objectIsExtensible;
  14350. var uid = uid$5;
  14351. var FREEZING = freezing;
  14352. var REQUIRED = false;
  14353. var METADATA = uid('meta');
  14354. var id = 0;
  14355. var setMetadata = function (it) {
  14356. defineProperty$2(it, METADATA, { value: {
  14357. objectID: 'O' + id++, // object ID
  14358. weakData: {} // weak collections IDs
  14359. } });
  14360. };
  14361. var fastKey$1 = function (it, create) {
  14362. // return a primitive with prefix
  14363. if (!isObject$1(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
  14364. if (!hasOwn(it, METADATA)) {
  14365. // can't set metadata to uncaught frozen object
  14366. if (!isExtensible(it)) return 'F';
  14367. // not necessary to add metadata
  14368. if (!create) return 'E';
  14369. // add missing metadata
  14370. setMetadata(it);
  14371. // return object ID
  14372. } return it[METADATA].objectID;
  14373. };
  14374. var getWeakData = function (it, create) {
  14375. if (!hasOwn(it, METADATA)) {
  14376. // can't set metadata to uncaught frozen object
  14377. if (!isExtensible(it)) return true;
  14378. // not necessary to add metadata
  14379. if (!create) return false;
  14380. // add missing metadata
  14381. setMetadata(it);
  14382. // return the store of weak collections IDs
  14383. } return it[METADATA].weakData;
  14384. };
  14385. // add metadata on freeze-family methods calling
  14386. var onFreeze = function (it) {
  14387. if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
  14388. return it;
  14389. };
  14390. var enable = function () {
  14391. meta.enable = function () { /* empty */ };
  14392. REQUIRED = true;
  14393. var getOwnPropertyNames = getOwnPropertyNamesModule.f;
  14394. var splice = uncurryThis$4([].splice);
  14395. var test = {};
  14396. test[METADATA] = 1;
  14397. // prevent exposing of metadata key
  14398. if (getOwnPropertyNames(test).length) {
  14399. getOwnPropertyNamesModule.f = function (it) {
  14400. var result = getOwnPropertyNames(it);
  14401. for (var i = 0, length = result.length; i < length; i++) {
  14402. if (result[i] === METADATA) {
  14403. splice(result, i, 1);
  14404. break;
  14405. }
  14406. } return result;
  14407. };
  14408. $$3({ target: 'Object', stat: true, forced: true }, {
  14409. getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
  14410. });
  14411. }
  14412. };
  14413. var meta = internalMetadata.exports = {
  14414. enable: enable,
  14415. fastKey: fastKey$1,
  14416. getWeakData: getWeakData,
  14417. onFreeze: onFreeze
  14418. };
  14419. hiddenKeys[METADATA] = true;
  14420. var $$2 = _export;
  14421. var global$1 = global$F;
  14422. var uncurryThis$3 = functionUncurryThis;
  14423. var isForced = isForced_1;
  14424. var defineBuiltIn = defineBuiltIn$f;
  14425. var InternalMetadataModule = internalMetadata.exports;
  14426. var iterate$1 = iterate$5;
  14427. var anInstance$1 = anInstance$7;
  14428. var isCallable = isCallable$s;
  14429. var isObject = isObject$k;
  14430. var fails = fails$H;
  14431. var checkCorrectnessOfIteration = checkCorrectnessOfIteration$4;
  14432. var setToStringTag = setToStringTag$8;
  14433. var inheritIfRequired = inheritIfRequired$3;
  14434. var collection$2 = function (CONSTRUCTOR_NAME, wrapper, common) {
  14435. var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
  14436. var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
  14437. var ADDER = IS_MAP ? 'set' : 'add';
  14438. var NativeConstructor = global$1[CONSTRUCTOR_NAME];
  14439. var NativePrototype = NativeConstructor && NativeConstructor.prototype;
  14440. var Constructor = NativeConstructor;
  14441. var exported = {};
  14442. var fixMethod = function (KEY) {
  14443. var uncurriedNativeMethod = uncurryThis$3(NativePrototype[KEY]);
  14444. defineBuiltIn(NativePrototype, KEY,
  14445. KEY == 'add' ? function add(value) {
  14446. uncurriedNativeMethod(this, value === 0 ? 0 : value);
  14447. return this;
  14448. } : KEY == 'delete' ? function (key) {
  14449. return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
  14450. } : KEY == 'get' ? function get(key) {
  14451. return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);
  14452. } : KEY == 'has' ? function has(key) {
  14453. return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
  14454. } : function set(key, value) {
  14455. uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
  14456. return this;
  14457. }
  14458. );
  14459. };
  14460. var REPLACE = isForced(
  14461. CONSTRUCTOR_NAME,
  14462. !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {
  14463. new NativeConstructor().entries().next();
  14464. }))
  14465. );
  14466. if (REPLACE) {
  14467. // create collection constructor
  14468. Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
  14469. InternalMetadataModule.enable();
  14470. } else if (isForced(CONSTRUCTOR_NAME, true)) {
  14471. var instance = new Constructor();
  14472. // early implementations not supports chaining
  14473. var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
  14474. // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
  14475. var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });
  14476. // most early implementations doesn't supports iterables, most modern - not close it correctly
  14477. // eslint-disable-next-line no-new -- required for testing
  14478. var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });
  14479. // for early implementations -0 and +0 not the same
  14480. var BUGGY_ZERO = !IS_WEAK && fails(function () {
  14481. // V8 ~ Chromium 42- fails only with 5+ elements
  14482. var $instance = new NativeConstructor();
  14483. var index = 5;
  14484. while (index--) $instance[ADDER](index, index);
  14485. return !$instance.has(-0);
  14486. });
  14487. if (!ACCEPT_ITERABLES) {
  14488. Constructor = wrapper(function (dummy, iterable) {
  14489. anInstance$1(dummy, NativePrototype);
  14490. var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
  14491. if (iterable != undefined) iterate$1(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
  14492. return that;
  14493. });
  14494. Constructor.prototype = NativePrototype;
  14495. NativePrototype.constructor = Constructor;
  14496. }
  14497. if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
  14498. fixMethod('delete');
  14499. fixMethod('has');
  14500. IS_MAP && fixMethod('get');
  14501. }
  14502. if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
  14503. // weak collections should not contains .clear method
  14504. if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;
  14505. }
  14506. exported[CONSTRUCTOR_NAME] = Constructor;
  14507. $$2({ global: true, constructor: true, forced: Constructor != NativeConstructor }, exported);
  14508. setToStringTag(Constructor, CONSTRUCTOR_NAME);
  14509. if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
  14510. return Constructor;
  14511. };
  14512. var defineProperty$1 = objectDefineProperty.f;
  14513. var create = objectCreate;
  14514. var defineBuiltIns = defineBuiltIns$3;
  14515. var bind = functionBindContext;
  14516. var anInstance = anInstance$7;
  14517. var iterate = iterate$5;
  14518. var defineIterator = defineIterator$3;
  14519. var setSpecies = setSpecies$4;
  14520. var DESCRIPTORS$2 = descriptors;
  14521. var fastKey = internalMetadata.exports.fastKey;
  14522. var InternalStateModule = internalState;
  14523. var setInternalState = InternalStateModule.set;
  14524. var internalStateGetterFor = InternalStateModule.getterFor;
  14525. var collectionStrong$2 = {
  14526. getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
  14527. var Constructor = wrapper(function (that, iterable) {
  14528. anInstance(that, Prototype);
  14529. setInternalState(that, {
  14530. type: CONSTRUCTOR_NAME,
  14531. index: create(null),
  14532. first: undefined,
  14533. last: undefined,
  14534. size: 0
  14535. });
  14536. if (!DESCRIPTORS$2) that.size = 0;
  14537. if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
  14538. });
  14539. var Prototype = Constructor.prototype;
  14540. var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
  14541. var define = function (that, key, value) {
  14542. var state = getInternalState(that);
  14543. var entry = getEntry(that, key);
  14544. var previous, index;
  14545. // change existing entry
  14546. if (entry) {
  14547. entry.value = value;
  14548. // create new entry
  14549. } else {
  14550. state.last = entry = {
  14551. index: index = fastKey(key, true),
  14552. key: key,
  14553. value: value,
  14554. previous: previous = state.last,
  14555. next: undefined,
  14556. removed: false
  14557. };
  14558. if (!state.first) state.first = entry;
  14559. if (previous) previous.next = entry;
  14560. if (DESCRIPTORS$2) state.size++;
  14561. else that.size++;
  14562. // add to index
  14563. if (index !== 'F') state.index[index] = entry;
  14564. } return that;
  14565. };
  14566. var getEntry = function (that, key) {
  14567. var state = getInternalState(that);
  14568. // fast case
  14569. var index = fastKey(key);
  14570. var entry;
  14571. if (index !== 'F') return state.index[index];
  14572. // frozen object case
  14573. for (entry = state.first; entry; entry = entry.next) {
  14574. if (entry.key == key) return entry;
  14575. }
  14576. };
  14577. defineBuiltIns(Prototype, {
  14578. // `{ Map, Set }.prototype.clear()` methods
  14579. // https://tc39.es/ecma262/#sec-map.prototype.clear
  14580. // https://tc39.es/ecma262/#sec-set.prototype.clear
  14581. clear: function clear() {
  14582. var that = this;
  14583. var state = getInternalState(that);
  14584. var data = state.index;
  14585. var entry = state.first;
  14586. while (entry) {
  14587. entry.removed = true;
  14588. if (entry.previous) entry.previous = entry.previous.next = undefined;
  14589. delete data[entry.index];
  14590. entry = entry.next;
  14591. }
  14592. state.first = state.last = undefined;
  14593. if (DESCRIPTORS$2) state.size = 0;
  14594. else that.size = 0;
  14595. },
  14596. // `{ Map, Set }.prototype.delete(key)` methods
  14597. // https://tc39.es/ecma262/#sec-map.prototype.delete
  14598. // https://tc39.es/ecma262/#sec-set.prototype.delete
  14599. 'delete': function (key) {
  14600. var that = this;
  14601. var state = getInternalState(that);
  14602. var entry = getEntry(that, key);
  14603. if (entry) {
  14604. var next = entry.next;
  14605. var prev = entry.previous;
  14606. delete state.index[entry.index];
  14607. entry.removed = true;
  14608. if (prev) prev.next = next;
  14609. if (next) next.previous = prev;
  14610. if (state.first == entry) state.first = next;
  14611. if (state.last == entry) state.last = prev;
  14612. if (DESCRIPTORS$2) state.size--;
  14613. else that.size--;
  14614. } return !!entry;
  14615. },
  14616. // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods
  14617. // https://tc39.es/ecma262/#sec-map.prototype.foreach
  14618. // https://tc39.es/ecma262/#sec-set.prototype.foreach
  14619. forEach: function forEach(callbackfn /* , that = undefined */) {
  14620. var state = getInternalState(this);
  14621. var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  14622. var entry;
  14623. while (entry = entry ? entry.next : state.first) {
  14624. boundFunction(entry.value, entry.key, this);
  14625. // revert to the last existing entry
  14626. while (entry && entry.removed) entry = entry.previous;
  14627. }
  14628. },
  14629. // `{ Map, Set}.prototype.has(key)` methods
  14630. // https://tc39.es/ecma262/#sec-map.prototype.has
  14631. // https://tc39.es/ecma262/#sec-set.prototype.has
  14632. has: function has(key) {
  14633. return !!getEntry(this, key);
  14634. }
  14635. });
  14636. defineBuiltIns(Prototype, IS_MAP ? {
  14637. // `Map.prototype.get(key)` method
  14638. // https://tc39.es/ecma262/#sec-map.prototype.get
  14639. get: function get(key) {
  14640. var entry = getEntry(this, key);
  14641. return entry && entry.value;
  14642. },
  14643. // `Map.prototype.set(key, value)` method
  14644. // https://tc39.es/ecma262/#sec-map.prototype.set
  14645. set: function set(key, value) {
  14646. return define(this, key === 0 ? 0 : key, value);
  14647. }
  14648. } : {
  14649. // `Set.prototype.add(value)` method
  14650. // https://tc39.es/ecma262/#sec-set.prototype.add
  14651. add: function add(value) {
  14652. return define(this, value = value === 0 ? 0 : value, value);
  14653. }
  14654. });
  14655. if (DESCRIPTORS$2) defineProperty$1(Prototype, 'size', {
  14656. get: function () {
  14657. return getInternalState(this).size;
  14658. }
  14659. });
  14660. return Constructor;
  14661. },
  14662. setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {
  14663. var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';
  14664. var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
  14665. var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
  14666. // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods
  14667. // https://tc39.es/ecma262/#sec-map.prototype.entries
  14668. // https://tc39.es/ecma262/#sec-map.prototype.keys
  14669. // https://tc39.es/ecma262/#sec-map.prototype.values
  14670. // https://tc39.es/ecma262/#sec-map.prototype-@@iterator
  14671. // https://tc39.es/ecma262/#sec-set.prototype.entries
  14672. // https://tc39.es/ecma262/#sec-set.prototype.keys
  14673. // https://tc39.es/ecma262/#sec-set.prototype.values
  14674. // https://tc39.es/ecma262/#sec-set.prototype-@@iterator
  14675. defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {
  14676. setInternalState(this, {
  14677. type: ITERATOR_NAME,
  14678. target: iterated,
  14679. state: getInternalCollectionState(iterated),
  14680. kind: kind,
  14681. last: undefined
  14682. });
  14683. }, function () {
  14684. var state = getInternalIteratorState(this);
  14685. var kind = state.kind;
  14686. var entry = state.last;
  14687. // revert to the last existing entry
  14688. while (entry && entry.removed) entry = entry.previous;
  14689. // get next entry
  14690. if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
  14691. // or finish the iteration
  14692. state.target = undefined;
  14693. return { value: undefined, done: true };
  14694. }
  14695. // return step by kind
  14696. if (kind == 'keys') return { value: entry.key, done: false };
  14697. if (kind == 'values') return { value: entry.value, done: false };
  14698. return { value: [entry.key, entry.value], done: false };
  14699. }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
  14700. // `{ Map, Set }.prototype[@@species]` accessors
  14701. // https://tc39.es/ecma262/#sec-get-map-@@species
  14702. // https://tc39.es/ecma262/#sec-get-set-@@species
  14703. setSpecies(CONSTRUCTOR_NAME);
  14704. }
  14705. };
  14706. var collection$1 = collection$2;
  14707. var collectionStrong$1 = collectionStrong$2;
  14708. // `Map` constructor
  14709. // https://tc39.es/ecma262/#sec-map-objects
  14710. collection$1('Map', function (init) {
  14711. return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };
  14712. }, collectionStrong$1);
  14713. var DESCRIPTORS$1 = descriptors;
  14714. var uncurryThis$2 = functionUncurryThis;
  14715. var objectKeys = objectKeys$4;
  14716. var toIndexedObject = toIndexedObject$b;
  14717. var $propertyIsEnumerable = objectPropertyIsEnumerable.f;
  14718. var propertyIsEnumerable = uncurryThis$2($propertyIsEnumerable);
  14719. var push = uncurryThis$2([].push);
  14720. // `Object.{ entries, values }` methods implementation
  14721. var createMethod = function (TO_ENTRIES) {
  14722. return function (it) {
  14723. var O = toIndexedObject(it);
  14724. var keys = objectKeys(O);
  14725. var length = keys.length;
  14726. var i = 0;
  14727. var result = [];
  14728. var key;
  14729. while (length > i) {
  14730. key = keys[i++];
  14731. if (!DESCRIPTORS$1 || propertyIsEnumerable(O, key)) {
  14732. push(result, TO_ENTRIES ? [key, O[key]] : O[key]);
  14733. }
  14734. }
  14735. return result;
  14736. };
  14737. };
  14738. var objectToArray = {
  14739. // `Object.entries` method
  14740. // https://tc39.es/ecma262/#sec-object.entries
  14741. entries: createMethod(true),
  14742. // `Object.values` method
  14743. // https://tc39.es/ecma262/#sec-object.values
  14744. values: createMethod(false)
  14745. };
  14746. var $$1 = _export;
  14747. var $entries = objectToArray.entries;
  14748. // `Object.entries` method
  14749. // https://tc39.es/ecma262/#sec-object.entries
  14750. $$1({ target: 'Object', stat: true }, {
  14751. entries: function entries(O) {
  14752. return $entries(O);
  14753. }
  14754. });
  14755. var sendFetchRequest = _async(function (method, _ref2, headers) {
  14756. var options = _ref2.options,
  14757. url = _ref2.url;
  14758. return _await(fetch(url, Object.assign({}, options, {
  14759. method: method,
  14760. headers: headers
  14761. })), function (response) {
  14762. if (response.status < 400) {
  14763. return response;
  14764. } else {
  14765. throw new Error(ERR_HTTP_STATUS + (response.statusText || response.status));
  14766. }
  14767. });
  14768. });
  14769. var getContentLength = _async(function (httpReader, sendRequest, getRequestData) {
  14770. return _invokeIgnored(function () {
  14771. if (httpReader.preventHeadRequest) {
  14772. return _awaitIgnored(getRequestData(httpReader, httpReader.options));
  14773. } else {
  14774. return _await(sendRequest(HTTP_METHOD_HEAD, httpReader, getHeaders(httpReader)), function (response) {
  14775. var contentLength = response.headers.get(HTTP_HEADER_CONTENT_LENGTH);
  14776. return _invokeIgnored(function () {
  14777. if (contentLength) {
  14778. httpReader.size = Number(contentLength);
  14779. } else {
  14780. return _awaitIgnored(getRequestData(httpReader, httpReader.options));
  14781. }
  14782. });
  14783. });
  14784. }
  14785. });
  14786. });
  14787. var getRequestData = _async(function (httpReader, sendRequest) {
  14788. return _await(sendRequest(HTTP_METHOD_GET, httpReader, getHeaders(httpReader)), function (response) {
  14789. return _await(response.arrayBuffer(), function (_response$arrayBuffer2) {
  14790. httpReader.data = new Uint8Array(_response$arrayBuffer2);
  14791. if (!httpReader.size) {
  14792. httpReader.size = httpReader.data.length;
  14793. }
  14794. });
  14795. });
  14796. });
  14797. var getXMLHttpRequestData = _async(function (httpReader) {
  14798. return _awaitIgnored(getRequestData(httpReader, sendXMLHttpRequest));
  14799. });
  14800. var getFetchRequestData = _async(function (httpReader) {
  14801. return _awaitIgnored(getRequestData(httpReader, sendFetchRequest));
  14802. });
  14803. var readUint8ArrayHttpReader = _async(function (httpReader, index, length, sendRequest, getRequestData) {
  14804. if (httpReader.useRangeHeader || httpReader.forceRangeRequests) {
  14805. return _await(sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, index, length)), function (response) {
  14806. if (response.status != 206) {
  14807. throw new Error(ERR_HTTP_RANGE);
  14808. }
  14809. return _await(response.arrayBuffer(), function (_response$arrayBuffer) {
  14810. return new Uint8Array(_response$arrayBuffer);
  14811. });
  14812. });
  14813. } else {
  14814. return _invoke(function () {
  14815. if (!httpReader.data) {
  14816. return _awaitIgnored(getRequestData(httpReader, httpReader.options));
  14817. }
  14818. }, function () {
  14819. return new Uint8Array(httpReader.data.subarray(index, index + length));
  14820. });
  14821. }
  14822. });
  14823. var initHttpReader = _async(function (httpReader, sendRequest, getRequestData) {
  14824. return function () {
  14825. if (isHttpFamily(httpReader.url) && (httpReader.useRangeHeader || httpReader.forceRangeRequests)) {
  14826. return _await(sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader)), function (response) {
  14827. return function () {
  14828. if (!httpReader.forceRangeRequests && response.headers.get(HTTP_HEADER_ACCEPT_RANGES) != HTTP_RANGE_UNIT) {
  14829. throw new Error(ERR_HTTP_RANGE);
  14830. } else {
  14831. var contentSize;
  14832. var contentRangeHeader = response.headers.get(HTTP_HEADER_CONTENT_RANGE);
  14833. if (contentRangeHeader) {
  14834. var splitHeader = contentRangeHeader.trim().split(/\s*\/\s*/);
  14835. if (splitHeader.length) {
  14836. var headerValue = splitHeader[1];
  14837. if (headerValue && headerValue != "*") {
  14838. contentSize = Number(headerValue);
  14839. }
  14840. }
  14841. }
  14842. return _invokeIgnored(function () {
  14843. if (contentSize === undefined) {
  14844. return _awaitIgnored(getContentLength(httpReader, sendRequest, getRequestData));
  14845. } else {
  14846. httpReader.size = contentSize;
  14847. }
  14848. });
  14849. }
  14850. }();
  14851. });
  14852. } else {
  14853. return _awaitIgnored(getContentLength(httpReader, sendRequest, getRequestData));
  14854. }
  14855. }();
  14856. });
  14857. /*
  14858. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  14859. Redistribution and use in source and binary forms, with or without
  14860. modification, are permitted provided that the following conditions are met:
  14861. 1. Redistributions of source code must retain the above copyright notice,
  14862. this list of conditions and the following disclaimer.
  14863. 2. Redistributions in binary form must reproduce the above copyright
  14864. notice, this list of conditions and the following disclaimer in
  14865. the documentation and/or other materials provided with the distribution.
  14866. 3. The names of the authors may not be used to endorse or promote products
  14867. derived from this software without specific prior written permission.
  14868. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  14869. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  14870. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  14871. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  14872. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  14873. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  14874. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  14875. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  14876. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  14877. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  14878. */
  14879. /* global Blob, FileReader, atob, btoa, XMLHttpRequest, document, fetch */
  14880. var ERR_HTTP_STATUS = "HTTP error ";
  14881. var ERR_HTTP_RANGE = "HTTP Range not supported";
  14882. var ERR_NOT_SEEKABLE_READER = "Reader is not seekable";
  14883. var CONTENT_TYPE_TEXT_PLAIN = "text/plain";
  14884. var HTTP_HEADER_CONTENT_LENGTH = "Content-Length";
  14885. var HTTP_HEADER_CONTENT_RANGE = "Content-Range";
  14886. var HTTP_HEADER_ACCEPT_RANGES = "Accept-Ranges";
  14887. var HTTP_HEADER_RANGE = "Range";
  14888. var HTTP_METHOD_HEAD = "HEAD";
  14889. var HTTP_METHOD_GET = "GET";
  14890. var HTTP_RANGE_UNIT = "bytes";
  14891. var Stream = /*#__PURE__*/function () {
  14892. function Stream() {
  14893. _classCallCheck(this, Stream);
  14894. this.size = 0;
  14895. }
  14896. _createClass(Stream, [{
  14897. key: "init",
  14898. value: function init() {
  14899. this.initialized = true;
  14900. }
  14901. }]);
  14902. return Stream;
  14903. }();
  14904. var Reader = /*#__PURE__*/function (_Stream) {
  14905. _inherits(Reader, _Stream);
  14906. var _super = _createSuper(Reader);
  14907. function Reader() {
  14908. _classCallCheck(this, Reader);
  14909. return _super.apply(this, arguments);
  14910. }
  14911. return _createClass(Reader);
  14912. }(Stream);
  14913. var Writer = /*#__PURE__*/function (_Stream2) {
  14914. _inherits(Writer, _Stream2);
  14915. var _super2 = _createSuper(Writer);
  14916. function Writer() {
  14917. _classCallCheck(this, Writer);
  14918. return _super2.apply(this, arguments);
  14919. }
  14920. _createClass(Writer, [{
  14921. key: "writeUint8Array",
  14922. value: function writeUint8Array(array) {
  14923. this.size += array.length;
  14924. }
  14925. }]);
  14926. return Writer;
  14927. }(Stream);
  14928. var TextReader = /*#__PURE__*/function (_Reader) {
  14929. _inherits(TextReader, _Reader);
  14930. var _super3 = _createSuper(TextReader);
  14931. function TextReader(text) {
  14932. var _this;
  14933. _classCallCheck(this, TextReader);
  14934. _this = _super3.call(this);
  14935. _this.blobReader = new BlobReader(new Blob([text], {
  14936. type: CONTENT_TYPE_TEXT_PLAIN
  14937. }));
  14938. return _this;
  14939. }
  14940. _createClass(TextReader, [{
  14941. key: "init",
  14942. value: function init() {
  14943. _get(_getPrototypeOf(TextReader.prototype), "init", this).call(this);
  14944. this.blobReader.init();
  14945. this.size = this.blobReader.size;
  14946. }
  14947. }, {
  14948. key: "readUint8Array",
  14949. value: function readUint8Array(offset, length) {
  14950. return this.blobReader.readUint8Array(offset, length);
  14951. }
  14952. }]);
  14953. return TextReader;
  14954. }(Reader);
  14955. var TextWriter = /*#__PURE__*/function (_Writer) {
  14956. _inherits(TextWriter, _Writer);
  14957. var _super4 = _createSuper(TextWriter);
  14958. function TextWriter(encoding) {
  14959. var _this2;
  14960. _classCallCheck(this, TextWriter);
  14961. _this2 = _super4.call(this);
  14962. _this2.encoding = encoding;
  14963. _this2.blob = new Blob([], {
  14964. type: CONTENT_TYPE_TEXT_PLAIN
  14965. });
  14966. return _this2;
  14967. }
  14968. _createClass(TextWriter, [{
  14969. key: "writeUint8Array",
  14970. value: function writeUint8Array(array) {
  14971. _get(_getPrototypeOf(TextWriter.prototype), "writeUint8Array", this).call(this, array);
  14972. this.blob = new Blob([this.blob, array.buffer], {
  14973. type: CONTENT_TYPE_TEXT_PLAIN
  14974. });
  14975. }
  14976. }, {
  14977. key: "getData",
  14978. value: function getData() {
  14979. var _this3 = this;
  14980. if (this.blob.text) {
  14981. return this.blob.text();
  14982. } else {
  14983. var reader = new FileReader();
  14984. return new Promise(function (resolve, reject) {
  14985. reader.onload = function (event) {
  14986. return resolve(event.target.result);
  14987. };
  14988. reader.onerror = function () {
  14989. return reject(reader.error);
  14990. };
  14991. reader.readAsText(_this3.blob, _this3.encoding);
  14992. });
  14993. }
  14994. }
  14995. }]);
  14996. return TextWriter;
  14997. }(Writer);
  14998. var Data64URIReader = /*#__PURE__*/function (_Reader2) {
  14999. _inherits(Data64URIReader, _Reader2);
  15000. var _super5 = _createSuper(Data64URIReader);
  15001. function Data64URIReader(dataURI) {
  15002. var _this4;
  15003. _classCallCheck(this, Data64URIReader);
  15004. _this4 = _super5.call(this);
  15005. _this4.dataURI = dataURI;
  15006. var dataEnd = dataURI.length;
  15007. while (dataURI.charAt(dataEnd - 1) == "=") {
  15008. dataEnd--;
  15009. }
  15010. _this4.dataStart = dataURI.indexOf(",") + 1;
  15011. _this4.size = Math.floor((dataEnd - _this4.dataStart) * 0.75);
  15012. return _this4;
  15013. }
  15014. _createClass(Data64URIReader, [{
  15015. key: "readUint8Array",
  15016. value: function readUint8Array(offset, length) {
  15017. var dataArray = new Uint8Array(length);
  15018. var start = Math.floor(offset / 3) * 4;
  15019. var bytes = atob(this.dataURI.substring(start + this.dataStart, Math.ceil((offset + length) / 3) * 4 + this.dataStart));
  15020. var delta = offset - Math.floor(start / 4) * 3;
  15021. for (var indexByte = delta; indexByte < delta + length; indexByte++) {
  15022. dataArray[indexByte - delta] = bytes.charCodeAt(indexByte);
  15023. }
  15024. return dataArray;
  15025. }
  15026. }]);
  15027. return Data64URIReader;
  15028. }(Reader);
  15029. var Data64URIWriter = /*#__PURE__*/function (_Writer2) {
  15030. _inherits(Data64URIWriter, _Writer2);
  15031. var _super6 = _createSuper(Data64URIWriter);
  15032. function Data64URIWriter(contentType) {
  15033. var _this5;
  15034. _classCallCheck(this, Data64URIWriter);
  15035. _this5 = _super6.call(this);
  15036. _this5.data = "data:" + (contentType || "") + ";base64,";
  15037. _this5.pending = [];
  15038. return _this5;
  15039. }
  15040. _createClass(Data64URIWriter, [{
  15041. key: "writeUint8Array",
  15042. value: function writeUint8Array(array) {
  15043. _get(_getPrototypeOf(Data64URIWriter.prototype), "writeUint8Array", this).call(this, array);
  15044. var indexArray = 0;
  15045. var dataString = this.pending;
  15046. var delta = this.pending.length;
  15047. this.pending = "";
  15048. for (indexArray = 0; indexArray < Math.floor((delta + array.length) / 3) * 3 - delta; indexArray++) {
  15049. dataString += String.fromCharCode(array[indexArray]);
  15050. }
  15051. for (; indexArray < array.length; indexArray++) {
  15052. this.pending += String.fromCharCode(array[indexArray]);
  15053. }
  15054. if (dataString.length > 2) {
  15055. this.data += btoa(dataString);
  15056. } else {
  15057. this.pending = dataString;
  15058. }
  15059. }
  15060. }, {
  15061. key: "getData",
  15062. value: function getData() {
  15063. return this.data + btoa(this.pending);
  15064. }
  15065. }]);
  15066. return Data64URIWriter;
  15067. }(Writer);
  15068. var BlobReader = /*#__PURE__*/function (_Reader3) {
  15069. _inherits(BlobReader, _Reader3);
  15070. var _super7 = _createSuper(BlobReader);
  15071. function BlobReader(blob) {
  15072. var _this6;
  15073. _classCallCheck(this, BlobReader);
  15074. _this6 = _super7.call(this);
  15075. _this6.blob = blob;
  15076. _this6.size = blob.size;
  15077. return _this6;
  15078. }
  15079. _createClass(BlobReader, [{
  15080. key: "readUint8Array",
  15081. value: function readUint8Array(offset, length) {
  15082. try {
  15083. var _this8 = this;
  15084. if (_this8.blob.arrayBuffer) {
  15085. return _await(_this8.blob.slice(offset, offset + length).arrayBuffer(), function (_this7$blob$slice$arr) {
  15086. return new Uint8Array(_this7$blob$slice$arr);
  15087. });
  15088. } else {
  15089. var reader = new FileReader();
  15090. return _await(new Promise(function (resolve, reject) {
  15091. reader.onload = function (event) {
  15092. return resolve(new Uint8Array(event.target.result));
  15093. };
  15094. reader.onerror = function () {
  15095. return reject(reader.error);
  15096. };
  15097. reader.readAsArrayBuffer(_this8.blob.slice(offset, offset + length));
  15098. }));
  15099. }
  15100. } catch (e) {
  15101. return Promise.reject(e);
  15102. }
  15103. }
  15104. }]);
  15105. return BlobReader;
  15106. }(Reader);
  15107. var BlobWriter = /*#__PURE__*/function (_Writer3) {
  15108. _inherits(BlobWriter, _Writer3);
  15109. var _super8 = _createSuper(BlobWriter);
  15110. function BlobWriter(contentType) {
  15111. var _this9;
  15112. _classCallCheck(this, BlobWriter);
  15113. _this9 = _super8.call(this);
  15114. _this9.contentType = contentType;
  15115. _this9.arrayBuffersMaxlength = 8;
  15116. initArrayBuffers(_assertThisInitialized(_this9));
  15117. return _this9;
  15118. }
  15119. _createClass(BlobWriter, [{
  15120. key: "writeUint8Array",
  15121. value: function writeUint8Array(array) {
  15122. _get(_getPrototypeOf(BlobWriter.prototype), "writeUint8Array", this).call(this, array);
  15123. if (this.arrayBuffers.length == this.arrayBuffersMaxlength) {
  15124. flushArrayBuffers(this);
  15125. }
  15126. this.arrayBuffers.push(array.buffer);
  15127. }
  15128. }, {
  15129. key: "getData",
  15130. value: function getData() {
  15131. if (!this.blob) {
  15132. if (this.arrayBuffers.length) {
  15133. flushArrayBuffers(this);
  15134. }
  15135. this.blob = this.pendingBlob;
  15136. initArrayBuffers(this);
  15137. }
  15138. return this.blob;
  15139. }
  15140. }]);
  15141. return BlobWriter;
  15142. }(Writer);
  15143. function initArrayBuffers(blobWriter) {
  15144. blobWriter.pendingBlob = new Blob([], {
  15145. type: blobWriter.contentType
  15146. });
  15147. blobWriter.arrayBuffers = [];
  15148. }
  15149. function flushArrayBuffers(blobWriter) {
  15150. blobWriter.pendingBlob = new Blob([blobWriter.pendingBlob].concat(_toConsumableArray(blobWriter.arrayBuffers)), {
  15151. type: blobWriter.contentType
  15152. });
  15153. blobWriter.arrayBuffers = [];
  15154. }
  15155. var ReadableStreamReader = /*#__PURE__*/function () {
  15156. function ReadableStreamReader(readableStream) {
  15157. _classCallCheck(this, ReadableStreamReader);
  15158. this.readableStream = readableStream;
  15159. this.reader = readableStream.getReader();
  15160. this.size = Infinity;
  15161. this.index = 0;
  15162. this.currentSize = 0;
  15163. this.pendingValue = new Uint8Array();
  15164. }
  15165. _createClass(ReadableStreamReader, [{
  15166. key: "init",
  15167. value: function init() {
  15168. this.initialized = true;
  15169. }
  15170. }, {
  15171. key: "readUint8Array",
  15172. value: function readUint8Array(index, length) {
  15173. try {
  15174. var _this11 = this;
  15175. if (_this11.index != index) {
  15176. throw new Error(ERR_NOT_SEEKABLE_READER);
  15177. }
  15178. var data = new Uint8Array(length);
  15179. var size = 0,
  15180. done;
  15181. return _await(_continue(_do(function () {
  15182. return _await(_this11.reader.read(), function (result) {
  15183. var value = result.value;
  15184. done = result.done;
  15185. if (value) {
  15186. _this11.currentSize += value.length;
  15187. } else {
  15188. value = _this11.pendingValue;
  15189. _this11.pendingValue = new Uint8Array();
  15190. }
  15191. if (_this11.pendingValue.length) {
  15192. var newValue = new Uint8Array(_this11.pendingValue.length + value.length);
  15193. newValue.set(_this11.pendingValue);
  15194. newValue.set(value, _this11.pendingValue.length);
  15195. _this11.pendingValue = new Uint8Array();
  15196. value = newValue;
  15197. }
  15198. if (size + value.length > length) {
  15199. data.set(value.subarray(0, length), size);
  15200. _this11.pendingValue = value.subarray(length);
  15201. size += length;
  15202. } else {
  15203. data.set(value, size);
  15204. size += value.length;
  15205. }
  15206. });
  15207. }, function () {
  15208. return size < length && !done;
  15209. }), function () {
  15210. if (done && _this11.size == Infinity) {
  15211. _this11.size = _this11.currentSize;
  15212. }
  15213. if (_this11.size < length) {
  15214. data = data.slice(0, _this11.size);
  15215. length = _this11.size;
  15216. }
  15217. _this11.index += length;
  15218. return data;
  15219. }));
  15220. } catch (e) {
  15221. return Promise.reject(e);
  15222. }
  15223. }
  15224. }]);
  15225. return ReadableStreamReader;
  15226. }();
  15227. var WritableStreamWriter = /*#__PURE__*/function (_Writer4) {
  15228. _inherits(WritableStreamWriter, _Writer4);
  15229. var _super9 = _createSuper(WritableStreamWriter);
  15230. function WritableStreamWriter(writableStream) {
  15231. var _this12;
  15232. _classCallCheck(this, WritableStreamWriter);
  15233. _this12 = _super9.call(this);
  15234. _this12.writableStream = writableStream;
  15235. _this12.writer = writableStream.getWriter();
  15236. return _this12;
  15237. }
  15238. _createClass(WritableStreamWriter, [{
  15239. key: "writeUint8Array",
  15240. value: function writeUint8Array(array) {
  15241. try {
  15242. var _this14 = this;
  15243. return _await(_this14.writer.ready, function () {
  15244. return _this14.writer.write(array);
  15245. });
  15246. } catch (e) {
  15247. return Promise.reject(e);
  15248. }
  15249. }
  15250. }, {
  15251. key: "getData",
  15252. value: function getData() {
  15253. try {
  15254. var _this16 = this;
  15255. return _await(_this16.writer.ready, function () {
  15256. return _await(_this16.writer.close(), function () {
  15257. return _this16.writableStream;
  15258. });
  15259. });
  15260. } catch (e) {
  15261. return Promise.reject(e);
  15262. }
  15263. }
  15264. }]);
  15265. return WritableStreamWriter;
  15266. }(Writer);
  15267. var FetchReader = /*#__PURE__*/function (_Reader4) {
  15268. _inherits(FetchReader, _Reader4);
  15269. var _super10 = _createSuper(FetchReader);
  15270. function FetchReader(url, options) {
  15271. var _this17;
  15272. _classCallCheck(this, FetchReader);
  15273. _this17 = _super10.call(this);
  15274. _this17.url = url;
  15275. _this17.preventHeadRequest = options.preventHeadRequest;
  15276. _this17.useRangeHeader = options.useRangeHeader;
  15277. _this17.forceRangeRequests = options.forceRangeRequests;
  15278. _this17.options = Object.assign({}, options);
  15279. delete _this17.options.preventHeadRequest;
  15280. delete _this17.options.useRangeHeader;
  15281. delete _this17.options.forceRangeRequests;
  15282. delete _this17.options.useXHR;
  15283. return _this17;
  15284. }
  15285. _createClass(FetchReader, [{
  15286. key: "init",
  15287. value: function init() {
  15288. try {
  15289. var _this19 = this;
  15290. _get(_getPrototypeOf(FetchReader.prototype), "init", _this19).call(_this19);
  15291. return _await(_awaitIgnored(initHttpReader(_this19, sendFetchRequest, getFetchRequestData)));
  15292. } catch (e) {
  15293. return Promise.reject(e);
  15294. }
  15295. }
  15296. }, {
  15297. key: "readUint8Array",
  15298. value: function readUint8Array(index, length) {
  15299. return readUint8ArrayHttpReader(this, index, length, sendFetchRequest, getFetchRequestData);
  15300. }
  15301. }]);
  15302. return FetchReader;
  15303. }(Reader);
  15304. var XHRReader = /*#__PURE__*/function (_Reader5) {
  15305. _inherits(XHRReader, _Reader5);
  15306. var _super11 = _createSuper(XHRReader);
  15307. function XHRReader(url, options) {
  15308. var _this20;
  15309. _classCallCheck(this, XHRReader);
  15310. _this20 = _super11.call(this);
  15311. _this20.url = url;
  15312. _this20.preventHeadRequest = options.preventHeadRequest;
  15313. _this20.useRangeHeader = options.useRangeHeader;
  15314. _this20.forceRangeRequests = options.forceRangeRequests;
  15315. _this20.options = options;
  15316. return _this20;
  15317. }
  15318. _createClass(XHRReader, [{
  15319. key: "init",
  15320. value: function init() {
  15321. try {
  15322. var _this22 = this;
  15323. _get(_getPrototypeOf(XHRReader.prototype), "init", _this22).call(_this22);
  15324. return _await(_awaitIgnored(initHttpReader(_this22, sendXMLHttpRequest, getXMLHttpRequestData)));
  15325. } catch (e) {
  15326. return Promise.reject(e);
  15327. }
  15328. }
  15329. }, {
  15330. key: "readUint8Array",
  15331. value: function readUint8Array(index, length) {
  15332. return readUint8ArrayHttpReader(this, index, length, sendXMLHttpRequest, getXMLHttpRequestData);
  15333. }
  15334. }]);
  15335. return XHRReader;
  15336. }(Reader);
  15337. function getRangeHeaders(httpReader) {
  15338. var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  15339. var length = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  15340. return Object.assign({}, getHeaders(httpReader), _defineProperty({}, HTTP_HEADER_RANGE, HTTP_RANGE_UNIT + "=" + index + "-" + (index + length - 1)));
  15341. }
  15342. function getHeaders(httpReader) {
  15343. var headers = httpReader.options.headers;
  15344. if (headers) {
  15345. if (Symbol.iterator in headers) {
  15346. return Object.fromEntries(headers);
  15347. } else {
  15348. return headers;
  15349. }
  15350. }
  15351. }
  15352. function sendXMLHttpRequest(method, _ref, headers) {
  15353. var url = _ref.url;
  15354. return new Promise(function (resolve, reject) {
  15355. var request = new XMLHttpRequest();
  15356. request.addEventListener("load", function () {
  15357. if (request.status < 400) {
  15358. var _headers = [];
  15359. request.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach(function (header) {
  15360. var splitHeader = header.trim().split(/\s*:\s*/);
  15361. splitHeader[0] = splitHeader[0].trim().replace(/^[a-z]|-[a-z]/g, function (value) {
  15362. return value.toUpperCase();
  15363. });
  15364. _headers.push(splitHeader);
  15365. });
  15366. resolve({
  15367. status: request.status,
  15368. arrayBuffer: function arrayBuffer() {
  15369. return request.response;
  15370. },
  15371. headers: new Map(_headers)
  15372. });
  15373. } else {
  15374. reject(new Error(ERR_HTTP_STATUS + (request.statusText || request.status)));
  15375. }
  15376. }, false);
  15377. request.addEventListener("error", function (event) {
  15378. return reject(event.detail.error);
  15379. }, false);
  15380. request.open(method, url);
  15381. if (headers) {
  15382. for (var _i = 0, _Object$entries = Object.entries(headers); _i < _Object$entries.length; _i++) {
  15383. var entry = _Object$entries[_i];
  15384. request.setRequestHeader(entry[0], entry[1]);
  15385. }
  15386. }
  15387. request.responseType = "arraybuffer";
  15388. request.send();
  15389. });
  15390. }
  15391. var HttpReader = /*#__PURE__*/function (_Reader6) {
  15392. _inherits(HttpReader, _Reader6);
  15393. var _super12 = _createSuper(HttpReader);
  15394. function HttpReader(url) {
  15395. var _this23;
  15396. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  15397. _classCallCheck(this, HttpReader);
  15398. _this23 = _super12.call(this);
  15399. _this23.url = url;
  15400. if (options.useXHR) {
  15401. _this23.reader = new XHRReader(url, options);
  15402. } else {
  15403. _this23.reader = new FetchReader(url, options);
  15404. }
  15405. return _this23;
  15406. }
  15407. _createClass(HttpReader, [{
  15408. key: "size",
  15409. get: function get() {
  15410. return this.reader.size;
  15411. },
  15412. set: function set(value) {// ignored
  15413. }
  15414. }, {
  15415. key: "init",
  15416. value: function init() {
  15417. try {
  15418. var _this25 = this;
  15419. _get(_getPrototypeOf(HttpReader.prototype), "init", _this25).call(_this25);
  15420. return _await(_awaitIgnored(_this25.reader.init()));
  15421. } catch (e) {
  15422. return Promise.reject(e);
  15423. }
  15424. }
  15425. }, {
  15426. key: "readUint8Array",
  15427. value: function readUint8Array(index, length) {
  15428. return this.reader.readUint8Array(index, length);
  15429. }
  15430. }]);
  15431. return HttpReader;
  15432. }(Reader);
  15433. var HttpRangeReader = /*#__PURE__*/function (_HttpReader) {
  15434. _inherits(HttpRangeReader, _HttpReader);
  15435. var _super13 = _createSuper(HttpRangeReader);
  15436. function HttpRangeReader(url) {
  15437. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  15438. _classCallCheck(this, HttpRangeReader);
  15439. options.useRangeHeader = true;
  15440. return _super13.call(this, url, options);
  15441. }
  15442. return _createClass(HttpRangeReader);
  15443. }(HttpReader);
  15444. var Uint8ArrayReader = /*#__PURE__*/function (_Reader7) {
  15445. _inherits(Uint8ArrayReader, _Reader7);
  15446. var _super14 = _createSuper(Uint8ArrayReader);
  15447. function Uint8ArrayReader(array) {
  15448. var _this26;
  15449. _classCallCheck(this, Uint8ArrayReader);
  15450. _this26 = _super14.call(this);
  15451. _this26.array = array;
  15452. _this26.size = array.length;
  15453. return _this26;
  15454. }
  15455. _createClass(Uint8ArrayReader, [{
  15456. key: "readUint8Array",
  15457. value: function readUint8Array(index, length) {
  15458. return this.array.slice(index, index + length);
  15459. }
  15460. }]);
  15461. return Uint8ArrayReader;
  15462. }(Reader);
  15463. var Uint8ArrayWriter = /*#__PURE__*/function (_Writer5) {
  15464. _inherits(Uint8ArrayWriter, _Writer5);
  15465. var _super15 = _createSuper(Uint8ArrayWriter);
  15466. function Uint8ArrayWriter() {
  15467. var _this27;
  15468. _classCallCheck(this, Uint8ArrayWriter);
  15469. _this27 = _super15.call(this);
  15470. _this27.array = new Uint8Array(0);
  15471. return _this27;
  15472. }
  15473. _createClass(Uint8ArrayWriter, [{
  15474. key: "writeUint8Array",
  15475. value: function writeUint8Array(array) {
  15476. _get(_getPrototypeOf(Uint8ArrayWriter.prototype), "writeUint8Array", this).call(this, array);
  15477. var previousArray = this.array;
  15478. this.array = new Uint8Array(previousArray.length + array.length);
  15479. this.array.set(previousArray);
  15480. this.array.set(array, previousArray.length);
  15481. }
  15482. }, {
  15483. key: "getData",
  15484. value: function getData() {
  15485. return this.array;
  15486. }
  15487. }]);
  15488. return Uint8ArrayWriter;
  15489. }(Writer);
  15490. function isHttpFamily(url) {
  15491. if (typeof document != "undefined") {
  15492. var anchor = document.createElement("a");
  15493. anchor.href = url;
  15494. return anchor.protocol == "http:" || anchor.protocol == "https:";
  15495. } else {
  15496. return /^https?:\/\//i.test(url);
  15497. }
  15498. }
  15499. var $ = _export;
  15500. var uncurryThis$1 = functionUncurryThis;
  15501. var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
  15502. var toLength = toLength$a;
  15503. var toString = toString$a;
  15504. var notARegExp = notARegexp;
  15505. var requireObjectCoercible = requireObjectCoercible$8;
  15506. var correctIsRegExpLogic = correctIsRegexpLogic;
  15507. // eslint-disable-next-line es-x/no-string-prototype-endswith -- safe
  15508. var un$EndsWith = uncurryThis$1(''.endsWith);
  15509. var slice = uncurryThis$1(''.slice);
  15510. var min = Math.min;
  15511. var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');
  15512. // https://github.com/zloirock/core-js/pull/702
  15513. var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () {
  15514. var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');
  15515. return descriptor && !descriptor.writable;
  15516. }();
  15517. // `String.prototype.endsWith` method
  15518. // https://tc39.es/ecma262/#sec-string.prototype.endswith
  15519. $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
  15520. endsWith: function endsWith(searchString /* , endPosition = @length */) {
  15521. var that = toString(requireObjectCoercible(this));
  15522. notARegExp(searchString);
  15523. var endPosition = arguments.length > 1 ? arguments[1] : undefined;
  15524. var len = that.length;
  15525. var end = endPosition === undefined ? len : min(toLength(endPosition), len);
  15526. var search = toString(searchString);
  15527. return un$EndsWith
  15528. ? un$EndsWith(that, search, end)
  15529. : slice(that, end - search.length, end) === search;
  15530. }
  15531. });
  15532. /*
  15533. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  15534. Redistribution and use in source and binary forms, with or without
  15535. modification, are permitted provided that the following conditions are met:
  15536. 1. Redistributions of source code must retain the above copyright notice,
  15537. this list of conditions and the following disclaimer.
  15538. 2. Redistributions in binary form must reproduce the above copyright
  15539. notice, this list of conditions and the following disclaimer in
  15540. the documentation and/or other materials provided with the distribution.
  15541. 3. The names of the authors may not be used to endorse or promote products
  15542. derived from this software without specific prior written permission.
  15543. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  15544. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  15545. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  15546. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  15547. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  15548. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  15549. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  15550. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  15551. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  15552. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  15553. */
  15554. var MAX_32_BITS = 0xffffffff;
  15555. var MAX_16_BITS = 0xffff;
  15556. var COMPRESSION_METHOD_DEFLATE = 0x08;
  15557. var COMPRESSION_METHOD_STORE = 0x00;
  15558. var COMPRESSION_METHOD_AES = 0x63;
  15559. var LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;
  15560. var DATA_DESCRIPTOR_RECORD_SIGNATURE = 0x08074b50;
  15561. var CENTRAL_FILE_HEADER_SIGNATURE = 0x02014b50;
  15562. var END_OF_CENTRAL_DIR_SIGNATURE = 0x06054b50;
  15563. var ZIP64_END_OF_CENTRAL_DIR_SIGNATURE = 0x06064b50;
  15564. var ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE = 0x07064b50;
  15565. var END_OF_CENTRAL_DIR_LENGTH = 22;
  15566. var ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH = 20;
  15567. var ZIP64_END_OF_CENTRAL_DIR_LENGTH = 56;
  15568. var ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH = END_OF_CENTRAL_DIR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LENGTH;
  15569. var ZIP64_TOTAL_NUMBER_OF_DISKS = 1;
  15570. var EXTRAFIELD_TYPE_ZIP64 = 0x0001;
  15571. var EXTRAFIELD_TYPE_AES = 0x9901;
  15572. var EXTRAFIELD_TYPE_NTFS = 0x000a;
  15573. var EXTRAFIELD_TYPE_NTFS_TAG1 = 0x0001;
  15574. var EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP = 0x5455;
  15575. var EXTRAFIELD_TYPE_UNICODE_PATH = 0x7075;
  15576. var EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;
  15577. var BITFLAG_ENCRYPTED = 0x01;
  15578. var BITFLAG_LEVEL = 0x06;
  15579. var BITFLAG_DATA_DESCRIPTOR = 0x0008;
  15580. var BITFLAG_LANG_ENCODING_FLAG = 0x0800;
  15581. var FILE_ATTR_MSDOS_DIR_MASK = 0x10;
  15582. var VERSION_DEFLATE = 0x14;
  15583. var VERSION_ZIP64 = 0x2D;
  15584. var VERSION_AES = 0x33;
  15585. var DIRECTORY_SIGNATURE = "/";
  15586. var MAX_DATE = new Date(2107, 11, 31);
  15587. var MIN_DATE = new Date(1980, 0, 1);
  15588. /*
  15589. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  15590. Redistribution and use in source and binary forms, with or without
  15591. modification, are permitted provided that the following conditions are met:
  15592. 1. Redistributions of source code must retain the above copyright notice,
  15593. this list of conditions and the following disclaimer.
  15594. 2. Redistributions in binary form must reproduce the above copyright
  15595. notice, this list of conditions and the following disclaimer in
  15596. the documentation and/or other materials provided with the distribution.
  15597. 3. The names of the authors may not be used to endorse or promote products
  15598. derived from this software without specific prior written permission.
  15599. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  15600. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  15601. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  15602. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  15603. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  15604. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  15605. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  15606. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  15607. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  15608. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  15609. */
  15610. var CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
  15611. var decodeCP437 = (function (stringValue) {
  15612. var result = "";
  15613. for (var indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
  15614. result += CP437[stringValue[indexCharacter]];
  15615. }
  15616. return result;
  15617. });
  15618. function decodeText(value, encoding) {
  15619. if (encoding && encoding.trim().toLowerCase() == "cp437") {
  15620. return decodeCP437(value);
  15621. } else if (typeof TextDecoder == "undefined") {
  15622. var fileReader = new FileReader();
  15623. return new Promise(function (resolve, reject) {
  15624. fileReader.onload = function (event) {
  15625. return resolve(event.target.result);
  15626. };
  15627. fileReader.onerror = function () {
  15628. return reject(fileReader.error);
  15629. };
  15630. fileReader.readAsText(new Blob([value]));
  15631. });
  15632. } else {
  15633. return new TextDecoder(encoding).decode(value);
  15634. }
  15635. }
  15636. var writeData = _async(function (writer, data) {
  15637. return _invoke(function () {
  15638. if (data.length) {
  15639. return _awaitIgnored(writer.writeUint8Array(data));
  15640. }
  15641. }, function () {
  15642. return data.length;
  15643. });
  15644. });
  15645. var processData = _async(function (codec, reader, writer, offset, inputLengthGetter, config, options) {
  15646. var processChunk = _async(function () {
  15647. var chunkOffset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  15648. var outputLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  15649. var signal = options.signal;
  15650. var inputLength = inputLengthGetter();
  15651. if (chunkOffset < inputLength) {
  15652. testAborted(signal, codec);
  15653. return _await(reader.readUint8Array(chunkOffset + offset, Math.min(chunkSize, inputLength - chunkOffset)), function (inputData) {
  15654. var chunkLength = inputData.length;
  15655. testAborted(signal, codec);
  15656. return _await(codec.append(inputData), function (data) {
  15657. testAborted(signal, codec);
  15658. return _await(writeData(writer, data), function (_writeData) {
  15659. outputLength += _writeData;
  15660. if (options.onprogress) {
  15661. try {
  15662. options.onprogress(chunkOffset + chunkLength, inputLength);
  15663. } catch (error) {// ignored
  15664. }
  15665. }
  15666. return processChunk(chunkOffset + chunkSize, outputLength);
  15667. });
  15668. });
  15669. });
  15670. } else {
  15671. return _await(codec.flush(), function (result) {
  15672. return _await(writeData(writer, result.data), function (_writeData2) {
  15673. outputLength += _writeData2;
  15674. return {
  15675. signature: result.signature,
  15676. length: outputLength
  15677. };
  15678. });
  15679. });
  15680. }
  15681. });
  15682. var chunkSize = Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);
  15683. return processChunk();
  15684. });
  15685. /*
  15686. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  15687. Redistribution and use in source and binary forms, with or without
  15688. modification, are permitted provided that the following conditions are met:
  15689. 1. Redistributions of source code must retain the above copyright notice,
  15690. this list of conditions and the following disclaimer.
  15691. 2. Redistributions in binary form must reproduce the above copyright
  15692. notice, this list of conditions and the following disclaimer in
  15693. the documentation and/or other materials provided with the distribution.
  15694. 3. The names of the authors may not be used to endorse or promote products
  15695. derived from this software without specific prior written permission.
  15696. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  15697. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  15698. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  15699. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  15700. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  15701. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  15702. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  15703. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  15704. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  15705. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  15706. */
  15707. var MINIMUM_CHUNK_SIZE = 64;
  15708. var ERR_ABORT = "Abort error";
  15709. function testAborted(signal, codec) {
  15710. if (signal && signal.aborted) {
  15711. codec.abort();
  15712. throw new Error(ERR_ABORT);
  15713. }
  15714. }
  15715. /*
  15716. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  15717. Redistribution and use in source and binary forms, with or without
  15718. modification, are permitted provided that the following conditions are met:
  15719. 1. Redistributions of source code must retain the above copyright notice,
  15720. this list of conditions and the following disclaimer.
  15721. 2. Redistributions in binary form must reproduce the above copyright
  15722. notice, this list of conditions and the following disclaimer in
  15723. the documentation and/or other materials provided with the distribution.
  15724. 3. The names of the authors may not be used to endorse or promote products
  15725. derived from this software without specific prior written permission.
  15726. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  15727. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  15728. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  15729. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  15730. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  15731. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  15732. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  15733. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  15734. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  15735. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  15736. */
  15737. var PROPERTY_NAMES = ["filename", "rawFilename", "directory", "encrypted", "compressedSize", "uncompressedSize", "lastModDate", "rawLastModDate", "comment", "rawComment", "signature", "extraField", "rawExtraField", "bitFlag", "extraFieldZip64", "extraFieldUnicodePath", "extraFieldUnicodeComment", "extraFieldAES", "filenameUTF8", "commentUTF8", "offset", "zip64", "compressionMethod", "extraFieldNTFS", "lastAccessDate", "creationDate", "extraFieldExtendedTimestamp", "version", "versionMadeBy", "msDosCompatible", "internalFileAttribute", "externalFileAttribute"];
  15738. var Entry = /*#__PURE__*/_createClass(function Entry(data) {
  15739. var _this = this;
  15740. _classCallCheck(this, Entry);
  15741. PROPERTY_NAMES.forEach(function (name) {
  15742. return _this[name] = data[name];
  15743. });
  15744. });
  15745. var seekSignature = _async(function (reader, signature, startOffset, minimumBytes, maximumLength) {
  15746. var seek = _async(function (length) {
  15747. var offset = startOffset - length;
  15748. return _await(readUint8Array(reader, offset, length), function (bytes) {
  15749. for (var indexByte = bytes.length - minimumBytes; indexByte >= 0; indexByte--) {
  15750. if (bytes[indexByte] == signatureArray[0] && bytes[indexByte + 1] == signatureArray[1] && bytes[indexByte + 2] == signatureArray[2] && bytes[indexByte + 3] == signatureArray[3]) {
  15751. return {
  15752. offset: offset + indexByte,
  15753. buffer: bytes.slice(indexByte, indexByte + minimumBytes).buffer
  15754. };
  15755. }
  15756. }
  15757. });
  15758. });
  15759. var signatureArray = new Uint8Array(4);
  15760. var signatureView = getDataView$1(signatureArray);
  15761. setUint32$1(signatureView, 0, signature);
  15762. var maximumBytes = minimumBytes + maximumLength;
  15763. return _await(seek(minimumBytes), function (_seek) {
  15764. return _await(_seek || seek(Math.min(maximumBytes, startOffset)), void 0, _seek);
  15765. });
  15766. });
  15767. var readExtraFieldUnicode = _async(function (extraFieldUnicode, propertyName, rawPropertyName, directory, fileEntry) {
  15768. var extraFieldView = getDataView$1(extraFieldUnicode.data);
  15769. extraFieldUnicode.version = getUint8(extraFieldView, 0);
  15770. extraFieldUnicode.signature = getUint32(extraFieldView, 1);
  15771. var crc32 = new Crc32();
  15772. crc32.append(fileEntry[rawPropertyName]);
  15773. var dataViewSignature = getDataView$1(new Uint8Array(4));
  15774. dataViewSignature.setUint32(0, crc32.get(), true);
  15775. return _await(decodeText(extraFieldUnicode.data.subarray(5)), function (_decodeText) {
  15776. extraFieldUnicode[propertyName] = _decodeText;
  15777. extraFieldUnicode.valid = !fileEntry.bitFlag.languageEncodingFlag && extraFieldUnicode.signature == getUint32(dataViewSignature, 0);
  15778. if (extraFieldUnicode.valid) {
  15779. directory[propertyName] = extraFieldUnicode[propertyName];
  15780. directory[propertyName + "UTF8"] = true;
  15781. }
  15782. });
  15783. });
  15784. var readCommonFooter = _async(function (fileEntry, directory, dataView, offset) {
  15785. var rawExtraField = directory.rawExtraField;
  15786. var extraField = directory.extraField = new Map();
  15787. var rawExtraFieldView = getDataView$1(new Uint8Array(rawExtraField));
  15788. var offsetExtraField = 0;
  15789. try {
  15790. while (offsetExtraField < rawExtraField.length) {
  15791. var type = getUint16(rawExtraFieldView, offsetExtraField);
  15792. var size = getUint16(rawExtraFieldView, offsetExtraField + 2);
  15793. extraField.set(type, {
  15794. type: type,
  15795. data: rawExtraField.slice(offsetExtraField + 4, offsetExtraField + 4 + size)
  15796. });
  15797. offsetExtraField += 4 + size;
  15798. }
  15799. } catch (_error) {// ignored
  15800. }
  15801. var compressionMethod = getUint16(dataView, offset + 4);
  15802. directory.signature = getUint32(dataView, offset + 10);
  15803. directory.uncompressedSize = getUint32(dataView, offset + 18);
  15804. directory.compressedSize = getUint32(dataView, offset + 14);
  15805. var extraFieldZip64 = extraField.get(EXTRAFIELD_TYPE_ZIP64);
  15806. if (extraFieldZip64) {
  15807. readExtraFieldZip64(extraFieldZip64, directory);
  15808. directory.extraFieldZip64 = extraFieldZip64;
  15809. }
  15810. var extraFieldUnicodePath = extraField.get(EXTRAFIELD_TYPE_UNICODE_PATH);
  15811. return _invoke(function () {
  15812. if (extraFieldUnicodePath) {
  15813. return _await(readExtraFieldUnicode(extraFieldUnicodePath, "filename", "rawFilename", directory, fileEntry), function () {
  15814. directory.extraFieldUnicodePath = extraFieldUnicodePath;
  15815. });
  15816. }
  15817. }, function () {
  15818. var extraFieldUnicodeComment = extraField.get(EXTRAFIELD_TYPE_UNICODE_COMMENT);
  15819. return _invoke(function () {
  15820. if (extraFieldUnicodeComment) {
  15821. return _await(readExtraFieldUnicode(extraFieldUnicodeComment, "comment", "rawComment", directory, fileEntry), function () {
  15822. directory.extraFieldUnicodeComment = extraFieldUnicodeComment;
  15823. });
  15824. }
  15825. }, function () {
  15826. var extraFieldAES = extraField.get(EXTRAFIELD_TYPE_AES);
  15827. if (extraFieldAES) {
  15828. readExtraFieldAES(extraFieldAES, directory, compressionMethod);
  15829. directory.extraFieldAES = extraFieldAES;
  15830. } else {
  15831. directory.compressionMethod = compressionMethod;
  15832. }
  15833. var extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
  15834. if (extraFieldNTFS) {
  15835. readExtraFieldNTFS(extraFieldNTFS, directory);
  15836. directory.extraFieldNTFS = extraFieldNTFS;
  15837. }
  15838. var extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
  15839. if (extraFieldExtendedTimestamp) {
  15840. readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory);
  15841. directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
  15842. }
  15843. });
  15844. });
  15845. });
  15846. var ERR_BAD_FORMAT = "File format is not recognized";
  15847. var ERR_EOCDR_NOT_FOUND = "End of central directory not found";
  15848. var ERR_EOCDR_ZIP64_NOT_FOUND = "End of Zip64 central directory not found";
  15849. var ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = "End of Zip64 central directory locator not found";
  15850. var ERR_CENTRAL_DIRECTORY_NOT_FOUND = "Central directory header not found";
  15851. var ERR_LOCAL_FILE_HEADER_NOT_FOUND = "Local file header not found";
  15852. var ERR_EXTRAFIELD_ZIP64_NOT_FOUND = "Zip64 extra field not found";
  15853. var ERR_ENCRYPTED = "File contains encrypted entry";
  15854. var ERR_UNSUPPORTED_ENCRYPTION = "Encryption method not supported";
  15855. var ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
  15856. var CHARSET_UTF8 = "utf-8";
  15857. var CHARSET_CP437 = "cp437";
  15858. var ZIP64_PROPERTIES = ["uncompressedSize", "compressedSize", "offset"];
  15859. var ZipReader = /*#__PURE__*/function () {
  15860. function ZipReader(reader) {
  15861. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  15862. _classCallCheck(this, ZipReader);
  15863. Object.assign(this, {
  15864. reader: reader,
  15865. options: options,
  15866. config: getConfiguration()
  15867. });
  15868. }
  15869. _createClass(ZipReader, [{
  15870. key: "getEntriesGenerator",
  15871. value: function getEntriesGenerator() {
  15872. var _this = this;
  15873. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  15874. return _wrapAsyncGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
  15875. var zipReader, reader, endOfDirectoryInfo, endOfDirectoryView, directoryDataLength, directoryDataOffset, filesLength, prependedDataLength, endOfDirectoryLocatorArray, endOfDirectoryLocatorView, endOfDirectoryArray, _endOfDirectoryView, expectedDirectoryDataOffset, originalDirectoryDataOffset, offset, directoryArray, directoryView, _expectedDirectoryDataOffset, _originalDirectoryDataOffset, _loop, indexFile;
  15876. return _regeneratorRuntime().wrap(function _callee$(_context2) {
  15877. while (1) {
  15878. switch (_context2.prev = _context2.next) {
  15879. case 0:
  15880. zipReader = _this;
  15881. reader = zipReader.reader;
  15882. if (reader.initialized) {
  15883. _context2.next = 5;
  15884. break;
  15885. }
  15886. _context2.next = 5;
  15887. return _awaitAsyncGenerator(reader.init());
  15888. case 5:
  15889. if (!(reader.size < END_OF_CENTRAL_DIR_LENGTH)) {
  15890. _context2.next = 7;
  15891. break;
  15892. }
  15893. throw new Error(ERR_BAD_FORMAT);
  15894. case 7:
  15895. _context2.next = 9;
  15896. return _awaitAsyncGenerator(seekSignature(reader, END_OF_CENTRAL_DIR_SIGNATURE, reader.size, END_OF_CENTRAL_DIR_LENGTH, MAX_16_BITS * 16));
  15897. case 9:
  15898. endOfDirectoryInfo = _context2.sent;
  15899. if (endOfDirectoryInfo) {
  15900. _context2.next = 12;
  15901. break;
  15902. }
  15903. throw new Error(ERR_EOCDR_NOT_FOUND);
  15904. case 12:
  15905. endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
  15906. directoryDataLength = getUint32(endOfDirectoryView, 12);
  15907. directoryDataOffset = getUint32(endOfDirectoryView, 16);
  15908. filesLength = getUint16(endOfDirectoryView, 8);
  15909. prependedDataLength = 0;
  15910. if (!(directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS)) {
  15911. _context2.next = 43;
  15912. break;
  15913. }
  15914. _context2.next = 20;
  15915. return _awaitAsyncGenerator(readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH));
  15916. case 20:
  15917. endOfDirectoryLocatorArray = _context2.sent;
  15918. endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
  15919. if (!(getUint32(endOfDirectoryLocatorView, 0) != ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE)) {
  15920. _context2.next = 24;
  15921. break;
  15922. }
  15923. throw new Error(ERR_EOCDR_ZIP64_NOT_FOUND);
  15924. case 24:
  15925. directoryDataOffset = getBigUint64(endOfDirectoryLocatorView, 8);
  15926. _context2.next = 27;
  15927. return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH));
  15928. case 27:
  15929. endOfDirectoryArray = _context2.sent;
  15930. _endOfDirectoryView = getDataView$1(endOfDirectoryArray);
  15931. expectedDirectoryDataOffset = endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH - ZIP64_END_OF_CENTRAL_DIR_LENGTH;
  15932. if (!(getUint32(_endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE && directoryDataOffset != expectedDirectoryDataOffset)) {
  15933. _context2.next = 38;
  15934. break;
  15935. }
  15936. originalDirectoryDataOffset = directoryDataOffset;
  15937. directoryDataOffset = expectedDirectoryDataOffset;
  15938. prependedDataLength = directoryDataOffset - originalDirectoryDataOffset;
  15939. _context2.next = 36;
  15940. return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH));
  15941. case 36:
  15942. endOfDirectoryArray = _context2.sent;
  15943. _endOfDirectoryView = getDataView$1(endOfDirectoryArray);
  15944. case 38:
  15945. if (!(getUint32(_endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE)) {
  15946. _context2.next = 40;
  15947. break;
  15948. }
  15949. throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
  15950. case 40:
  15951. filesLength = getBigUint64(_endOfDirectoryView, 32);
  15952. directoryDataLength = getBigUint64(_endOfDirectoryView, 40);
  15953. directoryDataOffset -= directoryDataLength;
  15954. case 43:
  15955. if (!(directoryDataOffset < 0 || directoryDataOffset >= reader.size)) {
  15956. _context2.next = 45;
  15957. break;
  15958. }
  15959. throw new Error(ERR_BAD_FORMAT);
  15960. case 45:
  15961. offset = 0;
  15962. _context2.next = 48;
  15963. return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, directoryDataLength));
  15964. case 48:
  15965. directoryArray = _context2.sent;
  15966. directoryView = getDataView$1(directoryArray);
  15967. if (!directoryDataLength) {
  15968. _context2.next = 60;
  15969. break;
  15970. }
  15971. _expectedDirectoryDataOffset = endOfDirectoryInfo.offset - directoryDataLength;
  15972. if (!(getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE && directoryDataOffset != _expectedDirectoryDataOffset)) {
  15973. _context2.next = 60;
  15974. break;
  15975. }
  15976. _originalDirectoryDataOffset = directoryDataOffset;
  15977. directoryDataOffset = _expectedDirectoryDataOffset;
  15978. prependedDataLength = directoryDataOffset - _originalDirectoryDataOffset;
  15979. _context2.next = 58;
  15980. return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, directoryDataLength));
  15981. case 58:
  15982. directoryArray = _context2.sent;
  15983. directoryView = getDataView$1(directoryArray);
  15984. case 60:
  15985. if (!(directoryDataOffset < 0 || directoryDataOffset >= reader.size)) {
  15986. _context2.next = 62;
  15987. break;
  15988. }
  15989. throw new Error(ERR_BAD_FORMAT);
  15990. case 62:
  15991. _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop(indexFile) {
  15992. var fileEntry, languageEncodingFlag, filenameOffset, extraFieldOffset, commentOffset, versionMadeBy, msDosCompatible, endOffset, filenameEncoding, commentEncoding, _yield$_awaitAsyncGen, _yield$_awaitAsyncGen2, filename, comment, entry;
  15993. return _regeneratorRuntime().wrap(function _loop$(_context) {
  15994. while (1) {
  15995. switch (_context.prev = _context.next) {
  15996. case 0:
  15997. fileEntry = new ZipEntry$1(reader, zipReader.config, zipReader.options);
  15998. if (!(getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE)) {
  15999. _context.next = 3;
  16000. break;
  16001. }
  16002. throw new Error(ERR_CENTRAL_DIRECTORY_NOT_FOUND);
  16003. case 3:
  16004. readCommonHeader(fileEntry, directoryView, offset + 6);
  16005. languageEncodingFlag = Boolean(fileEntry.bitFlag.languageEncodingFlag);
  16006. filenameOffset = offset + 46;
  16007. extraFieldOffset = filenameOffset + fileEntry.filenameLength;
  16008. commentOffset = extraFieldOffset + fileEntry.extraFieldLength;
  16009. versionMadeBy = getUint16(directoryView, offset + 4);
  16010. msDosCompatible = (versionMadeBy & 0) == 0;
  16011. Object.assign(fileEntry, {
  16012. versionMadeBy: versionMadeBy,
  16013. msDosCompatible: msDosCompatible,
  16014. compressedSize: 0,
  16015. uncompressedSize: 0,
  16016. commentLength: getUint16(directoryView, offset + 32),
  16017. directory: msDosCompatible && (getUint8(directoryView, offset + 38) & FILE_ATTR_MSDOS_DIR_MASK) == FILE_ATTR_MSDOS_DIR_MASK,
  16018. offset: getUint32(directoryView, offset + 42) + prependedDataLength,
  16019. internalFileAttribute: getUint32(directoryView, offset + 34),
  16020. externalFileAttribute: getUint32(directoryView, offset + 38),
  16021. rawFilename: directoryArray.subarray(filenameOffset, extraFieldOffset),
  16022. filenameUTF8: languageEncodingFlag,
  16023. commentUTF8: languageEncodingFlag,
  16024. rawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset)
  16025. });
  16026. endOffset = commentOffset + fileEntry.commentLength;
  16027. fileEntry.rawComment = directoryArray.subarray(commentOffset, endOffset);
  16028. filenameEncoding = getOptionValue$1(zipReader, options, "filenameEncoding");
  16029. commentEncoding = getOptionValue$1(zipReader, options, "commentEncoding");
  16030. _context.next = 17;
  16031. return _awaitAsyncGenerator(Promise.all([decodeText(fileEntry.rawFilename, fileEntry.filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437), decodeText(fileEntry.rawComment, fileEntry.commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437)]));
  16032. case 17:
  16033. _yield$_awaitAsyncGen = _context.sent;
  16034. _yield$_awaitAsyncGen2 = _slicedToArray(_yield$_awaitAsyncGen, 2);
  16035. filename = _yield$_awaitAsyncGen2[0];
  16036. comment = _yield$_awaitAsyncGen2[1];
  16037. fileEntry.filename = filename;
  16038. fileEntry.comment = comment;
  16039. if (!fileEntry.directory && fileEntry.filename.endsWith(DIRECTORY_SIGNATURE)) {
  16040. fileEntry.directory = true;
  16041. }
  16042. _context.next = 26;
  16043. return _awaitAsyncGenerator(readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6));
  16044. case 26:
  16045. entry = new Entry(fileEntry);
  16046. entry.getData = function (writer, options) {
  16047. return fileEntry.getData(writer, entry, options);
  16048. };
  16049. offset = endOffset;
  16050. if (options.onprogress) {
  16051. try {
  16052. options.onprogress(indexFile + 1, filesLength, new Entry(fileEntry));
  16053. } catch (_error) {// ignored
  16054. }
  16055. }
  16056. _context.next = 32;
  16057. return entry;
  16058. case 32:
  16059. case "end":
  16060. return _context.stop();
  16061. }
  16062. }
  16063. }, _loop);
  16064. });
  16065. indexFile = 0;
  16066. case 64:
  16067. if (!(indexFile < filesLength)) {
  16068. _context2.next = 69;
  16069. break;
  16070. }
  16071. return _context2.delegateYield(_loop(indexFile), "t0", 66);
  16072. case 66:
  16073. indexFile++;
  16074. _context2.next = 64;
  16075. break;
  16076. case 69:
  16077. return _context2.abrupt("return", true);
  16078. case 70:
  16079. case "end":
  16080. return _context2.stop();
  16081. }
  16082. }
  16083. }, _callee);
  16084. }))();
  16085. }
  16086. }, {
  16087. key: "getEntries",
  16088. value: function getEntries() {
  16089. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  16090. try {
  16091. var _this3 = this;
  16092. var entries = [];
  16093. var iter = _this3.getEntriesGenerator(options);
  16094. var curr = iter.next();
  16095. return _await(_continue(_for(function () {
  16096. return _await(!!curr, function (_curr) {
  16097. return !_curr.done;
  16098. });
  16099. }, void 0, function () {
  16100. var _push = entries.push;
  16101. return _await(curr, function (_curr2) {
  16102. _push.call(entries, _curr2.value);
  16103. curr = iter.next();
  16104. });
  16105. }), function () {
  16106. return entries;
  16107. }));
  16108. } catch (e) {
  16109. return Promise.reject(e);
  16110. }
  16111. }
  16112. }, {
  16113. key: "close",
  16114. value: function close() {
  16115. return _await();
  16116. }
  16117. }]);
  16118. return ZipReader;
  16119. }();
  16120. var ZipEntry$1 = /*#__PURE__*/function () {
  16121. function ZipEntry(reader, config, options) {
  16122. _classCallCheck(this, ZipEntry);
  16123. Object.assign(this, {
  16124. reader: reader,
  16125. config: config,
  16126. options: options
  16127. });
  16128. }
  16129. _createClass(ZipEntry, [{
  16130. key: "getData",
  16131. value: function getData(writer, fileEntry) {
  16132. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  16133. try {
  16134. var _this5 = this;
  16135. var zipEntry = _this5;
  16136. var reader = zipEntry.reader,
  16137. offset = zipEntry.offset,
  16138. extraFieldAES = zipEntry.extraFieldAES,
  16139. compressionMethod = zipEntry.compressionMethod,
  16140. config = zipEntry.config,
  16141. bitFlag = zipEntry.bitFlag,
  16142. signature = zipEntry.signature,
  16143. rawLastModDate = zipEntry.rawLastModDate,
  16144. compressedSize = zipEntry.compressedSize;
  16145. var localDirectory = zipEntry.localDirectory = {};
  16146. return _await(_invoke(function () {
  16147. if (!reader.initialized) {
  16148. return _awaitIgnored(reader.init());
  16149. }
  16150. }, function () {
  16151. return _await(readUint8Array(reader, offset, 30), function (dataArray) {
  16152. var dataView = getDataView$1(dataArray);
  16153. var password = getOptionValue$1(zipEntry, options, "password");
  16154. password = password && password.length && password;
  16155. if (extraFieldAES) {
  16156. if (extraFieldAES.originalCompressionMethod != COMPRESSION_METHOD_AES) {
  16157. throw new Error(ERR_UNSUPPORTED_COMPRESSION);
  16158. }
  16159. }
  16160. if (compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE) {
  16161. throw new Error(ERR_UNSUPPORTED_COMPRESSION);
  16162. }
  16163. if (getUint32(dataView, 0) != LOCAL_FILE_HEADER_SIGNATURE) {
  16164. throw new Error(ERR_LOCAL_FILE_HEADER_NOT_FOUND);
  16165. }
  16166. readCommonHeader(localDirectory, dataView, 4);
  16167. return _await(readUint8Array(reader, offset, 30 + localDirectory.filenameLength + localDirectory.extraFieldLength), function (_readUint8Array) {
  16168. dataArray = _readUint8Array;
  16169. localDirectory.rawExtraField = dataArray.subarray(30 + localDirectory.filenameLength);
  16170. return _await(readCommonFooter(zipEntry, localDirectory, dataView, 4), function () {
  16171. fileEntry.lastAccessDate = localDirectory.lastAccessDate;
  16172. fileEntry.creationDate = localDirectory.creationDate;
  16173. var encrypted = zipEntry.encrypted && localDirectory.encrypted;
  16174. var zipCrypto = encrypted && !extraFieldAES;
  16175. if (encrypted) {
  16176. if (!zipCrypto && extraFieldAES.strength === undefined) {
  16177. throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
  16178. } else if (!password) {
  16179. throw new Error(ERR_ENCRYPTED);
  16180. }
  16181. }
  16182. return _await(createCodec(config.Inflate, {
  16183. codecType: CODEC_INFLATE,
  16184. password: password,
  16185. zipCrypto: zipCrypto,
  16186. encryptionStrength: extraFieldAES && extraFieldAES.strength,
  16187. signed: getOptionValue$1(zipEntry, options, "checkSignature"),
  16188. passwordVerification: zipCrypto && (bitFlag.dataDescriptor ? rawLastModDate >>> 8 & 0xFF : signature >>> 24 & 0xFF),
  16189. signature: signature,
  16190. compressed: compressionMethod != 0,
  16191. encrypted: encrypted,
  16192. useWebWorkers: getOptionValue$1(zipEntry, options, "useWebWorkers")
  16193. }, config), function (codec) {
  16194. return _invoke(function () {
  16195. if (!writer.initialized) {
  16196. return _awaitIgnored(writer.init());
  16197. }
  16198. }, function () {
  16199. var signal = getOptionValue$1(zipEntry, options, "signal");
  16200. var dataOffset = offset + 30 + localDirectory.filenameLength + localDirectory.extraFieldLength;
  16201. return _await(processData(codec, reader, writer, dataOffset, function () {
  16202. return compressedSize;
  16203. }, config, {
  16204. onprogress: options.onprogress,
  16205. signal: signal
  16206. }), function () {
  16207. return writer.getData();
  16208. });
  16209. });
  16210. });
  16211. });
  16212. });
  16213. });
  16214. }));
  16215. } catch (e) {
  16216. return Promise.reject(e);
  16217. }
  16218. }
  16219. }]);
  16220. return ZipEntry;
  16221. }();
  16222. function readCommonHeader(directory, dataView, offset) {
  16223. var rawBitFlag = directory.rawBitFlag = getUint16(dataView, offset + 2);
  16224. var encrypted = (rawBitFlag & BITFLAG_ENCRYPTED) == BITFLAG_ENCRYPTED;
  16225. var rawLastModDate = getUint32(dataView, offset + 6);
  16226. Object.assign(directory, {
  16227. encrypted: encrypted,
  16228. version: getUint16(dataView, offset),
  16229. bitFlag: {
  16230. level: (rawBitFlag & BITFLAG_LEVEL) >> 1,
  16231. dataDescriptor: (rawBitFlag & BITFLAG_DATA_DESCRIPTOR) == BITFLAG_DATA_DESCRIPTOR,
  16232. languageEncodingFlag: (rawBitFlag & BITFLAG_LANG_ENCODING_FLAG) == BITFLAG_LANG_ENCODING_FLAG
  16233. },
  16234. rawLastModDate: rawLastModDate,
  16235. lastModDate: getDate(rawLastModDate),
  16236. filenameLength: getUint16(dataView, offset + 22),
  16237. extraFieldLength: getUint16(dataView, offset + 24)
  16238. });
  16239. }
  16240. function readExtraFieldZip64(extraFieldZip64, directory) {
  16241. directory.zip64 = true;
  16242. var extraFieldView = getDataView$1(extraFieldZip64.data);
  16243. extraFieldZip64.values = [];
  16244. for (var indexValue = 0; indexValue < Math.floor(extraFieldZip64.data.length / 8); indexValue++) {
  16245. extraFieldZip64.values.push(getBigUint64(extraFieldView, 0 + indexValue * 8));
  16246. }
  16247. var missingProperties = ZIP64_PROPERTIES.filter(function (propertyName) {
  16248. return directory[propertyName] == MAX_32_BITS;
  16249. });
  16250. for (var indexMissingProperty = 0; indexMissingProperty < missingProperties.length; indexMissingProperty++) {
  16251. extraFieldZip64[missingProperties[indexMissingProperty]] = extraFieldZip64.values[indexMissingProperty];
  16252. }
  16253. ZIP64_PROPERTIES.forEach(function (propertyName) {
  16254. if (directory[propertyName] == MAX_32_BITS) {
  16255. if (extraFieldZip64[propertyName] !== undefined) {
  16256. directory[propertyName] = extraFieldZip64[propertyName];
  16257. } else {
  16258. throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
  16259. }
  16260. }
  16261. });
  16262. }
  16263. function readExtraFieldAES(extraFieldAES, directory, compressionMethod) {
  16264. var extraFieldView = getDataView$1(extraFieldAES.data);
  16265. extraFieldAES.vendorVersion = getUint8(extraFieldView, 0);
  16266. extraFieldAES.vendorId = getUint8(extraFieldView, 2);
  16267. var strength = getUint8(extraFieldView, 4);
  16268. extraFieldAES.strength = strength;
  16269. extraFieldAES.originalCompressionMethod = compressionMethod;
  16270. directory.compressionMethod = extraFieldAES.compressionMethod = getUint16(extraFieldView, 5);
  16271. }
  16272. function readExtraFieldNTFS(extraFieldNTFS, directory) {
  16273. var extraFieldView = getDataView$1(extraFieldNTFS.data);
  16274. var offsetExtraField = 4;
  16275. var tag1Data;
  16276. try {
  16277. while (offsetExtraField < extraFieldNTFS.data.length && !tag1Data) {
  16278. var tagValue = getUint16(extraFieldView, offsetExtraField);
  16279. var attributeSize = getUint16(extraFieldView, offsetExtraField + 2);
  16280. if (tagValue == EXTRAFIELD_TYPE_NTFS_TAG1) {
  16281. tag1Data = extraFieldNTFS.data.slice(offsetExtraField + 4, offsetExtraField + 4 + attributeSize);
  16282. }
  16283. offsetExtraField += 4 + attributeSize;
  16284. }
  16285. } catch (_error) {// ignored
  16286. }
  16287. try {
  16288. if (tag1Data && tag1Data.length == 24) {
  16289. var tag1View = getDataView$1(tag1Data);
  16290. var rawLastModDate = tag1View.getBigUint64(0, true);
  16291. var rawLastAccessDate = tag1View.getBigUint64(8, true);
  16292. var rawCreationDate = tag1View.getBigUint64(16, true);
  16293. Object.assign(extraFieldNTFS, {
  16294. rawLastModDate: rawLastModDate,
  16295. rawLastAccessDate: rawLastAccessDate,
  16296. rawCreationDate: rawCreationDate
  16297. });
  16298. var lastModDate = getDateNTFS(rawLastModDate);
  16299. var lastAccessDate = getDateNTFS(rawLastAccessDate);
  16300. var creationDate = getDateNTFS(rawCreationDate);
  16301. var extraFieldData = {
  16302. lastModDate: lastModDate,
  16303. lastAccessDate: lastAccessDate,
  16304. creationDate: creationDate
  16305. };
  16306. Object.assign(extraFieldNTFS, extraFieldData);
  16307. Object.assign(directory, extraFieldData);
  16308. }
  16309. } catch (_error) {// ignored
  16310. }
  16311. }
  16312. function readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory) {
  16313. var extraFieldView = getDataView$1(extraFieldExtendedTimestamp.data);
  16314. var flags = getUint8(extraFieldView, 0);
  16315. var timeProperties = [];
  16316. var timeRawProperties = [];
  16317. if ((flags & 0x1) == 0x1) {
  16318. timeProperties.push("lastModDate");
  16319. timeRawProperties.push("rawLastModDate");
  16320. }
  16321. if ((flags & 0x2) == 0x2) {
  16322. timeProperties.push("lastAccessDate");
  16323. timeRawProperties.push("rawLastAccessDate");
  16324. }
  16325. if ((flags & 0x4) == 0x4) {
  16326. timeProperties.push("creationDate");
  16327. timeRawProperties.push("rawCreationDate");
  16328. }
  16329. var offset = 1;
  16330. timeProperties.forEach(function (propertyName, indexProperty) {
  16331. if (extraFieldExtendedTimestamp.data.length >= offset + 4) {
  16332. var time = getUint32(extraFieldView, offset);
  16333. directory[propertyName] = extraFieldExtendedTimestamp[propertyName] = new Date(time * 1000);
  16334. var rawPropertyName = timeRawProperties[indexProperty];
  16335. extraFieldExtendedTimestamp[rawPropertyName] = time;
  16336. }
  16337. offset += 4;
  16338. });
  16339. }
  16340. function getOptionValue$1(zipReader, options, name) {
  16341. return options[name] === undefined ? zipReader.options[name] : options[name];
  16342. }
  16343. function getDate(timeRaw) {
  16344. var date = (timeRaw & 0xffff0000) >> 16,
  16345. time = timeRaw & 0x0000ffff;
  16346. try {
  16347. return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
  16348. } catch (_error) {// ignored
  16349. }
  16350. }
  16351. function getDateNTFS(timeRaw) {
  16352. return new Date(Number(timeRaw / BigInt(10000) - BigInt(11644473600000)));
  16353. }
  16354. function getUint8(view, offset) {
  16355. return view.getUint8(offset);
  16356. }
  16357. function getUint16(view, offset) {
  16358. return view.getUint16(offset, true);
  16359. }
  16360. function getUint32(view, offset) {
  16361. return view.getUint32(offset, true);
  16362. }
  16363. function getBigUint64(view, offset) {
  16364. return Number(view.getBigUint64(offset, true));
  16365. }
  16366. function setUint32$1(view, offset, value) {
  16367. view.setUint32(offset, value, true);
  16368. }
  16369. function getDataView$1(array) {
  16370. return new DataView(array.buffer);
  16371. }
  16372. function readUint8Array(reader, offset, size) {
  16373. return reader.readUint8Array(offset, size);
  16374. }
  16375. var collection = collection$2;
  16376. var collectionStrong = collectionStrong$2;
  16377. // `Set` constructor
  16378. // https://tc39.es/ecma262/#sec-set-objects
  16379. collection('Set', function (init) {
  16380. return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };
  16381. }, collectionStrong);
  16382. var DESCRIPTORS = descriptors;
  16383. var FUNCTION_NAME_EXISTS = functionName.EXISTS;
  16384. var uncurryThis = functionUncurryThis;
  16385. var defineProperty = objectDefineProperty.f;
  16386. var FunctionPrototype = Function.prototype;
  16387. var functionToString = uncurryThis(FunctionPrototype.toString);
  16388. var nameRE = /function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/;
  16389. var regExpExec = uncurryThis(nameRE.exec);
  16390. var NAME = 'name';
  16391. // Function instances `.name` property
  16392. // https://tc39.es/ecma262/#sec-function-instances-name
  16393. if (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {
  16394. defineProperty(FunctionPrototype, NAME, {
  16395. configurable: true,
  16396. get: function () {
  16397. try {
  16398. return regExpExec(nameRE, functionToString(this))[1];
  16399. } catch (error) {
  16400. return '';
  16401. }
  16402. }
  16403. });
  16404. }
  16405. var writeBlob = _async(function (writer, blob) {
  16406. var writeSlice = _async(function () {
  16407. return _invokeIgnored(function () {
  16408. if (start < blob.size) {
  16409. return _await(sliceAsArrayBuffer(blob, start, start + blockSize), function (arrayBuffer) {
  16410. return _await(writer.writeUint8Array(new Uint8Array(arrayBuffer)), function () {
  16411. start += blockSize;
  16412. return _callIgnored(writeSlice);
  16413. });
  16414. });
  16415. }
  16416. });
  16417. });
  16418. var start = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
  16419. var blockSize = 512 * 1024 * 1024;
  16420. return _callIgnored(writeSlice);
  16421. });
  16422. var closeFile = _async(function (zipWriter, comment, options) {
  16423. var writer = zipWriter.writer;
  16424. var files = zipWriter.files;
  16425. var offset = 0;
  16426. var directoryDataLength = 0;
  16427. var directoryOffset = zipWriter.offset;
  16428. var filesLength = files.size;
  16429. var _iterator = _createForOfIteratorHelper(files),
  16430. _step;
  16431. try {
  16432. for (_iterator.s(); !(_step = _iterator.n()).done;) {
  16433. var _step$value = _slicedToArray(_step.value, 2),
  16434. fileEntry = _step$value[1];
  16435. directoryDataLength += 46 + fileEntry.rawFilename.length + fileEntry.rawComment.length + fileEntry.rawExtraFieldZip64.length + fileEntry.rawExtraFieldAES.length + fileEntry.rawExtraFieldExtendedTimestamp.length + fileEntry.rawExtraFieldNTFS.length + fileEntry.rawExtraField.length;
  16436. }
  16437. } catch (err) {
  16438. _iterator.e(err);
  16439. } finally {
  16440. _iterator.f();
  16441. }
  16442. var zip64 = options.zip64 || zipWriter.options.zip64 || false;
  16443. if (directoryOffset >= MAX_32_BITS || directoryDataLength >= MAX_32_BITS || filesLength >= MAX_16_BITS) {
  16444. if (options.zip64 === false || zipWriter.options.zip64 === false) {
  16445. throw new Error(ERR_UNSUPPORTED_FORMAT);
  16446. } else {
  16447. zip64 = true;
  16448. }
  16449. }
  16450. var directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
  16451. var directoryView = getDataView(directoryArray);
  16452. if (comment && comment.length) {
  16453. if (comment.length <= MAX_16_BITS) {
  16454. setUint16(directoryView, offset + 20, comment.length);
  16455. } else {
  16456. throw new Error(ERR_INVALID_COMMENT);
  16457. }
  16458. }
  16459. var _iterator2 = _createForOfIteratorHelper(Array.from(files.values()).entries()),
  16460. _step2;
  16461. try {
  16462. for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
  16463. var _step2$value = _slicedToArray(_step2.value, 2),
  16464. indexFileEntry = _step2$value[0],
  16465. _fileEntry = _step2$value[1];
  16466. var rawFilename = _fileEntry.rawFilename,
  16467. rawExtraFieldZip64 = _fileEntry.rawExtraFieldZip64,
  16468. rawExtraFieldAES = _fileEntry.rawExtraFieldAES,
  16469. rawExtraField = _fileEntry.rawExtraField,
  16470. rawComment = _fileEntry.rawComment,
  16471. versionMadeBy = _fileEntry.versionMadeBy,
  16472. headerArray = _fileEntry.headerArray,
  16473. directory = _fileEntry.directory,
  16474. _zip = _fileEntry.zip64,
  16475. msDosCompatible = _fileEntry.msDosCompatible,
  16476. internalFileAttribute = _fileEntry.internalFileAttribute,
  16477. externalFileAttribute = _fileEntry.externalFileAttribute;
  16478. var rawExtraFieldExtendedTimestamp = void 0;
  16479. var rawExtraFieldNTFS = void 0;
  16480. if (_fileEntry.extendedTimestamp) {
  16481. rawExtraFieldNTFS = _fileEntry.rawExtraFieldNTFS;
  16482. rawExtraFieldExtendedTimestamp = new Uint8Array(9);
  16483. var extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);
  16484. setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
  16485. setUint16(extraFieldExtendedTimestampView, 2, rawExtraFieldExtendedTimestamp.length - 4);
  16486. setUint8(extraFieldExtendedTimestampView, 4, 0x1);
  16487. setUint32(extraFieldExtendedTimestampView, 5, Math.floor(_fileEntry.lastModDate.getTime() / 1000));
  16488. } else {
  16489. rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array(0);
  16490. }
  16491. var extraFieldLength = rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length + rawExtraField.length;
  16492. setUint32(directoryView, offset, CENTRAL_FILE_HEADER_SIGNATURE);
  16493. setUint16(directoryView, offset + 4, versionMadeBy);
  16494. arraySet(directoryArray, headerArray, offset + 6);
  16495. setUint16(directoryView, offset + 30, extraFieldLength);
  16496. setUint16(directoryView, offset + 32, rawComment.length);
  16497. setUint32(directoryView, offset + 34, internalFileAttribute);
  16498. if (externalFileAttribute) {
  16499. setUint32(directoryView, offset + 38, externalFileAttribute);
  16500. } else if (directory && msDosCompatible) {
  16501. setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
  16502. }
  16503. if (_zip) {
  16504. setUint32(directoryView, offset + 42, MAX_32_BITS);
  16505. } else {
  16506. setUint32(directoryView, offset + 42, _fileEntry.offset);
  16507. }
  16508. arraySet(directoryArray, rawFilename, offset + 46);
  16509. arraySet(directoryArray, rawExtraFieldZip64, offset + 46 + rawFilename.length);
  16510. arraySet(directoryArray, rawExtraFieldAES, offset + 46 + rawFilename.length + rawExtraFieldZip64.length);
  16511. arraySet(directoryArray, rawExtraFieldExtendedTimestamp, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length);
  16512. arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length);
  16513. arraySet(directoryArray, rawExtraField, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
  16514. arraySet(directoryArray, rawComment, offset + 46 + rawFilename.length + extraFieldLength);
  16515. offset += 46 + rawFilename.length + extraFieldLength + rawComment.length;
  16516. if (options.onprogress) {
  16517. try {
  16518. options.onprogress(indexFileEntry + 1, files.size, new Entry(_fileEntry));
  16519. } catch (_error) {// ignored
  16520. }
  16521. }
  16522. }
  16523. } catch (err) {
  16524. _iterator2.e(err);
  16525. } finally {
  16526. _iterator2.f();
  16527. }
  16528. if (zip64) {
  16529. setUint32(directoryView, offset, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);
  16530. setBigUint64(directoryView, offset + 4, BigInt(44));
  16531. setUint16(directoryView, offset + 12, 45);
  16532. setUint16(directoryView, offset + 14, 45);
  16533. setBigUint64(directoryView, offset + 24, BigInt(filesLength));
  16534. setBigUint64(directoryView, offset + 32, BigInt(filesLength));
  16535. setBigUint64(directoryView, offset + 40, BigInt(directoryDataLength));
  16536. setBigUint64(directoryView, offset + 48, BigInt(directoryOffset));
  16537. setUint32(directoryView, offset + 56, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
  16538. setBigUint64(directoryView, offset + 64, BigInt(directoryOffset) + BigInt(directoryDataLength));
  16539. setUint32(directoryView, offset + 72, ZIP64_TOTAL_NUMBER_OF_DISKS);
  16540. filesLength = MAX_16_BITS;
  16541. directoryOffset = MAX_32_BITS;
  16542. directoryDataLength = MAX_32_BITS;
  16543. offset += 76;
  16544. }
  16545. setUint32(directoryView, offset, END_OF_CENTRAL_DIR_SIGNATURE);
  16546. setUint16(directoryView, offset + 8, filesLength);
  16547. setUint16(directoryView, offset + 10, filesLength);
  16548. setUint32(directoryView, offset + 12, directoryDataLength);
  16549. setUint32(directoryView, offset + 16, directoryOffset);
  16550. return _await(writer.writeUint8Array(directoryArray), function () {
  16551. return _invokeIgnored(function () {
  16552. if (comment && comment.length) {
  16553. return _awaitIgnored(writer.writeUint8Array(comment));
  16554. }
  16555. });
  16556. });
  16557. });
  16558. var createFileEntry = _async(function (reader, writer, config, options) {
  16559. var rawFilename = options.rawFilename,
  16560. lastAccessDate = options.lastAccessDate,
  16561. creationDate = options.creationDate,
  16562. password = options.password,
  16563. level = options.level,
  16564. zip64 = options.zip64,
  16565. zipCrypto = options.zipCrypto,
  16566. dataDescriptor = options.dataDescriptor,
  16567. dataDescriptorSignature = options.dataDescriptorSignature,
  16568. directory = options.directory,
  16569. version = options.version,
  16570. versionMadeBy = options.versionMadeBy,
  16571. rawComment = options.rawComment,
  16572. rawExtraField = options.rawExtraField,
  16573. useWebWorkers = options.useWebWorkers,
  16574. onprogress = options.onprogress,
  16575. signal = options.signal,
  16576. encryptionStrength = options.encryptionStrength,
  16577. extendedTimestamp = options.extendedTimestamp,
  16578. msDosCompatible = options.msDosCompatible,
  16579. internalFileAttribute = options.internalFileAttribute,
  16580. externalFileAttribute = options.externalFileAttribute;
  16581. var encrypted = Boolean(password && password.length);
  16582. var compressed = level !== 0 && !directory;
  16583. var rawExtraFieldAES;
  16584. if (encrypted && !zipCrypto) {
  16585. rawExtraFieldAES = new Uint8Array(EXTRAFIELD_DATA_AES.length + 2);
  16586. var extraFieldAESView = getDataView(rawExtraFieldAES);
  16587. setUint16(extraFieldAESView, 0, EXTRAFIELD_TYPE_AES);
  16588. arraySet(rawExtraFieldAES, EXTRAFIELD_DATA_AES, 2);
  16589. setUint8(extraFieldAESView, 8, encryptionStrength);
  16590. } else {
  16591. rawExtraFieldAES = new Uint8Array(0);
  16592. }
  16593. var rawExtraFieldNTFS;
  16594. var rawExtraFieldExtendedTimestamp;
  16595. if (extendedTimestamp) {
  16596. rawExtraFieldExtendedTimestamp = new Uint8Array(9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0));
  16597. var extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);
  16598. setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
  16599. setUint16(extraFieldExtendedTimestampView, 2, rawExtraFieldExtendedTimestamp.length - 4);
  16600. var extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
  16601. setUint8(extraFieldExtendedTimestampView, 4, extraFieldExtendedTimestampFlag);
  16602. setUint32(extraFieldExtendedTimestampView, 5, Math.floor(options.lastModDate.getTime() / 1000));
  16603. if (lastAccessDate) {
  16604. setUint32(extraFieldExtendedTimestampView, 9, Math.floor(lastAccessDate.getTime() / 1000));
  16605. }
  16606. if (creationDate) {
  16607. setUint32(extraFieldExtendedTimestampView, 13, Math.floor(creationDate.getTime() / 1000));
  16608. }
  16609. try {
  16610. rawExtraFieldNTFS = new Uint8Array(36);
  16611. var extraFieldNTFSView = getDataView(rawExtraFieldNTFS);
  16612. var lastModTimeNTFS = getTimeNTFS(options.lastModDate);
  16613. setUint16(extraFieldNTFSView, 0, EXTRAFIELD_TYPE_NTFS);
  16614. setUint16(extraFieldNTFSView, 2, 32);
  16615. setUint16(extraFieldNTFSView, 8, EXTRAFIELD_TYPE_NTFS_TAG1);
  16616. setUint16(extraFieldNTFSView, 10, 24);
  16617. setBigUint64(extraFieldNTFSView, 12, lastModTimeNTFS);
  16618. setBigUint64(extraFieldNTFSView, 20, getTimeNTFS(lastAccessDate) || lastModTimeNTFS);
  16619. setBigUint64(extraFieldNTFSView, 28, getTimeNTFS(creationDate) || lastModTimeNTFS);
  16620. } catch (_error) {
  16621. rawExtraFieldNTFS = new Uint8Array(0);
  16622. }
  16623. } else {
  16624. rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array(0);
  16625. }
  16626. var fileEntry = {
  16627. version: version || VERSION_DEFLATE,
  16628. versionMadeBy: versionMadeBy,
  16629. zip64: zip64,
  16630. directory: Boolean(directory),
  16631. filenameUTF8: true,
  16632. rawFilename: rawFilename,
  16633. commentUTF8: true,
  16634. rawComment: rawComment,
  16635. rawExtraFieldZip64: zip64 ? new Uint8Array(EXTRAFIELD_LENGTH_ZIP64 + 4) : new Uint8Array(0),
  16636. rawExtraFieldExtendedTimestamp: rawExtraFieldExtendedTimestamp,
  16637. rawExtraFieldNTFS: rawExtraFieldNTFS,
  16638. rawExtraFieldAES: rawExtraFieldAES,
  16639. rawExtraField: rawExtraField,
  16640. extendedTimestamp: extendedTimestamp,
  16641. msDosCompatible: msDosCompatible,
  16642. internalFileAttribute: internalFileAttribute,
  16643. externalFileAttribute: externalFileAttribute
  16644. };
  16645. var uncompressedSize = fileEntry.uncompressedSize = 0;
  16646. var bitFlag = BITFLAG_LANG_ENCODING_FLAG;
  16647. if (dataDescriptor) {
  16648. bitFlag = bitFlag | BITFLAG_DATA_DESCRIPTOR;
  16649. }
  16650. var compressionMethod = COMPRESSION_METHOD_STORE;
  16651. if (compressed) {
  16652. compressionMethod = COMPRESSION_METHOD_DEFLATE;
  16653. }
  16654. if (zip64) {
  16655. fileEntry.version = fileEntry.version > VERSION_ZIP64 ? fileEntry.version : VERSION_ZIP64;
  16656. }
  16657. if (encrypted) {
  16658. bitFlag = bitFlag | BITFLAG_ENCRYPTED;
  16659. if (!zipCrypto) {
  16660. fileEntry.version = fileEntry.version > VERSION_AES ? fileEntry.version : VERSION_AES;
  16661. compressionMethod = COMPRESSION_METHOD_AES;
  16662. if (compressed) {
  16663. fileEntry.rawExtraFieldAES[9] = COMPRESSION_METHOD_DEFLATE;
  16664. }
  16665. }
  16666. }
  16667. fileEntry.compressionMethod = compressionMethod;
  16668. var headerArray = fileEntry.headerArray = new Uint8Array(26);
  16669. var headerView = getDataView(headerArray);
  16670. setUint16(headerView, 0, fileEntry.version);
  16671. setUint16(headerView, 2, bitFlag);
  16672. setUint16(headerView, 4, compressionMethod);
  16673. var dateArray = new Uint32Array(1);
  16674. var dateView = getDataView(dateArray);
  16675. var lastModDate;
  16676. if (options.lastModDate < MIN_DATE) {
  16677. lastModDate = MIN_DATE;
  16678. } else if (options.lastModDate > MAX_DATE) {
  16679. lastModDate = MAX_DATE;
  16680. } else {
  16681. lastModDate = options.lastModDate;
  16682. }
  16683. setUint16(dateView, 0, (lastModDate.getHours() << 6 | lastModDate.getMinutes()) << 5 | lastModDate.getSeconds() / 2);
  16684. setUint16(dateView, 2, (lastModDate.getFullYear() - 1980 << 4 | lastModDate.getMonth() + 1) << 5 | lastModDate.getDate());
  16685. var rawLastModDate = dateArray[0];
  16686. setUint32(headerView, 6, rawLastModDate);
  16687. setUint16(headerView, 22, rawFilename.length);
  16688. var extraFieldLength = rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length + fileEntry.rawExtraField.length;
  16689. setUint16(headerView, 24, extraFieldLength);
  16690. var localHeaderArray = new Uint8Array(30 + rawFilename.length + extraFieldLength);
  16691. var localHeaderView = getDataView(localHeaderArray);
  16692. setUint32(localHeaderView, 0, LOCAL_FILE_HEADER_SIGNATURE);
  16693. arraySet(localHeaderArray, headerArray, 4);
  16694. arraySet(localHeaderArray, rawFilename, 30);
  16695. arraySet(localHeaderArray, rawExtraFieldAES, 30 + rawFilename.length);
  16696. arraySet(localHeaderArray, rawExtraFieldExtendedTimestamp, 30 + rawFilename.length + rawExtraFieldAES.length);
  16697. arraySet(localHeaderArray, rawExtraFieldNTFS, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length);
  16698. arraySet(localHeaderArray, fileEntry.rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
  16699. var result;
  16700. var compressedSize = 0;
  16701. return _invoke(function () {
  16702. if (reader) {
  16703. return _await(createCodec(config.Deflate, {
  16704. codecType: CODEC_DEFLATE,
  16705. level: level,
  16706. password: password,
  16707. encryptionStrength: encryptionStrength,
  16708. zipCrypto: encrypted && zipCrypto,
  16709. passwordVerification: encrypted && zipCrypto && rawLastModDate >> 8 & 0xFF,
  16710. signed: true,
  16711. compressed: compressed,
  16712. encrypted: encrypted,
  16713. useWebWorkers: useWebWorkers
  16714. }, config), function (codec) {
  16715. return _await(writer.writeUint8Array(localHeaderArray), function () {
  16716. fileEntry.dataWritten = true;
  16717. return _await(processData(codec, reader, writer, 0, function () {
  16718. return reader.size;
  16719. }, config, {
  16720. onprogress: onprogress,
  16721. signal: signal
  16722. }), function (_processData) {
  16723. result = _processData;
  16724. uncompressedSize = fileEntry.uncompressedSize = reader.size;
  16725. compressedSize = result.length;
  16726. });
  16727. });
  16728. });
  16729. } else {
  16730. return _await(writer.writeUint8Array(localHeaderArray), function () {
  16731. fileEntry.dataWritten = true;
  16732. });
  16733. }
  16734. }, function () {
  16735. var dataDescriptorArray = new Uint8Array(0);
  16736. var dataDescriptorView,
  16737. dataDescriptorOffset = 0;
  16738. if (dataDescriptor) {
  16739. dataDescriptorArray = new Uint8Array(zip64 ? dataDescriptorSignature ? 24 : 20 : dataDescriptorSignature ? 16 : 12);
  16740. dataDescriptorView = getDataView(dataDescriptorArray);
  16741. if (dataDescriptorSignature) {
  16742. dataDescriptorOffset = 4;
  16743. setUint32(dataDescriptorView, 0, DATA_DESCRIPTOR_RECORD_SIGNATURE);
  16744. }
  16745. }
  16746. if (reader) {
  16747. var signature = result.signature;
  16748. if ((!encrypted || zipCrypto) && signature !== undefined) {
  16749. setUint32(headerView, 10, signature);
  16750. fileEntry.signature = signature;
  16751. if (dataDescriptor) {
  16752. setUint32(dataDescriptorView, dataDescriptorOffset, signature);
  16753. }
  16754. }
  16755. if (zip64) {
  16756. var rawExtraFieldZip64View = getDataView(fileEntry.rawExtraFieldZip64);
  16757. setUint16(rawExtraFieldZip64View, 0, EXTRAFIELD_TYPE_ZIP64);
  16758. setUint16(rawExtraFieldZip64View, 2, EXTRAFIELD_LENGTH_ZIP64);
  16759. setUint32(headerView, 14, MAX_32_BITS);
  16760. setBigUint64(rawExtraFieldZip64View, 12, BigInt(compressedSize));
  16761. setUint32(headerView, 18, MAX_32_BITS);
  16762. setBigUint64(rawExtraFieldZip64View, 4, BigInt(uncompressedSize));
  16763. if (dataDescriptor) {
  16764. setBigUint64(dataDescriptorView, dataDescriptorOffset + 4, BigInt(compressedSize));
  16765. setBigUint64(dataDescriptorView, dataDescriptorOffset + 12, BigInt(uncompressedSize));
  16766. }
  16767. } else {
  16768. setUint32(headerView, 14, compressedSize);
  16769. setUint32(headerView, 18, uncompressedSize);
  16770. if (dataDescriptor) {
  16771. setUint32(dataDescriptorView, dataDescriptorOffset + 4, compressedSize);
  16772. setUint32(dataDescriptorView, dataDescriptorOffset + 8, uncompressedSize);
  16773. }
  16774. }
  16775. }
  16776. return _invoke(function () {
  16777. if (dataDescriptor) {
  16778. return _awaitIgnored(writer.writeUint8Array(dataDescriptorArray));
  16779. }
  16780. }, function () {
  16781. var length = localHeaderArray.length + compressedSize + dataDescriptorArray.length;
  16782. Object.assign(fileEntry, {
  16783. compressedSize: compressedSize,
  16784. lastModDate: lastModDate,
  16785. rawLastModDate: rawLastModDate,
  16786. creationDate: creationDate,
  16787. lastAccessDate: lastAccessDate,
  16788. encrypted: encrypted,
  16789. length: length
  16790. });
  16791. return fileEntry;
  16792. });
  16793. });
  16794. });
  16795. var getFileEntry = _async(function (zipWriter, name, reader, options) {
  16796. var files = zipWriter.files;
  16797. var writer = zipWriter.writer;
  16798. var previousFileEntry = Array.from(files.values()).pop();
  16799. var fileEntry = {};
  16800. var bufferedWrite;
  16801. var resolveLockUnbufferedWrite;
  16802. var resolveLockCurrentFileEntry;
  16803. files.set(name, fileEntry);
  16804. return _finallyRethrows(function () {
  16805. return _catch(function () {
  16806. var lockPreviousFileEntry;
  16807. var fileWriter;
  16808. var lockCurrentFileEntry;
  16809. if (options.keepOrder) {
  16810. lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
  16811. }
  16812. fileEntry.lock = lockCurrentFileEntry = new Promise(function (resolve) {
  16813. return resolveLockCurrentFileEntry = resolve;
  16814. });
  16815. return _invoke(function () {
  16816. if (options.bufferedWrite || zipWriter.lockWrite || !options.dataDescriptor) {
  16817. fileWriter = new BlobWriter();
  16818. fileWriter.init();
  16819. bufferedWrite = true;
  16820. } else {
  16821. zipWriter.lockWrite = new Promise(function (resolve) {
  16822. return resolveLockUnbufferedWrite = resolve;
  16823. });
  16824. return _invoke(function () {
  16825. if (!writer.initialized) {
  16826. return _awaitIgnored(writer.init());
  16827. }
  16828. }, function () {
  16829. fileWriter = writer;
  16830. });
  16831. }
  16832. }, function () {
  16833. return _await(createFileEntry(reader, fileWriter, zipWriter.config, options), function (_createFileEntry) {
  16834. fileEntry = _createFileEntry;
  16835. fileEntry.lock = lockCurrentFileEntry;
  16836. files.set(name, fileEntry);
  16837. fileEntry.filename = name;
  16838. return _invoke(function () {
  16839. if (bufferedWrite) {
  16840. var indexWrittenData = 0;
  16841. var blob = fileWriter.getData();
  16842. return _await(Promise.all([zipWriter.lockWrite, lockPreviousFileEntry]), function () {
  16843. var pendingFileEntry;
  16844. return _continue(_do(function () {
  16845. pendingFileEntry = Array.from(files.values()).find(function (fileEntry) {
  16846. return fileEntry.writingBufferedData;
  16847. });
  16848. return _invokeIgnored(function () {
  16849. if (pendingFileEntry) {
  16850. return _awaitIgnored(pendingFileEntry.lock);
  16851. }
  16852. });
  16853. }, function () {
  16854. return !!pendingFileEntry && !!pendingFileEntry.lock;
  16855. }), function () {
  16856. fileEntry.writingBufferedData = true;
  16857. return _invoke(function () {
  16858. if (!options.dataDescriptor) {
  16859. var headerLength = 26;
  16860. return _await(sliceAsArrayBuffer(blob, 0, headerLength), function (arrayBuffer) {
  16861. var arrayBufferView = new DataView(arrayBuffer);
  16862. if (!fileEntry.encrypted || options.zipCrypto) {
  16863. setUint32(arrayBufferView, 14, fileEntry.signature);
  16864. }
  16865. if (fileEntry.zip64) {
  16866. setUint32(arrayBufferView, 18, MAX_32_BITS);
  16867. setUint32(arrayBufferView, 22, MAX_32_BITS);
  16868. } else {
  16869. setUint32(arrayBufferView, 18, fileEntry.compressedSize);
  16870. setUint32(arrayBufferView, 22, fileEntry.uncompressedSize);
  16871. }
  16872. return _await(writer.writeUint8Array(new Uint8Array(arrayBuffer)), function () {
  16873. indexWrittenData = headerLength;
  16874. });
  16875. });
  16876. }
  16877. }, function () {
  16878. return _await(writeBlob(writer, blob, indexWrittenData), function () {
  16879. delete fileEntry.writingBufferedData;
  16880. });
  16881. });
  16882. });
  16883. });
  16884. }
  16885. }, function () {
  16886. fileEntry.offset = zipWriter.offset;
  16887. if (fileEntry.zip64) {
  16888. var rawExtraFieldZip64View = getDataView(fileEntry.rawExtraFieldZip64);
  16889. setBigUint64(rawExtraFieldZip64View, 20, BigInt(fileEntry.offset));
  16890. } else if (fileEntry.offset >= MAX_32_BITS) {
  16891. throw new Error(ERR_UNSUPPORTED_FORMAT);
  16892. }
  16893. zipWriter.offset += fileEntry.length;
  16894. return fileEntry;
  16895. });
  16896. });
  16897. });
  16898. }, function (error) {
  16899. if (bufferedWrite && fileEntry.writingBufferedData || !bufferedWrite && fileEntry.dataWritten) {
  16900. error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
  16901. if (fileEntry.uncompressedSize) {
  16902. zipWriter.offset += fileEntry.uncompressedSize;
  16903. }
  16904. }
  16905. files.delete(name);
  16906. throw error;
  16907. });
  16908. }, function (_wasThrown2, _result3) {
  16909. resolveLockCurrentFileEntry();
  16910. if (resolveLockUnbufferedWrite) {
  16911. resolveLockUnbufferedWrite();
  16912. }
  16913. return _rethrow(_wasThrown2, _result3);
  16914. });
  16915. });
  16916. var addFile = _async(function (zipWriter, name, reader, options) {
  16917. name = name.trim();
  16918. if (options.directory && !name.endsWith(DIRECTORY_SIGNATURE)) {
  16919. name += DIRECTORY_SIGNATURE;
  16920. } else {
  16921. options.directory = name.endsWith(DIRECTORY_SIGNATURE);
  16922. }
  16923. if (zipWriter.files.has(name)) {
  16924. throw new Error(ERR_DUPLICATED_NAME);
  16925. }
  16926. var rawFilename = encodeText(name);
  16927. if (rawFilename.length > MAX_16_BITS) {
  16928. throw new Error(ERR_INVALID_ENTRY_NAME);
  16929. }
  16930. var comment = options.comment || "";
  16931. var rawComment = encodeText(comment);
  16932. if (rawComment.length > MAX_16_BITS) {
  16933. throw new Error(ERR_INVALID_ENTRY_COMMENT);
  16934. }
  16935. var version = zipWriter.options.version || options.version || 0;
  16936. if (version > MAX_16_BITS) {
  16937. throw new Error(ERR_INVALID_VERSION);
  16938. }
  16939. var versionMadeBy = zipWriter.options.versionMadeBy || options.versionMadeBy || 20;
  16940. if (versionMadeBy > MAX_16_BITS) {
  16941. throw new Error(ERR_INVALID_VERSION);
  16942. }
  16943. var lastModDate = getOptionValue(zipWriter, options, "lastModDate") || new Date();
  16944. var lastAccessDate = getOptionValue(zipWriter, options, "lastAccessDate");
  16945. var creationDate = getOptionValue(zipWriter, options, "creationDate");
  16946. var password = getOptionValue(zipWriter, options, "password");
  16947. var encryptionStrength = getOptionValue(zipWriter, options, "encryptionStrength") || 3;
  16948. var zipCrypto = getOptionValue(zipWriter, options, "zipCrypto");
  16949. if (password !== undefined && encryptionStrength !== undefined && (encryptionStrength < 1 || encryptionStrength > 3)) {
  16950. throw new Error(ERR_INVALID_ENCRYPTION_STRENGTH);
  16951. }
  16952. var rawExtraField = new Uint8Array(0);
  16953. var extraField = options.extraField;
  16954. if (extraField) {
  16955. var extraFieldSize = 0;
  16956. var offset = 0;
  16957. extraField.forEach(function (data) {
  16958. return extraFieldSize += 4 + data.length;
  16959. });
  16960. rawExtraField = new Uint8Array(extraFieldSize);
  16961. extraField.forEach(function (data, type) {
  16962. if (type > MAX_16_BITS) {
  16963. throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
  16964. }
  16965. if (data.length > MAX_16_BITS) {
  16966. throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
  16967. }
  16968. arraySet(rawExtraField, new Uint16Array([type]), offset);
  16969. arraySet(rawExtraField, new Uint16Array([data.length]), offset + 2);
  16970. arraySet(rawExtraField, data, offset + 4);
  16971. offset += 4 + data.length;
  16972. });
  16973. }
  16974. var extendedTimestamp = getOptionValue(zipWriter, options, "extendedTimestamp");
  16975. if (extendedTimestamp === undefined) {
  16976. extendedTimestamp = true;
  16977. }
  16978. var maximumCompressedSize = 0;
  16979. var keepOrder = getOptionValue(zipWriter, options, "keepOrder");
  16980. if (keepOrder === undefined) {
  16981. keepOrder = true;
  16982. }
  16983. var uncompressedSize = 0;
  16984. var msDosCompatible = getOptionValue(zipWriter, options, "msDosCompatible");
  16985. if (msDosCompatible === undefined) {
  16986. msDosCompatible = true;
  16987. }
  16988. var internalFileAttribute = getOptionValue(zipWriter, options, "internalFileAttribute") || 0;
  16989. var externalFileAttribute = getOptionValue(zipWriter, options, "externalFileAttribute") || 0;
  16990. return _invoke(function () {
  16991. if (reader) {
  16992. return _invoke(function () {
  16993. if (!reader.initialized) {
  16994. return _awaitIgnored(reader.init());
  16995. }
  16996. }, function () {
  16997. uncompressedSize = reader.size;
  16998. maximumCompressedSize = getMaximumCompressedSize(uncompressedSize);
  16999. });
  17000. }
  17001. }, function () {
  17002. var zip64 = options.zip64 || zipWriter.options.zip64 || false;
  17003. if (zipWriter.offset + zipWriter.pendingCompressedSize >= MAX_32_BITS || uncompressedSize >= MAX_32_BITS || maximumCompressedSize >= MAX_32_BITS) {
  17004. if (options.zip64 === false || zipWriter.options.zip64 === false || !keepOrder) {
  17005. throw new Error(ERR_UNSUPPORTED_FORMAT);
  17006. } else {
  17007. zip64 = true;
  17008. }
  17009. }
  17010. zipWriter.pendingCompressedSize += maximumCompressedSize;
  17011. return _await(Promise.resolve(), function () {
  17012. var level = getOptionValue(zipWriter, options, "level");
  17013. var useWebWorkers = getOptionValue(zipWriter, options, "useWebWorkers");
  17014. var bufferedWrite = getOptionValue(zipWriter, options, "bufferedWrite");
  17015. var dataDescriptor = getOptionValue(zipWriter, options, "dataDescriptor");
  17016. var dataDescriptorSignature = getOptionValue(zipWriter, options, "dataDescriptorSignature");
  17017. var signal = getOptionValue(zipWriter, options, "signal");
  17018. if (dataDescriptor === undefined) {
  17019. dataDescriptor = true;
  17020. }
  17021. if (dataDescriptor && dataDescriptorSignature === undefined) {
  17022. dataDescriptorSignature = false;
  17023. }
  17024. return _await(getFileEntry(zipWriter, name, reader, Object.assign({}, options, {
  17025. rawFilename: rawFilename,
  17026. rawComment: rawComment,
  17027. version: version,
  17028. versionMadeBy: versionMadeBy,
  17029. lastModDate: lastModDate,
  17030. lastAccessDate: lastAccessDate,
  17031. creationDate: creationDate,
  17032. rawExtraField: rawExtraField,
  17033. zip64: zip64,
  17034. password: password,
  17035. level: level,
  17036. useWebWorkers: useWebWorkers,
  17037. encryptionStrength: encryptionStrength,
  17038. extendedTimestamp: extendedTimestamp,
  17039. zipCrypto: zipCrypto,
  17040. bufferedWrite: bufferedWrite,
  17041. keepOrder: keepOrder,
  17042. dataDescriptor: dataDescriptor,
  17043. dataDescriptorSignature: dataDescriptorSignature,
  17044. signal: signal,
  17045. msDosCompatible: msDosCompatible,
  17046. internalFileAttribute: internalFileAttribute,
  17047. externalFileAttribute: externalFileAttribute
  17048. })), function (fileEntry) {
  17049. if (maximumCompressedSize) {
  17050. zipWriter.pendingCompressedSize -= maximumCompressedSize;
  17051. }
  17052. Object.assign(fileEntry, {
  17053. name: name,
  17054. comment: comment,
  17055. extraField: extraField
  17056. });
  17057. return new Entry(fileEntry);
  17058. });
  17059. });
  17060. });
  17061. });
  17062. var ERR_DUPLICATED_NAME = "File already exists";
  17063. var ERR_INVALID_COMMENT = "Zip file comment exceeds 64KB";
  17064. var ERR_INVALID_ENTRY_COMMENT = "File entry comment exceeds 64KB";
  17065. var ERR_INVALID_ENTRY_NAME = "File entry name exceeds 64KB";
  17066. var ERR_INVALID_VERSION = "Version exceeds 65535";
  17067. var ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
  17068. var ERR_INVALID_EXTRAFIELD_TYPE = "Extra field type exceeds 65535";
  17069. var ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
  17070. var ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported";
  17071. var EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
  17072. var EXTRAFIELD_LENGTH_ZIP64 = 24;
  17073. var workers = 0;
  17074. var ZipWriter = /*#__PURE__*/function () {
  17075. function ZipWriter(writer) {
  17076. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  17077. _classCallCheck(this, ZipWriter);
  17078. Object.assign(this, {
  17079. writer: writer,
  17080. options: options,
  17081. config: getConfiguration(),
  17082. files: new Map(),
  17083. offset: writer.size,
  17084. pendingCompressedSize: 0,
  17085. pendingEntries: [],
  17086. pendingAddFileCalls: new Set()
  17087. });
  17088. }
  17089. _createClass(ZipWriter, [{
  17090. key: "add",
  17091. value: function add() {
  17092. var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
  17093. var reader = arguments.length > 1 ? arguments[1] : undefined;
  17094. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  17095. try {
  17096. var _this2 = this;
  17097. var zipWriter = _this2;
  17098. return _await(function () {
  17099. if (workers < zipWriter.config.maxWorkers) {
  17100. workers++;
  17101. var promiseAddFile;
  17102. return _finallyRethrows(function () {
  17103. promiseAddFile = addFile(zipWriter, name, reader, options);
  17104. _this2.pendingAddFileCalls.add(promiseAddFile);
  17105. return _await(promiseAddFile);
  17106. }, function (_wasThrown, _result) {
  17107. _this2.pendingAddFileCalls.delete(promiseAddFile);
  17108. workers--;
  17109. var pendingEntry = zipWriter.pendingEntries.shift();
  17110. if (pendingEntry) {
  17111. zipWriter.add(pendingEntry.name, pendingEntry.reader, pendingEntry.options).then(pendingEntry.resolve).catch(pendingEntry.reject);
  17112. }
  17113. return _rethrow(_wasThrown, _result);
  17114. });
  17115. } else {
  17116. return new Promise(function (resolve, reject) {
  17117. return zipWriter.pendingEntries.push({
  17118. name: name,
  17119. reader: reader,
  17120. options: options,
  17121. resolve: resolve,
  17122. reject: reject
  17123. });
  17124. });
  17125. }
  17126. }());
  17127. } catch (e) {
  17128. return Promise.reject(e);
  17129. }
  17130. }
  17131. }, {
  17132. key: "close",
  17133. value: function close(comment) {
  17134. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  17135. try {
  17136. var _this4 = this;
  17137. if (comment === undefined) comment = new Uint8Array(0);
  17138. return _await(_continue(_for(function () {
  17139. return !!_this4.pendingAddFileCalls.size;
  17140. }, void 0, function () {
  17141. return _awaitIgnored(Promise.all(Array.from(_this4.pendingAddFileCalls)));
  17142. }), function () {
  17143. return _await(closeFile(_this4, comment, options), function () {
  17144. return _this4.writer.getData();
  17145. });
  17146. }));
  17147. } catch (e) {
  17148. return Promise.reject(e);
  17149. }
  17150. }
  17151. }]);
  17152. return ZipWriter;
  17153. }();
  17154. function sliceAsArrayBuffer(blob, start, end) {
  17155. if (blob.arrayBuffer) {
  17156. if (start || end) {
  17157. return blob.slice(start, end).arrayBuffer();
  17158. } else {
  17159. return blob.arrayBuffer();
  17160. }
  17161. } else {
  17162. var fileReader = new FileReader();
  17163. return new Promise(function (resolve, reject) {
  17164. fileReader.onload = function (event) {
  17165. return resolve(event.target.result);
  17166. };
  17167. fileReader.onerror = function () {
  17168. return reject(fileReader.error);
  17169. };
  17170. fileReader.readAsArrayBuffer(start || end ? blob.slice(start, end) : blob);
  17171. });
  17172. }
  17173. }
  17174. function getTimeNTFS(date) {
  17175. if (date) {
  17176. return (BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000);
  17177. }
  17178. }
  17179. function getOptionValue(zipWriter, options, name) {
  17180. return options[name] === undefined ? zipWriter.options[name] : options[name];
  17181. }
  17182. function getMaximumCompressedSize(uncompressedSize) {
  17183. return uncompressedSize + 5 * (Math.floor(uncompressedSize / 16383) + 1);
  17184. }
  17185. function setUint8(view, offset, value) {
  17186. view.setUint8(offset, value);
  17187. }
  17188. function setUint16(view, offset, value) {
  17189. view.setUint16(offset, value, true);
  17190. }
  17191. function setUint32(view, offset, value) {
  17192. view.setUint32(offset, value, true);
  17193. }
  17194. function setBigUint64(view, offset, value) {
  17195. view.setBigUint64(offset, value, true);
  17196. }
  17197. function arraySet(array, typedArray, offset) {
  17198. array.set(typedArray, offset);
  17199. }
  17200. function getDataView(array) {
  17201. return new DataView(array.buffer);
  17202. }
  17203. var _addFileSystemEntry = _async(function (zipEntry, fileSystemEntry) {
  17204. var addDirectory = _async(function (zipEntry, fileEntry) {
  17205. return _await(getChildren(fileEntry), function (children) {
  17206. return _continueIgnored(_forOf(children, function (child) {
  17207. return _invokeIgnored(function () {
  17208. if (child.isDirectory) {
  17209. return _awaitIgnored(addDirectory(zipEntry.addDirectory(child.name), child));
  17210. } else {
  17211. return _awaitIgnored(new Promise(function (resolve, reject) {
  17212. child.file(function (file) {
  17213. var childZipEntry = zipEntry.addBlob(child.name, file);
  17214. childZipEntry.uncompressedSize = file.size;
  17215. resolve(childZipEntry);
  17216. }, reject);
  17217. }));
  17218. }
  17219. });
  17220. }));
  17221. });
  17222. });
  17223. function getChildren(fileEntry) {
  17224. return new Promise(function (resolve, reject) {
  17225. var entries = [];
  17226. if (fileEntry.isDirectory) {
  17227. readEntries(fileEntry.createReader());
  17228. }
  17229. if (fileEntry.isFile) {
  17230. resolve(entries);
  17231. }
  17232. function readEntries(directoryReader) {
  17233. directoryReader.readEntries(function (temporaryEntries) {
  17234. if (!temporaryEntries.length) {
  17235. resolve(entries);
  17236. } else {
  17237. entries = entries.concat(temporaryEntries);
  17238. readEntries(directoryReader);
  17239. }
  17240. }, reject);
  17241. }
  17242. });
  17243. }
  17244. if (fileSystemEntry.isDirectory) {
  17245. var entry = zipEntry.addDirectory(fileSystemEntry.name);
  17246. return _await(addDirectory(entry, fileSystemEntry), function () {
  17247. return entry;
  17248. });
  17249. } else {
  17250. return new Promise(function (resolve, reject) {
  17251. return fileSystemEntry.file(function (file) {
  17252. return resolve(zipEntry.addBlob(fileSystemEntry.name, file));
  17253. }, reject);
  17254. });
  17255. }
  17256. });
  17257. var _exportZip = _async(function (zipWriter, entry, totalSize, options) {
  17258. var process = _async(function (zipWriter, entry) {
  17259. var processChild = _async(function (child) {
  17260. var name = options.relativePath ? child.getRelativeName(selectedEntry) : child.getFullname();
  17261. return _await(zipWriter.add(name, child.reader, Object.assign({
  17262. directory: child.directory
  17263. }, Object.assign({}, options, {
  17264. onprogress: function onprogress(indexProgress) {
  17265. if (options.onprogress) {
  17266. entryOffsets.set(name, indexProgress);
  17267. try {
  17268. options.onprogress(Array.from(entryOffsets.values()).reduce(function (previousValue, currentValue) {
  17269. return previousValue + currentValue;
  17270. }), totalSize);
  17271. } catch (_error) {// ignored
  17272. }
  17273. }
  17274. }
  17275. }))), function () {
  17276. return _awaitIgnored(process(zipWriter, child));
  17277. });
  17278. });
  17279. var exportChild = _async(function () {
  17280. return _invokeIgnored(function () {
  17281. if (options.bufferedWrite) {
  17282. return _awaitIgnored(Promise.all(entry.children.map(processChild)));
  17283. } else {
  17284. return _continueIgnored(_forOf(entry.children, function (child) {
  17285. return _awaitIgnored(processChild(child));
  17286. }));
  17287. }
  17288. });
  17289. });
  17290. return _callIgnored(exportChild);
  17291. });
  17292. var selectedEntry = entry;
  17293. var entryOffsets = new Map();
  17294. return _awaitIgnored(process(zipWriter, entry));
  17295. });
  17296. var initReaders = _async(function (entry) {
  17297. return _invokeIgnored(function () {
  17298. if (entry.children.length) {
  17299. return _continueIgnored(_forOf(entry.children, function (child) {
  17300. return _invokeIgnored(function () {
  17301. if (child.directory) {
  17302. return _awaitIgnored(initReaders(child));
  17303. } else {
  17304. child.reader = new child.Reader(child.data);
  17305. return _await(child.reader.init(), function () {
  17306. child.uncompressedSize = child.reader.size;
  17307. });
  17308. }
  17309. });
  17310. }));
  17311. }
  17312. });
  17313. });
  17314. var CHUNK_SIZE = 512 * 1024;
  17315. var ZipEntry = /*#__PURE__*/function () {
  17316. function ZipEntry(fs, name, params, parent) {
  17317. _classCallCheck(this, ZipEntry);
  17318. var zipEntry = this;
  17319. if (fs.root && parent && parent.getChildByName(name)) {
  17320. throw new Error("Entry filename already exists");
  17321. }
  17322. if (!params) {
  17323. params = {};
  17324. }
  17325. Object.assign(zipEntry, {
  17326. fs: fs,
  17327. name: name,
  17328. data: params.data,
  17329. id: fs.entries.length,
  17330. parent: parent,
  17331. children: [],
  17332. uncompressedSize: 0
  17333. });
  17334. fs.entries.push(zipEntry);
  17335. if (parent) {
  17336. zipEntry.parent.children.push(zipEntry);
  17337. }
  17338. }
  17339. _createClass(ZipEntry, [{
  17340. key: "moveTo",
  17341. value: function moveTo(target) {
  17342. // deprecated
  17343. var zipEntry = this;
  17344. zipEntry.fs.move(zipEntry, target);
  17345. }
  17346. }, {
  17347. key: "getFullname",
  17348. value: function getFullname() {
  17349. return this.getRelativeName();
  17350. }
  17351. }, {
  17352. key: "getRelativeName",
  17353. value: function getRelativeName() {
  17354. var ancestor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.fs.root;
  17355. var zipEntry = this;
  17356. var relativeName = zipEntry.name;
  17357. var entry = zipEntry.parent;
  17358. while (entry && entry != ancestor) {
  17359. relativeName = (entry.name ? entry.name + "/" : "") + relativeName;
  17360. entry = entry.parent;
  17361. }
  17362. return relativeName;
  17363. }
  17364. }, {
  17365. key: "isDescendantOf",
  17366. value: function isDescendantOf(ancestor) {
  17367. var entry = this.parent;
  17368. while (entry && entry.id != ancestor.id) {
  17369. entry = entry.parent;
  17370. }
  17371. return Boolean(entry);
  17372. }
  17373. }]);
  17374. return ZipEntry;
  17375. }();
  17376. var ZipFileEntry = /*#__PURE__*/function (_ZipEntry) {
  17377. _inherits(ZipFileEntry, _ZipEntry);
  17378. var _super = _createSuper(ZipFileEntry);
  17379. function ZipFileEntry(fs, name, params, parent) {
  17380. var _this;
  17381. _classCallCheck(this, ZipFileEntry);
  17382. _this = _super.call(this, fs, name, params, parent);
  17383. var zipEntry = _assertThisInitialized(_this);
  17384. zipEntry.Reader = params.Reader;
  17385. zipEntry.Writer = params.Writer;
  17386. if (params.getData) {
  17387. zipEntry.getData = params.getData;
  17388. }
  17389. return _this;
  17390. }
  17391. _createClass(ZipFileEntry, [{
  17392. key: "getData",
  17393. value: function getData(writer) {
  17394. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  17395. try {
  17396. var _this3 = this;
  17397. var zipEntry = _this3;
  17398. if (!writer || writer.constructor == zipEntry.Writer && zipEntry.data) {
  17399. return _await(zipEntry.data);
  17400. } else {
  17401. zipEntry.reader = new zipEntry.Reader(zipEntry.data, options);
  17402. return _await(zipEntry.reader.init(), function () {
  17403. return _invoke(function () {
  17404. if (!writer.initialized) {
  17405. return _awaitIgnored(writer.init());
  17406. }
  17407. }, function () {
  17408. zipEntry.uncompressedSize = zipEntry.reader.size;
  17409. return pipe(zipEntry.reader, writer);
  17410. });
  17411. });
  17412. }
  17413. } catch (e) {
  17414. return Promise.reject(e);
  17415. }
  17416. }
  17417. }, {
  17418. key: "getText",
  17419. value: function getText(encoding, options) {
  17420. return this.getData(new TextWriter(encoding), options);
  17421. }
  17422. }, {
  17423. key: "getBlob",
  17424. value: function getBlob(mimeType, options) {
  17425. return this.getData(new BlobWriter(mimeType), options);
  17426. }
  17427. }, {
  17428. key: "getData64URI",
  17429. value: function getData64URI(mimeType, options) {
  17430. return this.getData(new Data64URIWriter(mimeType), options);
  17431. }
  17432. }, {
  17433. key: "getUint8Array",
  17434. value: function getUint8Array(options) {
  17435. return this.getData(new Uint8ArrayWriter(), options);
  17436. }
  17437. }, {
  17438. key: "replaceBlob",
  17439. value: function replaceBlob(blob) {
  17440. Object.assign(this, {
  17441. data: blob,
  17442. Reader: BlobReader,
  17443. Writer: BlobWriter,
  17444. reader: null
  17445. });
  17446. }
  17447. }, {
  17448. key: "replaceText",
  17449. value: function replaceText(text) {
  17450. Object.assign(this, {
  17451. data: text,
  17452. Reader: TextReader,
  17453. Writer: TextWriter,
  17454. reader: null
  17455. });
  17456. }
  17457. }, {
  17458. key: "replaceData64URI",
  17459. value: function replaceData64URI(dataURI) {
  17460. Object.assign(this, {
  17461. data: dataURI,
  17462. Reader: Data64URIReader,
  17463. Writer: Data64URIWriter,
  17464. reader: null
  17465. });
  17466. }
  17467. }, {
  17468. key: "replaceUint8Array",
  17469. value: function replaceUint8Array(array) {
  17470. Object.assign(this, {
  17471. data: array,
  17472. Reader: Uint8ArrayReader,
  17473. Writer: Uint8ArrayWriter,
  17474. reader: null
  17475. });
  17476. }
  17477. }]);
  17478. return ZipFileEntry;
  17479. }(ZipEntry);
  17480. var ZipDirectoryEntry = /*#__PURE__*/function (_ZipEntry2) {
  17481. _inherits(ZipDirectoryEntry, _ZipEntry2);
  17482. var _super2 = _createSuper(ZipDirectoryEntry);
  17483. function ZipDirectoryEntry(fs, name, params, parent) {
  17484. var _this4;
  17485. _classCallCheck(this, ZipDirectoryEntry);
  17486. _this4 = _super2.call(this, fs, name, params, parent);
  17487. _this4.directory = true;
  17488. return _this4;
  17489. }
  17490. _createClass(ZipDirectoryEntry, [{
  17491. key: "addDirectory",
  17492. value: function addDirectory(name) {
  17493. return addChild(this, name, null, true);
  17494. }
  17495. }, {
  17496. key: "addText",
  17497. value: function addText(name, text) {
  17498. return addChild(this, name, {
  17499. data: text,
  17500. Reader: TextReader,
  17501. Writer: TextWriter
  17502. });
  17503. }
  17504. }, {
  17505. key: "addBlob",
  17506. value: function addBlob(name, blob) {
  17507. return addChild(this, name, {
  17508. data: blob,
  17509. Reader: BlobReader,
  17510. Writer: BlobWriter
  17511. });
  17512. }
  17513. }, {
  17514. key: "addData64URI",
  17515. value: function addData64URI(name, dataURI) {
  17516. return addChild(this, name, {
  17517. data: dataURI,
  17518. Reader: Data64URIReader,
  17519. Writer: Data64URIWriter
  17520. });
  17521. }
  17522. }, {
  17523. key: "addUint8Array",
  17524. value: function addUint8Array(name, array) {
  17525. return addChild(this, name, {
  17526. data: array,
  17527. Reader: Uint8ArrayReader,
  17528. Writer: Uint8ArrayWriter
  17529. });
  17530. }
  17531. }, {
  17532. key: "addHttpContent",
  17533. value: function addHttpContent(name, url) {
  17534. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  17535. return addChild(this, name, {
  17536. data: url,
  17537. Reader: /*#__PURE__*/function (_HttpReader) {
  17538. _inherits(Reader, _HttpReader);
  17539. var _super3 = _createSuper(Reader);
  17540. function Reader(url) {
  17541. _classCallCheck(this, Reader);
  17542. return _super3.call(this, url, options);
  17543. }
  17544. return _createClass(Reader);
  17545. }(HttpReader)
  17546. });
  17547. }
  17548. }, {
  17549. key: "addFileSystemEntry",
  17550. value: function addFileSystemEntry(fileSystemEntry) {
  17551. return _addFileSystemEntry(this, fileSystemEntry);
  17552. }
  17553. }, {
  17554. key: "addData",
  17555. value: function addData(name, params) {
  17556. return addChild(this, name, params);
  17557. }
  17558. }, {
  17559. key: "importBlob",
  17560. value: function importBlob(blob) {
  17561. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  17562. try {
  17563. var _this6 = this;
  17564. return _await(_awaitIgnored(_this6.importZip(new BlobReader(blob), options)));
  17565. } catch (e) {
  17566. return Promise.reject(e);
  17567. }
  17568. }
  17569. }, {
  17570. key: "importData64URI",
  17571. value: function importData64URI(dataURI) {
  17572. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  17573. try {
  17574. var _this8 = this;
  17575. return _await(_awaitIgnored(_this8.importZip(new Data64URIReader(dataURI), options)));
  17576. } catch (e) {
  17577. return Promise.reject(e);
  17578. }
  17579. }
  17580. }, {
  17581. key: "importUint8Array",
  17582. value: function importUint8Array(array) {
  17583. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  17584. try {
  17585. var _this10 = this;
  17586. return _await(_awaitIgnored(_this10.importZip(new Uint8ArrayReader(array), options)));
  17587. } catch (e) {
  17588. return Promise.reject(e);
  17589. }
  17590. }
  17591. }, {
  17592. key: "importHttpContent",
  17593. value: function importHttpContent(url) {
  17594. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  17595. try {
  17596. var _this12 = this;
  17597. return _await(_awaitIgnored(_this12.importZip(new HttpReader(url, options), options)));
  17598. } catch (e) {
  17599. return Promise.reject(e);
  17600. }
  17601. }
  17602. }, {
  17603. key: "exportBlob",
  17604. value: function exportBlob() {
  17605. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  17606. return this.exportZip(new BlobWriter("application/zip"), options);
  17607. }
  17608. }, {
  17609. key: "exportData64URI",
  17610. value: function exportData64URI() {
  17611. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  17612. return this.exportZip(new Data64URIWriter("application/zip"), options);
  17613. }
  17614. }, {
  17615. key: "exportUint8Array",
  17616. value: function exportUint8Array() {
  17617. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  17618. return this.exportZip(new Uint8ArrayWriter(), options);
  17619. }
  17620. }, {
  17621. key: "importZip",
  17622. value: function importZip(reader, options) {
  17623. try {
  17624. var _this14 = this;
  17625. return _await(_invoke(function () {
  17626. if (!reader.initialized) {
  17627. return _awaitIgnored(reader.init());
  17628. }
  17629. }, function () {
  17630. var zipReader = new ZipReader(reader, options);
  17631. return _await(zipReader.getEntries(), function (entries) {
  17632. entries.forEach(function (entry) {
  17633. var parent = _this14;
  17634. var path = entry.filename.split("/");
  17635. var name = path.pop();
  17636. path.forEach(function (pathPart) {
  17637. return parent = parent.getChildByName(pathPart) || new ZipDirectoryEntry(_this14.fs, pathPart, null, parent);
  17638. });
  17639. if (!entry.directory) {
  17640. addChild(parent, name, {
  17641. data: entry,
  17642. Reader: getZipBlobReader(Object.assign({}, options))
  17643. });
  17644. }
  17645. });
  17646. });
  17647. }));
  17648. } catch (e) {
  17649. return Promise.reject(e);
  17650. }
  17651. }
  17652. }, {
  17653. key: "exportZip",
  17654. value: function exportZip(writer, options) {
  17655. var _this15 = this;
  17656. var zipEntry = _this15;
  17657. return _await(initReaders(zipEntry), function () {
  17658. return _await(writer.init(), function () {
  17659. var zipWriter = new ZipWriter(writer, options);
  17660. return _await(_exportZip(zipWriter, zipEntry, getTotalSize([zipEntry], "uncompressedSize"), options), function () {
  17661. return _await(zipWriter.close(), function () {
  17662. return writer.getData();
  17663. });
  17664. });
  17665. });
  17666. });
  17667. }
  17668. }, {
  17669. key: "getChildByName",
  17670. value: function getChildByName(name) {
  17671. var children = this.children;
  17672. for (var childIndex = 0; childIndex < children.length; childIndex++) {
  17673. var child = children[childIndex];
  17674. if (child.name == name) {
  17675. return child;
  17676. }
  17677. }
  17678. }
  17679. }]);
  17680. return ZipDirectoryEntry;
  17681. }(ZipEntry);
  17682. var FS = /*#__PURE__*/function () {
  17683. function FS() {
  17684. _classCallCheck(this, FS);
  17685. resetFS(this);
  17686. }
  17687. _createClass(FS, [{
  17688. key: "children",
  17689. get: function get() {
  17690. return this.root.children;
  17691. }
  17692. }, {
  17693. key: "remove",
  17694. value: function remove(entry) {
  17695. detach(entry);
  17696. this.entries[entry.id] = null;
  17697. }
  17698. }, {
  17699. key: "move",
  17700. value: function move(entry, destination) {
  17701. if (entry == this.root) {
  17702. throw new Error("Root directory cannot be moved");
  17703. } else {
  17704. if (destination.directory) {
  17705. if (!destination.isDescendantOf(entry)) {
  17706. if (entry != destination) {
  17707. if (destination.getChildByName(entry.name)) {
  17708. throw new Error("Entry filename already exists");
  17709. }
  17710. detach(entry);
  17711. entry.parent = destination;
  17712. destination.children.push(entry);
  17713. }
  17714. } else {
  17715. throw new Error("Entry is a ancestor of target entry");
  17716. }
  17717. } else {
  17718. throw new Error("Target entry is not a directory");
  17719. }
  17720. }
  17721. }
  17722. }, {
  17723. key: "find",
  17724. value: function find(fullname) {
  17725. var path = fullname.split("/");
  17726. var node = this.root;
  17727. for (var index = 0; node && index < path.length; index++) {
  17728. node = node.getChildByName(path[index]);
  17729. }
  17730. return node;
  17731. }
  17732. }, {
  17733. key: "getById",
  17734. value: function getById(id) {
  17735. return this.entries[id];
  17736. }
  17737. }, {
  17738. key: "getChildByName",
  17739. value: function getChildByName(name) {
  17740. return this.root.getChildByName(name);
  17741. }
  17742. }, {
  17743. key: "addDirectory",
  17744. value: function addDirectory(name) {
  17745. return this.root.addDirectory(name);
  17746. }
  17747. }, {
  17748. key: "addText",
  17749. value: function addText(name, text) {
  17750. return this.root.addText(name, text);
  17751. }
  17752. }, {
  17753. key: "addBlob",
  17754. value: function addBlob(name, blob) {
  17755. return this.root.addBlob(name, blob);
  17756. }
  17757. }, {
  17758. key: "addData64URI",
  17759. value: function addData64URI(name, dataURI) {
  17760. return this.root.addData64URI(name, dataURI);
  17761. }
  17762. }, {
  17763. key: "addHttpContent",
  17764. value: function addHttpContent(name, url, options) {
  17765. return this.root.addHttpContent(name, url, options);
  17766. }
  17767. }, {
  17768. key: "addFileSystemEntry",
  17769. value: function addFileSystemEntry(fileSystemEntry) {
  17770. return this.root.addFileSystemEntry(fileSystemEntry);
  17771. }
  17772. }, {
  17773. key: "addData",
  17774. value: function addData(name, params) {
  17775. return this.root.addData(name, params);
  17776. }
  17777. }, {
  17778. key: "importBlob",
  17779. value: function importBlob(blob, options) {
  17780. try {
  17781. var _this17 = this;
  17782. resetFS(_this17);
  17783. return _await(_awaitIgnored(_this17.root.importBlob(blob, options)));
  17784. } catch (e) {
  17785. return Promise.reject(e);
  17786. }
  17787. }
  17788. }, {
  17789. key: "importData64URI",
  17790. value: function importData64URI(dataURI, options) {
  17791. try {
  17792. var _this19 = this;
  17793. resetFS(_this19);
  17794. return _await(_awaitIgnored(_this19.root.importData64URI(dataURI, options)));
  17795. } catch (e) {
  17796. return Promise.reject(e);
  17797. }
  17798. }
  17799. }, {
  17800. key: "importHttpContent",
  17801. value: function importHttpContent(url, options) {
  17802. try {
  17803. var _this21 = this;
  17804. resetFS(_this21);
  17805. return _await(_awaitIgnored(_this21.root.importHttpContent(url, options)));
  17806. } catch (e) {
  17807. return Promise.reject(e);
  17808. }
  17809. }
  17810. }, {
  17811. key: "exportBlob",
  17812. value: function exportBlob(options) {
  17813. return this.root.exportBlob(options);
  17814. }
  17815. }, {
  17816. key: "exportData64URI",
  17817. value: function exportData64URI(options) {
  17818. return this.root.exportData64URI(options);
  17819. }
  17820. }]);
  17821. return FS;
  17822. }();
  17823. var fs = {
  17824. FS: FS,
  17825. ZipDirectoryEntry: ZipDirectoryEntry,
  17826. ZipFileEntry: ZipFileEntry
  17827. };
  17828. function getTotalSize(entries, propertyName) {
  17829. var size = 0;
  17830. entries.forEach(process);
  17831. return size;
  17832. function process(entry) {
  17833. size += entry[propertyName];
  17834. if (entry.children) {
  17835. entry.children.forEach(process);
  17836. }
  17837. }
  17838. }
  17839. function getZipBlobReader(options) {
  17840. return /*#__PURE__*/function (_Reader) {
  17841. _inherits(_class, _Reader);
  17842. var _super4 = _createSuper(_class);
  17843. function _class(entry) {
  17844. var _this22;
  17845. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  17846. _classCallCheck(this, _class);
  17847. _this22 = _super4.call(this);
  17848. _this22.entry = entry;
  17849. _this22.options = options;
  17850. return _this22;
  17851. }
  17852. _createClass(_class, [{
  17853. key: "init",
  17854. value: function init() {
  17855. try {
  17856. var _this24 = this;
  17857. var zipBlobReader = _this24;
  17858. zipBlobReader.size = zipBlobReader.entry.uncompressedSize;
  17859. return _await(zipBlobReader.entry.getData(new BlobWriter(), Object.assign({}, zipBlobReader.options, options)), function (data) {
  17860. zipBlobReader.data = data;
  17861. zipBlobReader.blobReader = new BlobReader(data);
  17862. });
  17863. } catch (e) {
  17864. return Promise.reject(e);
  17865. }
  17866. }
  17867. }, {
  17868. key: "readUint8Array",
  17869. value: function readUint8Array(index, length) {
  17870. return this.blobReader.readUint8Array(index, length);
  17871. }
  17872. }]);
  17873. return _class;
  17874. }(Reader);
  17875. }
  17876. function detach(entry) {
  17877. var children = entry.parent.children;
  17878. children.forEach(function (child, index) {
  17879. if (child.id == entry.id) {
  17880. children.splice(index, 1);
  17881. }
  17882. });
  17883. }
  17884. function resetFS(fs) {
  17885. fs.entries = [];
  17886. fs.root = new ZipDirectoryEntry(fs);
  17887. }
  17888. function pipe(reader, writer) {
  17889. var copyChunk = _async(function () {
  17890. var chunkIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  17891. var index = chunkIndex * CHUNK_SIZE;
  17892. if (index < reader.size) {
  17893. return _await(reader.readUint8Array(index, Math.min(CHUNK_SIZE, reader.size - index)), function (array) {
  17894. return _await(writer.writeUint8Array(array), function () {
  17895. return copyChunk(chunkIndex + 1);
  17896. });
  17897. });
  17898. } else {
  17899. return writer.getData();
  17900. }
  17901. });
  17902. return copyChunk();
  17903. }
  17904. function addChild(parent, name, params, directory) {
  17905. if (parent.directory) {
  17906. return directory ? new ZipDirectoryEntry(parent.fs, name, params, parent) : new ZipFileEntry(parent.fs, name, params, parent);
  17907. } else {
  17908. throw new Error("Parent entry is not a directory");
  17909. }
  17910. }
  17911. /*
  17912. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  17913. Redistribution and use in source and binary forms, with or without
  17914. modification, are permitted provided that the following conditions are met:
  17915. 1. Redistributions of source code must retain the above copyright notice,
  17916. this list of conditions and the following disclaimer.
  17917. 2. Redistributions in binary form must reproduce the above copyright
  17918. notice, this list of conditions and the following disclaimer in
  17919. the documentation and/or other materials provided with the distribution.
  17920. 3. The names of the authors may not be used to endorse or promote products
  17921. derived from this software without specific prior written permission.
  17922. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  17923. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  17924. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  17925. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  17926. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  17927. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  17928. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  17929. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  17930. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  17931. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  17932. */
  17933. var baseURL;
  17934. try {
  17935. baseURL = (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('zip-fs-full-es5.js', document.baseURI).href));
  17936. } catch (_error) {// ignored
  17937. }
  17938. configure({
  17939. baseURL: baseURL
  17940. });
  17941. d(configure);
  17942. /// <reference types="./index.d.ts" />
  17943. configure({
  17944. Deflate: ZipDeflate,
  17945. Inflate: ZipInflate
  17946. });
  17947. exports.BlobReader = BlobReader;
  17948. exports.BlobWriter = BlobWriter;
  17949. exports.Data64URIReader = Data64URIReader;
  17950. exports.Data64URIWriter = Data64URIWriter;
  17951. exports.ERR_ABORT = ERR_ABORT;
  17952. exports.ERR_BAD_FORMAT = ERR_BAD_FORMAT;
  17953. exports.ERR_CENTRAL_DIRECTORY_NOT_FOUND = ERR_CENTRAL_DIRECTORY_NOT_FOUND;
  17954. exports.ERR_DUPLICATED_NAME = ERR_DUPLICATED_NAME;
  17955. exports.ERR_ENCRYPTED = ERR_ENCRYPTED;
  17956. exports.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND;
  17957. exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
  17958. exports.ERR_EOCDR_ZIP64_NOT_FOUND = ERR_EOCDR_ZIP64_NOT_FOUND;
  17959. exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
  17960. exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
  17961. exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
  17962. exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
  17963. exports.ERR_INVALID_ENTRY_COMMENT = ERR_INVALID_ENTRY_COMMENT;
  17964. exports.ERR_INVALID_ENTRY_NAME = ERR_INVALID_ENTRY_NAME;
  17965. exports.ERR_INVALID_EXTRAFIELD_DATA = ERR_INVALID_EXTRAFIELD_DATA;
  17966. exports.ERR_INVALID_EXTRAFIELD_TYPE = ERR_INVALID_EXTRAFIELD_TYPE;
  17967. exports.ERR_INVALID_PASSWORD = ERR_INVALID_PASSWORD;
  17968. exports.ERR_INVALID_SIGNATURE = ERR_INVALID_SIGNATURE;
  17969. exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
  17970. exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
  17971. exports.ERR_NOT_SEEKABLE_READER = ERR_NOT_SEEKABLE_READER;
  17972. exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION;
  17973. exports.ERR_UNSUPPORTED_ENCRYPTION = ERR_UNSUPPORTED_ENCRYPTION;
  17974. exports.ERR_UNSUPPORTED_FORMAT = ERR_UNSUPPORTED_FORMAT;
  17975. exports.HttpRangeReader = HttpRangeReader;
  17976. exports.HttpReader = HttpReader;
  17977. exports.ReadableStreamReader = ReadableStreamReader;
  17978. exports.Reader = Reader;
  17979. exports.TextReader = TextReader;
  17980. exports.TextWriter = TextWriter;
  17981. exports.Uint8ArrayReader = Uint8ArrayReader;
  17982. exports.Uint8ArrayWriter = Uint8ArrayWriter;
  17983. exports.WritableStreamWriter = WritableStreamWriter;
  17984. exports.Writer = Writer;
  17985. exports.ZipReader = ZipReader;
  17986. exports.ZipWriter = ZipWriter;
  17987. exports.configure = configure;
  17988. exports.fs = fs;
  17989. exports.getMimeType = getMimeType;
  17990. exports.initShimAsyncCodec = streamCodecShim;
  17991. exports.terminateWorkers = terminateWorkers;
  17992. Object.defineProperty(exports, '__esModule', { value: true });
  17993. }));