zip-es5.js 667 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841
  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. var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
  7. var check = function (it) {
  8. return it && it.Math == Math && it;
  9. };
  10. // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
  11. var global$F =
  12. // eslint-disable-next-line es-x/no-global-this -- safe
  13. check(typeof globalThis == 'object' && globalThis) ||
  14. check(typeof window == 'object' && window) ||
  15. // eslint-disable-next-line no-restricted-globals -- safe
  16. check(typeof self == 'object' && self) ||
  17. check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
  18. // eslint-disable-next-line no-new-func -- fallback
  19. (function () { return this; })() || Function('return this')();
  20. var objectGetOwnPropertyDescriptor = {};
  21. var fails$H = function (exec) {
  22. try {
  23. return !!exec();
  24. } catch (error) {
  25. return true;
  26. }
  27. };
  28. var fails$G = fails$H;
  29. // Detect IE8's incomplete defineProperty implementation
  30. var descriptors = !fails$G(function () {
  31. // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
  32. return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
  33. });
  34. var fails$F = fails$H;
  35. var functionBindNative = !fails$F(function () {
  36. // eslint-disable-next-line es-x/no-function-prototype-bind -- safe
  37. var test = (function () { /* empty */ }).bind();
  38. // eslint-disable-next-line no-prototype-builtins -- safe
  39. return typeof test != 'function' || test.hasOwnProperty('prototype');
  40. });
  41. var NATIVE_BIND$3 = functionBindNative;
  42. var call$r = Function.prototype.call;
  43. var functionCall = NATIVE_BIND$3 ? call$r.bind(call$r) : function () {
  44. return call$r.apply(call$r, arguments);
  45. };
  46. var objectPropertyIsEnumerable = {};
  47. var $propertyIsEnumerable$2 = {}.propertyIsEnumerable;
  48. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  49. var getOwnPropertyDescriptor$6 = Object.getOwnPropertyDescriptor;
  50. // Nashorn ~ JDK8 bug
  51. var NASHORN_BUG = getOwnPropertyDescriptor$6 && !$propertyIsEnumerable$2.call({ 1: 2 }, 1);
  52. // `Object.prototype.propertyIsEnumerable` method implementation
  53. // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
  54. objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  55. var descriptor = getOwnPropertyDescriptor$6(this, V);
  56. return !!descriptor && descriptor.enumerable;
  57. } : $propertyIsEnumerable$2;
  58. var createPropertyDescriptor$7 = function (bitmap, value) {
  59. return {
  60. enumerable: !(bitmap & 1),
  61. configurable: !(bitmap & 2),
  62. writable: !(bitmap & 4),
  63. value: value
  64. };
  65. };
  66. var NATIVE_BIND$2 = functionBindNative;
  67. var FunctionPrototype$3 = Function.prototype;
  68. var bind$b = FunctionPrototype$3.bind;
  69. var call$q = FunctionPrototype$3.call;
  70. var uncurryThis$I = NATIVE_BIND$2 && bind$b.bind(call$q, call$q);
  71. var functionUncurryThis = NATIVE_BIND$2 ? function (fn) {
  72. return fn && uncurryThis$I(fn);
  73. } : function (fn) {
  74. return fn && function () {
  75. return call$q.apply(fn, arguments);
  76. };
  77. };
  78. var uncurryThis$H = functionUncurryThis;
  79. var toString$d = uncurryThis$H({}.toString);
  80. var stringSlice$9 = uncurryThis$H(''.slice);
  81. var classofRaw$1 = function (it) {
  82. return stringSlice$9(toString$d(it), 8, -1);
  83. };
  84. var uncurryThis$G = functionUncurryThis;
  85. var fails$E = fails$H;
  86. var classof$f = classofRaw$1;
  87. var $Object$4 = Object;
  88. var split$3 = uncurryThis$G(''.split);
  89. // fallback for non-array-like ES3 and non-enumerable old V8 strings
  90. var indexedObject = fails$E(function () {
  91. // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
  92. // eslint-disable-next-line no-prototype-builtins -- safe
  93. return !$Object$4('z').propertyIsEnumerable(0);
  94. }) ? function (it) {
  95. return classof$f(it) == 'String' ? split$3(it, '') : $Object$4(it);
  96. } : $Object$4;
  97. var $TypeError$h = TypeError;
  98. // `RequireObjectCoercible` abstract operation
  99. // https://tc39.es/ecma262/#sec-requireobjectcoercible
  100. var requireObjectCoercible$8 = function (it) {
  101. if (it == undefined) throw $TypeError$h("Can't call method on " + it);
  102. return it;
  103. };
  104. // toObject with fallback for non-array-like ES3 strings
  105. var IndexedObject$3 = indexedObject;
  106. var requireObjectCoercible$7 = requireObjectCoercible$8;
  107. var toIndexedObject$b = function (it) {
  108. return IndexedObject$3(requireObjectCoercible$7(it));
  109. };
  110. // `IsCallable` abstract operation
  111. // https://tc39.es/ecma262/#sec-iscallable
  112. var isCallable$s = function (argument) {
  113. return typeof argument == 'function';
  114. };
  115. var isCallable$r = isCallable$s;
  116. var isObject$k = function (it) {
  117. return typeof it == 'object' ? it !== null : isCallable$r(it);
  118. };
  119. var global$E = global$F;
  120. var isCallable$q = isCallable$s;
  121. var aFunction = function (argument) {
  122. return isCallable$q(argument) ? argument : undefined;
  123. };
  124. var getBuiltIn$b = function (namespace, method) {
  125. return arguments.length < 2 ? aFunction(global$E[namespace]) : global$E[namespace] && global$E[namespace][method];
  126. };
  127. var uncurryThis$F = functionUncurryThis;
  128. var objectIsPrototypeOf = uncurryThis$F({}.isPrototypeOf);
  129. var getBuiltIn$a = getBuiltIn$b;
  130. var engineUserAgent = getBuiltIn$a('navigator', 'userAgent') || '';
  131. var global$D = global$F;
  132. var userAgent$5 = engineUserAgent;
  133. var process$3 = global$D.process;
  134. var Deno$1 = global$D.Deno;
  135. var versions = process$3 && process$3.versions || Deno$1 && Deno$1.version;
  136. var v8 = versions && versions.v8;
  137. var match, version;
  138. if (v8) {
  139. match = v8.split('.');
  140. // in old Chrome, versions of V8 isn't V8 = Chrome / 10
  141. // but their correct versions are not interesting for us
  142. version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
  143. }
  144. // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`
  145. // so check `userAgent` even if `.v8` exists, but 0
  146. if (!version && userAgent$5) {
  147. match = userAgent$5.match(/Edge\/(\d+)/);
  148. if (!match || match[1] >= 74) {
  149. match = userAgent$5.match(/Chrome\/(\d+)/);
  150. if (match) version = +match[1];
  151. }
  152. }
  153. var engineV8Version = version;
  154. /* eslint-disable es-x/no-symbol -- required for testing */
  155. var V8_VERSION$3 = engineV8Version;
  156. var fails$D = fails$H;
  157. // eslint-disable-next-line es-x/no-object-getownpropertysymbols -- required for testing
  158. var nativeSymbol = !!Object.getOwnPropertySymbols && !fails$D(function () {
  159. var symbol = Symbol();
  160. // Chrome 38 Symbol has incorrect toString conversion
  161. // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances
  162. return !String(symbol) || !(Object(symbol) instanceof Symbol) ||
  163. // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
  164. !Symbol.sham && V8_VERSION$3 && V8_VERSION$3 < 41;
  165. });
  166. /* eslint-disable es-x/no-symbol -- required for testing */
  167. var NATIVE_SYMBOL$6 = nativeSymbol;
  168. var useSymbolAsUid = NATIVE_SYMBOL$6
  169. && !Symbol.sham
  170. && typeof Symbol.iterator == 'symbol';
  171. var getBuiltIn$9 = getBuiltIn$b;
  172. var isCallable$p = isCallable$s;
  173. var isPrototypeOf$7 = objectIsPrototypeOf;
  174. var USE_SYMBOL_AS_UID$1 = useSymbolAsUid;
  175. var $Object$3 = Object;
  176. var isSymbol$6 = USE_SYMBOL_AS_UID$1 ? function (it) {
  177. return typeof it == 'symbol';
  178. } : function (it) {
  179. var $Symbol = getBuiltIn$9('Symbol');
  180. return isCallable$p($Symbol) && isPrototypeOf$7($Symbol.prototype, $Object$3(it));
  181. };
  182. var $String$3 = String;
  183. var tryToString$7 = function (argument) {
  184. try {
  185. return $String$3(argument);
  186. } catch (error) {
  187. return 'Object';
  188. }
  189. };
  190. var isCallable$o = isCallable$s;
  191. var tryToString$6 = tryToString$7;
  192. var $TypeError$g = TypeError;
  193. // `Assert: IsCallable(argument) is true`
  194. var aCallable$9 = function (argument) {
  195. if (isCallable$o(argument)) return argument;
  196. throw $TypeError$g(tryToString$6(argument) + ' is not a function');
  197. };
  198. var aCallable$8 = aCallable$9;
  199. // `GetMethod` abstract operation
  200. // https://tc39.es/ecma262/#sec-getmethod
  201. var getMethod$5 = function (V, P) {
  202. var func = V[P];
  203. return func == null ? undefined : aCallable$8(func);
  204. };
  205. var call$p = functionCall;
  206. var isCallable$n = isCallable$s;
  207. var isObject$j = isObject$k;
  208. var $TypeError$f = TypeError;
  209. // `OrdinaryToPrimitive` abstract operation
  210. // https://tc39.es/ecma262/#sec-ordinarytoprimitive
  211. var ordinaryToPrimitive$1 = function (input, pref) {
  212. var fn, val;
  213. if (pref === 'string' && isCallable$n(fn = input.toString) && !isObject$j(val = call$p(fn, input))) return val;
  214. if (isCallable$n(fn = input.valueOf) && !isObject$j(val = call$p(fn, input))) return val;
  215. if (pref !== 'string' && isCallable$n(fn = input.toString) && !isObject$j(val = call$p(fn, input))) return val;
  216. throw $TypeError$f("Can't convert object to primitive value");
  217. };
  218. var shared$7 = {exports: {}};
  219. var isPure = false;
  220. var global$C = global$F;
  221. // eslint-disable-next-line es-x/no-object-defineproperty -- safe
  222. var defineProperty$e = Object.defineProperty;
  223. var defineGlobalProperty$3 = function (key, value) {
  224. try {
  225. defineProperty$e(global$C, key, { value: value, configurable: true, writable: true });
  226. } catch (error) {
  227. global$C[key] = value;
  228. } return value;
  229. };
  230. var global$B = global$F;
  231. var defineGlobalProperty$2 = defineGlobalProperty$3;
  232. var SHARED = '__core-js_shared__';
  233. var store$3 = global$B[SHARED] || defineGlobalProperty$2(SHARED, {});
  234. var sharedStore = store$3;
  235. var store$2 = sharedStore;
  236. (shared$7.exports = function (key, value) {
  237. return store$2[key] || (store$2[key] = value !== undefined ? value : {});
  238. })('versions', []).push({
  239. version: '3.23.2',
  240. mode: 'global',
  241. copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',
  242. license: 'https://github.com/zloirock/core-js/blob/v3.23.2/LICENSE',
  243. source: 'https://github.com/zloirock/core-js'
  244. });
  245. var requireObjectCoercible$6 = requireObjectCoercible$8;
  246. var $Object$2 = Object;
  247. // `ToObject` abstract operation
  248. // https://tc39.es/ecma262/#sec-toobject
  249. var toObject$d = function (argument) {
  250. return $Object$2(requireObjectCoercible$6(argument));
  251. };
  252. var uncurryThis$E = functionUncurryThis;
  253. var toObject$c = toObject$d;
  254. var hasOwnProperty = uncurryThis$E({}.hasOwnProperty);
  255. // `HasOwnProperty` abstract operation
  256. // https://tc39.es/ecma262/#sec-hasownproperty
  257. // eslint-disable-next-line es-x/no-object-hasown -- safe
  258. var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) {
  259. return hasOwnProperty(toObject$c(it), key);
  260. };
  261. var uncurryThis$D = functionUncurryThis;
  262. var id$1 = 0;
  263. var postfix = Math.random();
  264. var toString$c = uncurryThis$D(1.0.toString);
  265. var uid$5 = function (key) {
  266. return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$c(++id$1 + postfix, 36);
  267. };
  268. var global$A = global$F;
  269. var shared$6 = shared$7.exports;
  270. var hasOwn$k = hasOwnProperty_1;
  271. var uid$4 = uid$5;
  272. var NATIVE_SYMBOL$5 = nativeSymbol;
  273. var USE_SYMBOL_AS_UID = useSymbolAsUid;
  274. var WellKnownSymbolsStore$1 = shared$6('wks');
  275. var Symbol$1 = global$A.Symbol;
  276. var symbolFor = Symbol$1 && Symbol$1['for'];
  277. var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid$4;
  278. var wellKnownSymbol$t = function (name) {
  279. if (!hasOwn$k(WellKnownSymbolsStore$1, name) || !(NATIVE_SYMBOL$5 || typeof WellKnownSymbolsStore$1[name] == 'string')) {
  280. var description = 'Symbol.' + name;
  281. if (NATIVE_SYMBOL$5 && hasOwn$k(Symbol$1, name)) {
  282. WellKnownSymbolsStore$1[name] = Symbol$1[name];
  283. } else if (USE_SYMBOL_AS_UID && symbolFor) {
  284. WellKnownSymbolsStore$1[name] = symbolFor(description);
  285. } else {
  286. WellKnownSymbolsStore$1[name] = createWellKnownSymbol(description);
  287. }
  288. } return WellKnownSymbolsStore$1[name];
  289. };
  290. var call$o = functionCall;
  291. var isObject$i = isObject$k;
  292. var isSymbol$5 = isSymbol$6;
  293. var getMethod$4 = getMethod$5;
  294. var ordinaryToPrimitive = ordinaryToPrimitive$1;
  295. var wellKnownSymbol$s = wellKnownSymbol$t;
  296. var $TypeError$e = TypeError;
  297. var TO_PRIMITIVE = wellKnownSymbol$s('toPrimitive');
  298. // `ToPrimitive` abstract operation
  299. // https://tc39.es/ecma262/#sec-toprimitive
  300. var toPrimitive$3 = function (input, pref) {
  301. if (!isObject$i(input) || isSymbol$5(input)) return input;
  302. var exoticToPrim = getMethod$4(input, TO_PRIMITIVE);
  303. var result;
  304. if (exoticToPrim) {
  305. if (pref === undefined) pref = 'default';
  306. result = call$o(exoticToPrim, input, pref);
  307. if (!isObject$i(result) || isSymbol$5(result)) return result;
  308. throw $TypeError$e("Can't convert object to primitive value");
  309. }
  310. if (pref === undefined) pref = 'number';
  311. return ordinaryToPrimitive(input, pref);
  312. };
  313. var toPrimitive$2 = toPrimitive$3;
  314. var isSymbol$4 = isSymbol$6;
  315. // `ToPropertyKey` abstract operation
  316. // https://tc39.es/ecma262/#sec-topropertykey
  317. var toPropertyKey$5 = function (argument) {
  318. var key = toPrimitive$2(argument, 'string');
  319. return isSymbol$4(key) ? key : key + '';
  320. };
  321. var global$z = global$F;
  322. var isObject$h = isObject$k;
  323. var document$3 = global$z.document;
  324. // typeof document.createElement is 'object' in old IE
  325. var EXISTS$1 = isObject$h(document$3) && isObject$h(document$3.createElement);
  326. var documentCreateElement$2 = function (it) {
  327. return EXISTS$1 ? document$3.createElement(it) : {};
  328. };
  329. var DESCRIPTORS$l = descriptors;
  330. var fails$C = fails$H;
  331. var createElement$1 = documentCreateElement$2;
  332. // Thanks to IE8 for its funny defineProperty
  333. var ie8DomDefine = !DESCRIPTORS$l && !fails$C(function () {
  334. // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
  335. return Object.defineProperty(createElement$1('div'), 'a', {
  336. get: function () { return 7; }
  337. }).a != 7;
  338. });
  339. var DESCRIPTORS$k = descriptors;
  340. var call$n = functionCall;
  341. var propertyIsEnumerableModule$2 = objectPropertyIsEnumerable;
  342. var createPropertyDescriptor$6 = createPropertyDescriptor$7;
  343. var toIndexedObject$a = toIndexedObject$b;
  344. var toPropertyKey$4 = toPropertyKey$5;
  345. var hasOwn$j = hasOwnProperty_1;
  346. var IE8_DOM_DEFINE$1 = ie8DomDefine;
  347. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  348. var $getOwnPropertyDescriptor$2 = Object.getOwnPropertyDescriptor;
  349. // `Object.getOwnPropertyDescriptor` method
  350. // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
  351. objectGetOwnPropertyDescriptor.f = DESCRIPTORS$k ? $getOwnPropertyDescriptor$2 : function getOwnPropertyDescriptor(O, P) {
  352. O = toIndexedObject$a(O);
  353. P = toPropertyKey$4(P);
  354. if (IE8_DOM_DEFINE$1) try {
  355. return $getOwnPropertyDescriptor$2(O, P);
  356. } catch (error) { /* empty */ }
  357. if (hasOwn$j(O, P)) return createPropertyDescriptor$6(!call$n(propertyIsEnumerableModule$2.f, O, P), O[P]);
  358. };
  359. var objectDefineProperty = {};
  360. var DESCRIPTORS$j = descriptors;
  361. var fails$B = fails$H;
  362. // V8 ~ Chrome 36-
  363. // https://bugs.chromium.org/p/v8/issues/detail?id=3334
  364. var v8PrototypeDefineBug = DESCRIPTORS$j && fails$B(function () {
  365. // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
  366. return Object.defineProperty(function () { /* empty */ }, 'prototype', {
  367. value: 42,
  368. writable: false
  369. }).prototype != 42;
  370. });
  371. var isObject$g = isObject$k;
  372. var $String$2 = String;
  373. var $TypeError$d = TypeError;
  374. // `Assert: Type(argument) is Object`
  375. var anObject$i = function (argument) {
  376. if (isObject$g(argument)) return argument;
  377. throw $TypeError$d($String$2(argument) + ' is not an object');
  378. };
  379. var DESCRIPTORS$i = descriptors;
  380. var IE8_DOM_DEFINE = ie8DomDefine;
  381. var V8_PROTOTYPE_DEFINE_BUG$1 = v8PrototypeDefineBug;
  382. var anObject$h = anObject$i;
  383. var toPropertyKey$3 = toPropertyKey$5;
  384. var $TypeError$c = TypeError;
  385. // eslint-disable-next-line es-x/no-object-defineproperty -- safe
  386. var $defineProperty$1 = Object.defineProperty;
  387. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  388. var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor;
  389. var ENUMERABLE = 'enumerable';
  390. var CONFIGURABLE$1 = 'configurable';
  391. var WRITABLE = 'writable';
  392. // `Object.defineProperty` method
  393. // https://tc39.es/ecma262/#sec-object.defineproperty
  394. objectDefineProperty.f = DESCRIPTORS$i ? V8_PROTOTYPE_DEFINE_BUG$1 ? function defineProperty(O, P, Attributes) {
  395. anObject$h(O);
  396. P = toPropertyKey$3(P);
  397. anObject$h(Attributes);
  398. if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
  399. var current = $getOwnPropertyDescriptor$1(O, P);
  400. if (current && current[WRITABLE]) {
  401. O[P] = Attributes.value;
  402. Attributes = {
  403. configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1],
  404. enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
  405. writable: false
  406. };
  407. }
  408. } return $defineProperty$1(O, P, Attributes);
  409. } : $defineProperty$1 : function defineProperty(O, P, Attributes) {
  410. anObject$h(O);
  411. P = toPropertyKey$3(P);
  412. anObject$h(Attributes);
  413. if (IE8_DOM_DEFINE) try {
  414. return $defineProperty$1(O, P, Attributes);
  415. } catch (error) { /* empty */ }
  416. if ('get' in Attributes || 'set' in Attributes) throw $TypeError$c('Accessors not supported');
  417. if ('value' in Attributes) O[P] = Attributes.value;
  418. return O;
  419. };
  420. var DESCRIPTORS$h = descriptors;
  421. var definePropertyModule$7 = objectDefineProperty;
  422. var createPropertyDescriptor$5 = createPropertyDescriptor$7;
  423. var createNonEnumerableProperty$9 = DESCRIPTORS$h ? function (object, key, value) {
  424. return definePropertyModule$7.f(object, key, createPropertyDescriptor$5(1, value));
  425. } : function (object, key, value) {
  426. object[key] = value;
  427. return object;
  428. };
  429. var makeBuiltIn$3 = {exports: {}};
  430. var DESCRIPTORS$g = descriptors;
  431. var hasOwn$i = hasOwnProperty_1;
  432. var FunctionPrototype$2 = Function.prototype;
  433. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  434. var getDescriptor = DESCRIPTORS$g && Object.getOwnPropertyDescriptor;
  435. var EXISTS = hasOwn$i(FunctionPrototype$2, 'name');
  436. // additional protection from minified / mangled / dropped function names
  437. var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';
  438. var CONFIGURABLE = EXISTS && (!DESCRIPTORS$g || (DESCRIPTORS$g && getDescriptor(FunctionPrototype$2, 'name').configurable));
  439. var functionName = {
  440. EXISTS: EXISTS,
  441. PROPER: PROPER,
  442. CONFIGURABLE: CONFIGURABLE
  443. };
  444. var uncurryThis$C = functionUncurryThis;
  445. var isCallable$m = isCallable$s;
  446. var store$1 = sharedStore;
  447. var functionToString$1 = uncurryThis$C(Function.toString);
  448. // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper
  449. if (!isCallable$m(store$1.inspectSource)) {
  450. store$1.inspectSource = function (it) {
  451. return functionToString$1(it);
  452. };
  453. }
  454. var inspectSource$4 = store$1.inspectSource;
  455. var global$y = global$F;
  456. var isCallable$l = isCallable$s;
  457. var inspectSource$3 = inspectSource$4;
  458. var WeakMap$1 = global$y.WeakMap;
  459. var nativeWeakMap = isCallable$l(WeakMap$1) && /native code/.test(inspectSource$3(WeakMap$1));
  460. var shared$5 = shared$7.exports;
  461. var uid$3 = uid$5;
  462. var keys$2 = shared$5('keys');
  463. var sharedKey$4 = function (key) {
  464. return keys$2[key] || (keys$2[key] = uid$3(key));
  465. };
  466. var hiddenKeys$6 = {};
  467. var NATIVE_WEAK_MAP = nativeWeakMap;
  468. var global$x = global$F;
  469. var uncurryThis$B = functionUncurryThis;
  470. var isObject$f = isObject$k;
  471. var createNonEnumerableProperty$8 = createNonEnumerableProperty$9;
  472. var hasOwn$h = hasOwnProperty_1;
  473. var shared$4 = sharedStore;
  474. var sharedKey$3 = sharedKey$4;
  475. var hiddenKeys$5 = hiddenKeys$6;
  476. var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
  477. var TypeError$7 = global$x.TypeError;
  478. var WeakMap = global$x.WeakMap;
  479. var set$2, get$1, has;
  480. var enforce = function (it) {
  481. return has(it) ? get$1(it) : set$2(it, {});
  482. };
  483. var getterFor = function (TYPE) {
  484. return function (it) {
  485. var state;
  486. if (!isObject$f(it) || (state = get$1(it)).type !== TYPE) {
  487. throw TypeError$7('Incompatible receiver, ' + TYPE + ' required');
  488. } return state;
  489. };
  490. };
  491. if (NATIVE_WEAK_MAP || shared$4.state) {
  492. var store = shared$4.state || (shared$4.state = new WeakMap());
  493. var wmget = uncurryThis$B(store.get);
  494. var wmhas = uncurryThis$B(store.has);
  495. var wmset = uncurryThis$B(store.set);
  496. set$2 = function (it, metadata) {
  497. if (wmhas(store, it)) throw new TypeError$7(OBJECT_ALREADY_INITIALIZED);
  498. metadata.facade = it;
  499. wmset(store, it, metadata);
  500. return metadata;
  501. };
  502. get$1 = function (it) {
  503. return wmget(store, it) || {};
  504. };
  505. has = function (it) {
  506. return wmhas(store, it);
  507. };
  508. } else {
  509. var STATE = sharedKey$3('state');
  510. hiddenKeys$5[STATE] = true;
  511. set$2 = function (it, metadata) {
  512. if (hasOwn$h(it, STATE)) throw new TypeError$7(OBJECT_ALREADY_INITIALIZED);
  513. metadata.facade = it;
  514. createNonEnumerableProperty$8(it, STATE, metadata);
  515. return metadata;
  516. };
  517. get$1 = function (it) {
  518. return hasOwn$h(it, STATE) ? it[STATE] : {};
  519. };
  520. has = function (it) {
  521. return hasOwn$h(it, STATE);
  522. };
  523. }
  524. var internalState = {
  525. set: set$2,
  526. get: get$1,
  527. has: has,
  528. enforce: enforce,
  529. getterFor: getterFor
  530. };
  531. var fails$A = fails$H;
  532. var isCallable$k = isCallable$s;
  533. var hasOwn$g = hasOwnProperty_1;
  534. var DESCRIPTORS$f = descriptors;
  535. var CONFIGURABLE_FUNCTION_NAME$2 = functionName.CONFIGURABLE;
  536. var inspectSource$2 = inspectSource$4;
  537. var InternalStateModule$a = internalState;
  538. var enforceInternalState$2 = InternalStateModule$a.enforce;
  539. var getInternalState$7 = InternalStateModule$a.get;
  540. // eslint-disable-next-line es-x/no-object-defineproperty -- safe
  541. var defineProperty$d = Object.defineProperty;
  542. var CONFIGURABLE_LENGTH = DESCRIPTORS$f && !fails$A(function () {
  543. return defineProperty$d(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;
  544. });
  545. var TEMPLATE = String(String).split('String');
  546. var makeBuiltIn$2 = makeBuiltIn$3.exports = function (value, name, options) {
  547. if (String(name).slice(0, 7) === 'Symbol(') {
  548. name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']';
  549. }
  550. if (options && options.getter) name = 'get ' + name;
  551. if (options && options.setter) name = 'set ' + name;
  552. if (!hasOwn$g(value, 'name') || (CONFIGURABLE_FUNCTION_NAME$2 && value.name !== name)) {
  553. defineProperty$d(value, 'name', { value: name, configurable: true });
  554. }
  555. if (CONFIGURABLE_LENGTH && options && hasOwn$g(options, 'arity') && value.length !== options.arity) {
  556. defineProperty$d(value, 'length', { value: options.arity });
  557. }
  558. try {
  559. if (options && hasOwn$g(options, 'constructor') && options.constructor) {
  560. if (DESCRIPTORS$f) defineProperty$d(value, 'prototype', { writable: false });
  561. // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable
  562. } else if (value.prototype) value.prototype = undefined;
  563. } catch (error) { /* empty */ }
  564. var state = enforceInternalState$2(value);
  565. if (!hasOwn$g(state, 'source')) {
  566. state.source = TEMPLATE.join(typeof name == 'string' ? name : '');
  567. } return value;
  568. };
  569. // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
  570. // eslint-disable-next-line no-extend-native -- required
  571. Function.prototype.toString = makeBuiltIn$2(function toString() {
  572. return isCallable$k(this) && getInternalState$7(this).source || inspectSource$2(this);
  573. }, 'toString');
  574. var isCallable$j = isCallable$s;
  575. var definePropertyModule$6 = objectDefineProperty;
  576. var makeBuiltIn$1 = makeBuiltIn$3.exports;
  577. var defineGlobalProperty$1 = defineGlobalProperty$3;
  578. var defineBuiltIn$f = function (O, key, value, options) {
  579. if (!options) options = {};
  580. var simple = options.enumerable;
  581. var name = options.name !== undefined ? options.name : key;
  582. if (isCallable$j(value)) makeBuiltIn$1(value, name, options);
  583. if (options.global) {
  584. if (simple) O[key] = value;
  585. else defineGlobalProperty$1(key, value);
  586. } else {
  587. if (!options.unsafe) delete O[key];
  588. else if (O[key]) simple = true;
  589. if (simple) O[key] = value;
  590. else definePropertyModule$6.f(O, key, {
  591. value: value,
  592. enumerable: false,
  593. configurable: !options.nonConfigurable,
  594. writable: !options.nonWritable
  595. });
  596. } return O;
  597. };
  598. var objectGetOwnPropertyNames = {};
  599. var ceil = Math.ceil;
  600. var floor$7 = Math.floor;
  601. // `Math.trunc` method
  602. // https://tc39.es/ecma262/#sec-math.trunc
  603. // eslint-disable-next-line es-x/no-math-trunc -- safe
  604. var mathTrunc = Math.trunc || function trunc(x) {
  605. var n = +x;
  606. return (n > 0 ? floor$7 : ceil)(n);
  607. };
  608. var trunc = mathTrunc;
  609. // `ToIntegerOrInfinity` abstract operation
  610. // https://tc39.es/ecma262/#sec-tointegerorinfinity
  611. var toIntegerOrInfinity$9 = function (argument) {
  612. var number = +argument;
  613. // eslint-disable-next-line no-self-compare -- NaN check
  614. return number !== number || number === 0 ? 0 : trunc(number);
  615. };
  616. var toIntegerOrInfinity$8 = toIntegerOrInfinity$9;
  617. var max$4 = Math.max;
  618. var min$8 = Math.min;
  619. // Helper for a popular repeating case of the spec:
  620. // Let integer be ? ToInteger(index).
  621. // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
  622. var toAbsoluteIndex$8 = function (index, length) {
  623. var integer = toIntegerOrInfinity$8(index);
  624. return integer < 0 ? max$4(integer + length, 0) : min$8(integer, length);
  625. };
  626. var toIntegerOrInfinity$7 = toIntegerOrInfinity$9;
  627. var min$7 = Math.min;
  628. // `ToLength` abstract operation
  629. // https://tc39.es/ecma262/#sec-tolength
  630. var toLength$a = function (argument) {
  631. return argument > 0 ? min$7(toIntegerOrInfinity$7(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
  632. };
  633. var toLength$9 = toLength$a;
  634. // `LengthOfArrayLike` abstract operation
  635. // https://tc39.es/ecma262/#sec-lengthofarraylike
  636. var lengthOfArrayLike$f = function (obj) {
  637. return toLength$9(obj.length);
  638. };
  639. var toIndexedObject$9 = toIndexedObject$b;
  640. var toAbsoluteIndex$7 = toAbsoluteIndex$8;
  641. var lengthOfArrayLike$e = lengthOfArrayLike$f;
  642. // `Array.prototype.{ indexOf, includes }` methods implementation
  643. var createMethod$5 = function (IS_INCLUDES) {
  644. return function ($this, el, fromIndex) {
  645. var O = toIndexedObject$9($this);
  646. var length = lengthOfArrayLike$e(O);
  647. var index = toAbsoluteIndex$7(fromIndex, length);
  648. var value;
  649. // Array#includes uses SameValueZero equality algorithm
  650. // eslint-disable-next-line no-self-compare -- NaN check
  651. if (IS_INCLUDES && el != el) while (length > index) {
  652. value = O[index++];
  653. // eslint-disable-next-line no-self-compare -- NaN check
  654. if (value != value) return true;
  655. // Array#indexOf ignores holes, Array#includes - not
  656. } else for (;length > index; index++) {
  657. if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
  658. } return !IS_INCLUDES && -1;
  659. };
  660. };
  661. var arrayIncludes = {
  662. // `Array.prototype.includes` method
  663. // https://tc39.es/ecma262/#sec-array.prototype.includes
  664. includes: createMethod$5(true),
  665. // `Array.prototype.indexOf` method
  666. // https://tc39.es/ecma262/#sec-array.prototype.indexof
  667. indexOf: createMethod$5(false)
  668. };
  669. var uncurryThis$A = functionUncurryThis;
  670. var hasOwn$f = hasOwnProperty_1;
  671. var toIndexedObject$8 = toIndexedObject$b;
  672. var indexOf$1 = arrayIncludes.indexOf;
  673. var hiddenKeys$4 = hiddenKeys$6;
  674. var push$8 = uncurryThis$A([].push);
  675. var objectKeysInternal = function (object, names) {
  676. var O = toIndexedObject$8(object);
  677. var i = 0;
  678. var result = [];
  679. var key;
  680. for (key in O) !hasOwn$f(hiddenKeys$4, key) && hasOwn$f(O, key) && push$8(result, key);
  681. // Don't enum bug & hidden keys
  682. while (names.length > i) if (hasOwn$f(O, key = names[i++])) {
  683. ~indexOf$1(result, key) || push$8(result, key);
  684. }
  685. return result;
  686. };
  687. // IE8- don't enum bug keys
  688. var enumBugKeys$3 = [
  689. 'constructor',
  690. 'hasOwnProperty',
  691. 'isPrototypeOf',
  692. 'propertyIsEnumerable',
  693. 'toLocaleString',
  694. 'toString',
  695. 'valueOf'
  696. ];
  697. var internalObjectKeys$1 = objectKeysInternal;
  698. var enumBugKeys$2 = enumBugKeys$3;
  699. var hiddenKeys$3 = enumBugKeys$2.concat('length', 'prototype');
  700. // `Object.getOwnPropertyNames` method
  701. // https://tc39.es/ecma262/#sec-object.getownpropertynames
  702. // eslint-disable-next-line es-x/no-object-getownpropertynames -- safe
  703. objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  704. return internalObjectKeys$1(O, hiddenKeys$3);
  705. };
  706. var objectGetOwnPropertySymbols = {};
  707. // eslint-disable-next-line es-x/no-object-getownpropertysymbols -- safe
  708. objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols;
  709. var getBuiltIn$8 = getBuiltIn$b;
  710. var uncurryThis$z = functionUncurryThis;
  711. var getOwnPropertyNamesModule$2 = objectGetOwnPropertyNames;
  712. var getOwnPropertySymbolsModule$3 = objectGetOwnPropertySymbols;
  713. var anObject$g = anObject$i;
  714. var concat$3 = uncurryThis$z([].concat);
  715. // all object keys, includes non-enumerable and symbols
  716. var ownKeys$1 = getBuiltIn$8('Reflect', 'ownKeys') || function ownKeys(it) {
  717. var keys = getOwnPropertyNamesModule$2.f(anObject$g(it));
  718. var getOwnPropertySymbols = getOwnPropertySymbolsModule$3.f;
  719. return getOwnPropertySymbols ? concat$3(keys, getOwnPropertySymbols(it)) : keys;
  720. };
  721. var hasOwn$e = hasOwnProperty_1;
  722. var ownKeys = ownKeys$1;
  723. var getOwnPropertyDescriptorModule$2 = objectGetOwnPropertyDescriptor;
  724. var definePropertyModule$5 = objectDefineProperty;
  725. var copyConstructorProperties$2 = function (target, source, exceptions) {
  726. var keys = ownKeys(source);
  727. var defineProperty = definePropertyModule$5.f;
  728. var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule$2.f;
  729. for (var i = 0; i < keys.length; i++) {
  730. var key = keys[i];
  731. if (!hasOwn$e(target, key) && !(exceptions && hasOwn$e(exceptions, key))) {
  732. defineProperty(target, key, getOwnPropertyDescriptor(source, key));
  733. }
  734. }
  735. };
  736. var fails$z = fails$H;
  737. var isCallable$i = isCallable$s;
  738. var replacement = /#|\.prototype\./;
  739. var isForced$4 = function (feature, detection) {
  740. var value = data[normalize(feature)];
  741. return value == POLYFILL ? true
  742. : value == NATIVE ? false
  743. : isCallable$i(detection) ? fails$z(detection)
  744. : !!detection;
  745. };
  746. var normalize = isForced$4.normalize = function (string) {
  747. return String(string).replace(replacement, '.').toLowerCase();
  748. };
  749. var data = isForced$4.data = {};
  750. var NATIVE = isForced$4.NATIVE = 'N';
  751. var POLYFILL = isForced$4.POLYFILL = 'P';
  752. var isForced_1 = isForced$4;
  753. var global$w = global$F;
  754. var getOwnPropertyDescriptor$5 = objectGetOwnPropertyDescriptor.f;
  755. var createNonEnumerableProperty$7 = createNonEnumerableProperty$9;
  756. var defineBuiltIn$e = defineBuiltIn$f;
  757. var defineGlobalProperty = defineGlobalProperty$3;
  758. var copyConstructorProperties$1 = copyConstructorProperties$2;
  759. var isForced$3 = isForced_1;
  760. /*
  761. options.target - name of the target object
  762. options.global - target is the global object
  763. options.stat - export as static methods of target
  764. options.proto - export as prototype methods of target
  765. options.real - real prototype method for the `pure` version
  766. options.forced - export even if the native feature is available
  767. options.bind - bind methods to the target, required for the `pure` version
  768. options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
  769. options.unsafe - use the simple assignment of property instead of delete + defineProperty
  770. options.sham - add a flag to not completely full polyfills
  771. options.enumerable - export as enumerable property
  772. options.dontCallGetSet - prevent calling a getter on target
  773. options.name - the .name of the function if it does not match the key
  774. */
  775. var _export = function (options, source) {
  776. var TARGET = options.target;
  777. var GLOBAL = options.global;
  778. var STATIC = options.stat;
  779. var FORCED, target, key, targetProperty, sourceProperty, descriptor;
  780. if (GLOBAL) {
  781. target = global$w;
  782. } else if (STATIC) {
  783. target = global$w[TARGET] || defineGlobalProperty(TARGET, {});
  784. } else {
  785. target = (global$w[TARGET] || {}).prototype;
  786. }
  787. if (target) for (key in source) {
  788. sourceProperty = source[key];
  789. if (options.dontCallGetSet) {
  790. descriptor = getOwnPropertyDescriptor$5(target, key);
  791. targetProperty = descriptor && descriptor.value;
  792. } else targetProperty = target[key];
  793. FORCED = isForced$3(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
  794. // contained in target
  795. if (!FORCED && targetProperty !== undefined) {
  796. if (typeof sourceProperty == typeof targetProperty) continue;
  797. copyConstructorProperties$1(sourceProperty, targetProperty);
  798. }
  799. // add a flag to not completely full polyfills
  800. if (options.sham || (targetProperty && targetProperty.sham)) {
  801. createNonEnumerableProperty$7(sourceProperty, 'sham', true);
  802. }
  803. defineBuiltIn$e(target, key, sourceProperty, options);
  804. }
  805. };
  806. var internalObjectKeys = objectKeysInternal;
  807. var enumBugKeys$1 = enumBugKeys$3;
  808. // `Object.keys` method
  809. // https://tc39.es/ecma262/#sec-object.keys
  810. // eslint-disable-next-line es-x/no-object-keys -- safe
  811. var objectKeys$4 = Object.keys || function keys(O) {
  812. return internalObjectKeys(O, enumBugKeys$1);
  813. };
  814. var DESCRIPTORS$e = descriptors;
  815. var uncurryThis$y = functionUncurryThis;
  816. var call$m = functionCall;
  817. var fails$y = fails$H;
  818. var objectKeys$3 = objectKeys$4;
  819. var getOwnPropertySymbolsModule$2 = objectGetOwnPropertySymbols;
  820. var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable;
  821. var toObject$b = toObject$d;
  822. var IndexedObject$2 = indexedObject;
  823. // eslint-disable-next-line es-x/no-object-assign -- safe
  824. var $assign = Object.assign;
  825. // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
  826. var defineProperty$c = Object.defineProperty;
  827. var concat$2 = uncurryThis$y([].concat);
  828. // `Object.assign` method
  829. // https://tc39.es/ecma262/#sec-object.assign
  830. var objectAssign = !$assign || fails$y(function () {
  831. // should have correct order of operations (Edge bug)
  832. if (DESCRIPTORS$e && $assign({ b: 1 }, $assign(defineProperty$c({}, 'a', {
  833. enumerable: true,
  834. get: function () {
  835. defineProperty$c(this, 'b', {
  836. value: 3,
  837. enumerable: false
  838. });
  839. }
  840. }), { b: 2 })).b !== 1) return true;
  841. // should work with symbols and should have deterministic property order (V8 bug)
  842. var A = {};
  843. var B = {};
  844. // eslint-disable-next-line es-x/no-symbol -- safe
  845. var symbol = Symbol();
  846. var alphabet = 'abcdefghijklmnopqrst';
  847. A[symbol] = 7;
  848. alphabet.split('').forEach(function (chr) { B[chr] = chr; });
  849. return $assign({}, A)[symbol] != 7 || objectKeys$3($assign({}, B)).join('') != alphabet;
  850. }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
  851. var T = toObject$b(target);
  852. var argumentsLength = arguments.length;
  853. var index = 1;
  854. var getOwnPropertySymbols = getOwnPropertySymbolsModule$2.f;
  855. var propertyIsEnumerable = propertyIsEnumerableModule$1.f;
  856. while (argumentsLength > index) {
  857. var S = IndexedObject$2(arguments[index++]);
  858. var keys = getOwnPropertySymbols ? concat$2(objectKeys$3(S), getOwnPropertySymbols(S)) : objectKeys$3(S);
  859. var length = keys.length;
  860. var j = 0;
  861. var key;
  862. while (length > j) {
  863. key = keys[j++];
  864. if (!DESCRIPTORS$e || call$m(propertyIsEnumerable, S, key)) T[key] = S[key];
  865. }
  866. } return T;
  867. } : $assign;
  868. var $$y = _export;
  869. var assign$1 = objectAssign;
  870. // `Object.assign` method
  871. // https://tc39.es/ecma262/#sec-object.assign
  872. // eslint-disable-next-line es-x/no-object-assign -- required for testing
  873. $$y({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign$1 }, {
  874. assign: assign$1
  875. });
  876. /*
  877. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  878. Redistribution and use in source and binary forms, with or without
  879. modification, are permitted provided that the following conditions are met:
  880. 1. Redistributions of source code must retain the above copyright notice,
  881. this list of conditions and the following disclaimer.
  882. 2. Redistributions in binary form must reproduce the above copyright
  883. notice, this list of conditions and the following disclaimer in
  884. the documentation and/or other materials provided with the distribution.
  885. 3. The names of the authors may not be used to endorse or promote products
  886. derived from this software without specific prior written permission.
  887. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  888. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  889. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  890. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  891. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  892. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  893. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  894. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  895. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  896. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  897. */
  898. /* global navigator */
  899. var DEFAULT_CONFIGURATION = {
  900. chunkSize: 512 * 1024,
  901. maxWorkers: typeof navigator != "undefined" && navigator.hardwareConcurrency || 2,
  902. terminateWorkerTimeout: 5000,
  903. useWebWorkers: true,
  904. workerScripts: undefined
  905. };
  906. var config = Object.assign({}, DEFAULT_CONFIGURATION);
  907. function getConfiguration() {
  908. return config;
  909. }
  910. function configure(configuration) {
  911. if (configuration.baseURL !== undefined) {
  912. config.baseURL = configuration.baseURL;
  913. }
  914. if (configuration.chunkSize !== undefined) {
  915. config.chunkSize = configuration.chunkSize;
  916. }
  917. if (configuration.maxWorkers !== undefined) {
  918. config.maxWorkers = configuration.maxWorkers;
  919. }
  920. if (configuration.terminateWorkerTimeout !== undefined) {
  921. config.terminateWorkerTimeout = configuration.terminateWorkerTimeout;
  922. }
  923. if (configuration.useWebWorkers !== undefined) {
  924. config.useWebWorkers = configuration.useWebWorkers;
  925. }
  926. if (configuration.Deflate !== undefined) {
  927. config.Deflate = configuration.Deflate;
  928. }
  929. if (configuration.Inflate !== undefined) {
  930. config.Inflate = configuration.Inflate;
  931. }
  932. if (configuration.workerScripts !== undefined) {
  933. if (configuration.workerScripts.deflate) {
  934. if (!Array.isArray(configuration.workerScripts.deflate)) {
  935. throw new Error("workerScripts.deflate must be an array");
  936. }
  937. if (!config.workerScripts) {
  938. config.workerScripts = {};
  939. }
  940. config.workerScripts.deflate = configuration.workerScripts.deflate;
  941. }
  942. if (configuration.workerScripts.inflate) {
  943. if (!Array.isArray(configuration.workerScripts.inflate)) {
  944. throw new Error("workerScripts.inflate must be an array");
  945. }
  946. if (!config.workerScripts) {
  947. config.workerScripts = {};
  948. }
  949. config.workerScripts.inflate = configuration.workerScripts.inflate;
  950. }
  951. }
  952. }
  953. var objectDefineProperties = {};
  954. var DESCRIPTORS$d = descriptors;
  955. var V8_PROTOTYPE_DEFINE_BUG = v8PrototypeDefineBug;
  956. var definePropertyModule$4 = objectDefineProperty;
  957. var anObject$f = anObject$i;
  958. var toIndexedObject$7 = toIndexedObject$b;
  959. var objectKeys$2 = objectKeys$4;
  960. // `Object.defineProperties` method
  961. // https://tc39.es/ecma262/#sec-object.defineproperties
  962. // eslint-disable-next-line es-x/no-object-defineproperties -- safe
  963. objectDefineProperties.f = DESCRIPTORS$d && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
  964. anObject$f(O);
  965. var props = toIndexedObject$7(Properties);
  966. var keys = objectKeys$2(Properties);
  967. var length = keys.length;
  968. var index = 0;
  969. var key;
  970. while (length > index) definePropertyModule$4.f(O, key = keys[index++], props[key]);
  971. return O;
  972. };
  973. var getBuiltIn$7 = getBuiltIn$b;
  974. var html$2 = getBuiltIn$7('document', 'documentElement');
  975. /* global ActiveXObject -- old IE, WSH */
  976. var anObject$e = anObject$i;
  977. var definePropertiesModule$1 = objectDefineProperties;
  978. var enumBugKeys = enumBugKeys$3;
  979. var hiddenKeys$2 = hiddenKeys$6;
  980. var html$1 = html$2;
  981. var documentCreateElement$1 = documentCreateElement$2;
  982. var sharedKey$2 = sharedKey$4;
  983. var GT = '>';
  984. var LT = '<';
  985. var PROTOTYPE$2 = 'prototype';
  986. var SCRIPT = 'script';
  987. var IE_PROTO$1 = sharedKey$2('IE_PROTO');
  988. var EmptyConstructor = function () { /* empty */ };
  989. var scriptTag = function (content) {
  990. return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
  991. };
  992. // Create object with fake `null` prototype: use ActiveX Object with cleared prototype
  993. var NullProtoObjectViaActiveX = function (activeXDocument) {
  994. activeXDocument.write(scriptTag(''));
  995. activeXDocument.close();
  996. var temp = activeXDocument.parentWindow.Object;
  997. activeXDocument = null; // avoid memory leak
  998. return temp;
  999. };
  1000. // Create object with fake `null` prototype: use iframe Object with cleared prototype
  1001. var NullProtoObjectViaIFrame = function () {
  1002. // Thrash, waste and sodomy: IE GC bug
  1003. var iframe = documentCreateElement$1('iframe');
  1004. var JS = 'java' + SCRIPT + ':';
  1005. var iframeDocument;
  1006. iframe.style.display = 'none';
  1007. html$1.appendChild(iframe);
  1008. // https://github.com/zloirock/core-js/issues/475
  1009. iframe.src = String(JS);
  1010. iframeDocument = iframe.contentWindow.document;
  1011. iframeDocument.open();
  1012. iframeDocument.write(scriptTag('document.F=Object'));
  1013. iframeDocument.close();
  1014. return iframeDocument.F;
  1015. };
  1016. // Check for document.domain and active x support
  1017. // No need to use active x approach when document.domain is not set
  1018. // see https://github.com/es-shims/es5-shim/issues/150
  1019. // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
  1020. // avoid IE GC bug
  1021. var activeXDocument;
  1022. var NullProtoObject = function () {
  1023. try {
  1024. activeXDocument = new ActiveXObject('htmlfile');
  1025. } catch (error) { /* ignore */ }
  1026. NullProtoObject = typeof document != 'undefined'
  1027. ? document.domain && activeXDocument
  1028. ? NullProtoObjectViaActiveX(activeXDocument) // old IE
  1029. : NullProtoObjectViaIFrame()
  1030. : NullProtoObjectViaActiveX(activeXDocument); // WSH
  1031. var length = enumBugKeys.length;
  1032. while (length--) delete NullProtoObject[PROTOTYPE$2][enumBugKeys[length]];
  1033. return NullProtoObject();
  1034. };
  1035. hiddenKeys$2[IE_PROTO$1] = true;
  1036. // `Object.create` method
  1037. // https://tc39.es/ecma262/#sec-object.create
  1038. // eslint-disable-next-line es-x/no-object-create -- safe
  1039. var objectCreate = Object.create || function create(O, Properties) {
  1040. var result;
  1041. if (O !== null) {
  1042. EmptyConstructor[PROTOTYPE$2] = anObject$e(O);
  1043. result = new EmptyConstructor();
  1044. EmptyConstructor[PROTOTYPE$2] = null;
  1045. // add "__proto__" for Object.getPrototypeOf polyfill
  1046. result[IE_PROTO$1] = O;
  1047. } else result = NullProtoObject();
  1048. return Properties === undefined ? result : definePropertiesModule$1.f(result, Properties);
  1049. };
  1050. var wellKnownSymbol$r = wellKnownSymbol$t;
  1051. var create$5 = objectCreate;
  1052. var defineProperty$b = objectDefineProperty.f;
  1053. var UNSCOPABLES = wellKnownSymbol$r('unscopables');
  1054. var ArrayPrototype$1 = Array.prototype;
  1055. // Array.prototype[@@unscopables]
  1056. // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
  1057. if (ArrayPrototype$1[UNSCOPABLES] == undefined) {
  1058. defineProperty$b(ArrayPrototype$1, UNSCOPABLES, {
  1059. configurable: true,
  1060. value: create$5(null)
  1061. });
  1062. }
  1063. // add a key to Array.prototype[@@unscopables]
  1064. var addToUnscopables$2 = function (key) {
  1065. ArrayPrototype$1[UNSCOPABLES][key] = true;
  1066. };
  1067. var iterators = {};
  1068. var fails$x = fails$H;
  1069. var correctPrototypeGetter = !fails$x(function () {
  1070. function F() { /* empty */ }
  1071. F.prototype.constructor = null;
  1072. // eslint-disable-next-line es-x/no-object-getprototypeof -- required for testing
  1073. return Object.getPrototypeOf(new F()) !== F.prototype;
  1074. });
  1075. var hasOwn$d = hasOwnProperty_1;
  1076. var isCallable$h = isCallable$s;
  1077. var toObject$a = toObject$d;
  1078. var sharedKey$1 = sharedKey$4;
  1079. var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter;
  1080. var IE_PROTO = sharedKey$1('IE_PROTO');
  1081. var $Object$1 = Object;
  1082. var ObjectPrototype$3 = $Object$1.prototype;
  1083. // `Object.getPrototypeOf` method
  1084. // https://tc39.es/ecma262/#sec-object.getprototypeof
  1085. // eslint-disable-next-line es-x/no-object-getprototypeof -- safe
  1086. var objectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER ? $Object$1.getPrototypeOf : function (O) {
  1087. var object = toObject$a(O);
  1088. if (hasOwn$d(object, IE_PROTO)) return object[IE_PROTO];
  1089. var constructor = object.constructor;
  1090. if (isCallable$h(constructor) && object instanceof constructor) {
  1091. return constructor.prototype;
  1092. } return object instanceof $Object$1 ? ObjectPrototype$3 : null;
  1093. };
  1094. var fails$w = fails$H;
  1095. var isCallable$g = isCallable$s;
  1096. var getPrototypeOf$3 = objectGetPrototypeOf;
  1097. var defineBuiltIn$d = defineBuiltIn$f;
  1098. var wellKnownSymbol$q = wellKnownSymbol$t;
  1099. var ITERATOR$8 = wellKnownSymbol$q('iterator');
  1100. var BUGGY_SAFARI_ITERATORS$1 = false;
  1101. // `%IteratorPrototype%` object
  1102. // https://tc39.es/ecma262/#sec-%iteratorprototype%-object
  1103. var IteratorPrototype$2, PrototypeOfArrayIteratorPrototype, arrayIterator;
  1104. /* eslint-disable es-x/no-array-prototype-keys -- safe */
  1105. if ([].keys) {
  1106. arrayIterator = [].keys();
  1107. // Safari 8 has buggy iterators w/o `next`
  1108. if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS$1 = true;
  1109. else {
  1110. PrototypeOfArrayIteratorPrototype = getPrototypeOf$3(getPrototypeOf$3(arrayIterator));
  1111. if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype$2 = PrototypeOfArrayIteratorPrototype;
  1112. }
  1113. }
  1114. var NEW_ITERATOR_PROTOTYPE = IteratorPrototype$2 == undefined || fails$w(function () {
  1115. var test = {};
  1116. // FF44- legacy iterators case
  1117. return IteratorPrototype$2[ITERATOR$8].call(test) !== test;
  1118. });
  1119. if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$2 = {};
  1120. // `%IteratorPrototype%[@@iterator]()` method
  1121. // https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator
  1122. if (!isCallable$g(IteratorPrototype$2[ITERATOR$8])) {
  1123. defineBuiltIn$d(IteratorPrototype$2, ITERATOR$8, function () {
  1124. return this;
  1125. });
  1126. }
  1127. var iteratorsCore = {
  1128. IteratorPrototype: IteratorPrototype$2,
  1129. BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$1
  1130. };
  1131. var defineProperty$a = objectDefineProperty.f;
  1132. var hasOwn$c = hasOwnProperty_1;
  1133. var wellKnownSymbol$p = wellKnownSymbol$t;
  1134. var TO_STRING_TAG$4 = wellKnownSymbol$p('toStringTag');
  1135. var setToStringTag$8 = function (target, TAG, STATIC) {
  1136. if (target && !STATIC) target = target.prototype;
  1137. if (target && !hasOwn$c(target, TO_STRING_TAG$4)) {
  1138. defineProperty$a(target, TO_STRING_TAG$4, { configurable: true, value: TAG });
  1139. }
  1140. };
  1141. var IteratorPrototype$1 = iteratorsCore.IteratorPrototype;
  1142. var create$4 = objectCreate;
  1143. var createPropertyDescriptor$4 = createPropertyDescriptor$7;
  1144. var setToStringTag$7 = setToStringTag$8;
  1145. var Iterators$4 = iterators;
  1146. var returnThis$1 = function () { return this; };
  1147. var createIteratorConstructor$2 = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
  1148. var TO_STRING_TAG = NAME + ' Iterator';
  1149. IteratorConstructor.prototype = create$4(IteratorPrototype$1, { next: createPropertyDescriptor$4(+!ENUMERABLE_NEXT, next) });
  1150. setToStringTag$7(IteratorConstructor, TO_STRING_TAG, false);
  1151. Iterators$4[TO_STRING_TAG] = returnThis$1;
  1152. return IteratorConstructor;
  1153. };
  1154. var isCallable$f = isCallable$s;
  1155. var $String$1 = String;
  1156. var $TypeError$b = TypeError;
  1157. var aPossiblePrototype$1 = function (argument) {
  1158. if (typeof argument == 'object' || isCallable$f(argument)) return argument;
  1159. throw $TypeError$b("Can't set " + $String$1(argument) + ' as a prototype');
  1160. };
  1161. /* eslint-disable no-proto -- safe */
  1162. var uncurryThis$x = functionUncurryThis;
  1163. var anObject$d = anObject$i;
  1164. var aPossiblePrototype = aPossiblePrototype$1;
  1165. // `Object.setPrototypeOf` method
  1166. // https://tc39.es/ecma262/#sec-object.setprototypeof
  1167. // Works with __proto__ only. Old v8 can't work with null proto objects.
  1168. // eslint-disable-next-line es-x/no-object-setprototypeof -- safe
  1169. var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  1170. var CORRECT_SETTER = false;
  1171. var test = {};
  1172. var setter;
  1173. try {
  1174. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  1175. setter = uncurryThis$x(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);
  1176. setter(test, []);
  1177. CORRECT_SETTER = test instanceof Array;
  1178. } catch (error) { /* empty */ }
  1179. return function setPrototypeOf(O, proto) {
  1180. anObject$d(O);
  1181. aPossiblePrototype(proto);
  1182. if (CORRECT_SETTER) setter(O, proto);
  1183. else O.__proto__ = proto;
  1184. return O;
  1185. };
  1186. }() : undefined);
  1187. var $$x = _export;
  1188. var call$l = functionCall;
  1189. var FunctionName$1 = functionName;
  1190. var isCallable$e = isCallable$s;
  1191. var createIteratorConstructor$1 = createIteratorConstructor$2;
  1192. var getPrototypeOf$2 = objectGetPrototypeOf;
  1193. var setPrototypeOf$5 = objectSetPrototypeOf;
  1194. var setToStringTag$6 = setToStringTag$8;
  1195. var createNonEnumerableProperty$6 = createNonEnumerableProperty$9;
  1196. var defineBuiltIn$c = defineBuiltIn$f;
  1197. var wellKnownSymbol$o = wellKnownSymbol$t;
  1198. var Iterators$3 = iterators;
  1199. var IteratorsCore = iteratorsCore;
  1200. var PROPER_FUNCTION_NAME$2 = FunctionName$1.PROPER;
  1201. var CONFIGURABLE_FUNCTION_NAME$1 = FunctionName$1.CONFIGURABLE;
  1202. var IteratorPrototype = IteratorsCore.IteratorPrototype;
  1203. var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
  1204. var ITERATOR$7 = wellKnownSymbol$o('iterator');
  1205. var KEYS = 'keys';
  1206. var VALUES = 'values';
  1207. var ENTRIES = 'entries';
  1208. var returnThis = function () { return this; };
  1209. var defineIterator$3 = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
  1210. createIteratorConstructor$1(IteratorConstructor, NAME, next);
  1211. var getIterationMethod = function (KIND) {
  1212. if (KIND === DEFAULT && defaultIterator) return defaultIterator;
  1213. if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
  1214. switch (KIND) {
  1215. case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
  1216. case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
  1217. case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
  1218. } return function () { return new IteratorConstructor(this); };
  1219. };
  1220. var TO_STRING_TAG = NAME + ' Iterator';
  1221. var INCORRECT_VALUES_NAME = false;
  1222. var IterablePrototype = Iterable.prototype;
  1223. var nativeIterator = IterablePrototype[ITERATOR$7]
  1224. || IterablePrototype['@@iterator']
  1225. || DEFAULT && IterablePrototype[DEFAULT];
  1226. var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
  1227. var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
  1228. var CurrentIteratorPrototype, methods, KEY;
  1229. // fix native
  1230. if (anyNativeIterator) {
  1231. CurrentIteratorPrototype = getPrototypeOf$2(anyNativeIterator.call(new Iterable()));
  1232. if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
  1233. if (getPrototypeOf$2(CurrentIteratorPrototype) !== IteratorPrototype) {
  1234. if (setPrototypeOf$5) {
  1235. setPrototypeOf$5(CurrentIteratorPrototype, IteratorPrototype);
  1236. } else if (!isCallable$e(CurrentIteratorPrototype[ITERATOR$7])) {
  1237. defineBuiltIn$c(CurrentIteratorPrototype, ITERATOR$7, returnThis);
  1238. }
  1239. }
  1240. // Set @@toStringTag to native iterators
  1241. setToStringTag$6(CurrentIteratorPrototype, TO_STRING_TAG, true);
  1242. }
  1243. }
  1244. // fix Array.prototype.{ values, @@iterator }.name in V8 / FF
  1245. if (PROPER_FUNCTION_NAME$2 && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
  1246. if (CONFIGURABLE_FUNCTION_NAME$1) {
  1247. createNonEnumerableProperty$6(IterablePrototype, 'name', VALUES);
  1248. } else {
  1249. INCORRECT_VALUES_NAME = true;
  1250. defaultIterator = function values() { return call$l(nativeIterator, this); };
  1251. }
  1252. }
  1253. // export additional methods
  1254. if (DEFAULT) {
  1255. methods = {
  1256. values: getIterationMethod(VALUES),
  1257. keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
  1258. entries: getIterationMethod(ENTRIES)
  1259. };
  1260. if (FORCED) for (KEY in methods) {
  1261. if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
  1262. defineBuiltIn$c(IterablePrototype, KEY, methods[KEY]);
  1263. }
  1264. } else $$x({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
  1265. }
  1266. // define iterator
  1267. if (IterablePrototype[ITERATOR$7] !== defaultIterator) {
  1268. defineBuiltIn$c(IterablePrototype, ITERATOR$7, defaultIterator, { name: DEFAULT });
  1269. }
  1270. Iterators$3[NAME] = defaultIterator;
  1271. return methods;
  1272. };
  1273. var toIndexedObject$6 = toIndexedObject$b;
  1274. var addToUnscopables$1 = addToUnscopables$2;
  1275. var Iterators$2 = iterators;
  1276. var InternalStateModule$9 = internalState;
  1277. var defineProperty$9 = objectDefineProperty.f;
  1278. var defineIterator$2 = defineIterator$3;
  1279. var DESCRIPTORS$c = descriptors;
  1280. var ARRAY_ITERATOR = 'Array Iterator';
  1281. var setInternalState$8 = InternalStateModule$9.set;
  1282. var getInternalState$6 = InternalStateModule$9.getterFor(ARRAY_ITERATOR);
  1283. // `Array.prototype.entries` method
  1284. // https://tc39.es/ecma262/#sec-array.prototype.entries
  1285. // `Array.prototype.keys` method
  1286. // https://tc39.es/ecma262/#sec-array.prototype.keys
  1287. // `Array.prototype.values` method
  1288. // https://tc39.es/ecma262/#sec-array.prototype.values
  1289. // `Array.prototype[@@iterator]` method
  1290. // https://tc39.es/ecma262/#sec-array.prototype-@@iterator
  1291. // `CreateArrayIterator` internal method
  1292. // https://tc39.es/ecma262/#sec-createarrayiterator
  1293. var es_array_iterator = defineIterator$2(Array, 'Array', function (iterated, kind) {
  1294. setInternalState$8(this, {
  1295. type: ARRAY_ITERATOR,
  1296. target: toIndexedObject$6(iterated), // target
  1297. index: 0, // next index
  1298. kind: kind // kind
  1299. });
  1300. // `%ArrayIteratorPrototype%.next` method
  1301. // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
  1302. }, function () {
  1303. var state = getInternalState$6(this);
  1304. var target = state.target;
  1305. var kind = state.kind;
  1306. var index = state.index++;
  1307. if (!target || index >= target.length) {
  1308. state.target = undefined;
  1309. return { value: undefined, done: true };
  1310. }
  1311. if (kind == 'keys') return { value: index, done: false };
  1312. if (kind == 'values') return { value: target[index], done: false };
  1313. return { value: [index, target[index]], done: false };
  1314. }, 'values');
  1315. // argumentsList[@@iterator] is %ArrayProto_values%
  1316. // https://tc39.es/ecma262/#sec-createunmappedargumentsobject
  1317. // https://tc39.es/ecma262/#sec-createmappedargumentsobject
  1318. var values = Iterators$2.Arguments = Iterators$2.Array;
  1319. // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
  1320. addToUnscopables$1('keys');
  1321. addToUnscopables$1('values');
  1322. addToUnscopables$1('entries');
  1323. // V8 ~ Chrome 45- bug
  1324. if (DESCRIPTORS$c && values.name !== 'values') try {
  1325. defineProperty$9(values, 'name', { value: 'values' });
  1326. } catch (error) { /* empty */ }
  1327. var wellKnownSymbol$n = wellKnownSymbol$t;
  1328. var TO_STRING_TAG$3 = wellKnownSymbol$n('toStringTag');
  1329. var test = {};
  1330. test[TO_STRING_TAG$3] = 'z';
  1331. var toStringTagSupport = String(test) === '[object z]';
  1332. var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport;
  1333. var isCallable$d = isCallable$s;
  1334. var classofRaw = classofRaw$1;
  1335. var wellKnownSymbol$m = wellKnownSymbol$t;
  1336. var TO_STRING_TAG$2 = wellKnownSymbol$m('toStringTag');
  1337. var $Object = Object;
  1338. // ES3 wrong here
  1339. var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
  1340. // fallback for IE11 Script Access Denied error
  1341. var tryGet = function (it, key) {
  1342. try {
  1343. return it[key];
  1344. } catch (error) { /* empty */ }
  1345. };
  1346. // getting tag from ES6+ `Object.prototype.toString`
  1347. var classof$e = TO_STRING_TAG_SUPPORT$2 ? classofRaw : function (it) {
  1348. var O, tag, result;
  1349. return it === undefined ? 'Undefined' : it === null ? 'Null'
  1350. // @@toStringTag case
  1351. : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG$2)) == 'string' ? tag
  1352. // builtinTag case
  1353. : CORRECT_ARGUMENTS ? classofRaw(O)
  1354. // ES3 arguments fallback
  1355. : (result = classofRaw(O)) == 'Object' && isCallable$d(O.callee) ? 'Arguments' : result;
  1356. };
  1357. var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport;
  1358. var classof$d = classof$e;
  1359. // `Object.prototype.toString` method implementation
  1360. // https://tc39.es/ecma262/#sec-object.prototype.tostring
  1361. var objectToString = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() {
  1362. return '[object ' + classof$d(this) + ']';
  1363. };
  1364. var TO_STRING_TAG_SUPPORT = toStringTagSupport;
  1365. var defineBuiltIn$b = defineBuiltIn$f;
  1366. var toString$b = objectToString;
  1367. // `Object.prototype.toString` method
  1368. // https://tc39.es/ecma262/#sec-object.prototype.tostring
  1369. if (!TO_STRING_TAG_SUPPORT) {
  1370. defineBuiltIn$b(Object.prototype, 'toString', toString$b, { unsafe: true });
  1371. }
  1372. var classof$c = classof$e;
  1373. var $String = String;
  1374. var toString$a = function (argument) {
  1375. if (classof$c(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');
  1376. return $String(argument);
  1377. };
  1378. var uncurryThis$w = functionUncurryThis;
  1379. var toIntegerOrInfinity$6 = toIntegerOrInfinity$9;
  1380. var toString$9 = toString$a;
  1381. var requireObjectCoercible$5 = requireObjectCoercible$8;
  1382. var charAt$7 = uncurryThis$w(''.charAt);
  1383. var charCodeAt$3 = uncurryThis$w(''.charCodeAt);
  1384. var stringSlice$8 = uncurryThis$w(''.slice);
  1385. var createMethod$4 = function (CONVERT_TO_STRING) {
  1386. return function ($this, pos) {
  1387. var S = toString$9(requireObjectCoercible$5($this));
  1388. var position = toIntegerOrInfinity$6(pos);
  1389. var size = S.length;
  1390. var first, second;
  1391. if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
  1392. first = charCodeAt$3(S, position);
  1393. return first < 0xD800 || first > 0xDBFF || position + 1 === size
  1394. || (second = charCodeAt$3(S, position + 1)) < 0xDC00 || second > 0xDFFF
  1395. ? CONVERT_TO_STRING
  1396. ? charAt$7(S, position)
  1397. : first
  1398. : CONVERT_TO_STRING
  1399. ? stringSlice$8(S, position, position + 2)
  1400. : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
  1401. };
  1402. };
  1403. var stringMultibyte = {
  1404. // `String.prototype.codePointAt` method
  1405. // https://tc39.es/ecma262/#sec-string.prototype.codepointat
  1406. codeAt: createMethod$4(false),
  1407. // `String.prototype.at` method
  1408. // https://github.com/mathiasbynens/String.prototype.at
  1409. charAt: createMethod$4(true)
  1410. };
  1411. var charAt$6 = stringMultibyte.charAt;
  1412. var toString$8 = toString$a;
  1413. var InternalStateModule$8 = internalState;
  1414. var defineIterator$1 = defineIterator$3;
  1415. var STRING_ITERATOR = 'String Iterator';
  1416. var setInternalState$7 = InternalStateModule$8.set;
  1417. var getInternalState$5 = InternalStateModule$8.getterFor(STRING_ITERATOR);
  1418. // `String.prototype[@@iterator]` method
  1419. // https://tc39.es/ecma262/#sec-string.prototype-@@iterator
  1420. defineIterator$1(String, 'String', function (iterated) {
  1421. setInternalState$7(this, {
  1422. type: STRING_ITERATOR,
  1423. string: toString$8(iterated),
  1424. index: 0
  1425. });
  1426. // `%StringIteratorPrototype%.next` method
  1427. // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
  1428. }, function next() {
  1429. var state = getInternalState$5(this);
  1430. var string = state.string;
  1431. var index = state.index;
  1432. var point;
  1433. if (index >= string.length) return { value: undefined, done: true };
  1434. point = charAt$6(string, index);
  1435. state.index += point.length;
  1436. return { value: point, done: false };
  1437. });
  1438. // iterable DOM collections
  1439. // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
  1440. var domIterables = {
  1441. CSSRuleList: 0,
  1442. CSSStyleDeclaration: 0,
  1443. CSSValueList: 0,
  1444. ClientRectList: 0,
  1445. DOMRectList: 0,
  1446. DOMStringList: 0,
  1447. DOMTokenList: 1,
  1448. DataTransferItemList: 0,
  1449. FileList: 0,
  1450. HTMLAllCollection: 0,
  1451. HTMLCollection: 0,
  1452. HTMLFormElement: 0,
  1453. HTMLSelectElement: 0,
  1454. MediaList: 0,
  1455. MimeTypeArray: 0,
  1456. NamedNodeMap: 0,
  1457. NodeList: 1,
  1458. PaintRequestList: 0,
  1459. Plugin: 0,
  1460. PluginArray: 0,
  1461. SVGLengthList: 0,
  1462. SVGNumberList: 0,
  1463. SVGPathSegList: 0,
  1464. SVGPointList: 0,
  1465. SVGStringList: 0,
  1466. SVGTransformList: 0,
  1467. SourceBufferList: 0,
  1468. StyleSheetList: 0,
  1469. TextTrackCueList: 0,
  1470. TextTrackList: 0,
  1471. TouchList: 0
  1472. };
  1473. // in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`
  1474. var documentCreateElement = documentCreateElement$2;
  1475. var classList = documentCreateElement('span').classList;
  1476. var DOMTokenListPrototype$2 = classList && classList.constructor && classList.constructor.prototype;
  1477. var domTokenListPrototype = DOMTokenListPrototype$2 === Object.prototype ? undefined : DOMTokenListPrototype$2;
  1478. var global$v = global$F;
  1479. var DOMIterables$1 = domIterables;
  1480. var DOMTokenListPrototype$1 = domTokenListPrototype;
  1481. var ArrayIteratorMethods = es_array_iterator;
  1482. var createNonEnumerableProperty$5 = createNonEnumerableProperty$9;
  1483. var wellKnownSymbol$l = wellKnownSymbol$t;
  1484. var ITERATOR$6 = wellKnownSymbol$l('iterator');
  1485. var TO_STRING_TAG$1 = wellKnownSymbol$l('toStringTag');
  1486. var ArrayValues = ArrayIteratorMethods.values;
  1487. var handlePrototype$1 = function (CollectionPrototype, COLLECTION_NAME) {
  1488. if (CollectionPrototype) {
  1489. // some Chrome versions have non-configurable methods on DOMTokenList
  1490. if (CollectionPrototype[ITERATOR$6] !== ArrayValues) try {
  1491. createNonEnumerableProperty$5(CollectionPrototype, ITERATOR$6, ArrayValues);
  1492. } catch (error) {
  1493. CollectionPrototype[ITERATOR$6] = ArrayValues;
  1494. }
  1495. if (!CollectionPrototype[TO_STRING_TAG$1]) {
  1496. createNonEnumerableProperty$5(CollectionPrototype, TO_STRING_TAG$1, COLLECTION_NAME);
  1497. }
  1498. if (DOMIterables$1[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {
  1499. // some Chrome versions have non-configurable methods on DOMTokenList
  1500. if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {
  1501. createNonEnumerableProperty$5(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);
  1502. } catch (error) {
  1503. CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
  1504. }
  1505. }
  1506. }
  1507. };
  1508. for (var COLLECTION_NAME$1 in DOMIterables$1) {
  1509. handlePrototype$1(global$v[COLLECTION_NAME$1] && global$v[COLLECTION_NAME$1].prototype, COLLECTION_NAME$1);
  1510. }
  1511. handlePrototype$1(DOMTokenListPrototype$1, 'DOMTokenList');
  1512. var fails$v = fails$H;
  1513. var wellKnownSymbol$k = wellKnownSymbol$t;
  1514. var IS_PURE = isPure;
  1515. var ITERATOR$5 = wellKnownSymbol$k('iterator');
  1516. var nativeUrl = !fails$v(function () {
  1517. // eslint-disable-next-line unicorn/relative-url-style -- required for testing
  1518. var url = new URL('b?a=1&b=2&c=3', 'http://a');
  1519. var searchParams = url.searchParams;
  1520. var result = '';
  1521. url.pathname = 'c%20d';
  1522. searchParams.forEach(function (value, key) {
  1523. searchParams['delete']('b');
  1524. result += key + value;
  1525. });
  1526. return (IS_PURE && !url.toJSON)
  1527. || !searchParams.sort
  1528. || url.href !== 'http://a/c%20d?a=1&c=3'
  1529. || searchParams.get('c') !== '3'
  1530. || String(new URLSearchParams('?a=1')) !== 'a=1'
  1531. || !searchParams[ITERATOR$5]
  1532. // throws in Edge
  1533. || new URL('https://a@b').username !== 'a'
  1534. || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
  1535. // not punycoded in Edge
  1536. || new URL('http://тест').host !== 'xn--e1aybc'
  1537. // not escaped in Chrome 62-
  1538. || new URL('http://a#б').hash !== '#%D0%B1'
  1539. // fails in Chrome 66-
  1540. || result !== 'a1c3'
  1541. // throws in Safari
  1542. || new URL('http://x', undefined).host !== 'x';
  1543. });
  1544. var uncurryThis$v = functionUncurryThis;
  1545. var aCallable$7 = aCallable$9;
  1546. var NATIVE_BIND$1 = functionBindNative;
  1547. var bind$a = uncurryThis$v(uncurryThis$v.bind);
  1548. // optional / simple context binding
  1549. var functionBindContext = function (fn, that) {
  1550. aCallable$7(fn);
  1551. return that === undefined ? fn : NATIVE_BIND$1 ? bind$a(fn, that) : function (/* ...args */) {
  1552. return fn.apply(that, arguments);
  1553. };
  1554. };
  1555. var makeBuiltIn = makeBuiltIn$3.exports;
  1556. var defineProperty$8 = objectDefineProperty;
  1557. var defineBuiltInAccessor$1 = function (target, name, descriptor) {
  1558. if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
  1559. if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
  1560. return defineProperty$8.f(target, name, descriptor);
  1561. };
  1562. var isPrototypeOf$6 = objectIsPrototypeOf;
  1563. var $TypeError$a = TypeError;
  1564. var anInstance$7 = function (it, Prototype) {
  1565. if (isPrototypeOf$6(Prototype, it)) return it;
  1566. throw $TypeError$a('Incorrect invocation');
  1567. };
  1568. var call$k = functionCall;
  1569. var anObject$c = anObject$i;
  1570. var getMethod$3 = getMethod$5;
  1571. var iteratorClose$2 = function (iterator, kind, value) {
  1572. var innerResult, innerError;
  1573. anObject$c(iterator);
  1574. try {
  1575. innerResult = getMethod$3(iterator, 'return');
  1576. if (!innerResult) {
  1577. if (kind === 'throw') throw value;
  1578. return value;
  1579. }
  1580. innerResult = call$k(innerResult, iterator);
  1581. } catch (error) {
  1582. innerError = true;
  1583. innerResult = error;
  1584. }
  1585. if (kind === 'throw') throw value;
  1586. if (innerError) throw innerResult;
  1587. anObject$c(innerResult);
  1588. return value;
  1589. };
  1590. var anObject$b = anObject$i;
  1591. var iteratorClose$1 = iteratorClose$2;
  1592. // call something on iterator step with safe closing on error
  1593. var callWithSafeIterationClosing$1 = function (iterator, fn, value, ENTRIES) {
  1594. try {
  1595. return ENTRIES ? fn(anObject$b(value)[0], value[1]) : fn(value);
  1596. } catch (error) {
  1597. iteratorClose$1(iterator, 'throw', error);
  1598. }
  1599. };
  1600. var wellKnownSymbol$j = wellKnownSymbol$t;
  1601. var Iterators$1 = iterators;
  1602. var ITERATOR$4 = wellKnownSymbol$j('iterator');
  1603. var ArrayPrototype = Array.prototype;
  1604. // check on default Array iterator
  1605. var isArrayIteratorMethod$3 = function (it) {
  1606. return it !== undefined && (Iterators$1.Array === it || ArrayPrototype[ITERATOR$4] === it);
  1607. };
  1608. var uncurryThis$u = functionUncurryThis;
  1609. var fails$u = fails$H;
  1610. var isCallable$c = isCallable$s;
  1611. var classof$b = classof$e;
  1612. var getBuiltIn$6 = getBuiltIn$b;
  1613. var inspectSource$1 = inspectSource$4;
  1614. var noop = function () { /* empty */ };
  1615. var empty = [];
  1616. var construct = getBuiltIn$6('Reflect', 'construct');
  1617. var constructorRegExp = /^\s*(?:class|function)\b/;
  1618. var exec$5 = uncurryThis$u(constructorRegExp.exec);
  1619. var INCORRECT_TO_STRING = !constructorRegExp.exec(noop);
  1620. var isConstructorModern = function isConstructor(argument) {
  1621. if (!isCallable$c(argument)) return false;
  1622. try {
  1623. construct(noop, empty, argument);
  1624. return true;
  1625. } catch (error) {
  1626. return false;
  1627. }
  1628. };
  1629. var isConstructorLegacy = function isConstructor(argument) {
  1630. if (!isCallable$c(argument)) return false;
  1631. switch (classof$b(argument)) {
  1632. case 'AsyncFunction':
  1633. case 'GeneratorFunction':
  1634. case 'AsyncGeneratorFunction': return false;
  1635. }
  1636. try {
  1637. // we can't check .prototype since constructors produced by .bind haven't it
  1638. // `Function#toString` throws on some built-it function in some legacy engines
  1639. // (for example, `DOMQuad` and similar in FF41-)
  1640. return INCORRECT_TO_STRING || !!exec$5(constructorRegExp, inspectSource$1(argument));
  1641. } catch (error) {
  1642. return true;
  1643. }
  1644. };
  1645. isConstructorLegacy.sham = true;
  1646. // `IsConstructor` abstract operation
  1647. // https://tc39.es/ecma262/#sec-isconstructor
  1648. var isConstructor$4 = !construct || fails$u(function () {
  1649. var called;
  1650. return isConstructorModern(isConstructorModern.call)
  1651. || !isConstructorModern(Object)
  1652. || !isConstructorModern(function () { called = true; })
  1653. || called;
  1654. }) ? isConstructorLegacy : isConstructorModern;
  1655. var toPropertyKey$2 = toPropertyKey$5;
  1656. var definePropertyModule$3 = objectDefineProperty;
  1657. var createPropertyDescriptor$3 = createPropertyDescriptor$7;
  1658. var createProperty$6 = function (object, key, value) {
  1659. var propertyKey = toPropertyKey$2(key);
  1660. if (propertyKey in object) definePropertyModule$3.f(object, propertyKey, createPropertyDescriptor$3(0, value));
  1661. else object[propertyKey] = value;
  1662. };
  1663. var classof$a = classof$e;
  1664. var getMethod$2 = getMethod$5;
  1665. var Iterators = iterators;
  1666. var wellKnownSymbol$i = wellKnownSymbol$t;
  1667. var ITERATOR$3 = wellKnownSymbol$i('iterator');
  1668. var getIteratorMethod$5 = function (it) {
  1669. if (it != undefined) return getMethod$2(it, ITERATOR$3)
  1670. || getMethod$2(it, '@@iterator')
  1671. || Iterators[classof$a(it)];
  1672. };
  1673. var call$j = functionCall;
  1674. var aCallable$6 = aCallable$9;
  1675. var anObject$a = anObject$i;
  1676. var tryToString$5 = tryToString$7;
  1677. var getIteratorMethod$4 = getIteratorMethod$5;
  1678. var $TypeError$9 = TypeError;
  1679. var getIterator$4 = function (argument, usingIterator) {
  1680. var iteratorMethod = arguments.length < 2 ? getIteratorMethod$4(argument) : usingIterator;
  1681. if (aCallable$6(iteratorMethod)) return anObject$a(call$j(iteratorMethod, argument));
  1682. throw $TypeError$9(tryToString$5(argument) + ' is not iterable');
  1683. };
  1684. var bind$9 = functionBindContext;
  1685. var call$i = functionCall;
  1686. var toObject$9 = toObject$d;
  1687. var callWithSafeIterationClosing = callWithSafeIterationClosing$1;
  1688. var isArrayIteratorMethod$2 = isArrayIteratorMethod$3;
  1689. var isConstructor$3 = isConstructor$4;
  1690. var lengthOfArrayLike$d = lengthOfArrayLike$f;
  1691. var createProperty$5 = createProperty$6;
  1692. var getIterator$3 = getIterator$4;
  1693. var getIteratorMethod$3 = getIteratorMethod$5;
  1694. var $Array$4 = Array;
  1695. // `Array.from` method implementation
  1696. // https://tc39.es/ecma262/#sec-array.from
  1697. var arrayFrom$1 = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
  1698. var O = toObject$9(arrayLike);
  1699. var IS_CONSTRUCTOR = isConstructor$3(this);
  1700. var argumentsLength = arguments.length;
  1701. var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
  1702. var mapping = mapfn !== undefined;
  1703. if (mapping) mapfn = bind$9(mapfn, argumentsLength > 2 ? arguments[2] : undefined);
  1704. var iteratorMethod = getIteratorMethod$3(O);
  1705. var index = 0;
  1706. var length, result, step, iterator, next, value;
  1707. // if the target is not iterable or it's an array with the default iterator - use a simple case
  1708. if (iteratorMethod && !(this === $Array$4 && isArrayIteratorMethod$2(iteratorMethod))) {
  1709. iterator = getIterator$3(O, iteratorMethod);
  1710. next = iterator.next;
  1711. result = IS_CONSTRUCTOR ? new this() : [];
  1712. for (;!(step = call$i(next, iterator)).done; index++) {
  1713. value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
  1714. createProperty$5(result, index, value);
  1715. }
  1716. } else {
  1717. length = lengthOfArrayLike$d(O);
  1718. result = IS_CONSTRUCTOR ? new this(length) : $Array$4(length);
  1719. for (;length > index; index++) {
  1720. value = mapping ? mapfn(O[index], index) : O[index];
  1721. createProperty$5(result, index, value);
  1722. }
  1723. }
  1724. result.length = index;
  1725. return result;
  1726. };
  1727. var toAbsoluteIndex$6 = toAbsoluteIndex$8;
  1728. var lengthOfArrayLike$c = lengthOfArrayLike$f;
  1729. var createProperty$4 = createProperty$6;
  1730. var $Array$3 = Array;
  1731. var max$3 = Math.max;
  1732. var arraySliceSimple = function (O, start, end) {
  1733. var length = lengthOfArrayLike$c(O);
  1734. var k = toAbsoluteIndex$6(start, length);
  1735. var fin = toAbsoluteIndex$6(end === undefined ? length : end, length);
  1736. var result = $Array$3(max$3(fin - k, 0));
  1737. for (var n = 0; k < fin; k++, n++) createProperty$4(result, n, O[k]);
  1738. result.length = n;
  1739. return result;
  1740. };
  1741. // based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js
  1742. var uncurryThis$t = functionUncurryThis;
  1743. var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
  1744. var base = 36;
  1745. var tMin = 1;
  1746. var tMax = 26;
  1747. var skew = 38;
  1748. var damp = 700;
  1749. var initialBias = 72;
  1750. var initialN = 128; // 0x80
  1751. var delimiter = '-'; // '\x2D'
  1752. var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars
  1753. var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
  1754. var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';
  1755. var baseMinusTMin = base - tMin;
  1756. var $RangeError$3 = RangeError;
  1757. var exec$4 = uncurryThis$t(regexSeparators.exec);
  1758. var floor$6 = Math.floor;
  1759. var fromCharCode = String.fromCharCode;
  1760. var charCodeAt$2 = uncurryThis$t(''.charCodeAt);
  1761. var join$3 = uncurryThis$t([].join);
  1762. var push$7 = uncurryThis$t([].push);
  1763. var replace$7 = uncurryThis$t(''.replace);
  1764. var split$2 = uncurryThis$t(''.split);
  1765. var toLowerCase$1 = uncurryThis$t(''.toLowerCase);
  1766. /**
  1767. * Creates an array containing the numeric code points of each Unicode
  1768. * character in the string. While JavaScript uses UCS-2 internally,
  1769. * this function will convert a pair of surrogate halves (each of which
  1770. * UCS-2 exposes as separate characters) into a single code point,
  1771. * matching UTF-16.
  1772. */
  1773. var ucs2decode = function (string) {
  1774. var output = [];
  1775. var counter = 0;
  1776. var length = string.length;
  1777. while (counter < length) {
  1778. var value = charCodeAt$2(string, counter++);
  1779. if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
  1780. // It's a high surrogate, and there is a next character.
  1781. var extra = charCodeAt$2(string, counter++);
  1782. if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
  1783. push$7(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
  1784. } else {
  1785. // It's an unmatched surrogate; only append this code unit, in case the
  1786. // next code unit is the high surrogate of a surrogate pair.
  1787. push$7(output, value);
  1788. counter--;
  1789. }
  1790. } else {
  1791. push$7(output, value);
  1792. }
  1793. }
  1794. return output;
  1795. };
  1796. /**
  1797. * Converts a digit/integer into a basic code point.
  1798. */
  1799. var digitToBasic = function (digit) {
  1800. // 0..25 map to ASCII a..z or A..Z
  1801. // 26..35 map to ASCII 0..9
  1802. return digit + 22 + 75 * (digit < 26);
  1803. };
  1804. /**
  1805. * Bias adaptation function as per section 3.4 of RFC 3492.
  1806. * https://tools.ietf.org/html/rfc3492#section-3.4
  1807. */
  1808. var adapt = function (delta, numPoints, firstTime) {
  1809. var k = 0;
  1810. delta = firstTime ? floor$6(delta / damp) : delta >> 1;
  1811. delta += floor$6(delta / numPoints);
  1812. while (delta > baseMinusTMin * tMax >> 1) {
  1813. delta = floor$6(delta / baseMinusTMin);
  1814. k += base;
  1815. }
  1816. return floor$6(k + (baseMinusTMin + 1) * delta / (delta + skew));
  1817. };
  1818. /**
  1819. * Converts a string of Unicode symbols (e.g. a domain name label) to a
  1820. * Punycode string of ASCII-only symbols.
  1821. */
  1822. var encode = function (input) {
  1823. var output = [];
  1824. // Convert the input in UCS-2 to an array of Unicode code points.
  1825. input = ucs2decode(input);
  1826. // Cache the length.
  1827. var inputLength = input.length;
  1828. // Initialize the state.
  1829. var n = initialN;
  1830. var delta = 0;
  1831. var bias = initialBias;
  1832. var i, currentValue;
  1833. // Handle the basic code points.
  1834. for (i = 0; i < input.length; i++) {
  1835. currentValue = input[i];
  1836. if (currentValue < 0x80) {
  1837. push$7(output, fromCharCode(currentValue));
  1838. }
  1839. }
  1840. var basicLength = output.length; // number of basic code points.
  1841. var handledCPCount = basicLength; // number of code points that have been handled;
  1842. // Finish the basic string with a delimiter unless it's empty.
  1843. if (basicLength) {
  1844. push$7(output, delimiter);
  1845. }
  1846. // Main encoding loop:
  1847. while (handledCPCount < inputLength) {
  1848. // All non-basic code points < n have been handled already. Find the next larger one:
  1849. var m = maxInt;
  1850. for (i = 0; i < input.length; i++) {
  1851. currentValue = input[i];
  1852. if (currentValue >= n && currentValue < m) {
  1853. m = currentValue;
  1854. }
  1855. }
  1856. // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.
  1857. var handledCPCountPlusOne = handledCPCount + 1;
  1858. if (m - n > floor$6((maxInt - delta) / handledCPCountPlusOne)) {
  1859. throw $RangeError$3(OVERFLOW_ERROR);
  1860. }
  1861. delta += (m - n) * handledCPCountPlusOne;
  1862. n = m;
  1863. for (i = 0; i < input.length; i++) {
  1864. currentValue = input[i];
  1865. if (currentValue < n && ++delta > maxInt) {
  1866. throw $RangeError$3(OVERFLOW_ERROR);
  1867. }
  1868. if (currentValue == n) {
  1869. // Represent delta as a generalized variable-length integer.
  1870. var q = delta;
  1871. var k = base;
  1872. while (true) {
  1873. var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  1874. if (q < t) break;
  1875. var qMinusT = q - t;
  1876. var baseMinusT = base - t;
  1877. push$7(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
  1878. q = floor$6(qMinusT / baseMinusT);
  1879. k += base;
  1880. }
  1881. push$7(output, fromCharCode(digitToBasic(q)));
  1882. bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
  1883. delta = 0;
  1884. handledCPCount++;
  1885. }
  1886. }
  1887. delta++;
  1888. n++;
  1889. }
  1890. return join$3(output, '');
  1891. };
  1892. var stringPunycodeToAscii = function (input) {
  1893. var encoded = [];
  1894. var labels = split$2(replace$7(toLowerCase$1(input), regexSeparators, '\u002E'), '.');
  1895. var i, label;
  1896. for (i = 0; i < labels.length; i++) {
  1897. label = labels[i];
  1898. push$7(encoded, exec$4(regexNonASCII, label) ? 'xn--' + encode(label) : label);
  1899. }
  1900. return join$3(encoded, '.');
  1901. };
  1902. var $TypeError$8 = TypeError;
  1903. var validateArgumentsLength$3 = function (passed, required) {
  1904. if (passed < required) throw $TypeError$8('Not enough arguments');
  1905. return passed;
  1906. };
  1907. var defineBuiltIn$a = defineBuiltIn$f;
  1908. var defineBuiltIns$3 = function (target, src, options) {
  1909. for (var key in src) defineBuiltIn$a(target, key, src[key], options);
  1910. return target;
  1911. };
  1912. var arraySlice$a = arraySliceSimple;
  1913. var floor$5 = Math.floor;
  1914. var mergeSort = function (array, comparefn) {
  1915. var length = array.length;
  1916. var middle = floor$5(length / 2);
  1917. return length < 8 ? insertionSort(array, comparefn) : merge(
  1918. array,
  1919. mergeSort(arraySlice$a(array, 0, middle), comparefn),
  1920. mergeSort(arraySlice$a(array, middle), comparefn),
  1921. comparefn
  1922. );
  1923. };
  1924. var insertionSort = function (array, comparefn) {
  1925. var length = array.length;
  1926. var i = 1;
  1927. var element, j;
  1928. while (i < length) {
  1929. j = i;
  1930. element = array[i];
  1931. while (j && comparefn(array[j - 1], element) > 0) {
  1932. array[j] = array[--j];
  1933. }
  1934. if (j !== i++) array[j] = element;
  1935. } return array;
  1936. };
  1937. var merge = function (array, left, right, comparefn) {
  1938. var llength = left.length;
  1939. var rlength = right.length;
  1940. var lindex = 0;
  1941. var rindex = 0;
  1942. while (lindex < llength || rindex < rlength) {
  1943. array[lindex + rindex] = (lindex < llength && rindex < rlength)
  1944. ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]
  1945. : lindex < llength ? left[lindex++] : right[rindex++];
  1946. } return array;
  1947. };
  1948. var arraySort$1 = mergeSort;
  1949. // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
  1950. var $$w = _export;
  1951. var global$u = global$F;
  1952. var call$h = functionCall;
  1953. var uncurryThis$s = functionUncurryThis;
  1954. var DESCRIPTORS$b = descriptors;
  1955. var USE_NATIVE_URL$1 = nativeUrl;
  1956. var defineBuiltIn$9 = defineBuiltIn$f;
  1957. var defineBuiltIns$2 = defineBuiltIns$3;
  1958. var setToStringTag$5 = setToStringTag$8;
  1959. var createIteratorConstructor = createIteratorConstructor$2;
  1960. var InternalStateModule$7 = internalState;
  1961. var anInstance$6 = anInstance$7;
  1962. var isCallable$b = isCallable$s;
  1963. var hasOwn$b = hasOwnProperty_1;
  1964. var bind$8 = functionBindContext;
  1965. var classof$9 = classof$e;
  1966. var anObject$9 = anObject$i;
  1967. var isObject$e = isObject$k;
  1968. var $toString$2 = toString$a;
  1969. var create$3 = objectCreate;
  1970. var createPropertyDescriptor$2 = createPropertyDescriptor$7;
  1971. var getIterator$2 = getIterator$4;
  1972. var getIteratorMethod$2 = getIteratorMethod$5;
  1973. var validateArgumentsLength$2 = validateArgumentsLength$3;
  1974. var wellKnownSymbol$h = wellKnownSymbol$t;
  1975. var arraySort = arraySort$1;
  1976. var ITERATOR$2 = wellKnownSymbol$h('iterator');
  1977. var URL_SEARCH_PARAMS = 'URLSearchParams';
  1978. var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';
  1979. var setInternalState$6 = InternalStateModule$7.set;
  1980. var getInternalParamsState = InternalStateModule$7.getterFor(URL_SEARCH_PARAMS);
  1981. var getInternalIteratorState = InternalStateModule$7.getterFor(URL_SEARCH_PARAMS_ITERATOR);
  1982. // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
  1983. var getOwnPropertyDescriptor$4 = Object.getOwnPropertyDescriptor;
  1984. // Avoid NodeJS experimental warning
  1985. var safeGetBuiltIn = function (name) {
  1986. if (!DESCRIPTORS$b) return global$u[name];
  1987. var descriptor = getOwnPropertyDescriptor$4(global$u, name);
  1988. return descriptor && descriptor.value;
  1989. };
  1990. var nativeFetch = safeGetBuiltIn('fetch');
  1991. var NativeRequest = safeGetBuiltIn('Request');
  1992. var Headers = safeGetBuiltIn('Headers');
  1993. var RequestPrototype = NativeRequest && NativeRequest.prototype;
  1994. var HeadersPrototype = Headers && Headers.prototype;
  1995. var RegExp$1 = global$u.RegExp;
  1996. var TypeError$6 = global$u.TypeError;
  1997. var decodeURIComponent = global$u.decodeURIComponent;
  1998. var encodeURIComponent$1 = global$u.encodeURIComponent;
  1999. var charAt$5 = uncurryThis$s(''.charAt);
  2000. var join$2 = uncurryThis$s([].join);
  2001. var push$6 = uncurryThis$s([].push);
  2002. var replace$6 = uncurryThis$s(''.replace);
  2003. var shift$1 = uncurryThis$s([].shift);
  2004. var splice = uncurryThis$s([].splice);
  2005. var split$1 = uncurryThis$s(''.split);
  2006. var stringSlice$7 = uncurryThis$s(''.slice);
  2007. var plus = /\+/g;
  2008. var sequences = Array(4);
  2009. var percentSequence = function (bytes) {
  2010. return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp$1('((?:%[\\da-f]{2}){' + bytes + '})', 'gi'));
  2011. };
  2012. var percentDecode = function (sequence) {
  2013. try {
  2014. return decodeURIComponent(sequence);
  2015. } catch (error) {
  2016. return sequence;
  2017. }
  2018. };
  2019. var deserialize = function (it) {
  2020. var result = replace$6(it, plus, ' ');
  2021. var bytes = 4;
  2022. try {
  2023. return decodeURIComponent(result);
  2024. } catch (error) {
  2025. while (bytes) {
  2026. result = replace$6(result, percentSequence(bytes--), percentDecode);
  2027. }
  2028. return result;
  2029. }
  2030. };
  2031. var find = /[!'()~]|%20/g;
  2032. var replacements = {
  2033. '!': '%21',
  2034. "'": '%27',
  2035. '(': '%28',
  2036. ')': '%29',
  2037. '~': '%7E',
  2038. '%20': '+'
  2039. };
  2040. var replacer = function (match) {
  2041. return replacements[match];
  2042. };
  2043. var serialize = function (it) {
  2044. return replace$6(encodeURIComponent$1(it), find, replacer);
  2045. };
  2046. var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {
  2047. setInternalState$6(this, {
  2048. type: URL_SEARCH_PARAMS_ITERATOR,
  2049. iterator: getIterator$2(getInternalParamsState(params).entries),
  2050. kind: kind
  2051. });
  2052. }, 'Iterator', function next() {
  2053. var state = getInternalIteratorState(this);
  2054. var kind = state.kind;
  2055. var step = state.iterator.next();
  2056. var entry = step.value;
  2057. if (!step.done) {
  2058. step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];
  2059. } return step;
  2060. }, true);
  2061. var URLSearchParamsState = function (init) {
  2062. this.entries = [];
  2063. this.url = null;
  2064. if (init !== undefined) {
  2065. if (isObject$e(init)) this.parseObject(init);
  2066. else this.parseQuery(typeof init == 'string' ? charAt$5(init, 0) === '?' ? stringSlice$7(init, 1) : init : $toString$2(init));
  2067. }
  2068. };
  2069. URLSearchParamsState.prototype = {
  2070. type: URL_SEARCH_PARAMS,
  2071. bindURL: function (url) {
  2072. this.url = url;
  2073. this.update();
  2074. },
  2075. parseObject: function (object) {
  2076. var iteratorMethod = getIteratorMethod$2(object);
  2077. var iterator, next, step, entryIterator, entryNext, first, second;
  2078. if (iteratorMethod) {
  2079. iterator = getIterator$2(object, iteratorMethod);
  2080. next = iterator.next;
  2081. while (!(step = call$h(next, iterator)).done) {
  2082. entryIterator = getIterator$2(anObject$9(step.value));
  2083. entryNext = entryIterator.next;
  2084. if (
  2085. (first = call$h(entryNext, entryIterator)).done ||
  2086. (second = call$h(entryNext, entryIterator)).done ||
  2087. !call$h(entryNext, entryIterator).done
  2088. ) throw TypeError$6('Expected sequence with length 2');
  2089. push$6(this.entries, { key: $toString$2(first.value), value: $toString$2(second.value) });
  2090. }
  2091. } else for (var key in object) if (hasOwn$b(object, key)) {
  2092. push$6(this.entries, { key: key, value: $toString$2(object[key]) });
  2093. }
  2094. },
  2095. parseQuery: function (query) {
  2096. if (query) {
  2097. var attributes = split$1(query, '&');
  2098. var index = 0;
  2099. var attribute, entry;
  2100. while (index < attributes.length) {
  2101. attribute = attributes[index++];
  2102. if (attribute.length) {
  2103. entry = split$1(attribute, '=');
  2104. push$6(this.entries, {
  2105. key: deserialize(shift$1(entry)),
  2106. value: deserialize(join$2(entry, '='))
  2107. });
  2108. }
  2109. }
  2110. }
  2111. },
  2112. serialize: function () {
  2113. var entries = this.entries;
  2114. var result = [];
  2115. var index = 0;
  2116. var entry;
  2117. while (index < entries.length) {
  2118. entry = entries[index++];
  2119. push$6(result, serialize(entry.key) + '=' + serialize(entry.value));
  2120. } return join$2(result, '&');
  2121. },
  2122. update: function () {
  2123. this.entries.length = 0;
  2124. this.parseQuery(this.url.query);
  2125. },
  2126. updateURL: function () {
  2127. if (this.url) this.url.update();
  2128. }
  2129. };
  2130. // `URLSearchParams` constructor
  2131. // https://url.spec.whatwg.org/#interface-urlsearchparams
  2132. var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
  2133. anInstance$6(this, URLSearchParamsPrototype);
  2134. var init = arguments.length > 0 ? arguments[0] : undefined;
  2135. setInternalState$6(this, new URLSearchParamsState(init));
  2136. };
  2137. var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;
  2138. defineBuiltIns$2(URLSearchParamsPrototype, {
  2139. // `URLSearchParams.prototype.append` method
  2140. // https://url.spec.whatwg.org/#dom-urlsearchparams-append
  2141. append: function append(name, value) {
  2142. validateArgumentsLength$2(arguments.length, 2);
  2143. var state = getInternalParamsState(this);
  2144. push$6(state.entries, { key: $toString$2(name), value: $toString$2(value) });
  2145. state.updateURL();
  2146. },
  2147. // `URLSearchParams.prototype.delete` method
  2148. // https://url.spec.whatwg.org/#dom-urlsearchparams-delete
  2149. 'delete': function (name) {
  2150. validateArgumentsLength$2(arguments.length, 1);
  2151. var state = getInternalParamsState(this);
  2152. var entries = state.entries;
  2153. var key = $toString$2(name);
  2154. var index = 0;
  2155. while (index < entries.length) {
  2156. if (entries[index].key === key) splice(entries, index, 1);
  2157. else index++;
  2158. }
  2159. state.updateURL();
  2160. },
  2161. // `URLSearchParams.prototype.get` method
  2162. // https://url.spec.whatwg.org/#dom-urlsearchparams-get
  2163. get: function get(name) {
  2164. validateArgumentsLength$2(arguments.length, 1);
  2165. var entries = getInternalParamsState(this).entries;
  2166. var key = $toString$2(name);
  2167. var index = 0;
  2168. for (; index < entries.length; index++) {
  2169. if (entries[index].key === key) return entries[index].value;
  2170. }
  2171. return null;
  2172. },
  2173. // `URLSearchParams.prototype.getAll` method
  2174. // https://url.spec.whatwg.org/#dom-urlsearchparams-getall
  2175. getAll: function getAll(name) {
  2176. validateArgumentsLength$2(arguments.length, 1);
  2177. var entries = getInternalParamsState(this).entries;
  2178. var key = $toString$2(name);
  2179. var result = [];
  2180. var index = 0;
  2181. for (; index < entries.length; index++) {
  2182. if (entries[index].key === key) push$6(result, entries[index].value);
  2183. }
  2184. return result;
  2185. },
  2186. // `URLSearchParams.prototype.has` method
  2187. // https://url.spec.whatwg.org/#dom-urlsearchparams-has
  2188. has: function has(name) {
  2189. validateArgumentsLength$2(arguments.length, 1);
  2190. var entries = getInternalParamsState(this).entries;
  2191. var key = $toString$2(name);
  2192. var index = 0;
  2193. while (index < entries.length) {
  2194. if (entries[index++].key === key) return true;
  2195. }
  2196. return false;
  2197. },
  2198. // `URLSearchParams.prototype.set` method
  2199. // https://url.spec.whatwg.org/#dom-urlsearchparams-set
  2200. set: function set(name, value) {
  2201. validateArgumentsLength$2(arguments.length, 1);
  2202. var state = getInternalParamsState(this);
  2203. var entries = state.entries;
  2204. var found = false;
  2205. var key = $toString$2(name);
  2206. var val = $toString$2(value);
  2207. var index = 0;
  2208. var entry;
  2209. for (; index < entries.length; index++) {
  2210. entry = entries[index];
  2211. if (entry.key === key) {
  2212. if (found) splice(entries, index--, 1);
  2213. else {
  2214. found = true;
  2215. entry.value = val;
  2216. }
  2217. }
  2218. }
  2219. if (!found) push$6(entries, { key: key, value: val });
  2220. state.updateURL();
  2221. },
  2222. // `URLSearchParams.prototype.sort` method
  2223. // https://url.spec.whatwg.org/#dom-urlsearchparams-sort
  2224. sort: function sort() {
  2225. var state = getInternalParamsState(this);
  2226. arraySort(state.entries, function (a, b) {
  2227. return a.key > b.key ? 1 : -1;
  2228. });
  2229. state.updateURL();
  2230. },
  2231. // `URLSearchParams.prototype.forEach` method
  2232. forEach: function forEach(callback /* , thisArg */) {
  2233. var entries = getInternalParamsState(this).entries;
  2234. var boundFunction = bind$8(callback, arguments.length > 1 ? arguments[1] : undefined);
  2235. var index = 0;
  2236. var entry;
  2237. while (index < entries.length) {
  2238. entry = entries[index++];
  2239. boundFunction(entry.value, entry.key, this);
  2240. }
  2241. },
  2242. // `URLSearchParams.prototype.keys` method
  2243. keys: function keys() {
  2244. return new URLSearchParamsIterator(this, 'keys');
  2245. },
  2246. // `URLSearchParams.prototype.values` method
  2247. values: function values() {
  2248. return new URLSearchParamsIterator(this, 'values');
  2249. },
  2250. // `URLSearchParams.prototype.entries` method
  2251. entries: function entries() {
  2252. return new URLSearchParamsIterator(this, 'entries');
  2253. }
  2254. }, { enumerable: true });
  2255. // `URLSearchParams.prototype[@@iterator]` method
  2256. defineBuiltIn$9(URLSearchParamsPrototype, ITERATOR$2, URLSearchParamsPrototype.entries, { name: 'entries' });
  2257. // `URLSearchParams.prototype.toString` method
  2258. // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
  2259. defineBuiltIn$9(URLSearchParamsPrototype, 'toString', function toString() {
  2260. return getInternalParamsState(this).serialize();
  2261. }, { enumerable: true });
  2262. setToStringTag$5(URLSearchParamsConstructor, URL_SEARCH_PARAMS);
  2263. $$w({ global: true, constructor: true, forced: !USE_NATIVE_URL$1 }, {
  2264. URLSearchParams: URLSearchParamsConstructor
  2265. });
  2266. // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`
  2267. if (!USE_NATIVE_URL$1 && isCallable$b(Headers)) {
  2268. var headersHas = uncurryThis$s(HeadersPrototype.has);
  2269. var headersSet = uncurryThis$s(HeadersPrototype.set);
  2270. var wrapRequestOptions = function (init) {
  2271. if (isObject$e(init)) {
  2272. var body = init.body;
  2273. var headers;
  2274. if (classof$9(body) === URL_SEARCH_PARAMS) {
  2275. headers = init.headers ? new Headers(init.headers) : new Headers();
  2276. if (!headersHas(headers, 'content-type')) {
  2277. headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
  2278. }
  2279. return create$3(init, {
  2280. body: createPropertyDescriptor$2(0, $toString$2(body)),
  2281. headers: createPropertyDescriptor$2(0, headers)
  2282. });
  2283. }
  2284. } return init;
  2285. };
  2286. if (isCallable$b(nativeFetch)) {
  2287. $$w({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, {
  2288. fetch: function fetch(input /* , init */) {
  2289. return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
  2290. }
  2291. });
  2292. }
  2293. if (isCallable$b(NativeRequest)) {
  2294. var RequestConstructor = function Request(input /* , init */) {
  2295. anInstance$6(this, RequestPrototype);
  2296. return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
  2297. };
  2298. RequestPrototype.constructor = RequestConstructor;
  2299. RequestConstructor.prototype = RequestPrototype;
  2300. $$w({ global: true, constructor: true, dontCallGetSet: true, forced: true }, {
  2301. Request: RequestConstructor
  2302. });
  2303. }
  2304. }
  2305. var web_urlSearchParams_constructor = {
  2306. URLSearchParams: URLSearchParamsConstructor,
  2307. getState: getInternalParamsState
  2308. };
  2309. // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
  2310. var $$v = _export;
  2311. var DESCRIPTORS$a = descriptors;
  2312. var USE_NATIVE_URL = nativeUrl;
  2313. var global$t = global$F;
  2314. var bind$7 = functionBindContext;
  2315. var uncurryThis$r = functionUncurryThis;
  2316. var defineBuiltIn$8 = defineBuiltIn$f;
  2317. var defineBuiltInAccessor = defineBuiltInAccessor$1;
  2318. var anInstance$5 = anInstance$7;
  2319. var hasOwn$a = hasOwnProperty_1;
  2320. var assign = objectAssign;
  2321. var arrayFrom = arrayFrom$1;
  2322. var arraySlice$9 = arraySliceSimple;
  2323. var codeAt = stringMultibyte.codeAt;
  2324. var toASCII = stringPunycodeToAscii;
  2325. var $toString$1 = toString$a;
  2326. var setToStringTag$4 = setToStringTag$8;
  2327. var validateArgumentsLength$1 = validateArgumentsLength$3;
  2328. var URLSearchParamsModule = web_urlSearchParams_constructor;
  2329. var InternalStateModule$6 = internalState;
  2330. var setInternalState$5 = InternalStateModule$6.set;
  2331. var getInternalURLState = InternalStateModule$6.getterFor('URL');
  2332. var URLSearchParams$1 = URLSearchParamsModule.URLSearchParams;
  2333. var getInternalSearchParamsState = URLSearchParamsModule.getState;
  2334. var NativeURL = global$t.URL;
  2335. var TypeError$5 = global$t.TypeError;
  2336. var parseInt$1 = global$t.parseInt;
  2337. var floor$4 = Math.floor;
  2338. var pow$1 = Math.pow;
  2339. var charAt$4 = uncurryThis$r(''.charAt);
  2340. var exec$3 = uncurryThis$r(/./.exec);
  2341. var join$1 = uncurryThis$r([].join);
  2342. var numberToString$1 = uncurryThis$r(1.0.toString);
  2343. var pop = uncurryThis$r([].pop);
  2344. var push$5 = uncurryThis$r([].push);
  2345. var replace$5 = uncurryThis$r(''.replace);
  2346. var shift = uncurryThis$r([].shift);
  2347. var split = uncurryThis$r(''.split);
  2348. var stringSlice$6 = uncurryThis$r(''.slice);
  2349. var toLowerCase = uncurryThis$r(''.toLowerCase);
  2350. var unshift = uncurryThis$r([].unshift);
  2351. var INVALID_AUTHORITY = 'Invalid authority';
  2352. var INVALID_SCHEME = 'Invalid scheme';
  2353. var INVALID_HOST = 'Invalid host';
  2354. var INVALID_PORT = 'Invalid port';
  2355. var ALPHA = /[a-z]/i;
  2356. // eslint-disable-next-line regexp/no-obscure-range -- safe
  2357. var ALPHANUMERIC = /[\d+-.a-z]/i;
  2358. var DIGIT = /\d/;
  2359. var HEX_START = /^0x/i;
  2360. var OCT = /^[0-7]+$/;
  2361. var DEC = /^\d+$/;
  2362. var HEX = /^[\da-f]+$/i;
  2363. /* eslint-disable regexp/no-control-character -- safe */
  2364. var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/;
  2365. var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/;
  2366. var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u0020]+|[\u0000-\u0020]+$/g;
  2367. var TAB_AND_NEW_LINE = /[\t\n\r]/g;
  2368. /* eslint-enable regexp/no-control-character -- safe */
  2369. var EOF;
  2370. // https://url.spec.whatwg.org/#ipv4-number-parser
  2371. var parseIPv4 = function (input) {
  2372. var parts = split(input, '.');
  2373. var partsLength, numbers, index, part, radix, number, ipv4;
  2374. if (parts.length && parts[parts.length - 1] == '') {
  2375. parts.length--;
  2376. }
  2377. partsLength = parts.length;
  2378. if (partsLength > 4) return input;
  2379. numbers = [];
  2380. for (index = 0; index < partsLength; index++) {
  2381. part = parts[index];
  2382. if (part == '') return input;
  2383. radix = 10;
  2384. if (part.length > 1 && charAt$4(part, 0) == '0') {
  2385. radix = exec$3(HEX_START, part) ? 16 : 8;
  2386. part = stringSlice$6(part, radix == 8 ? 1 : 2);
  2387. }
  2388. if (part === '') {
  2389. number = 0;
  2390. } else {
  2391. if (!exec$3(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;
  2392. number = parseInt$1(part, radix);
  2393. }
  2394. push$5(numbers, number);
  2395. }
  2396. for (index = 0; index < partsLength; index++) {
  2397. number = numbers[index];
  2398. if (index == partsLength - 1) {
  2399. if (number >= pow$1(256, 5 - partsLength)) return null;
  2400. } else if (number > 255) return null;
  2401. }
  2402. ipv4 = pop(numbers);
  2403. for (index = 0; index < numbers.length; index++) {
  2404. ipv4 += numbers[index] * pow$1(256, 3 - index);
  2405. }
  2406. return ipv4;
  2407. };
  2408. // https://url.spec.whatwg.org/#concept-ipv6-parser
  2409. // eslint-disable-next-line max-statements -- TODO
  2410. var parseIPv6 = function (input) {
  2411. var address = [0, 0, 0, 0, 0, 0, 0, 0];
  2412. var pieceIndex = 0;
  2413. var compress = null;
  2414. var pointer = 0;
  2415. var value, length, numbersSeen, ipv4Piece, number, swaps, swap;
  2416. var chr = function () {
  2417. return charAt$4(input, pointer);
  2418. };
  2419. if (chr() == ':') {
  2420. if (charAt$4(input, 1) != ':') return;
  2421. pointer += 2;
  2422. pieceIndex++;
  2423. compress = pieceIndex;
  2424. }
  2425. while (chr()) {
  2426. if (pieceIndex == 8) return;
  2427. if (chr() == ':') {
  2428. if (compress !== null) return;
  2429. pointer++;
  2430. pieceIndex++;
  2431. compress = pieceIndex;
  2432. continue;
  2433. }
  2434. value = length = 0;
  2435. while (length < 4 && exec$3(HEX, chr())) {
  2436. value = value * 16 + parseInt$1(chr(), 16);
  2437. pointer++;
  2438. length++;
  2439. }
  2440. if (chr() == '.') {
  2441. if (length == 0) return;
  2442. pointer -= length;
  2443. if (pieceIndex > 6) return;
  2444. numbersSeen = 0;
  2445. while (chr()) {
  2446. ipv4Piece = null;
  2447. if (numbersSeen > 0) {
  2448. if (chr() == '.' && numbersSeen < 4) pointer++;
  2449. else return;
  2450. }
  2451. if (!exec$3(DIGIT, chr())) return;
  2452. while (exec$3(DIGIT, chr())) {
  2453. number = parseInt$1(chr(), 10);
  2454. if (ipv4Piece === null) ipv4Piece = number;
  2455. else if (ipv4Piece == 0) return;
  2456. else ipv4Piece = ipv4Piece * 10 + number;
  2457. if (ipv4Piece > 255) return;
  2458. pointer++;
  2459. }
  2460. address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
  2461. numbersSeen++;
  2462. if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;
  2463. }
  2464. if (numbersSeen != 4) return;
  2465. break;
  2466. } else if (chr() == ':') {
  2467. pointer++;
  2468. if (!chr()) return;
  2469. } else if (chr()) return;
  2470. address[pieceIndex++] = value;
  2471. }
  2472. if (compress !== null) {
  2473. swaps = pieceIndex - compress;
  2474. pieceIndex = 7;
  2475. while (pieceIndex != 0 && swaps > 0) {
  2476. swap = address[pieceIndex];
  2477. address[pieceIndex--] = address[compress + swaps - 1];
  2478. address[compress + --swaps] = swap;
  2479. }
  2480. } else if (pieceIndex != 8) return;
  2481. return address;
  2482. };
  2483. var findLongestZeroSequence = function (ipv6) {
  2484. var maxIndex = null;
  2485. var maxLength = 1;
  2486. var currStart = null;
  2487. var currLength = 0;
  2488. var index = 0;
  2489. for (; index < 8; index++) {
  2490. if (ipv6[index] !== 0) {
  2491. if (currLength > maxLength) {
  2492. maxIndex = currStart;
  2493. maxLength = currLength;
  2494. }
  2495. currStart = null;
  2496. currLength = 0;
  2497. } else {
  2498. if (currStart === null) currStart = index;
  2499. ++currLength;
  2500. }
  2501. }
  2502. if (currLength > maxLength) {
  2503. maxIndex = currStart;
  2504. maxLength = currLength;
  2505. }
  2506. return maxIndex;
  2507. };
  2508. // https://url.spec.whatwg.org/#host-serializing
  2509. var serializeHost = function (host) {
  2510. var result, index, compress, ignore0;
  2511. // ipv4
  2512. if (typeof host == 'number') {
  2513. result = [];
  2514. for (index = 0; index < 4; index++) {
  2515. unshift(result, host % 256);
  2516. host = floor$4(host / 256);
  2517. } return join$1(result, '.');
  2518. // ipv6
  2519. } else if (typeof host == 'object') {
  2520. result = '';
  2521. compress = findLongestZeroSequence(host);
  2522. for (index = 0; index < 8; index++) {
  2523. if (ignore0 && host[index] === 0) continue;
  2524. if (ignore0) ignore0 = false;
  2525. if (compress === index) {
  2526. result += index ? ':' : '::';
  2527. ignore0 = true;
  2528. } else {
  2529. result += numberToString$1(host[index], 16);
  2530. if (index < 7) result += ':';
  2531. }
  2532. }
  2533. return '[' + result + ']';
  2534. } return host;
  2535. };
  2536. var C0ControlPercentEncodeSet = {};
  2537. var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {
  2538. ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1
  2539. });
  2540. var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {
  2541. '#': 1, '?': 1, '{': 1, '}': 1
  2542. });
  2543. var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {
  2544. '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1
  2545. });
  2546. var percentEncode = function (chr, set) {
  2547. var code = codeAt(chr, 0);
  2548. return code > 0x20 && code < 0x7F && !hasOwn$a(set, chr) ? chr : encodeURIComponent(chr);
  2549. };
  2550. // https://url.spec.whatwg.org/#special-scheme
  2551. var specialSchemes = {
  2552. ftp: 21,
  2553. file: null,
  2554. http: 80,
  2555. https: 443,
  2556. ws: 80,
  2557. wss: 443
  2558. };
  2559. // https://url.spec.whatwg.org/#windows-drive-letter
  2560. var isWindowsDriveLetter = function (string, normalized) {
  2561. var second;
  2562. return string.length == 2 && exec$3(ALPHA, charAt$4(string, 0))
  2563. && ((second = charAt$4(string, 1)) == ':' || (!normalized && second == '|'));
  2564. };
  2565. // https://url.spec.whatwg.org/#start-with-a-windows-drive-letter
  2566. var startsWithWindowsDriveLetter = function (string) {
  2567. var third;
  2568. return string.length > 1 && isWindowsDriveLetter(stringSlice$6(string, 0, 2)) && (
  2569. string.length == 2 ||
  2570. ((third = charAt$4(string, 2)) === '/' || third === '\\' || third === '?' || third === '#')
  2571. );
  2572. };
  2573. // https://url.spec.whatwg.org/#single-dot-path-segment
  2574. var isSingleDot = function (segment) {
  2575. return segment === '.' || toLowerCase(segment) === '%2e';
  2576. };
  2577. // https://url.spec.whatwg.org/#double-dot-path-segment
  2578. var isDoubleDot = function (segment) {
  2579. segment = toLowerCase(segment);
  2580. return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';
  2581. };
  2582. // States:
  2583. var SCHEME_START = {};
  2584. var SCHEME = {};
  2585. var NO_SCHEME = {};
  2586. var SPECIAL_RELATIVE_OR_AUTHORITY = {};
  2587. var PATH_OR_AUTHORITY = {};
  2588. var RELATIVE = {};
  2589. var RELATIVE_SLASH = {};
  2590. var SPECIAL_AUTHORITY_SLASHES = {};
  2591. var SPECIAL_AUTHORITY_IGNORE_SLASHES = {};
  2592. var AUTHORITY = {};
  2593. var HOST = {};
  2594. var HOSTNAME = {};
  2595. var PORT = {};
  2596. var FILE = {};
  2597. var FILE_SLASH = {};
  2598. var FILE_HOST = {};
  2599. var PATH_START = {};
  2600. var PATH = {};
  2601. var CANNOT_BE_A_BASE_URL_PATH = {};
  2602. var QUERY = {};
  2603. var FRAGMENT = {};
  2604. var URLState = function (url, isBase, base) {
  2605. var urlString = $toString$1(url);
  2606. var baseState, failure, searchParams;
  2607. if (isBase) {
  2608. failure = this.parse(urlString);
  2609. if (failure) throw TypeError$5(failure);
  2610. this.searchParams = null;
  2611. } else {
  2612. if (base !== undefined) baseState = new URLState(base, true);
  2613. failure = this.parse(urlString, null, baseState);
  2614. if (failure) throw TypeError$5(failure);
  2615. searchParams = getInternalSearchParamsState(new URLSearchParams$1());
  2616. searchParams.bindURL(this);
  2617. this.searchParams = searchParams;
  2618. }
  2619. };
  2620. URLState.prototype = {
  2621. type: 'URL',
  2622. // https://url.spec.whatwg.org/#url-parsing
  2623. // eslint-disable-next-line max-statements -- TODO
  2624. parse: function (input, stateOverride, base) {
  2625. var url = this;
  2626. var state = stateOverride || SCHEME_START;
  2627. var pointer = 0;
  2628. var buffer = '';
  2629. var seenAt = false;
  2630. var seenBracket = false;
  2631. var seenPasswordToken = false;
  2632. var codePoints, chr, bufferCodePoints, failure;
  2633. input = $toString$1(input);
  2634. if (!stateOverride) {
  2635. url.scheme = '';
  2636. url.username = '';
  2637. url.password = '';
  2638. url.host = null;
  2639. url.port = null;
  2640. url.path = [];
  2641. url.query = null;
  2642. url.fragment = null;
  2643. url.cannotBeABaseURL = false;
  2644. input = replace$5(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');
  2645. }
  2646. input = replace$5(input, TAB_AND_NEW_LINE, '');
  2647. codePoints = arrayFrom(input);
  2648. while (pointer <= codePoints.length) {
  2649. chr = codePoints[pointer];
  2650. switch (state) {
  2651. case SCHEME_START:
  2652. if (chr && exec$3(ALPHA, chr)) {
  2653. buffer += toLowerCase(chr);
  2654. state = SCHEME;
  2655. } else if (!stateOverride) {
  2656. state = NO_SCHEME;
  2657. continue;
  2658. } else return INVALID_SCHEME;
  2659. break;
  2660. case SCHEME:
  2661. if (chr && (exec$3(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {
  2662. buffer += toLowerCase(chr);
  2663. } else if (chr == ':') {
  2664. if (stateOverride && (
  2665. (url.isSpecial() != hasOwn$a(specialSchemes, buffer)) ||
  2666. (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||
  2667. (url.scheme == 'file' && !url.host)
  2668. )) return;
  2669. url.scheme = buffer;
  2670. if (stateOverride) {
  2671. if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;
  2672. return;
  2673. }
  2674. buffer = '';
  2675. if (url.scheme == 'file') {
  2676. state = FILE;
  2677. } else if (url.isSpecial() && base && base.scheme == url.scheme) {
  2678. state = SPECIAL_RELATIVE_OR_AUTHORITY;
  2679. } else if (url.isSpecial()) {
  2680. state = SPECIAL_AUTHORITY_SLASHES;
  2681. } else if (codePoints[pointer + 1] == '/') {
  2682. state = PATH_OR_AUTHORITY;
  2683. pointer++;
  2684. } else {
  2685. url.cannotBeABaseURL = true;
  2686. push$5(url.path, '');
  2687. state = CANNOT_BE_A_BASE_URL_PATH;
  2688. }
  2689. } else if (!stateOverride) {
  2690. buffer = '';
  2691. state = NO_SCHEME;
  2692. pointer = 0;
  2693. continue;
  2694. } else return INVALID_SCHEME;
  2695. break;
  2696. case NO_SCHEME:
  2697. if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;
  2698. if (base.cannotBeABaseURL && chr == '#') {
  2699. url.scheme = base.scheme;
  2700. url.path = arraySlice$9(base.path);
  2701. url.query = base.query;
  2702. url.fragment = '';
  2703. url.cannotBeABaseURL = true;
  2704. state = FRAGMENT;
  2705. break;
  2706. }
  2707. state = base.scheme == 'file' ? FILE : RELATIVE;
  2708. continue;
  2709. case SPECIAL_RELATIVE_OR_AUTHORITY:
  2710. if (chr == '/' && codePoints[pointer + 1] == '/') {
  2711. state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
  2712. pointer++;
  2713. } else {
  2714. state = RELATIVE;
  2715. continue;
  2716. } break;
  2717. case PATH_OR_AUTHORITY:
  2718. if (chr == '/') {
  2719. state = AUTHORITY;
  2720. break;
  2721. } else {
  2722. state = PATH;
  2723. continue;
  2724. }
  2725. case RELATIVE:
  2726. url.scheme = base.scheme;
  2727. if (chr == EOF) {
  2728. url.username = base.username;
  2729. url.password = base.password;
  2730. url.host = base.host;
  2731. url.port = base.port;
  2732. url.path = arraySlice$9(base.path);
  2733. url.query = base.query;
  2734. } else if (chr == '/' || (chr == '\\' && url.isSpecial())) {
  2735. state = RELATIVE_SLASH;
  2736. } else if (chr == '?') {
  2737. url.username = base.username;
  2738. url.password = base.password;
  2739. url.host = base.host;
  2740. url.port = base.port;
  2741. url.path = arraySlice$9(base.path);
  2742. url.query = '';
  2743. state = QUERY;
  2744. } else if (chr == '#') {
  2745. url.username = base.username;
  2746. url.password = base.password;
  2747. url.host = base.host;
  2748. url.port = base.port;
  2749. url.path = arraySlice$9(base.path);
  2750. url.query = base.query;
  2751. url.fragment = '';
  2752. state = FRAGMENT;
  2753. } else {
  2754. url.username = base.username;
  2755. url.password = base.password;
  2756. url.host = base.host;
  2757. url.port = base.port;
  2758. url.path = arraySlice$9(base.path);
  2759. url.path.length--;
  2760. state = PATH;
  2761. continue;
  2762. } break;
  2763. case RELATIVE_SLASH:
  2764. if (url.isSpecial() && (chr == '/' || chr == '\\')) {
  2765. state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
  2766. } else if (chr == '/') {
  2767. state = AUTHORITY;
  2768. } else {
  2769. url.username = base.username;
  2770. url.password = base.password;
  2771. url.host = base.host;
  2772. url.port = base.port;
  2773. state = PATH;
  2774. continue;
  2775. } break;
  2776. case SPECIAL_AUTHORITY_SLASHES:
  2777. state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
  2778. if (chr != '/' || charAt$4(buffer, pointer + 1) != '/') continue;
  2779. pointer++;
  2780. break;
  2781. case SPECIAL_AUTHORITY_IGNORE_SLASHES:
  2782. if (chr != '/' && chr != '\\') {
  2783. state = AUTHORITY;
  2784. continue;
  2785. } break;
  2786. case AUTHORITY:
  2787. if (chr == '@') {
  2788. if (seenAt) buffer = '%40' + buffer;
  2789. seenAt = true;
  2790. bufferCodePoints = arrayFrom(buffer);
  2791. for (var i = 0; i < bufferCodePoints.length; i++) {
  2792. var codePoint = bufferCodePoints[i];
  2793. if (codePoint == ':' && !seenPasswordToken) {
  2794. seenPasswordToken = true;
  2795. continue;
  2796. }
  2797. var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);
  2798. if (seenPasswordToken) url.password += encodedCodePoints;
  2799. else url.username += encodedCodePoints;
  2800. }
  2801. buffer = '';
  2802. } else if (
  2803. chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
  2804. (chr == '\\' && url.isSpecial())
  2805. ) {
  2806. if (seenAt && buffer == '') return INVALID_AUTHORITY;
  2807. pointer -= arrayFrom(buffer).length + 1;
  2808. buffer = '';
  2809. state = HOST;
  2810. } else buffer += chr;
  2811. break;
  2812. case HOST:
  2813. case HOSTNAME:
  2814. if (stateOverride && url.scheme == 'file') {
  2815. state = FILE_HOST;
  2816. continue;
  2817. } else if (chr == ':' && !seenBracket) {
  2818. if (buffer == '') return INVALID_HOST;
  2819. failure = url.parseHost(buffer);
  2820. if (failure) return failure;
  2821. buffer = '';
  2822. state = PORT;
  2823. if (stateOverride == HOSTNAME) return;
  2824. } else if (
  2825. chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
  2826. (chr == '\\' && url.isSpecial())
  2827. ) {
  2828. if (url.isSpecial() && buffer == '') return INVALID_HOST;
  2829. if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;
  2830. failure = url.parseHost(buffer);
  2831. if (failure) return failure;
  2832. buffer = '';
  2833. state = PATH_START;
  2834. if (stateOverride) return;
  2835. continue;
  2836. } else {
  2837. if (chr == '[') seenBracket = true;
  2838. else if (chr == ']') seenBracket = false;
  2839. buffer += chr;
  2840. } break;
  2841. case PORT:
  2842. if (exec$3(DIGIT, chr)) {
  2843. buffer += chr;
  2844. } else if (
  2845. chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
  2846. (chr == '\\' && url.isSpecial()) ||
  2847. stateOverride
  2848. ) {
  2849. if (buffer != '') {
  2850. var port = parseInt$1(buffer, 10);
  2851. if (port > 0xFFFF) return INVALID_PORT;
  2852. url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;
  2853. buffer = '';
  2854. }
  2855. if (stateOverride) return;
  2856. state = PATH_START;
  2857. continue;
  2858. } else return INVALID_PORT;
  2859. break;
  2860. case FILE:
  2861. url.scheme = 'file';
  2862. if (chr == '/' || chr == '\\') state = FILE_SLASH;
  2863. else if (base && base.scheme == 'file') {
  2864. if (chr == EOF) {
  2865. url.host = base.host;
  2866. url.path = arraySlice$9(base.path);
  2867. url.query = base.query;
  2868. } else if (chr == '?') {
  2869. url.host = base.host;
  2870. url.path = arraySlice$9(base.path);
  2871. url.query = '';
  2872. state = QUERY;
  2873. } else if (chr == '#') {
  2874. url.host = base.host;
  2875. url.path = arraySlice$9(base.path);
  2876. url.query = base.query;
  2877. url.fragment = '';
  2878. state = FRAGMENT;
  2879. } else {
  2880. if (!startsWithWindowsDriveLetter(join$1(arraySlice$9(codePoints, pointer), ''))) {
  2881. url.host = base.host;
  2882. url.path = arraySlice$9(base.path);
  2883. url.shortenPath();
  2884. }
  2885. state = PATH;
  2886. continue;
  2887. }
  2888. } else {
  2889. state = PATH;
  2890. continue;
  2891. } break;
  2892. case FILE_SLASH:
  2893. if (chr == '/' || chr == '\\') {
  2894. state = FILE_HOST;
  2895. break;
  2896. }
  2897. if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join$1(arraySlice$9(codePoints, pointer), ''))) {
  2898. if (isWindowsDriveLetter(base.path[0], true)) push$5(url.path, base.path[0]);
  2899. else url.host = base.host;
  2900. }
  2901. state = PATH;
  2902. continue;
  2903. case FILE_HOST:
  2904. if (chr == EOF || chr == '/' || chr == '\\' || chr == '?' || chr == '#') {
  2905. if (!stateOverride && isWindowsDriveLetter(buffer)) {
  2906. state = PATH;
  2907. } else if (buffer == '') {
  2908. url.host = '';
  2909. if (stateOverride) return;
  2910. state = PATH_START;
  2911. } else {
  2912. failure = url.parseHost(buffer);
  2913. if (failure) return failure;
  2914. if (url.host == 'localhost') url.host = '';
  2915. if (stateOverride) return;
  2916. buffer = '';
  2917. state = PATH_START;
  2918. } continue;
  2919. } else buffer += chr;
  2920. break;
  2921. case PATH_START:
  2922. if (url.isSpecial()) {
  2923. state = PATH;
  2924. if (chr != '/' && chr != '\\') continue;
  2925. } else if (!stateOverride && chr == '?') {
  2926. url.query = '';
  2927. state = QUERY;
  2928. } else if (!stateOverride && chr == '#') {
  2929. url.fragment = '';
  2930. state = FRAGMENT;
  2931. } else if (chr != EOF) {
  2932. state = PATH;
  2933. if (chr != '/') continue;
  2934. } break;
  2935. case PATH:
  2936. if (
  2937. chr == EOF || chr == '/' ||
  2938. (chr == '\\' && url.isSpecial()) ||
  2939. (!stateOverride && (chr == '?' || chr == '#'))
  2940. ) {
  2941. if (isDoubleDot(buffer)) {
  2942. url.shortenPath();
  2943. if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
  2944. push$5(url.path, '');
  2945. }
  2946. } else if (isSingleDot(buffer)) {
  2947. if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
  2948. push$5(url.path, '');
  2949. }
  2950. } else {
  2951. if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {
  2952. if (url.host) url.host = '';
  2953. buffer = charAt$4(buffer, 0) + ':'; // normalize windows drive letter
  2954. }
  2955. push$5(url.path, buffer);
  2956. }
  2957. buffer = '';
  2958. if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {
  2959. while (url.path.length > 1 && url.path[0] === '') {
  2960. shift(url.path);
  2961. }
  2962. }
  2963. if (chr == '?') {
  2964. url.query = '';
  2965. state = QUERY;
  2966. } else if (chr == '#') {
  2967. url.fragment = '';
  2968. state = FRAGMENT;
  2969. }
  2970. } else {
  2971. buffer += percentEncode(chr, pathPercentEncodeSet);
  2972. } break;
  2973. case CANNOT_BE_A_BASE_URL_PATH:
  2974. if (chr == '?') {
  2975. url.query = '';
  2976. state = QUERY;
  2977. } else if (chr == '#') {
  2978. url.fragment = '';
  2979. state = FRAGMENT;
  2980. } else if (chr != EOF) {
  2981. url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);
  2982. } break;
  2983. case QUERY:
  2984. if (!stateOverride && chr == '#') {
  2985. url.fragment = '';
  2986. state = FRAGMENT;
  2987. } else if (chr != EOF) {
  2988. if (chr == "'" && url.isSpecial()) url.query += '%27';
  2989. else if (chr == '#') url.query += '%23';
  2990. else url.query += percentEncode(chr, C0ControlPercentEncodeSet);
  2991. } break;
  2992. case FRAGMENT:
  2993. if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);
  2994. break;
  2995. }
  2996. pointer++;
  2997. }
  2998. },
  2999. // https://url.spec.whatwg.org/#host-parsing
  3000. parseHost: function (input) {
  3001. var result, codePoints, index;
  3002. if (charAt$4(input, 0) == '[') {
  3003. if (charAt$4(input, input.length - 1) != ']') return INVALID_HOST;
  3004. result = parseIPv6(stringSlice$6(input, 1, -1));
  3005. if (!result) return INVALID_HOST;
  3006. this.host = result;
  3007. // opaque host
  3008. } else if (!this.isSpecial()) {
  3009. if (exec$3(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;
  3010. result = '';
  3011. codePoints = arrayFrom(input);
  3012. for (index = 0; index < codePoints.length; index++) {
  3013. result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);
  3014. }
  3015. this.host = result;
  3016. } else {
  3017. input = toASCII(input);
  3018. if (exec$3(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;
  3019. result = parseIPv4(input);
  3020. if (result === null) return INVALID_HOST;
  3021. this.host = result;
  3022. }
  3023. },
  3024. // https://url.spec.whatwg.org/#cannot-have-a-username-password-port
  3025. cannotHaveUsernamePasswordPort: function () {
  3026. return !this.host || this.cannotBeABaseURL || this.scheme == 'file';
  3027. },
  3028. // https://url.spec.whatwg.org/#include-credentials
  3029. includesCredentials: function () {
  3030. return this.username != '' || this.password != '';
  3031. },
  3032. // https://url.spec.whatwg.org/#is-special
  3033. isSpecial: function () {
  3034. return hasOwn$a(specialSchemes, this.scheme);
  3035. },
  3036. // https://url.spec.whatwg.org/#shorten-a-urls-path
  3037. shortenPath: function () {
  3038. var path = this.path;
  3039. var pathSize = path.length;
  3040. if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {
  3041. path.length--;
  3042. }
  3043. },
  3044. // https://url.spec.whatwg.org/#concept-url-serializer
  3045. serialize: function () {
  3046. var url = this;
  3047. var scheme = url.scheme;
  3048. var username = url.username;
  3049. var password = url.password;
  3050. var host = url.host;
  3051. var port = url.port;
  3052. var path = url.path;
  3053. var query = url.query;
  3054. var fragment = url.fragment;
  3055. var output = scheme + ':';
  3056. if (host !== null) {
  3057. output += '//';
  3058. if (url.includesCredentials()) {
  3059. output += username + (password ? ':' + password : '') + '@';
  3060. }
  3061. output += serializeHost(host);
  3062. if (port !== null) output += ':' + port;
  3063. } else if (scheme == 'file') output += '//';
  3064. output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join$1(path, '/') : '';
  3065. if (query !== null) output += '?' + query;
  3066. if (fragment !== null) output += '#' + fragment;
  3067. return output;
  3068. },
  3069. // https://url.spec.whatwg.org/#dom-url-href
  3070. setHref: function (href) {
  3071. var failure = this.parse(href);
  3072. if (failure) throw TypeError$5(failure);
  3073. this.searchParams.update();
  3074. },
  3075. // https://url.spec.whatwg.org/#dom-url-origin
  3076. getOrigin: function () {
  3077. var scheme = this.scheme;
  3078. var port = this.port;
  3079. if (scheme == 'blob') try {
  3080. return new URLConstructor(scheme.path[0]).origin;
  3081. } catch (error) {
  3082. return 'null';
  3083. }
  3084. if (scheme == 'file' || !this.isSpecial()) return 'null';
  3085. return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');
  3086. },
  3087. // https://url.spec.whatwg.org/#dom-url-protocol
  3088. getProtocol: function () {
  3089. return this.scheme + ':';
  3090. },
  3091. setProtocol: function (protocol) {
  3092. this.parse($toString$1(protocol) + ':', SCHEME_START);
  3093. },
  3094. // https://url.spec.whatwg.org/#dom-url-username
  3095. getUsername: function () {
  3096. return this.username;
  3097. },
  3098. setUsername: function (username) {
  3099. var codePoints = arrayFrom($toString$1(username));
  3100. if (this.cannotHaveUsernamePasswordPort()) return;
  3101. this.username = '';
  3102. for (var i = 0; i < codePoints.length; i++) {
  3103. this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);
  3104. }
  3105. },
  3106. // https://url.spec.whatwg.org/#dom-url-password
  3107. getPassword: function () {
  3108. return this.password;
  3109. },
  3110. setPassword: function (password) {
  3111. var codePoints = arrayFrom($toString$1(password));
  3112. if (this.cannotHaveUsernamePasswordPort()) return;
  3113. this.password = '';
  3114. for (var i = 0; i < codePoints.length; i++) {
  3115. this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);
  3116. }
  3117. },
  3118. // https://url.spec.whatwg.org/#dom-url-host
  3119. getHost: function () {
  3120. var host = this.host;
  3121. var port = this.port;
  3122. return host === null ? ''
  3123. : port === null ? serializeHost(host)
  3124. : serializeHost(host) + ':' + port;
  3125. },
  3126. setHost: function (host) {
  3127. if (this.cannotBeABaseURL) return;
  3128. this.parse(host, HOST);
  3129. },
  3130. // https://url.spec.whatwg.org/#dom-url-hostname
  3131. getHostname: function () {
  3132. var host = this.host;
  3133. return host === null ? '' : serializeHost(host);
  3134. },
  3135. setHostname: function (hostname) {
  3136. if (this.cannotBeABaseURL) return;
  3137. this.parse(hostname, HOSTNAME);
  3138. },
  3139. // https://url.spec.whatwg.org/#dom-url-port
  3140. getPort: function () {
  3141. var port = this.port;
  3142. return port === null ? '' : $toString$1(port);
  3143. },
  3144. setPort: function (port) {
  3145. if (this.cannotHaveUsernamePasswordPort()) return;
  3146. port = $toString$1(port);
  3147. if (port == '') this.port = null;
  3148. else this.parse(port, PORT);
  3149. },
  3150. // https://url.spec.whatwg.org/#dom-url-pathname
  3151. getPathname: function () {
  3152. var path = this.path;
  3153. return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join$1(path, '/') : '';
  3154. },
  3155. setPathname: function (pathname) {
  3156. if (this.cannotBeABaseURL) return;
  3157. this.path = [];
  3158. this.parse(pathname, PATH_START);
  3159. },
  3160. // https://url.spec.whatwg.org/#dom-url-search
  3161. getSearch: function () {
  3162. var query = this.query;
  3163. return query ? '?' + query : '';
  3164. },
  3165. setSearch: function (search) {
  3166. search = $toString$1(search);
  3167. if (search == '') {
  3168. this.query = null;
  3169. } else {
  3170. if ('?' == charAt$4(search, 0)) search = stringSlice$6(search, 1);
  3171. this.query = '';
  3172. this.parse(search, QUERY);
  3173. }
  3174. this.searchParams.update();
  3175. },
  3176. // https://url.spec.whatwg.org/#dom-url-searchparams
  3177. getSearchParams: function () {
  3178. return this.searchParams.facade;
  3179. },
  3180. // https://url.spec.whatwg.org/#dom-url-hash
  3181. getHash: function () {
  3182. var fragment = this.fragment;
  3183. return fragment ? '#' + fragment : '';
  3184. },
  3185. setHash: function (hash) {
  3186. hash = $toString$1(hash);
  3187. if (hash == '') {
  3188. this.fragment = null;
  3189. return;
  3190. }
  3191. if ('#' == charAt$4(hash, 0)) hash = stringSlice$6(hash, 1);
  3192. this.fragment = '';
  3193. this.parse(hash, FRAGMENT);
  3194. },
  3195. update: function () {
  3196. this.query = this.searchParams.serialize() || null;
  3197. }
  3198. };
  3199. // `URL` constructor
  3200. // https://url.spec.whatwg.org/#url-class
  3201. var URLConstructor = function URL(url /* , base */) {
  3202. var that = anInstance$5(this, URLPrototype);
  3203. var base = validateArgumentsLength$1(arguments.length, 1) > 1 ? arguments[1] : undefined;
  3204. var state = setInternalState$5(that, new URLState(url, false, base));
  3205. if (!DESCRIPTORS$a) {
  3206. that.href = state.serialize();
  3207. that.origin = state.getOrigin();
  3208. that.protocol = state.getProtocol();
  3209. that.username = state.getUsername();
  3210. that.password = state.getPassword();
  3211. that.host = state.getHost();
  3212. that.hostname = state.getHostname();
  3213. that.port = state.getPort();
  3214. that.pathname = state.getPathname();
  3215. that.search = state.getSearch();
  3216. that.searchParams = state.getSearchParams();
  3217. that.hash = state.getHash();
  3218. }
  3219. };
  3220. var URLPrototype = URLConstructor.prototype;
  3221. var accessorDescriptor = function (getter, setter) {
  3222. return {
  3223. get: function () {
  3224. return getInternalURLState(this)[getter]();
  3225. },
  3226. set: setter && function (value) {
  3227. return getInternalURLState(this)[setter](value);
  3228. },
  3229. configurable: true,
  3230. enumerable: true
  3231. };
  3232. };
  3233. if (DESCRIPTORS$a) {
  3234. // `URL.prototype.href` accessors pair
  3235. // https://url.spec.whatwg.org/#dom-url-href
  3236. defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));
  3237. // `URL.prototype.origin` getter
  3238. // https://url.spec.whatwg.org/#dom-url-origin
  3239. defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));
  3240. // `URL.prototype.protocol` accessors pair
  3241. // https://url.spec.whatwg.org/#dom-url-protocol
  3242. defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));
  3243. // `URL.prototype.username` accessors pair
  3244. // https://url.spec.whatwg.org/#dom-url-username
  3245. defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));
  3246. // `URL.prototype.password` accessors pair
  3247. // https://url.spec.whatwg.org/#dom-url-password
  3248. defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));
  3249. // `URL.prototype.host` accessors pair
  3250. // https://url.spec.whatwg.org/#dom-url-host
  3251. defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));
  3252. // `URL.prototype.hostname` accessors pair
  3253. // https://url.spec.whatwg.org/#dom-url-hostname
  3254. defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));
  3255. // `URL.prototype.port` accessors pair
  3256. // https://url.spec.whatwg.org/#dom-url-port
  3257. defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));
  3258. // `URL.prototype.pathname` accessors pair
  3259. // https://url.spec.whatwg.org/#dom-url-pathname
  3260. defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));
  3261. // `URL.prototype.search` accessors pair
  3262. // https://url.spec.whatwg.org/#dom-url-search
  3263. defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));
  3264. // `URL.prototype.searchParams` getter
  3265. // https://url.spec.whatwg.org/#dom-url-searchparams
  3266. defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));
  3267. // `URL.prototype.hash` accessors pair
  3268. // https://url.spec.whatwg.org/#dom-url-hash
  3269. defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));
  3270. }
  3271. // `URL.prototype.toJSON` method
  3272. // https://url.spec.whatwg.org/#dom-url-tojson
  3273. defineBuiltIn$8(URLPrototype, 'toJSON', function toJSON() {
  3274. return getInternalURLState(this).serialize();
  3275. }, { enumerable: true });
  3276. // `URL.prototype.toString` method
  3277. // https://url.spec.whatwg.org/#URL-stringification-behavior
  3278. defineBuiltIn$8(URLPrototype, 'toString', function toString() {
  3279. return getInternalURLState(this).serialize();
  3280. }, { enumerable: true });
  3281. if (NativeURL) {
  3282. var nativeCreateObjectURL = NativeURL.createObjectURL;
  3283. var nativeRevokeObjectURL = NativeURL.revokeObjectURL;
  3284. // `URL.createObjectURL` method
  3285. // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  3286. if (nativeCreateObjectURL) defineBuiltIn$8(URLConstructor, 'createObjectURL', bind$7(nativeCreateObjectURL, NativeURL));
  3287. // `URL.revokeObjectURL` method
  3288. // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL
  3289. if (nativeRevokeObjectURL) defineBuiltIn$8(URLConstructor, 'revokeObjectURL', bind$7(nativeRevokeObjectURL, NativeURL));
  3290. }
  3291. setToStringTag$4(URLConstructor, 'URL');
  3292. $$v({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS$a }, {
  3293. URL: URLConstructor
  3294. });
  3295. var d = function d(_d) {
  3296. if ("function" == typeof URL.createObjectURL) {
  3297. var m = function m() {
  3298. 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")], {
  3299. type: "text/javascript"
  3300. }));
  3301. };
  3302. _d({
  3303. workerScripts: {
  3304. inflate: [m],
  3305. deflate: [m]
  3306. }
  3307. });
  3308. }
  3309. };
  3310. /*
  3311. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  3312. Redistribution and use in source and binary forms, with or without
  3313. modification, are permitted provided that the following conditions are met:
  3314. 1. Redistributions of source code must retain the above copyright notice,
  3315. this list of conditions and the following disclaimer.
  3316. 2. Redistributions in binary form must reproduce the above copyright
  3317. notice, this list of conditions and the following disclaimer in
  3318. the documentation and/or other materials provided with the distribution.
  3319. 3. The names of the authors may not be used to endorse or promote products
  3320. derived from this software without specific prior written permission.
  3321. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  3322. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  3323. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  3324. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  3325. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  3326. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  3327. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  3328. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  3329. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  3330. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  3331. */
  3332. function getMimeType() {
  3333. return "application/octet-stream";
  3334. }
  3335. function _regeneratorRuntime() {
  3336. /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
  3337. _regeneratorRuntime = function () {
  3338. return exports;
  3339. };
  3340. var exports = {},
  3341. Op = Object.prototype,
  3342. hasOwn = Op.hasOwnProperty,
  3343. $Symbol = "function" == typeof Symbol ? Symbol : {},
  3344. iteratorSymbol = $Symbol.iterator || "@@iterator",
  3345. asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
  3346. toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  3347. function define(obj, key, value) {
  3348. return Object.defineProperty(obj, key, {
  3349. value: value,
  3350. enumerable: !0,
  3351. configurable: !0,
  3352. writable: !0
  3353. }), obj[key];
  3354. }
  3355. try {
  3356. define({}, "");
  3357. } catch (err) {
  3358. define = function (obj, key, value) {
  3359. return obj[key] = value;
  3360. };
  3361. }
  3362. function wrap(innerFn, outerFn, self, tryLocsList) {
  3363. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
  3364. generator = Object.create(protoGenerator.prototype),
  3365. context = new Context(tryLocsList || []);
  3366. return generator._invoke = function (innerFn, self, context) {
  3367. var state = "suspendedStart";
  3368. return function (method, arg) {
  3369. if ("executing" === state) throw new Error("Generator is already running");
  3370. if ("completed" === state) {
  3371. if ("throw" === method) throw arg;
  3372. return doneResult();
  3373. }
  3374. for (context.method = method, context.arg = arg;;) {
  3375. var delegate = context.delegate;
  3376. if (delegate) {
  3377. var delegateResult = maybeInvokeDelegate(delegate, context);
  3378. if (delegateResult) {
  3379. if (delegateResult === ContinueSentinel) continue;
  3380. return delegateResult;
  3381. }
  3382. }
  3383. if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
  3384. if ("suspendedStart" === state) throw state = "completed", context.arg;
  3385. context.dispatchException(context.arg);
  3386. } else "return" === context.method && context.abrupt("return", context.arg);
  3387. state = "executing";
  3388. var record = tryCatch(innerFn, self, context);
  3389. if ("normal" === record.type) {
  3390. if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
  3391. return {
  3392. value: record.arg,
  3393. done: context.done
  3394. };
  3395. }
  3396. "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
  3397. }
  3398. };
  3399. }(innerFn, self, context), generator;
  3400. }
  3401. function tryCatch(fn, obj, arg) {
  3402. try {
  3403. return {
  3404. type: "normal",
  3405. arg: fn.call(obj, arg)
  3406. };
  3407. } catch (err) {
  3408. return {
  3409. type: "throw",
  3410. arg: err
  3411. };
  3412. }
  3413. }
  3414. exports.wrap = wrap;
  3415. var ContinueSentinel = {};
  3416. function Generator() {}
  3417. function GeneratorFunction() {}
  3418. function GeneratorFunctionPrototype() {}
  3419. var IteratorPrototype = {};
  3420. define(IteratorPrototype, iteratorSymbol, function () {
  3421. return this;
  3422. });
  3423. var getProto = Object.getPrototypeOf,
  3424. NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  3425. NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
  3426. var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
  3427. function defineIteratorMethods(prototype) {
  3428. ["next", "throw", "return"].forEach(function (method) {
  3429. define(prototype, method, function (arg) {
  3430. return this._invoke(method, arg);
  3431. });
  3432. });
  3433. }
  3434. function AsyncIterator(generator, PromiseImpl) {
  3435. function invoke(method, arg, resolve, reject) {
  3436. var record = tryCatch(generator[method], generator, arg);
  3437. if ("throw" !== record.type) {
  3438. var result = record.arg,
  3439. value = result.value;
  3440. return value && "object" == typeof value && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
  3441. invoke("next", value, resolve, reject);
  3442. }, function (err) {
  3443. invoke("throw", err, resolve, reject);
  3444. }) : PromiseImpl.resolve(value).then(function (unwrapped) {
  3445. result.value = unwrapped, resolve(result);
  3446. }, function (error) {
  3447. return invoke("throw", error, resolve, reject);
  3448. });
  3449. }
  3450. reject(record.arg);
  3451. }
  3452. var previousPromise;
  3453. this._invoke = function (method, arg) {
  3454. function callInvokeWithMethodAndArg() {
  3455. return new PromiseImpl(function (resolve, reject) {
  3456. invoke(method, arg, resolve, reject);
  3457. });
  3458. }
  3459. return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
  3460. };
  3461. }
  3462. function maybeInvokeDelegate(delegate, context) {
  3463. var method = delegate.iterator[context.method];
  3464. if (undefined === method) {
  3465. if (context.delegate = null, "throw" === context.method) {
  3466. if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
  3467. context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
  3468. }
  3469. return ContinueSentinel;
  3470. }
  3471. var record = tryCatch(method, delegate.iterator, context.arg);
  3472. if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
  3473. var info = record.arg;
  3474. 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);
  3475. }
  3476. function pushTryEntry(locs) {
  3477. var entry = {
  3478. tryLoc: locs[0]
  3479. };
  3480. 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
  3481. }
  3482. function resetTryEntry(entry) {
  3483. var record = entry.completion || {};
  3484. record.type = "normal", delete record.arg, entry.completion = record;
  3485. }
  3486. function Context(tryLocsList) {
  3487. this.tryEntries = [{
  3488. tryLoc: "root"
  3489. }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
  3490. }
  3491. function values(iterable) {
  3492. if (iterable) {
  3493. var iteratorMethod = iterable[iteratorSymbol];
  3494. if (iteratorMethod) return iteratorMethod.call(iterable);
  3495. if ("function" == typeof iterable.next) return iterable;
  3496. if (!isNaN(iterable.length)) {
  3497. var i = -1,
  3498. next = function next() {
  3499. for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
  3500. return next.value = undefined, next.done = !0, next;
  3501. };
  3502. return next.next = next;
  3503. }
  3504. }
  3505. return {
  3506. next: doneResult
  3507. };
  3508. }
  3509. function doneResult() {
  3510. return {
  3511. value: undefined,
  3512. done: !0
  3513. };
  3514. }
  3515. return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
  3516. var ctor = "function" == typeof genFun && genFun.constructor;
  3517. return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
  3518. }, exports.mark = function (genFun) {
  3519. return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;
  3520. }, exports.awrap = function (arg) {
  3521. return {
  3522. __await: arg
  3523. };
  3524. }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
  3525. return this;
  3526. }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
  3527. void 0 === PromiseImpl && (PromiseImpl = Promise);
  3528. var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
  3529. return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
  3530. return result.done ? result.value : iter.next();
  3531. });
  3532. }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
  3533. return this;
  3534. }), define(Gp, "toString", function () {
  3535. return "[object Generator]";
  3536. }), exports.keys = function (object) {
  3537. var keys = [];
  3538. for (var key in object) keys.push(key);
  3539. return keys.reverse(), function next() {
  3540. for (; keys.length;) {
  3541. var key = keys.pop();
  3542. if (key in object) return next.value = key, next.done = !1, next;
  3543. }
  3544. return next.done = !0, next;
  3545. };
  3546. }, exports.values = values, Context.prototype = {
  3547. constructor: Context,
  3548. reset: function (skipTempReset) {
  3549. 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);
  3550. },
  3551. stop: function () {
  3552. this.done = !0;
  3553. var rootRecord = this.tryEntries[0].completion;
  3554. if ("throw" === rootRecord.type) throw rootRecord.arg;
  3555. return this.rval;
  3556. },
  3557. dispatchException: function (exception) {
  3558. if (this.done) throw exception;
  3559. var context = this;
  3560. function handle(loc, caught) {
  3561. return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
  3562. }
  3563. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  3564. var entry = this.tryEntries[i],
  3565. record = entry.completion;
  3566. if ("root" === entry.tryLoc) return handle("end");
  3567. if (entry.tryLoc <= this.prev) {
  3568. var hasCatch = hasOwn.call(entry, "catchLoc"),
  3569. hasFinally = hasOwn.call(entry, "finallyLoc");
  3570. if (hasCatch && hasFinally) {
  3571. if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
  3572. if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
  3573. } else if (hasCatch) {
  3574. if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
  3575. } else {
  3576. if (!hasFinally) throw new Error("try statement without catch or finally");
  3577. if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
  3578. }
  3579. }
  3580. }
  3581. },
  3582. abrupt: function (type, arg) {
  3583. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  3584. var entry = this.tryEntries[i];
  3585. if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
  3586. var finallyEntry = entry;
  3587. break;
  3588. }
  3589. }
  3590. finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
  3591. var record = finallyEntry ? finallyEntry.completion : {};
  3592. return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
  3593. },
  3594. complete: function (record, afterLoc) {
  3595. if ("throw" === record.type) throw record.arg;
  3596. 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;
  3597. },
  3598. finish: function (finallyLoc) {
  3599. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  3600. var entry = this.tryEntries[i];
  3601. if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
  3602. }
  3603. },
  3604. catch: function (tryLoc) {
  3605. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  3606. var entry = this.tryEntries[i];
  3607. if (entry.tryLoc === tryLoc) {
  3608. var record = entry.completion;
  3609. if ("throw" === record.type) {
  3610. var thrown = record.arg;
  3611. resetTryEntry(entry);
  3612. }
  3613. return thrown;
  3614. }
  3615. }
  3616. throw new Error("illegal catch attempt");
  3617. },
  3618. delegateYield: function (iterable, resultName, nextLoc) {
  3619. return this.delegate = {
  3620. iterator: values(iterable),
  3621. resultName: resultName,
  3622. nextLoc: nextLoc
  3623. }, "next" === this.method && (this.arg = undefined), ContinueSentinel;
  3624. }
  3625. }, exports;
  3626. }
  3627. function _AwaitValue(value) {
  3628. this.wrapped = value;
  3629. }
  3630. function _AsyncGenerator(gen) {
  3631. var front, back;
  3632. function send(key, arg) {
  3633. return new Promise(function (resolve, reject) {
  3634. var request = {
  3635. key: key,
  3636. arg: arg,
  3637. resolve: resolve,
  3638. reject: reject,
  3639. next: null
  3640. };
  3641. if (back) {
  3642. back = back.next = request;
  3643. } else {
  3644. front = back = request;
  3645. resume(key, arg);
  3646. }
  3647. });
  3648. }
  3649. function resume(key, arg) {
  3650. try {
  3651. var result = gen[key](arg);
  3652. var value = result.value;
  3653. var wrappedAwait = value instanceof _AwaitValue;
  3654. Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
  3655. if (wrappedAwait) {
  3656. resume(key === "return" ? "return" : "next", arg);
  3657. return;
  3658. }
  3659. settle(result.done ? "return" : "normal", arg);
  3660. }, function (err) {
  3661. resume("throw", err);
  3662. });
  3663. } catch (err) {
  3664. settle("throw", err);
  3665. }
  3666. }
  3667. function settle(type, value) {
  3668. switch (type) {
  3669. case "return":
  3670. front.resolve({
  3671. value: value,
  3672. done: true
  3673. });
  3674. break;
  3675. case "throw":
  3676. front.reject(value);
  3677. break;
  3678. default:
  3679. front.resolve({
  3680. value: value,
  3681. done: false
  3682. });
  3683. break;
  3684. }
  3685. front = front.next;
  3686. if (front) {
  3687. resume(front.key, front.arg);
  3688. } else {
  3689. back = null;
  3690. }
  3691. }
  3692. this._invoke = send;
  3693. if (typeof gen.return !== "function") {
  3694. this.return = undefined;
  3695. }
  3696. }
  3697. _AsyncGenerator.prototype[typeof Symbol === "function" && Symbol.asyncIterator || "@@asyncIterator"] = function () {
  3698. return this;
  3699. };
  3700. _AsyncGenerator.prototype.next = function (arg) {
  3701. return this._invoke("next", arg);
  3702. };
  3703. _AsyncGenerator.prototype.throw = function (arg) {
  3704. return this._invoke("throw", arg);
  3705. };
  3706. _AsyncGenerator.prototype.return = function (arg) {
  3707. return this._invoke("return", arg);
  3708. };
  3709. function _wrapAsyncGenerator(fn) {
  3710. return function () {
  3711. return new _AsyncGenerator(fn.apply(this, arguments));
  3712. };
  3713. }
  3714. function _awaitAsyncGenerator(value) {
  3715. return new _AwaitValue(value);
  3716. }
  3717. function _classCallCheck(instance, Constructor) {
  3718. if (!(instance instanceof Constructor)) {
  3719. throw new TypeError("Cannot call a class as a function");
  3720. }
  3721. }
  3722. function _defineProperties(target, props) {
  3723. for (var i = 0; i < props.length; i++) {
  3724. var descriptor = props[i];
  3725. descriptor.enumerable = descriptor.enumerable || false;
  3726. descriptor.configurable = true;
  3727. if ("value" in descriptor) descriptor.writable = true;
  3728. Object.defineProperty(target, descriptor.key, descriptor);
  3729. }
  3730. }
  3731. function _createClass(Constructor, protoProps, staticProps) {
  3732. if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  3733. if (staticProps) _defineProperties(Constructor, staticProps);
  3734. Object.defineProperty(Constructor, "prototype", {
  3735. writable: false
  3736. });
  3737. return Constructor;
  3738. }
  3739. function _defineProperty(obj, key, value) {
  3740. if (key in obj) {
  3741. Object.defineProperty(obj, key, {
  3742. value: value,
  3743. enumerable: true,
  3744. configurable: true,
  3745. writable: true
  3746. });
  3747. } else {
  3748. obj[key] = value;
  3749. }
  3750. return obj;
  3751. }
  3752. function _inherits(subClass, superClass) {
  3753. if (typeof superClass !== "function" && superClass !== null) {
  3754. throw new TypeError("Super expression must either be null or a function");
  3755. }
  3756. subClass.prototype = Object.create(superClass && superClass.prototype, {
  3757. constructor: {
  3758. value: subClass,
  3759. writable: true,
  3760. configurable: true
  3761. }
  3762. });
  3763. Object.defineProperty(subClass, "prototype", {
  3764. writable: false
  3765. });
  3766. if (superClass) _setPrototypeOf(subClass, superClass);
  3767. }
  3768. function _getPrototypeOf(o) {
  3769. _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
  3770. return o.__proto__ || Object.getPrototypeOf(o);
  3771. };
  3772. return _getPrototypeOf(o);
  3773. }
  3774. function _setPrototypeOf(o, p) {
  3775. _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
  3776. o.__proto__ = p;
  3777. return o;
  3778. };
  3779. return _setPrototypeOf(o, p);
  3780. }
  3781. function _isNativeReflectConstruct() {
  3782. if (typeof Reflect === "undefined" || !Reflect.construct) return false;
  3783. if (Reflect.construct.sham) return false;
  3784. if (typeof Proxy === "function") return true;
  3785. try {
  3786. Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
  3787. return true;
  3788. } catch (e) {
  3789. return false;
  3790. }
  3791. }
  3792. function _assertThisInitialized(self) {
  3793. if (self === void 0) {
  3794. throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  3795. }
  3796. return self;
  3797. }
  3798. function _possibleConstructorReturn(self, call) {
  3799. if (call && (typeof call === "object" || typeof call === "function")) {
  3800. return call;
  3801. } else if (call !== void 0) {
  3802. throw new TypeError("Derived constructors may only return object or undefined");
  3803. }
  3804. return _assertThisInitialized(self);
  3805. }
  3806. function _createSuper(Derived) {
  3807. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  3808. return function _createSuperInternal() {
  3809. var Super = _getPrototypeOf(Derived),
  3810. result;
  3811. if (hasNativeReflectConstruct) {
  3812. var NewTarget = _getPrototypeOf(this).constructor;
  3813. result = Reflect.construct(Super, arguments, NewTarget);
  3814. } else {
  3815. result = Super.apply(this, arguments);
  3816. }
  3817. return _possibleConstructorReturn(this, result);
  3818. };
  3819. }
  3820. function _superPropBase(object, property) {
  3821. while (!Object.prototype.hasOwnProperty.call(object, property)) {
  3822. object = _getPrototypeOf(object);
  3823. if (object === null) break;
  3824. }
  3825. return object;
  3826. }
  3827. function _get() {
  3828. if (typeof Reflect !== "undefined" && Reflect.get) {
  3829. _get = Reflect.get.bind();
  3830. } else {
  3831. _get = function _get(target, property, receiver) {
  3832. var base = _superPropBase(target, property);
  3833. if (!base) return;
  3834. var desc = Object.getOwnPropertyDescriptor(base, property);
  3835. if (desc.get) {
  3836. return desc.get.call(arguments.length < 3 ? target : receiver);
  3837. }
  3838. return desc.value;
  3839. };
  3840. }
  3841. return _get.apply(this, arguments);
  3842. }
  3843. function _slicedToArray(arr, i) {
  3844. return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
  3845. }
  3846. function _toConsumableArray(arr) {
  3847. return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
  3848. }
  3849. function _arrayWithoutHoles(arr) {
  3850. if (Array.isArray(arr)) return _arrayLikeToArray(arr);
  3851. }
  3852. function _arrayWithHoles(arr) {
  3853. if (Array.isArray(arr)) return arr;
  3854. }
  3855. function _iterableToArray(iter) {
  3856. if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
  3857. }
  3858. function _iterableToArrayLimit(arr, i) {
  3859. var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
  3860. if (_i == null) return;
  3861. var _arr = [];
  3862. var _n = true;
  3863. var _d = false;
  3864. var _s, _e;
  3865. try {
  3866. for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
  3867. _arr.push(_s.value);
  3868. if (i && _arr.length === i) break;
  3869. }
  3870. } catch (err) {
  3871. _d = true;
  3872. _e = err;
  3873. } finally {
  3874. try {
  3875. if (!_n && _i["return"] != null) _i["return"]();
  3876. } finally {
  3877. if (_d) throw _e;
  3878. }
  3879. }
  3880. return _arr;
  3881. }
  3882. function _unsupportedIterableToArray(o, minLen) {
  3883. if (!o) return;
  3884. if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  3885. var n = Object.prototype.toString.call(o).slice(8, -1);
  3886. if (n === "Object" && o.constructor) n = o.constructor.name;
  3887. if (n === "Map" || n === "Set") return Array.from(o);
  3888. if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
  3889. }
  3890. function _arrayLikeToArray(arr, len) {
  3891. if (len == null || len > arr.length) len = arr.length;
  3892. for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
  3893. return arr2;
  3894. }
  3895. function _nonIterableSpread() {
  3896. throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  3897. }
  3898. function _nonIterableRest() {
  3899. throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  3900. }
  3901. function _createForOfIteratorHelper(o, allowArrayLike) {
  3902. var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
  3903. if (!it) {
  3904. if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
  3905. if (it) o = it;
  3906. var i = 0;
  3907. var F = function () {};
  3908. return {
  3909. s: F,
  3910. n: function () {
  3911. if (i >= o.length) return {
  3912. done: true
  3913. };
  3914. return {
  3915. done: false,
  3916. value: o[i++]
  3917. };
  3918. },
  3919. e: function (e) {
  3920. throw e;
  3921. },
  3922. f: F
  3923. };
  3924. }
  3925. throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  3926. }
  3927. var normalCompletion = true,
  3928. didErr = false,
  3929. err;
  3930. return {
  3931. s: function () {
  3932. it = it.call(o);
  3933. },
  3934. n: function () {
  3935. var step = it.next();
  3936. normalCompletion = step.done;
  3937. return step;
  3938. },
  3939. e: function (e) {
  3940. didErr = true;
  3941. err = e;
  3942. },
  3943. f: function () {
  3944. try {
  3945. if (!normalCompletion && it.return != null) it.return();
  3946. } finally {
  3947. if (didErr) throw err;
  3948. }
  3949. }
  3950. };
  3951. }
  3952. // eslint-disable-next-line es-x/no-typed-arrays -- safe
  3953. var arrayBufferNative = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';
  3954. var toIntegerOrInfinity$5 = toIntegerOrInfinity$9;
  3955. var toLength$8 = toLength$a;
  3956. var $RangeError$2 = RangeError;
  3957. // `ToIndex` abstract operation
  3958. // https://tc39.es/ecma262/#sec-toindex
  3959. var toIndex$2 = function (it) {
  3960. if (it === undefined) return 0;
  3961. var number = toIntegerOrInfinity$5(it);
  3962. var length = toLength$8(number);
  3963. if (number !== length) throw $RangeError$2('Wrong length or index');
  3964. return length;
  3965. };
  3966. // IEEE754 conversions based on https://github.com/feross/ieee754
  3967. var $Array$2 = Array;
  3968. var abs = Math.abs;
  3969. var pow = Math.pow;
  3970. var floor$3 = Math.floor;
  3971. var log = Math.log;
  3972. var LN2 = Math.LN2;
  3973. var pack = function (number, mantissaLength, bytes) {
  3974. var buffer = $Array$2(bytes);
  3975. var exponentLength = bytes * 8 - mantissaLength - 1;
  3976. var eMax = (1 << exponentLength) - 1;
  3977. var eBias = eMax >> 1;
  3978. var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;
  3979. var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;
  3980. var index = 0;
  3981. var exponent, mantissa, c;
  3982. number = abs(number);
  3983. // eslint-disable-next-line no-self-compare -- NaN check
  3984. if (number != number || number === Infinity) {
  3985. // eslint-disable-next-line no-self-compare -- NaN check
  3986. mantissa = number != number ? 1 : 0;
  3987. exponent = eMax;
  3988. } else {
  3989. exponent = floor$3(log(number) / LN2);
  3990. c = pow(2, -exponent);
  3991. if (number * c < 1) {
  3992. exponent--;
  3993. c *= 2;
  3994. }
  3995. if (exponent + eBias >= 1) {
  3996. number += rt / c;
  3997. } else {
  3998. number += rt * pow(2, 1 - eBias);
  3999. }
  4000. if (number * c >= 2) {
  4001. exponent++;
  4002. c /= 2;
  4003. }
  4004. if (exponent + eBias >= eMax) {
  4005. mantissa = 0;
  4006. exponent = eMax;
  4007. } else if (exponent + eBias >= 1) {
  4008. mantissa = (number * c - 1) * pow(2, mantissaLength);
  4009. exponent = exponent + eBias;
  4010. } else {
  4011. mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);
  4012. exponent = 0;
  4013. }
  4014. }
  4015. while (mantissaLength >= 8) {
  4016. buffer[index++] = mantissa & 255;
  4017. mantissa /= 256;
  4018. mantissaLength -= 8;
  4019. }
  4020. exponent = exponent << mantissaLength | mantissa;
  4021. exponentLength += mantissaLength;
  4022. while (exponentLength > 0) {
  4023. buffer[index++] = exponent & 255;
  4024. exponent /= 256;
  4025. exponentLength -= 8;
  4026. }
  4027. buffer[--index] |= sign * 128;
  4028. return buffer;
  4029. };
  4030. var unpack = function (buffer, mantissaLength) {
  4031. var bytes = buffer.length;
  4032. var exponentLength = bytes * 8 - mantissaLength - 1;
  4033. var eMax = (1 << exponentLength) - 1;
  4034. var eBias = eMax >> 1;
  4035. var nBits = exponentLength - 7;
  4036. var index = bytes - 1;
  4037. var sign = buffer[index--];
  4038. var exponent = sign & 127;
  4039. var mantissa;
  4040. sign >>= 7;
  4041. while (nBits > 0) {
  4042. exponent = exponent * 256 + buffer[index--];
  4043. nBits -= 8;
  4044. }
  4045. mantissa = exponent & (1 << -nBits) - 1;
  4046. exponent >>= -nBits;
  4047. nBits += mantissaLength;
  4048. while (nBits > 0) {
  4049. mantissa = mantissa * 256 + buffer[index--];
  4050. nBits -= 8;
  4051. }
  4052. if (exponent === 0) {
  4053. exponent = 1 - eBias;
  4054. } else if (exponent === eMax) {
  4055. return mantissa ? NaN : sign ? -Infinity : Infinity;
  4056. } else {
  4057. mantissa = mantissa + pow(2, mantissaLength);
  4058. exponent = exponent - eBias;
  4059. } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);
  4060. };
  4061. var ieee754 = {
  4062. pack: pack,
  4063. unpack: unpack
  4064. };
  4065. var toObject$8 = toObject$d;
  4066. var toAbsoluteIndex$5 = toAbsoluteIndex$8;
  4067. var lengthOfArrayLike$b = lengthOfArrayLike$f;
  4068. // `Array.prototype.fill` method implementation
  4069. // https://tc39.es/ecma262/#sec-array.prototype.fill
  4070. var arrayFill$1 = function fill(value /* , start = 0, end = @length */) {
  4071. var O = toObject$8(this);
  4072. var length = lengthOfArrayLike$b(O);
  4073. var argumentsLength = arguments.length;
  4074. var index = toAbsoluteIndex$5(argumentsLength > 1 ? arguments[1] : undefined, length);
  4075. var end = argumentsLength > 2 ? arguments[2] : undefined;
  4076. var endPos = end === undefined ? length : toAbsoluteIndex$5(end, length);
  4077. while (endPos > index) O[index++] = value;
  4078. return O;
  4079. };
  4080. var global$s = global$F;
  4081. var uncurryThis$q = functionUncurryThis;
  4082. var DESCRIPTORS$9 = descriptors;
  4083. var NATIVE_ARRAY_BUFFER$1 = arrayBufferNative;
  4084. var FunctionName = functionName;
  4085. var createNonEnumerableProperty$4 = createNonEnumerableProperty$9;
  4086. var defineBuiltIns$1 = defineBuiltIns$3;
  4087. var fails$t = fails$H;
  4088. var anInstance$4 = anInstance$7;
  4089. var toIntegerOrInfinity$4 = toIntegerOrInfinity$9;
  4090. var toLength$7 = toLength$a;
  4091. var toIndex$1 = toIndex$2;
  4092. var IEEE754 = ieee754;
  4093. var getPrototypeOf$1 = objectGetPrototypeOf;
  4094. var setPrototypeOf$4 = objectSetPrototypeOf;
  4095. var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f;
  4096. var defineProperty$7 = objectDefineProperty.f;
  4097. var arrayFill = arrayFill$1;
  4098. var arraySlice$8 = arraySliceSimple;
  4099. var setToStringTag$3 = setToStringTag$8;
  4100. var InternalStateModule$5 = internalState;
  4101. var PROPER_FUNCTION_NAME$1 = FunctionName.PROPER;
  4102. var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
  4103. var getInternalState$4 = InternalStateModule$5.get;
  4104. var setInternalState$4 = InternalStateModule$5.set;
  4105. var ARRAY_BUFFER$1 = 'ArrayBuffer';
  4106. var DATA_VIEW = 'DataView';
  4107. var PROTOTYPE$1 = 'prototype';
  4108. var WRONG_LENGTH$1 = 'Wrong length';
  4109. var WRONG_INDEX = 'Wrong index';
  4110. var NativeArrayBuffer$1 = global$s[ARRAY_BUFFER$1];
  4111. var $ArrayBuffer = NativeArrayBuffer$1;
  4112. var ArrayBufferPrototype$1 = $ArrayBuffer && $ArrayBuffer[PROTOTYPE$1];
  4113. var $DataView = global$s[DATA_VIEW];
  4114. var DataViewPrototype$1 = $DataView && $DataView[PROTOTYPE$1];
  4115. var ObjectPrototype$2 = Object.prototype;
  4116. var Array$1 = global$s.Array;
  4117. var RangeError$3 = global$s.RangeError;
  4118. var fill = uncurryThis$q(arrayFill);
  4119. var reverse = uncurryThis$q([].reverse);
  4120. var packIEEE754 = IEEE754.pack;
  4121. var unpackIEEE754 = IEEE754.unpack;
  4122. var packInt8 = function (number) {
  4123. return [number & 0xFF];
  4124. };
  4125. var packInt16 = function (number) {
  4126. return [number & 0xFF, number >> 8 & 0xFF];
  4127. };
  4128. var packInt32 = function (number) {
  4129. return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];
  4130. };
  4131. var unpackInt32 = function (buffer) {
  4132. return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];
  4133. };
  4134. var packFloat32 = function (number) {
  4135. return packIEEE754(number, 23, 4);
  4136. };
  4137. var packFloat64 = function (number) {
  4138. return packIEEE754(number, 52, 8);
  4139. };
  4140. var addGetter$1 = function (Constructor, key) {
  4141. defineProperty$7(Constructor[PROTOTYPE$1], key, { get: function () { return getInternalState$4(this)[key]; } });
  4142. };
  4143. var get = function (view, count, index, isLittleEndian) {
  4144. var intIndex = toIndex$1(index);
  4145. var store = getInternalState$4(view);
  4146. if (intIndex + count > store.byteLength) throw RangeError$3(WRONG_INDEX);
  4147. var bytes = getInternalState$4(store.buffer).bytes;
  4148. var start = intIndex + store.byteOffset;
  4149. var pack = arraySlice$8(bytes, start, start + count);
  4150. return isLittleEndian ? pack : reverse(pack);
  4151. };
  4152. var set$1 = function (view, count, index, conversion, value, isLittleEndian) {
  4153. var intIndex = toIndex$1(index);
  4154. var store = getInternalState$4(view);
  4155. if (intIndex + count > store.byteLength) throw RangeError$3(WRONG_INDEX);
  4156. var bytes = getInternalState$4(store.buffer).bytes;
  4157. var start = intIndex + store.byteOffset;
  4158. var pack = conversion(+value);
  4159. for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];
  4160. };
  4161. if (!NATIVE_ARRAY_BUFFER$1) {
  4162. $ArrayBuffer = function ArrayBuffer(length) {
  4163. anInstance$4(this, ArrayBufferPrototype$1);
  4164. var byteLength = toIndex$1(length);
  4165. setInternalState$4(this, {
  4166. bytes: fill(Array$1(byteLength), 0),
  4167. byteLength: byteLength
  4168. });
  4169. if (!DESCRIPTORS$9) this.byteLength = byteLength;
  4170. };
  4171. ArrayBufferPrototype$1 = $ArrayBuffer[PROTOTYPE$1];
  4172. $DataView = function DataView(buffer, byteOffset, byteLength) {
  4173. anInstance$4(this, DataViewPrototype$1);
  4174. anInstance$4(buffer, ArrayBufferPrototype$1);
  4175. var bufferLength = getInternalState$4(buffer).byteLength;
  4176. var offset = toIntegerOrInfinity$4(byteOffset);
  4177. if (offset < 0 || offset > bufferLength) throw RangeError$3('Wrong offset');
  4178. byteLength = byteLength === undefined ? bufferLength - offset : toLength$7(byteLength);
  4179. if (offset + byteLength > bufferLength) throw RangeError$3(WRONG_LENGTH$1);
  4180. setInternalState$4(this, {
  4181. buffer: buffer,
  4182. byteLength: byteLength,
  4183. byteOffset: offset
  4184. });
  4185. if (!DESCRIPTORS$9) {
  4186. this.buffer = buffer;
  4187. this.byteLength = byteLength;
  4188. this.byteOffset = offset;
  4189. }
  4190. };
  4191. DataViewPrototype$1 = $DataView[PROTOTYPE$1];
  4192. if (DESCRIPTORS$9) {
  4193. addGetter$1($ArrayBuffer, 'byteLength');
  4194. addGetter$1($DataView, 'buffer');
  4195. addGetter$1($DataView, 'byteLength');
  4196. addGetter$1($DataView, 'byteOffset');
  4197. }
  4198. defineBuiltIns$1(DataViewPrototype$1, {
  4199. getInt8: function getInt8(byteOffset) {
  4200. return get(this, 1, byteOffset)[0] << 24 >> 24;
  4201. },
  4202. getUint8: function getUint8(byteOffset) {
  4203. return get(this, 1, byteOffset)[0];
  4204. },
  4205. getInt16: function getInt16(byteOffset /* , littleEndian */) {
  4206. var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);
  4207. return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
  4208. },
  4209. getUint16: function getUint16(byteOffset /* , littleEndian */) {
  4210. var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);
  4211. return bytes[1] << 8 | bytes[0];
  4212. },
  4213. getInt32: function getInt32(byteOffset /* , littleEndian */) {
  4214. return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));
  4215. },
  4216. getUint32: function getUint32(byteOffset /* , littleEndian */) {
  4217. return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;
  4218. },
  4219. getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
  4220. return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);
  4221. },
  4222. getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
  4223. return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);
  4224. },
  4225. setInt8: function setInt8(byteOffset, value) {
  4226. set$1(this, 1, byteOffset, packInt8, value);
  4227. },
  4228. setUint8: function setUint8(byteOffset, value) {
  4229. set$1(this, 1, byteOffset, packInt8, value);
  4230. },
  4231. setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
  4232. set$1(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);
  4233. },
  4234. setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
  4235. set$1(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);
  4236. },
  4237. setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
  4238. set$1(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);
  4239. },
  4240. setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
  4241. set$1(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);
  4242. },
  4243. setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
  4244. set$1(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);
  4245. },
  4246. setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
  4247. set$1(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);
  4248. }
  4249. });
  4250. } else {
  4251. var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME$1 && NativeArrayBuffer$1.name !== ARRAY_BUFFER$1;
  4252. /* eslint-disable no-new -- required for testing */
  4253. if (!fails$t(function () {
  4254. NativeArrayBuffer$1(1);
  4255. }) || !fails$t(function () {
  4256. new NativeArrayBuffer$1(-1);
  4257. }) || fails$t(function () {
  4258. new NativeArrayBuffer$1();
  4259. new NativeArrayBuffer$1(1.5);
  4260. new NativeArrayBuffer$1(NaN);
  4261. return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
  4262. })) {
  4263. /* eslint-enable no-new -- required for testing */
  4264. $ArrayBuffer = function ArrayBuffer(length) {
  4265. anInstance$4(this, ArrayBufferPrototype$1);
  4266. return new NativeArrayBuffer$1(toIndex$1(length));
  4267. };
  4268. $ArrayBuffer[PROTOTYPE$1] = ArrayBufferPrototype$1;
  4269. for (var keys$1 = getOwnPropertyNames$2(NativeArrayBuffer$1), j$2 = 0, key$1; keys$1.length > j$2;) {
  4270. if (!((key$1 = keys$1[j$2++]) in $ArrayBuffer)) {
  4271. createNonEnumerableProperty$4($ArrayBuffer, key$1, NativeArrayBuffer$1[key$1]);
  4272. }
  4273. }
  4274. ArrayBufferPrototype$1.constructor = $ArrayBuffer;
  4275. } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {
  4276. createNonEnumerableProperty$4(NativeArrayBuffer$1, 'name', ARRAY_BUFFER$1);
  4277. }
  4278. // WebKit bug - the same parent prototype for typed arrays and data view
  4279. if (setPrototypeOf$4 && getPrototypeOf$1(DataViewPrototype$1) !== ObjectPrototype$2) {
  4280. setPrototypeOf$4(DataViewPrototype$1, ObjectPrototype$2);
  4281. }
  4282. // iOS Safari 7.x bug
  4283. var testView = new $DataView(new $ArrayBuffer(2));
  4284. var $setInt8 = uncurryThis$q(DataViewPrototype$1.setInt8);
  4285. testView.setInt8(0, 2147483648);
  4286. testView.setInt8(1, 2147483649);
  4287. if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns$1(DataViewPrototype$1, {
  4288. setInt8: function setInt8(byteOffset, value) {
  4289. $setInt8(this, byteOffset, value << 24 >> 24);
  4290. },
  4291. setUint8: function setUint8(byteOffset, value) {
  4292. $setInt8(this, byteOffset, value << 24 >> 24);
  4293. }
  4294. }, { unsafe: true });
  4295. }
  4296. setToStringTag$3($ArrayBuffer, ARRAY_BUFFER$1);
  4297. setToStringTag$3($DataView, DATA_VIEW);
  4298. var arrayBuffer = {
  4299. ArrayBuffer: $ArrayBuffer,
  4300. DataView: $DataView
  4301. };
  4302. var isConstructor$2 = isConstructor$4;
  4303. var tryToString$4 = tryToString$7;
  4304. var $TypeError$7 = TypeError;
  4305. // `Assert: IsConstructor(argument) is true`
  4306. var aConstructor$2 = function (argument) {
  4307. if (isConstructor$2(argument)) return argument;
  4308. throw $TypeError$7(tryToString$4(argument) + ' is not a constructor');
  4309. };
  4310. var anObject$8 = anObject$i;
  4311. var aConstructor$1 = aConstructor$2;
  4312. var wellKnownSymbol$g = wellKnownSymbol$t;
  4313. var SPECIES$6 = wellKnownSymbol$g('species');
  4314. // `SpeciesConstructor` abstract operation
  4315. // https://tc39.es/ecma262/#sec-speciesconstructor
  4316. var speciesConstructor$4 = function (O, defaultConstructor) {
  4317. var C = anObject$8(O).constructor;
  4318. var S;
  4319. return C === undefined || (S = anObject$8(C)[SPECIES$6]) == undefined ? defaultConstructor : aConstructor$1(S);
  4320. };
  4321. var $$u = _export;
  4322. var uncurryThis$p = functionUncurryThis;
  4323. var fails$s = fails$H;
  4324. var ArrayBufferModule$1 = arrayBuffer;
  4325. var anObject$7 = anObject$i;
  4326. var toAbsoluteIndex$4 = toAbsoluteIndex$8;
  4327. var toLength$6 = toLength$a;
  4328. var speciesConstructor$3 = speciesConstructor$4;
  4329. var ArrayBuffer$4 = ArrayBufferModule$1.ArrayBuffer;
  4330. var DataView$2 = ArrayBufferModule$1.DataView;
  4331. var DataViewPrototype = DataView$2.prototype;
  4332. var un$ArrayBufferSlice = uncurryThis$p(ArrayBuffer$4.prototype.slice);
  4333. var getUint8$1 = uncurryThis$p(DataViewPrototype.getUint8);
  4334. var setUint8$1 = uncurryThis$p(DataViewPrototype.setUint8);
  4335. var INCORRECT_SLICE = fails$s(function () {
  4336. return !new ArrayBuffer$4(2).slice(1, undefined).byteLength;
  4337. });
  4338. // `ArrayBuffer.prototype.slice` method
  4339. // https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice
  4340. $$u({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {
  4341. slice: function slice(start, end) {
  4342. if (un$ArrayBufferSlice && end === undefined) {
  4343. return un$ArrayBufferSlice(anObject$7(this), start); // FF fix
  4344. }
  4345. var length = anObject$7(this).byteLength;
  4346. var first = toAbsoluteIndex$4(start, length);
  4347. var fin = toAbsoluteIndex$4(end === undefined ? length : end, length);
  4348. var result = new (speciesConstructor$3(this, ArrayBuffer$4))(toLength$6(fin - first));
  4349. var viewSource = new DataView$2(this);
  4350. var viewTarget = new DataView$2(result);
  4351. var index = 0;
  4352. while (first < fin) {
  4353. setUint8$1(viewTarget, index++, getUint8$1(viewSource, first++));
  4354. } return result;
  4355. }
  4356. });
  4357. var typedArrayConstructor = {exports: {}};
  4358. var wellKnownSymbol$f = wellKnownSymbol$t;
  4359. var ITERATOR$1 = wellKnownSymbol$f('iterator');
  4360. var SAFE_CLOSING = false;
  4361. try {
  4362. var called = 0;
  4363. var iteratorWithReturn = {
  4364. next: function () {
  4365. return { done: !!called++ };
  4366. },
  4367. 'return': function () {
  4368. SAFE_CLOSING = true;
  4369. }
  4370. };
  4371. iteratorWithReturn[ITERATOR$1] = function () {
  4372. return this;
  4373. };
  4374. // eslint-disable-next-line es-x/no-array-from, no-throw-literal -- required for testing
  4375. Array.from(iteratorWithReturn, function () { throw 2; });
  4376. } catch (error) { /* empty */ }
  4377. var checkCorrectnessOfIteration$4 = function (exec, SKIP_CLOSING) {
  4378. if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
  4379. var ITERATION_SUPPORT = false;
  4380. try {
  4381. var object = {};
  4382. object[ITERATOR$1] = function () {
  4383. return {
  4384. next: function () {
  4385. return { done: ITERATION_SUPPORT = true };
  4386. }
  4387. };
  4388. };
  4389. exec(object);
  4390. } catch (error) { /* empty */ }
  4391. return ITERATION_SUPPORT;
  4392. };
  4393. var NATIVE_ARRAY_BUFFER = arrayBufferNative;
  4394. var DESCRIPTORS$8 = descriptors;
  4395. var global$r = global$F;
  4396. var isCallable$a = isCallable$s;
  4397. var isObject$d = isObject$k;
  4398. var hasOwn$9 = hasOwnProperty_1;
  4399. var classof$8 = classof$e;
  4400. var tryToString$3 = tryToString$7;
  4401. var createNonEnumerableProperty$3 = createNonEnumerableProperty$9;
  4402. var defineBuiltIn$7 = defineBuiltIn$f;
  4403. var defineProperty$6 = objectDefineProperty.f;
  4404. var isPrototypeOf$5 = objectIsPrototypeOf;
  4405. var getPrototypeOf = objectGetPrototypeOf;
  4406. var setPrototypeOf$3 = objectSetPrototypeOf;
  4407. var wellKnownSymbol$e = wellKnownSymbol$t;
  4408. var uid$2 = uid$5;
  4409. var InternalStateModule$4 = internalState;
  4410. var enforceInternalState$1 = InternalStateModule$4.enforce;
  4411. var getInternalState$3 = InternalStateModule$4.get;
  4412. var Int8Array$4 = global$r.Int8Array;
  4413. var Int8ArrayPrototype$1 = Int8Array$4 && Int8Array$4.prototype;
  4414. var Uint8ClampedArray$1 = global$r.Uint8ClampedArray;
  4415. var Uint8ClampedArrayPrototype = Uint8ClampedArray$1 && Uint8ClampedArray$1.prototype;
  4416. var TypedArray$1 = Int8Array$4 && getPrototypeOf(Int8Array$4);
  4417. var TypedArrayPrototype$2 = Int8ArrayPrototype$1 && getPrototypeOf(Int8ArrayPrototype$1);
  4418. var ObjectPrototype$1 = Object.prototype;
  4419. var TypeError$4 = global$r.TypeError;
  4420. var TO_STRING_TAG = wellKnownSymbol$e('toStringTag');
  4421. var TYPED_ARRAY_TAG$1 = uid$2('TYPED_ARRAY_TAG');
  4422. var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';
  4423. // Fixing native typed arrays in Opera Presto crashes the browser, see #595
  4424. var NATIVE_ARRAY_BUFFER_VIEWS$2 = NATIVE_ARRAY_BUFFER && !!setPrototypeOf$3 && classof$8(global$r.opera) !== 'Opera';
  4425. var TYPED_ARRAY_TAG_REQUIRED = false;
  4426. var NAME$1, Constructor, Prototype;
  4427. var TypedArrayConstructorsList = {
  4428. Int8Array: 1,
  4429. Uint8Array: 1,
  4430. Uint8ClampedArray: 1,
  4431. Int16Array: 2,
  4432. Uint16Array: 2,
  4433. Int32Array: 4,
  4434. Uint32Array: 4,
  4435. Float32Array: 4,
  4436. Float64Array: 8
  4437. };
  4438. var BigIntArrayConstructorsList = {
  4439. BigInt64Array: 8,
  4440. BigUint64Array: 8
  4441. };
  4442. var isView = function isView(it) {
  4443. if (!isObject$d(it)) return false;
  4444. var klass = classof$8(it);
  4445. return klass === 'DataView'
  4446. || hasOwn$9(TypedArrayConstructorsList, klass)
  4447. || hasOwn$9(BigIntArrayConstructorsList, klass);
  4448. };
  4449. var getTypedArrayConstructor$1 = function (it) {
  4450. var proto = getPrototypeOf(it);
  4451. if (!isObject$d(proto)) return;
  4452. var state = getInternalState$3(proto);
  4453. return (state && hasOwn$9(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor$1(proto);
  4454. };
  4455. var isTypedArray$1 = function (it) {
  4456. if (!isObject$d(it)) return false;
  4457. var klass = classof$8(it);
  4458. return hasOwn$9(TypedArrayConstructorsList, klass)
  4459. || hasOwn$9(BigIntArrayConstructorsList, klass);
  4460. };
  4461. var aTypedArray$m = function (it) {
  4462. if (isTypedArray$1(it)) return it;
  4463. throw TypeError$4('Target is not a typed array');
  4464. };
  4465. var aTypedArrayConstructor$3 = function (C) {
  4466. if (isCallable$a(C) && (!setPrototypeOf$3 || isPrototypeOf$5(TypedArray$1, C))) return C;
  4467. throw TypeError$4(tryToString$3(C) + ' is not a typed array constructor');
  4468. };
  4469. var exportTypedArrayMethod$n = function (KEY, property, forced, options) {
  4470. if (!DESCRIPTORS$8) return;
  4471. if (forced) for (var ARRAY in TypedArrayConstructorsList) {
  4472. var TypedArrayConstructor = global$r[ARRAY];
  4473. if (TypedArrayConstructor && hasOwn$9(TypedArrayConstructor.prototype, KEY)) try {
  4474. delete TypedArrayConstructor.prototype[KEY];
  4475. } catch (error) {
  4476. // old WebKit bug - some methods are non-configurable
  4477. try {
  4478. TypedArrayConstructor.prototype[KEY] = property;
  4479. } catch (error2) { /* empty */ }
  4480. }
  4481. }
  4482. if (!TypedArrayPrototype$2[KEY] || forced) {
  4483. defineBuiltIn$7(TypedArrayPrototype$2, KEY, forced ? property
  4484. : NATIVE_ARRAY_BUFFER_VIEWS$2 && Int8ArrayPrototype$1[KEY] || property, options);
  4485. }
  4486. };
  4487. var exportTypedArrayStaticMethod = function (KEY, property, forced) {
  4488. var ARRAY, TypedArrayConstructor;
  4489. if (!DESCRIPTORS$8) return;
  4490. if (setPrototypeOf$3) {
  4491. if (forced) for (ARRAY in TypedArrayConstructorsList) {
  4492. TypedArrayConstructor = global$r[ARRAY];
  4493. if (TypedArrayConstructor && hasOwn$9(TypedArrayConstructor, KEY)) try {
  4494. delete TypedArrayConstructor[KEY];
  4495. } catch (error) { /* empty */ }
  4496. }
  4497. if (!TypedArray$1[KEY] || forced) {
  4498. // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable
  4499. try {
  4500. return defineBuiltIn$7(TypedArray$1, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS$2 && TypedArray$1[KEY] || property);
  4501. } catch (error) { /* empty */ }
  4502. } else return;
  4503. }
  4504. for (ARRAY in TypedArrayConstructorsList) {
  4505. TypedArrayConstructor = global$r[ARRAY];
  4506. if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
  4507. defineBuiltIn$7(TypedArrayConstructor, KEY, property);
  4508. }
  4509. }
  4510. };
  4511. for (NAME$1 in TypedArrayConstructorsList) {
  4512. Constructor = global$r[NAME$1];
  4513. Prototype = Constructor && Constructor.prototype;
  4514. if (Prototype) enforceInternalState$1(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
  4515. else NATIVE_ARRAY_BUFFER_VIEWS$2 = false;
  4516. }
  4517. for (NAME$1 in BigIntArrayConstructorsList) {
  4518. Constructor = global$r[NAME$1];
  4519. Prototype = Constructor && Constructor.prototype;
  4520. if (Prototype) enforceInternalState$1(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
  4521. }
  4522. // WebKit bug - typed arrays constructors prototype is Object.prototype
  4523. if (!NATIVE_ARRAY_BUFFER_VIEWS$2 || !isCallable$a(TypedArray$1) || TypedArray$1 === Function.prototype) {
  4524. // eslint-disable-next-line no-shadow -- safe
  4525. TypedArray$1 = function TypedArray() {
  4526. throw TypeError$4('Incorrect invocation');
  4527. };
  4528. if (NATIVE_ARRAY_BUFFER_VIEWS$2) for (NAME$1 in TypedArrayConstructorsList) {
  4529. if (global$r[NAME$1]) setPrototypeOf$3(global$r[NAME$1], TypedArray$1);
  4530. }
  4531. }
  4532. if (!NATIVE_ARRAY_BUFFER_VIEWS$2 || !TypedArrayPrototype$2 || TypedArrayPrototype$2 === ObjectPrototype$1) {
  4533. TypedArrayPrototype$2 = TypedArray$1.prototype;
  4534. if (NATIVE_ARRAY_BUFFER_VIEWS$2) for (NAME$1 in TypedArrayConstructorsList) {
  4535. if (global$r[NAME$1]) setPrototypeOf$3(global$r[NAME$1].prototype, TypedArrayPrototype$2);
  4536. }
  4537. }
  4538. // WebKit bug - one more object in Uint8ClampedArray prototype chain
  4539. if (NATIVE_ARRAY_BUFFER_VIEWS$2 && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype$2) {
  4540. setPrototypeOf$3(Uint8ClampedArrayPrototype, TypedArrayPrototype$2);
  4541. }
  4542. if (DESCRIPTORS$8 && !hasOwn$9(TypedArrayPrototype$2, TO_STRING_TAG)) {
  4543. TYPED_ARRAY_TAG_REQUIRED = true;
  4544. defineProperty$6(TypedArrayPrototype$2, TO_STRING_TAG, { get: function () {
  4545. return isObject$d(this) ? this[TYPED_ARRAY_TAG$1] : undefined;
  4546. } });
  4547. for (NAME$1 in TypedArrayConstructorsList) if (global$r[NAME$1]) {
  4548. createNonEnumerableProperty$3(global$r[NAME$1], TYPED_ARRAY_TAG$1, NAME$1);
  4549. }
  4550. }
  4551. var arrayBufferViewCore = {
  4552. NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS$2,
  4553. TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG$1,
  4554. aTypedArray: aTypedArray$m,
  4555. aTypedArrayConstructor: aTypedArrayConstructor$3,
  4556. exportTypedArrayMethod: exportTypedArrayMethod$n,
  4557. exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,
  4558. getTypedArrayConstructor: getTypedArrayConstructor$1,
  4559. isView: isView,
  4560. isTypedArray: isTypedArray$1,
  4561. TypedArray: TypedArray$1,
  4562. TypedArrayPrototype: TypedArrayPrototype$2
  4563. };
  4564. /* eslint-disable no-new -- required for testing */
  4565. var global$q = global$F;
  4566. var fails$r = fails$H;
  4567. var checkCorrectnessOfIteration$3 = checkCorrectnessOfIteration$4;
  4568. var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
  4569. var ArrayBuffer$3 = global$q.ArrayBuffer;
  4570. var Int8Array$3 = global$q.Int8Array;
  4571. var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails$r(function () {
  4572. Int8Array$3(1);
  4573. }) || !fails$r(function () {
  4574. new Int8Array$3(-1);
  4575. }) || !checkCorrectnessOfIteration$3(function (iterable) {
  4576. new Int8Array$3();
  4577. new Int8Array$3(null);
  4578. new Int8Array$3(1.5);
  4579. new Int8Array$3(iterable);
  4580. }, true) || fails$r(function () {
  4581. // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill
  4582. return new Int8Array$3(new ArrayBuffer$3(2), 1, undefined).length !== 1;
  4583. });
  4584. var isObject$c = isObject$k;
  4585. var floor$2 = Math.floor;
  4586. // `IsIntegralNumber` abstract operation
  4587. // https://tc39.es/ecma262/#sec-isintegralnumber
  4588. // eslint-disable-next-line es-x/no-number-isinteger -- safe
  4589. var isIntegralNumber$1 = Number.isInteger || function isInteger(it) {
  4590. return !isObject$c(it) && isFinite(it) && floor$2(it) === it;
  4591. };
  4592. var toIntegerOrInfinity$3 = toIntegerOrInfinity$9;
  4593. var $RangeError$1 = RangeError;
  4594. var toPositiveInteger$1 = function (it) {
  4595. var result = toIntegerOrInfinity$3(it);
  4596. if (result < 0) throw $RangeError$1("The argument can't be less than 0");
  4597. return result;
  4598. };
  4599. var toPositiveInteger = toPositiveInteger$1;
  4600. var $RangeError = RangeError;
  4601. var toOffset$2 = function (it, BYTES) {
  4602. var offset = toPositiveInteger(it);
  4603. if (offset % BYTES) throw $RangeError('Wrong offset');
  4604. return offset;
  4605. };
  4606. var bind$6 = functionBindContext;
  4607. var call$g = functionCall;
  4608. var aConstructor = aConstructor$2;
  4609. var toObject$7 = toObject$d;
  4610. var lengthOfArrayLike$a = lengthOfArrayLike$f;
  4611. var getIterator$1 = getIterator$4;
  4612. var getIteratorMethod$1 = getIteratorMethod$5;
  4613. var isArrayIteratorMethod$1 = isArrayIteratorMethod$3;
  4614. var aTypedArrayConstructor$2 = arrayBufferViewCore.aTypedArrayConstructor;
  4615. var typedArrayFrom$1 = function from(source /* , mapfn, thisArg */) {
  4616. var C = aConstructor(this);
  4617. var O = toObject$7(source);
  4618. var argumentsLength = arguments.length;
  4619. var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
  4620. var mapping = mapfn !== undefined;
  4621. var iteratorMethod = getIteratorMethod$1(O);
  4622. var i, length, result, step, iterator, next;
  4623. if (iteratorMethod && !isArrayIteratorMethod$1(iteratorMethod)) {
  4624. iterator = getIterator$1(O, iteratorMethod);
  4625. next = iterator.next;
  4626. O = [];
  4627. while (!(step = call$g(next, iterator)).done) {
  4628. O.push(step.value);
  4629. }
  4630. }
  4631. if (mapping && argumentsLength > 2) {
  4632. mapfn = bind$6(mapfn, arguments[2]);
  4633. }
  4634. length = lengthOfArrayLike$a(O);
  4635. result = new (aTypedArrayConstructor$2(C))(length);
  4636. for (i = 0; length > i; i++) {
  4637. result[i] = mapping ? mapfn(O[i], i) : O[i];
  4638. }
  4639. return result;
  4640. };
  4641. var classof$7 = classofRaw$1;
  4642. // `IsArray` abstract operation
  4643. // https://tc39.es/ecma262/#sec-isarray
  4644. // eslint-disable-next-line es-x/no-array-isarray -- safe
  4645. var isArray$4 = Array.isArray || function isArray(argument) {
  4646. return classof$7(argument) == 'Array';
  4647. };
  4648. var isArray$3 = isArray$4;
  4649. var isConstructor$1 = isConstructor$4;
  4650. var isObject$b = isObject$k;
  4651. var wellKnownSymbol$d = wellKnownSymbol$t;
  4652. var SPECIES$5 = wellKnownSymbol$d('species');
  4653. var $Array$1 = Array;
  4654. // a part of `ArraySpeciesCreate` abstract operation
  4655. // https://tc39.es/ecma262/#sec-arrayspeciescreate
  4656. var arraySpeciesConstructor$1 = function (originalArray) {
  4657. var C;
  4658. if (isArray$3(originalArray)) {
  4659. C = originalArray.constructor;
  4660. // cross-realm fallback
  4661. if (isConstructor$1(C) && (C === $Array$1 || isArray$3(C.prototype))) C = undefined;
  4662. else if (isObject$b(C)) {
  4663. C = C[SPECIES$5];
  4664. if (C === null) C = undefined;
  4665. }
  4666. } return C === undefined ? $Array$1 : C;
  4667. };
  4668. var arraySpeciesConstructor = arraySpeciesConstructor$1;
  4669. // `ArraySpeciesCreate` abstract operation
  4670. // https://tc39.es/ecma262/#sec-arrayspeciescreate
  4671. var arraySpeciesCreate$3 = function (originalArray, length) {
  4672. return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
  4673. };
  4674. var bind$5 = functionBindContext;
  4675. var uncurryThis$o = functionUncurryThis;
  4676. var IndexedObject$1 = indexedObject;
  4677. var toObject$6 = toObject$d;
  4678. var lengthOfArrayLike$9 = lengthOfArrayLike$f;
  4679. var arraySpeciesCreate$2 = arraySpeciesCreate$3;
  4680. var push$4 = uncurryThis$o([].push);
  4681. // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation
  4682. var createMethod$3 = function (TYPE) {
  4683. var IS_MAP = TYPE == 1;
  4684. var IS_FILTER = TYPE == 2;
  4685. var IS_SOME = TYPE == 3;
  4686. var IS_EVERY = TYPE == 4;
  4687. var IS_FIND_INDEX = TYPE == 6;
  4688. var IS_FILTER_REJECT = TYPE == 7;
  4689. var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  4690. return function ($this, callbackfn, that, specificCreate) {
  4691. var O = toObject$6($this);
  4692. var self = IndexedObject$1(O);
  4693. var boundFunction = bind$5(callbackfn, that);
  4694. var length = lengthOfArrayLike$9(self);
  4695. var index = 0;
  4696. var create = specificCreate || arraySpeciesCreate$2;
  4697. var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;
  4698. var value, result;
  4699. for (;length > index; index++) if (NO_HOLES || index in self) {
  4700. value = self[index];
  4701. result = boundFunction(value, index, O);
  4702. if (TYPE) {
  4703. if (IS_MAP) target[index] = result; // map
  4704. else if (result) switch (TYPE) {
  4705. case 3: return true; // some
  4706. case 5: return value; // find
  4707. case 6: return index; // findIndex
  4708. case 2: push$4(target, value); // filter
  4709. } else switch (TYPE) {
  4710. case 4: return false; // every
  4711. case 7: push$4(target, value); // filterReject
  4712. }
  4713. }
  4714. }
  4715. return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
  4716. };
  4717. };
  4718. var arrayIteration = {
  4719. // `Array.prototype.forEach` method
  4720. // https://tc39.es/ecma262/#sec-array.prototype.foreach
  4721. forEach: createMethod$3(0),
  4722. // `Array.prototype.map` method
  4723. // https://tc39.es/ecma262/#sec-array.prototype.map
  4724. map: createMethod$3(1),
  4725. // `Array.prototype.filter` method
  4726. // https://tc39.es/ecma262/#sec-array.prototype.filter
  4727. filter: createMethod$3(2),
  4728. // `Array.prototype.some` method
  4729. // https://tc39.es/ecma262/#sec-array.prototype.some
  4730. some: createMethod$3(3),
  4731. // `Array.prototype.every` method
  4732. // https://tc39.es/ecma262/#sec-array.prototype.every
  4733. every: createMethod$3(4),
  4734. // `Array.prototype.find` method
  4735. // https://tc39.es/ecma262/#sec-array.prototype.find
  4736. find: createMethod$3(5),
  4737. // `Array.prototype.findIndex` method
  4738. // https://tc39.es/ecma262/#sec-array.prototype.findIndex
  4739. findIndex: createMethod$3(6),
  4740. // `Array.prototype.filterReject` method
  4741. // https://github.com/tc39/proposal-array-filtering
  4742. filterReject: createMethod$3(7)
  4743. };
  4744. var getBuiltIn$5 = getBuiltIn$b;
  4745. var definePropertyModule$2 = objectDefineProperty;
  4746. var wellKnownSymbol$c = wellKnownSymbol$t;
  4747. var DESCRIPTORS$7 = descriptors;
  4748. var SPECIES$4 = wellKnownSymbol$c('species');
  4749. var setSpecies$4 = function (CONSTRUCTOR_NAME) {
  4750. var Constructor = getBuiltIn$5(CONSTRUCTOR_NAME);
  4751. var defineProperty = definePropertyModule$2.f;
  4752. if (DESCRIPTORS$7 && Constructor && !Constructor[SPECIES$4]) {
  4753. defineProperty(Constructor, SPECIES$4, {
  4754. configurable: true,
  4755. get: function () { return this; }
  4756. });
  4757. }
  4758. };
  4759. var isCallable$9 = isCallable$s;
  4760. var isObject$a = isObject$k;
  4761. var setPrototypeOf$2 = objectSetPrototypeOf;
  4762. // makes subclassing work correct for wrapped built-ins
  4763. var inheritIfRequired$3 = function ($this, dummy, Wrapper) {
  4764. var NewTarget, NewTargetPrototype;
  4765. if (
  4766. // it can work only with native `setPrototypeOf`
  4767. setPrototypeOf$2 &&
  4768. // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
  4769. isCallable$9(NewTarget = dummy.constructor) &&
  4770. NewTarget !== Wrapper &&
  4771. isObject$a(NewTargetPrototype = NewTarget.prototype) &&
  4772. NewTargetPrototype !== Wrapper.prototype
  4773. ) setPrototypeOf$2($this, NewTargetPrototype);
  4774. return $this;
  4775. };
  4776. var $$t = _export;
  4777. var global$p = global$F;
  4778. var call$f = functionCall;
  4779. var DESCRIPTORS$6 = descriptors;
  4780. var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = typedArrayConstructorsRequireWrappers;
  4781. var ArrayBufferViewCore$n = arrayBufferViewCore;
  4782. var ArrayBufferModule = arrayBuffer;
  4783. var anInstance$3 = anInstance$7;
  4784. var createPropertyDescriptor$1 = createPropertyDescriptor$7;
  4785. var createNonEnumerableProperty$2 = createNonEnumerableProperty$9;
  4786. var isIntegralNumber = isIntegralNumber$1;
  4787. var toLength$5 = toLength$a;
  4788. var toIndex = toIndex$2;
  4789. var toOffset$1 = toOffset$2;
  4790. var toPropertyKey$1 = toPropertyKey$5;
  4791. var hasOwn$8 = hasOwnProperty_1;
  4792. var classof$6 = classof$e;
  4793. var isObject$9 = isObject$k;
  4794. var isSymbol$3 = isSymbol$6;
  4795. var create$2 = objectCreate;
  4796. var isPrototypeOf$4 = objectIsPrototypeOf;
  4797. var setPrototypeOf$1 = objectSetPrototypeOf;
  4798. var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
  4799. var typedArrayFrom = typedArrayFrom$1;
  4800. var forEach$1 = arrayIteration.forEach;
  4801. var setSpecies$3 = setSpecies$4;
  4802. var definePropertyModule$1 = objectDefineProperty;
  4803. var getOwnPropertyDescriptorModule$1 = objectGetOwnPropertyDescriptor;
  4804. var InternalStateModule$3 = internalState;
  4805. var inheritIfRequired$2 = inheritIfRequired$3;
  4806. var getInternalState$2 = InternalStateModule$3.get;
  4807. var setInternalState$3 = InternalStateModule$3.set;
  4808. var enforceInternalState = InternalStateModule$3.enforce;
  4809. var nativeDefineProperty$1 = definePropertyModule$1.f;
  4810. var nativeGetOwnPropertyDescriptor$1 = getOwnPropertyDescriptorModule$1.f;
  4811. var round = Math.round;
  4812. var RangeError$2 = global$p.RangeError;
  4813. var ArrayBuffer$2 = ArrayBufferModule.ArrayBuffer;
  4814. var ArrayBufferPrototype = ArrayBuffer$2.prototype;
  4815. var DataView$1 = ArrayBufferModule.DataView;
  4816. var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore$n.NATIVE_ARRAY_BUFFER_VIEWS;
  4817. var TYPED_ARRAY_TAG = ArrayBufferViewCore$n.TYPED_ARRAY_TAG;
  4818. var TypedArray = ArrayBufferViewCore$n.TypedArray;
  4819. var TypedArrayPrototype$1 = ArrayBufferViewCore$n.TypedArrayPrototype;
  4820. var aTypedArrayConstructor$1 = ArrayBufferViewCore$n.aTypedArrayConstructor;
  4821. var isTypedArray = ArrayBufferViewCore$n.isTypedArray;
  4822. var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
  4823. var WRONG_LENGTH = 'Wrong length';
  4824. var fromList = function (C, list) {
  4825. aTypedArrayConstructor$1(C);
  4826. var index = 0;
  4827. var length = list.length;
  4828. var result = new C(length);
  4829. while (length > index) result[index] = list[index++];
  4830. return result;
  4831. };
  4832. var addGetter = function (it, key) {
  4833. nativeDefineProperty$1(it, key, { get: function () {
  4834. return getInternalState$2(this)[key];
  4835. } });
  4836. };
  4837. var isArrayBuffer = function (it) {
  4838. var klass;
  4839. return isPrototypeOf$4(ArrayBufferPrototype, it) || (klass = classof$6(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
  4840. };
  4841. var isTypedArrayIndex = function (target, key) {
  4842. return isTypedArray(target)
  4843. && !isSymbol$3(key)
  4844. && key in target
  4845. && isIntegralNumber(+key)
  4846. && key >= 0;
  4847. };
  4848. var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {
  4849. key = toPropertyKey$1(key);
  4850. return isTypedArrayIndex(target, key)
  4851. ? createPropertyDescriptor$1(2, target[key])
  4852. : nativeGetOwnPropertyDescriptor$1(target, key);
  4853. };
  4854. var wrappedDefineProperty = function defineProperty(target, key, descriptor) {
  4855. key = toPropertyKey$1(key);
  4856. if (isTypedArrayIndex(target, key)
  4857. && isObject$9(descriptor)
  4858. && hasOwn$8(descriptor, 'value')
  4859. && !hasOwn$8(descriptor, 'get')
  4860. && !hasOwn$8(descriptor, 'set')
  4861. // TODO: add validation descriptor w/o calling accessors
  4862. && !descriptor.configurable
  4863. && (!hasOwn$8(descriptor, 'writable') || descriptor.writable)
  4864. && (!hasOwn$8(descriptor, 'enumerable') || descriptor.enumerable)
  4865. ) {
  4866. target[key] = descriptor.value;
  4867. return target;
  4868. } return nativeDefineProperty$1(target, key, descriptor);
  4869. };
  4870. if (DESCRIPTORS$6) {
  4871. if (!NATIVE_ARRAY_BUFFER_VIEWS) {
  4872. getOwnPropertyDescriptorModule$1.f = wrappedGetOwnPropertyDescriptor;
  4873. definePropertyModule$1.f = wrappedDefineProperty;
  4874. addGetter(TypedArrayPrototype$1, 'buffer');
  4875. addGetter(TypedArrayPrototype$1, 'byteOffset');
  4876. addGetter(TypedArrayPrototype$1, 'byteLength');
  4877. addGetter(TypedArrayPrototype$1, 'length');
  4878. }
  4879. $$t({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
  4880. getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,
  4881. defineProperty: wrappedDefineProperty
  4882. });
  4883. typedArrayConstructor.exports = function (TYPE, wrapper, CLAMPED) {
  4884. var BYTES = TYPE.match(/\d+$/)[0] / 8;
  4885. var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';
  4886. var GETTER = 'get' + TYPE;
  4887. var SETTER = 'set' + TYPE;
  4888. var NativeTypedArrayConstructor = global$p[CONSTRUCTOR_NAME];
  4889. var TypedArrayConstructor = NativeTypedArrayConstructor;
  4890. var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;
  4891. var exported = {};
  4892. var getter = function (that, index) {
  4893. var data = getInternalState$2(that);
  4894. return data.view[GETTER](index * BYTES + data.byteOffset, true);
  4895. };
  4896. var setter = function (that, index, value) {
  4897. var data = getInternalState$2(that);
  4898. if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;
  4899. data.view[SETTER](index * BYTES + data.byteOffset, value, true);
  4900. };
  4901. var addElement = function (that, index) {
  4902. nativeDefineProperty$1(that, index, {
  4903. get: function () {
  4904. return getter(this, index);
  4905. },
  4906. set: function (value) {
  4907. return setter(this, index, value);
  4908. },
  4909. enumerable: true
  4910. });
  4911. };
  4912. if (!NATIVE_ARRAY_BUFFER_VIEWS) {
  4913. TypedArrayConstructor = wrapper(function (that, data, offset, $length) {
  4914. anInstance$3(that, TypedArrayConstructorPrototype);
  4915. var index = 0;
  4916. var byteOffset = 0;
  4917. var buffer, byteLength, length;
  4918. if (!isObject$9(data)) {
  4919. length = toIndex(data);
  4920. byteLength = length * BYTES;
  4921. buffer = new ArrayBuffer$2(byteLength);
  4922. } else if (isArrayBuffer(data)) {
  4923. buffer = data;
  4924. byteOffset = toOffset$1(offset, BYTES);
  4925. var $len = data.byteLength;
  4926. if ($length === undefined) {
  4927. if ($len % BYTES) throw RangeError$2(WRONG_LENGTH);
  4928. byteLength = $len - byteOffset;
  4929. if (byteLength < 0) throw RangeError$2(WRONG_LENGTH);
  4930. } else {
  4931. byteLength = toLength$5($length) * BYTES;
  4932. if (byteLength + byteOffset > $len) throw RangeError$2(WRONG_LENGTH);
  4933. }
  4934. length = byteLength / BYTES;
  4935. } else if (isTypedArray(data)) {
  4936. return fromList(TypedArrayConstructor, data);
  4937. } else {
  4938. return call$f(typedArrayFrom, TypedArrayConstructor, data);
  4939. }
  4940. setInternalState$3(that, {
  4941. buffer: buffer,
  4942. byteOffset: byteOffset,
  4943. byteLength: byteLength,
  4944. length: length,
  4945. view: new DataView$1(buffer)
  4946. });
  4947. while (index < length) addElement(that, index++);
  4948. });
  4949. if (setPrototypeOf$1) setPrototypeOf$1(TypedArrayConstructor, TypedArray);
  4950. TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create$2(TypedArrayPrototype$1);
  4951. } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {
  4952. TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {
  4953. anInstance$3(dummy, TypedArrayConstructorPrototype);
  4954. return inheritIfRequired$2(function () {
  4955. if (!isObject$9(data)) return new NativeTypedArrayConstructor(toIndex(data));
  4956. if (isArrayBuffer(data)) return $length !== undefined
  4957. ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES), $length)
  4958. : typedArrayOffset !== undefined
  4959. ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES))
  4960. : new NativeTypedArrayConstructor(data);
  4961. if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);
  4962. return call$f(typedArrayFrom, TypedArrayConstructor, data);
  4963. }(), dummy, TypedArrayConstructor);
  4964. });
  4965. if (setPrototypeOf$1) setPrototypeOf$1(TypedArrayConstructor, TypedArray);
  4966. forEach$1(getOwnPropertyNames$1(NativeTypedArrayConstructor), function (key) {
  4967. if (!(key in TypedArrayConstructor)) {
  4968. createNonEnumerableProperty$2(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);
  4969. }
  4970. });
  4971. TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;
  4972. }
  4973. if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {
  4974. createNonEnumerableProperty$2(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);
  4975. }
  4976. enforceInternalState(TypedArrayConstructorPrototype).TypedArrayConstructor = TypedArrayConstructor;
  4977. if (TYPED_ARRAY_TAG) {
  4978. createNonEnumerableProperty$2(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);
  4979. }
  4980. var FORCED = TypedArrayConstructor != NativeTypedArrayConstructor;
  4981. exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;
  4982. $$t({ global: true, constructor: true, forced: FORCED, sham: !NATIVE_ARRAY_BUFFER_VIEWS }, exported);
  4983. if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {
  4984. createNonEnumerableProperty$2(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);
  4985. }
  4986. if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {
  4987. createNonEnumerableProperty$2(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);
  4988. }
  4989. setSpecies$3(CONSTRUCTOR_NAME);
  4990. };
  4991. } else typedArrayConstructor.exports = function () { /* empty */ };
  4992. var createTypedArrayConstructor$2 = typedArrayConstructor.exports;
  4993. // `Uint8Array` constructor
  4994. // https://tc39.es/ecma262/#sec-typedarray-objects
  4995. createTypedArrayConstructor$2('Uint8', function (init) {
  4996. return function Uint8Array(data, byteOffset, length) {
  4997. return init(this, data, byteOffset, length);
  4998. };
  4999. });
  5000. var tryToString$2 = tryToString$7;
  5001. var $TypeError$6 = TypeError;
  5002. var deletePropertyOrThrow$2 = function (O, P) {
  5003. if (!delete O[P]) throw $TypeError$6('Cannot delete property ' + tryToString$2(P) + ' of ' + tryToString$2(O));
  5004. };
  5005. var toObject$5 = toObject$d;
  5006. var toAbsoluteIndex$3 = toAbsoluteIndex$8;
  5007. var lengthOfArrayLike$8 = lengthOfArrayLike$f;
  5008. var deletePropertyOrThrow$1 = deletePropertyOrThrow$2;
  5009. var min$6 = Math.min;
  5010. // `Array.prototype.copyWithin` method implementation
  5011. // https://tc39.es/ecma262/#sec-array.prototype.copywithin
  5012. // eslint-disable-next-line es-x/no-array-prototype-copywithin -- safe
  5013. var arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
  5014. var O = toObject$5(this);
  5015. var len = lengthOfArrayLike$8(O);
  5016. var to = toAbsoluteIndex$3(target, len);
  5017. var from = toAbsoluteIndex$3(start, len);
  5018. var end = arguments.length > 2 ? arguments[2] : undefined;
  5019. var count = min$6((end === undefined ? len : toAbsoluteIndex$3(end, len)) - from, len - to);
  5020. var inc = 1;
  5021. if (from < to && to < from + count) {
  5022. inc = -1;
  5023. from += count - 1;
  5024. to += count - 1;
  5025. }
  5026. while (count-- > 0) {
  5027. if (from in O) O[to] = O[from];
  5028. else deletePropertyOrThrow$1(O, to);
  5029. to += inc;
  5030. from += inc;
  5031. } return O;
  5032. };
  5033. var uncurryThis$n = functionUncurryThis;
  5034. var ArrayBufferViewCore$m = arrayBufferViewCore;
  5035. var $ArrayCopyWithin = arrayCopyWithin;
  5036. var u$ArrayCopyWithin = uncurryThis$n($ArrayCopyWithin);
  5037. var aTypedArray$l = ArrayBufferViewCore$m.aTypedArray;
  5038. var exportTypedArrayMethod$m = ArrayBufferViewCore$m.exportTypedArrayMethod;
  5039. // `%TypedArray%.prototype.copyWithin` method
  5040. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin
  5041. exportTypedArrayMethod$m('copyWithin', function copyWithin(target, start /* , end */) {
  5042. return u$ArrayCopyWithin(aTypedArray$l(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
  5043. });
  5044. var ArrayBufferViewCore$l = arrayBufferViewCore;
  5045. var $every = arrayIteration.every;
  5046. var aTypedArray$k = ArrayBufferViewCore$l.aTypedArray;
  5047. var exportTypedArrayMethod$l = ArrayBufferViewCore$l.exportTypedArrayMethod;
  5048. // `%TypedArray%.prototype.every` method
  5049. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.every
  5050. exportTypedArrayMethod$l('every', function every(callbackfn /* , thisArg */) {
  5051. return $every(aTypedArray$k(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  5052. });
  5053. var toPrimitive$1 = toPrimitive$3;
  5054. var $TypeError$5 = TypeError;
  5055. // `ToBigInt` abstract operation
  5056. // https://tc39.es/ecma262/#sec-tobigint
  5057. var toBigInt$1 = function (argument) {
  5058. var prim = toPrimitive$1(argument, 'number');
  5059. if (typeof prim == 'number') throw $TypeError$5("Can't convert number to bigint");
  5060. // eslint-disable-next-line es-x/no-bigint -- safe
  5061. return BigInt(prim);
  5062. };
  5063. var ArrayBufferViewCore$k = arrayBufferViewCore;
  5064. var $fill = arrayFill$1;
  5065. var toBigInt = toBigInt$1;
  5066. var classof$5 = classof$e;
  5067. var call$e = functionCall;
  5068. var uncurryThis$m = functionUncurryThis;
  5069. var fails$q = fails$H;
  5070. var aTypedArray$j = ArrayBufferViewCore$k.aTypedArray;
  5071. var exportTypedArrayMethod$k = ArrayBufferViewCore$k.exportTypedArrayMethod;
  5072. var slice$1 = uncurryThis$m(''.slice);
  5073. // V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18
  5074. var CONVERSION_BUG = fails$q(function () {
  5075. var count = 0;
  5076. // eslint-disable-next-line es-x/no-typed-arrays -- safe
  5077. new Int8Array(2).fill({ valueOf: function () { return count++; } });
  5078. return count !== 1;
  5079. });
  5080. // `%TypedArray%.prototype.fill` method
  5081. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill
  5082. exportTypedArrayMethod$k('fill', function fill(value /* , start, end */) {
  5083. var length = arguments.length;
  5084. aTypedArray$j(this);
  5085. var actualValue = slice$1(classof$5(this), 0, 3) === 'Big' ? toBigInt(value) : +value;
  5086. return call$e($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);
  5087. }, CONVERSION_BUG);
  5088. var lengthOfArrayLike$7 = lengthOfArrayLike$f;
  5089. var arrayFromConstructorAndList$1 = function (Constructor, list) {
  5090. var index = 0;
  5091. var length = lengthOfArrayLike$7(list);
  5092. var result = new Constructor(length);
  5093. while (length > index) result[index] = list[index++];
  5094. return result;
  5095. };
  5096. var ArrayBufferViewCore$j = arrayBufferViewCore;
  5097. var speciesConstructor$2 = speciesConstructor$4;
  5098. var aTypedArrayConstructor = ArrayBufferViewCore$j.aTypedArrayConstructor;
  5099. var getTypedArrayConstructor = ArrayBufferViewCore$j.getTypedArrayConstructor;
  5100. // a part of `TypedArraySpeciesCreate` abstract operation
  5101. // https://tc39.es/ecma262/#typedarray-species-create
  5102. var typedArraySpeciesConstructor$4 = function (originalArray) {
  5103. return aTypedArrayConstructor(speciesConstructor$2(originalArray, getTypedArrayConstructor(originalArray)));
  5104. };
  5105. var arrayFromConstructorAndList = arrayFromConstructorAndList$1;
  5106. var typedArraySpeciesConstructor$3 = typedArraySpeciesConstructor$4;
  5107. var typedArrayFromSpeciesAndList = function (instance, list) {
  5108. return arrayFromConstructorAndList(typedArraySpeciesConstructor$3(instance), list);
  5109. };
  5110. var ArrayBufferViewCore$i = arrayBufferViewCore;
  5111. var $filter$1 = arrayIteration.filter;
  5112. var fromSpeciesAndList = typedArrayFromSpeciesAndList;
  5113. var aTypedArray$i = ArrayBufferViewCore$i.aTypedArray;
  5114. var exportTypedArrayMethod$j = ArrayBufferViewCore$i.exportTypedArrayMethod;
  5115. // `%TypedArray%.prototype.filter` method
  5116. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter
  5117. exportTypedArrayMethod$j('filter', function filter(callbackfn /* , thisArg */) {
  5118. var list = $filter$1(aTypedArray$i(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  5119. return fromSpeciesAndList(this, list);
  5120. });
  5121. var ArrayBufferViewCore$h = arrayBufferViewCore;
  5122. var $find$1 = arrayIteration.find;
  5123. var aTypedArray$h = ArrayBufferViewCore$h.aTypedArray;
  5124. var exportTypedArrayMethod$i = ArrayBufferViewCore$h.exportTypedArrayMethod;
  5125. // `%TypedArray%.prototype.find` method
  5126. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.find
  5127. exportTypedArrayMethod$i('find', function find(predicate /* , thisArg */) {
  5128. return $find$1(aTypedArray$h(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
  5129. });
  5130. var ArrayBufferViewCore$g = arrayBufferViewCore;
  5131. var $findIndex = arrayIteration.findIndex;
  5132. var aTypedArray$g = ArrayBufferViewCore$g.aTypedArray;
  5133. var exportTypedArrayMethod$h = ArrayBufferViewCore$g.exportTypedArrayMethod;
  5134. // `%TypedArray%.prototype.findIndex` method
  5135. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex
  5136. exportTypedArrayMethod$h('findIndex', function findIndex(predicate /* , thisArg */) {
  5137. return $findIndex(aTypedArray$g(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
  5138. });
  5139. var ArrayBufferViewCore$f = arrayBufferViewCore;
  5140. var $forEach$2 = arrayIteration.forEach;
  5141. var aTypedArray$f = ArrayBufferViewCore$f.aTypedArray;
  5142. var exportTypedArrayMethod$g = ArrayBufferViewCore$f.exportTypedArrayMethod;
  5143. // `%TypedArray%.prototype.forEach` method
  5144. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach
  5145. exportTypedArrayMethod$g('forEach', function forEach(callbackfn /* , thisArg */) {
  5146. $forEach$2(aTypedArray$f(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  5147. });
  5148. var ArrayBufferViewCore$e = arrayBufferViewCore;
  5149. var $includes = arrayIncludes.includes;
  5150. var aTypedArray$e = ArrayBufferViewCore$e.aTypedArray;
  5151. var exportTypedArrayMethod$f = ArrayBufferViewCore$e.exportTypedArrayMethod;
  5152. // `%TypedArray%.prototype.includes` method
  5153. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes
  5154. exportTypedArrayMethod$f('includes', function includes(searchElement /* , fromIndex */) {
  5155. return $includes(aTypedArray$e(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
  5156. });
  5157. var ArrayBufferViewCore$d = arrayBufferViewCore;
  5158. var $indexOf = arrayIncludes.indexOf;
  5159. var aTypedArray$d = ArrayBufferViewCore$d.aTypedArray;
  5160. var exportTypedArrayMethod$e = ArrayBufferViewCore$d.exportTypedArrayMethod;
  5161. // `%TypedArray%.prototype.indexOf` method
  5162. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof
  5163. exportTypedArrayMethod$e('indexOf', function indexOf(searchElement /* , fromIndex */) {
  5164. return $indexOf(aTypedArray$d(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
  5165. });
  5166. var global$o = global$F;
  5167. var fails$p = fails$H;
  5168. var uncurryThis$l = functionUncurryThis;
  5169. var ArrayBufferViewCore$c = arrayBufferViewCore;
  5170. var ArrayIterators = es_array_iterator;
  5171. var wellKnownSymbol$b = wellKnownSymbol$t;
  5172. var ITERATOR = wellKnownSymbol$b('iterator');
  5173. var Uint8Array$2 = global$o.Uint8Array;
  5174. var arrayValues = uncurryThis$l(ArrayIterators.values);
  5175. var arrayKeys = uncurryThis$l(ArrayIterators.keys);
  5176. var arrayEntries = uncurryThis$l(ArrayIterators.entries);
  5177. var aTypedArray$c = ArrayBufferViewCore$c.aTypedArray;
  5178. var exportTypedArrayMethod$d = ArrayBufferViewCore$c.exportTypedArrayMethod;
  5179. var TypedArrayPrototype = Uint8Array$2 && Uint8Array$2.prototype;
  5180. var GENERIC = !fails$p(function () {
  5181. TypedArrayPrototype[ITERATOR].call([1]);
  5182. });
  5183. var ITERATOR_IS_VALUES = !!TypedArrayPrototype
  5184. && TypedArrayPrototype.values
  5185. && TypedArrayPrototype[ITERATOR] === TypedArrayPrototype.values
  5186. && TypedArrayPrototype.values.name === 'values';
  5187. var typedArrayValues = function values() {
  5188. return arrayValues(aTypedArray$c(this));
  5189. };
  5190. // `%TypedArray%.prototype.entries` method
  5191. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries
  5192. exportTypedArrayMethod$d('entries', function entries() {
  5193. return arrayEntries(aTypedArray$c(this));
  5194. }, GENERIC);
  5195. // `%TypedArray%.prototype.keys` method
  5196. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys
  5197. exportTypedArrayMethod$d('keys', function keys() {
  5198. return arrayKeys(aTypedArray$c(this));
  5199. }, GENERIC);
  5200. // `%TypedArray%.prototype.values` method
  5201. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.values
  5202. exportTypedArrayMethod$d('values', typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });
  5203. // `%TypedArray%.prototype[@@iterator]` method
  5204. // https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator
  5205. exportTypedArrayMethod$d(ITERATOR, typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });
  5206. var ArrayBufferViewCore$b = arrayBufferViewCore;
  5207. var uncurryThis$k = functionUncurryThis;
  5208. var aTypedArray$b = ArrayBufferViewCore$b.aTypedArray;
  5209. var exportTypedArrayMethod$c = ArrayBufferViewCore$b.exportTypedArrayMethod;
  5210. var $join = uncurryThis$k([].join);
  5211. // `%TypedArray%.prototype.join` method
  5212. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.join
  5213. exportTypedArrayMethod$c('join', function join(separator) {
  5214. return $join(aTypedArray$b(this), separator);
  5215. });
  5216. var NATIVE_BIND = functionBindNative;
  5217. var FunctionPrototype$1 = Function.prototype;
  5218. var apply$7 = FunctionPrototype$1.apply;
  5219. var call$d = FunctionPrototype$1.call;
  5220. // eslint-disable-next-line es-x/no-reflect -- safe
  5221. var functionApply = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call$d.bind(apply$7) : function () {
  5222. return call$d.apply(apply$7, arguments);
  5223. });
  5224. var fails$o = fails$H;
  5225. var arrayMethodIsStrict$2 = function (METHOD_NAME, argument) {
  5226. var method = [][METHOD_NAME];
  5227. return !!method && fails$o(function () {
  5228. // eslint-disable-next-line no-useless-call -- required for testing
  5229. method.call(null, argument || function () { return 1; }, 1);
  5230. });
  5231. };
  5232. /* eslint-disable es-x/no-array-prototype-lastindexof -- safe */
  5233. var apply$6 = functionApply;
  5234. var toIndexedObject$5 = toIndexedObject$b;
  5235. var toIntegerOrInfinity$2 = toIntegerOrInfinity$9;
  5236. var lengthOfArrayLike$6 = lengthOfArrayLike$f;
  5237. var arrayMethodIsStrict$1 = arrayMethodIsStrict$2;
  5238. var min$5 = Math.min;
  5239. var $lastIndexOf$1 = [].lastIndexOf;
  5240. var NEGATIVE_ZERO = !!$lastIndexOf$1 && 1 / [1].lastIndexOf(1, -0) < 0;
  5241. var STRICT_METHOD$1 = arrayMethodIsStrict$1('lastIndexOf');
  5242. var FORCED$5 = NEGATIVE_ZERO || !STRICT_METHOD$1;
  5243. // `Array.prototype.lastIndexOf` method implementation
  5244. // https://tc39.es/ecma262/#sec-array.prototype.lastindexof
  5245. var arrayLastIndexOf = FORCED$5 ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
  5246. // convert -0 to +0
  5247. if (NEGATIVE_ZERO) return apply$6($lastIndexOf$1, this, arguments) || 0;
  5248. var O = toIndexedObject$5(this);
  5249. var length = lengthOfArrayLike$6(O);
  5250. var index = length - 1;
  5251. if (arguments.length > 1) index = min$5(index, toIntegerOrInfinity$2(arguments[1]));
  5252. if (index < 0) index = length + index;
  5253. for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;
  5254. return -1;
  5255. } : $lastIndexOf$1;
  5256. var ArrayBufferViewCore$a = arrayBufferViewCore;
  5257. var apply$5 = functionApply;
  5258. var $lastIndexOf = arrayLastIndexOf;
  5259. var aTypedArray$a = ArrayBufferViewCore$a.aTypedArray;
  5260. var exportTypedArrayMethod$b = ArrayBufferViewCore$a.exportTypedArrayMethod;
  5261. // `%TypedArray%.prototype.lastIndexOf` method
  5262. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof
  5263. exportTypedArrayMethod$b('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {
  5264. var length = arguments.length;
  5265. return apply$5($lastIndexOf, aTypedArray$a(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);
  5266. });
  5267. var ArrayBufferViewCore$9 = arrayBufferViewCore;
  5268. var $map = arrayIteration.map;
  5269. var typedArraySpeciesConstructor$2 = typedArraySpeciesConstructor$4;
  5270. var aTypedArray$9 = ArrayBufferViewCore$9.aTypedArray;
  5271. var exportTypedArrayMethod$a = ArrayBufferViewCore$9.exportTypedArrayMethod;
  5272. // `%TypedArray%.prototype.map` method
  5273. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.map
  5274. exportTypedArrayMethod$a('map', function map(mapfn /* , thisArg */) {
  5275. return $map(aTypedArray$9(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {
  5276. return new (typedArraySpeciesConstructor$2(O))(length);
  5277. });
  5278. });
  5279. var aCallable$5 = aCallable$9;
  5280. var toObject$4 = toObject$d;
  5281. var IndexedObject = indexedObject;
  5282. var lengthOfArrayLike$5 = lengthOfArrayLike$f;
  5283. var $TypeError$4 = TypeError;
  5284. // `Array.prototype.{ reduce, reduceRight }` methods implementation
  5285. var createMethod$2 = function (IS_RIGHT) {
  5286. return function (that, callbackfn, argumentsLength, memo) {
  5287. aCallable$5(callbackfn);
  5288. var O = toObject$4(that);
  5289. var self = IndexedObject(O);
  5290. var length = lengthOfArrayLike$5(O);
  5291. var index = IS_RIGHT ? length - 1 : 0;
  5292. var i = IS_RIGHT ? -1 : 1;
  5293. if (argumentsLength < 2) while (true) {
  5294. if (index in self) {
  5295. memo = self[index];
  5296. index += i;
  5297. break;
  5298. }
  5299. index += i;
  5300. if (IS_RIGHT ? index < 0 : length <= index) {
  5301. throw $TypeError$4('Reduce of empty array with no initial value');
  5302. }
  5303. }
  5304. for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {
  5305. memo = callbackfn(memo, self[index], index, O);
  5306. }
  5307. return memo;
  5308. };
  5309. };
  5310. var arrayReduce = {
  5311. // `Array.prototype.reduce` method
  5312. // https://tc39.es/ecma262/#sec-array.prototype.reduce
  5313. left: createMethod$2(false),
  5314. // `Array.prototype.reduceRight` method
  5315. // https://tc39.es/ecma262/#sec-array.prototype.reduceright
  5316. right: createMethod$2(true)
  5317. };
  5318. var ArrayBufferViewCore$8 = arrayBufferViewCore;
  5319. var $reduce = arrayReduce.left;
  5320. var aTypedArray$8 = ArrayBufferViewCore$8.aTypedArray;
  5321. var exportTypedArrayMethod$9 = ArrayBufferViewCore$8.exportTypedArrayMethod;
  5322. // `%TypedArray%.prototype.reduce` method
  5323. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce
  5324. exportTypedArrayMethod$9('reduce', function reduce(callbackfn /* , initialValue */) {
  5325. var length = arguments.length;
  5326. return $reduce(aTypedArray$8(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
  5327. });
  5328. var ArrayBufferViewCore$7 = arrayBufferViewCore;
  5329. var $reduceRight = arrayReduce.right;
  5330. var aTypedArray$7 = ArrayBufferViewCore$7.aTypedArray;
  5331. var exportTypedArrayMethod$8 = ArrayBufferViewCore$7.exportTypedArrayMethod;
  5332. // `%TypedArray%.prototype.reduceRicht` method
  5333. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright
  5334. exportTypedArrayMethod$8('reduceRight', function reduceRight(callbackfn /* , initialValue */) {
  5335. var length = arguments.length;
  5336. return $reduceRight(aTypedArray$7(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
  5337. });
  5338. var ArrayBufferViewCore$6 = arrayBufferViewCore;
  5339. var aTypedArray$6 = ArrayBufferViewCore$6.aTypedArray;
  5340. var exportTypedArrayMethod$7 = ArrayBufferViewCore$6.exportTypedArrayMethod;
  5341. var floor$1 = Math.floor;
  5342. // `%TypedArray%.prototype.reverse` method
  5343. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse
  5344. exportTypedArrayMethod$7('reverse', function reverse() {
  5345. var that = this;
  5346. var length = aTypedArray$6(that).length;
  5347. var middle = floor$1(length / 2);
  5348. var index = 0;
  5349. var value;
  5350. while (index < middle) {
  5351. value = that[index];
  5352. that[index++] = that[--length];
  5353. that[length] = value;
  5354. } return that;
  5355. });
  5356. var global$n = global$F;
  5357. var call$c = functionCall;
  5358. var ArrayBufferViewCore$5 = arrayBufferViewCore;
  5359. var lengthOfArrayLike$4 = lengthOfArrayLike$f;
  5360. var toOffset = toOffset$2;
  5361. var toIndexedObject$4 = toObject$d;
  5362. var fails$n = fails$H;
  5363. var RangeError$1 = global$n.RangeError;
  5364. var Int8Array$2 = global$n.Int8Array;
  5365. var Int8ArrayPrototype = Int8Array$2 && Int8Array$2.prototype;
  5366. var $set = Int8ArrayPrototype && Int8ArrayPrototype.set;
  5367. var aTypedArray$5 = ArrayBufferViewCore$5.aTypedArray;
  5368. var exportTypedArrayMethod$6 = ArrayBufferViewCore$5.exportTypedArrayMethod;
  5369. var WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails$n(function () {
  5370. // eslint-disable-next-line es-x/no-typed-arrays -- required for testing
  5371. var array = new Uint8ClampedArray(2);
  5372. call$c($set, array, { length: 1, 0: 3 }, 1);
  5373. return array[1] !== 3;
  5374. });
  5375. // https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other
  5376. var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore$5.NATIVE_ARRAY_BUFFER_VIEWS && fails$n(function () {
  5377. var array = new Int8Array$2(2);
  5378. array.set(1);
  5379. array.set('2', 1);
  5380. return array[0] !== 0 || array[1] !== 2;
  5381. });
  5382. // `%TypedArray%.prototype.set` method
  5383. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.set
  5384. exportTypedArrayMethod$6('set', function set(arrayLike /* , offset */) {
  5385. aTypedArray$5(this);
  5386. var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
  5387. var src = toIndexedObject$4(arrayLike);
  5388. if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return call$c($set, this, src, offset);
  5389. var length = this.length;
  5390. var len = lengthOfArrayLike$4(src);
  5391. var index = 0;
  5392. if (len + offset > length) throw RangeError$1('Wrong length');
  5393. while (index < len) this[offset + index] = src[index++];
  5394. }, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);
  5395. var uncurryThis$j = functionUncurryThis;
  5396. var arraySlice$7 = uncurryThis$j([].slice);
  5397. var ArrayBufferViewCore$4 = arrayBufferViewCore;
  5398. var typedArraySpeciesConstructor$1 = typedArraySpeciesConstructor$4;
  5399. var fails$m = fails$H;
  5400. var arraySlice$6 = arraySlice$7;
  5401. var aTypedArray$4 = ArrayBufferViewCore$4.aTypedArray;
  5402. var exportTypedArrayMethod$5 = ArrayBufferViewCore$4.exportTypedArrayMethod;
  5403. var FORCED$4 = fails$m(function () {
  5404. // eslint-disable-next-line es-x/no-typed-arrays -- required for testing
  5405. new Int8Array(1).slice();
  5406. });
  5407. // `%TypedArray%.prototype.slice` method
  5408. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice
  5409. exportTypedArrayMethod$5('slice', function slice(start, end) {
  5410. var list = arraySlice$6(aTypedArray$4(this), start, end);
  5411. var C = typedArraySpeciesConstructor$1(this);
  5412. var index = 0;
  5413. var length = list.length;
  5414. var result = new C(length);
  5415. while (length > index) result[index] = list[index++];
  5416. return result;
  5417. }, FORCED$4);
  5418. var ArrayBufferViewCore$3 = arrayBufferViewCore;
  5419. var $some = arrayIteration.some;
  5420. var aTypedArray$3 = ArrayBufferViewCore$3.aTypedArray;
  5421. var exportTypedArrayMethod$4 = ArrayBufferViewCore$3.exportTypedArrayMethod;
  5422. // `%TypedArray%.prototype.some` method
  5423. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.some
  5424. exportTypedArrayMethod$4('some', function some(callbackfn /* , thisArg */) {
  5425. return $some(aTypedArray$3(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  5426. });
  5427. var userAgent$4 = engineUserAgent;
  5428. var firefox = userAgent$4.match(/firefox\/(\d+)/i);
  5429. var engineFfVersion = !!firefox && +firefox[1];
  5430. var UA = engineUserAgent;
  5431. var engineIsIeOrEdge = /MSIE|Trident/.test(UA);
  5432. var userAgent$3 = engineUserAgent;
  5433. var webkit = userAgent$3.match(/AppleWebKit\/(\d+)\./);
  5434. var engineWebkitVersion = !!webkit && +webkit[1];
  5435. var global$m = global$F;
  5436. var uncurryThis$i = functionUncurryThis;
  5437. var fails$l = fails$H;
  5438. var aCallable$4 = aCallable$9;
  5439. var internalSort = arraySort$1;
  5440. var ArrayBufferViewCore$2 = arrayBufferViewCore;
  5441. var FF = engineFfVersion;
  5442. var IE_OR_EDGE = engineIsIeOrEdge;
  5443. var V8 = engineV8Version;
  5444. var WEBKIT = engineWebkitVersion;
  5445. var aTypedArray$2 = ArrayBufferViewCore$2.aTypedArray;
  5446. var exportTypedArrayMethod$3 = ArrayBufferViewCore$2.exportTypedArrayMethod;
  5447. var Uint16Array$1 = global$m.Uint16Array;
  5448. var un$Sort = Uint16Array$1 && uncurryThis$i(Uint16Array$1.prototype.sort);
  5449. // WebKit
  5450. var ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails$l(function () {
  5451. un$Sort(new Uint16Array$1(2), null);
  5452. }) && fails$l(function () {
  5453. un$Sort(new Uint16Array$1(2), {});
  5454. }));
  5455. var STABLE_SORT = !!un$Sort && !fails$l(function () {
  5456. // feature detection can be too slow, so check engines versions
  5457. if (V8) return V8 < 74;
  5458. if (FF) return FF < 67;
  5459. if (IE_OR_EDGE) return true;
  5460. if (WEBKIT) return WEBKIT < 602;
  5461. var array = new Uint16Array$1(516);
  5462. var expected = Array(516);
  5463. var index, mod;
  5464. for (index = 0; index < 516; index++) {
  5465. mod = index % 4;
  5466. array[index] = 515 - index;
  5467. expected[index] = index - 2 * mod + 3;
  5468. }
  5469. un$Sort(array, function (a, b) {
  5470. return (a / 4 | 0) - (b / 4 | 0);
  5471. });
  5472. for (index = 0; index < 516; index++) {
  5473. if (array[index] !== expected[index]) return true;
  5474. }
  5475. });
  5476. var getSortCompare = function (comparefn) {
  5477. return function (x, y) {
  5478. if (comparefn !== undefined) return +comparefn(x, y) || 0;
  5479. // eslint-disable-next-line no-self-compare -- NaN check
  5480. if (y !== y) return -1;
  5481. // eslint-disable-next-line no-self-compare -- NaN check
  5482. if (x !== x) return 1;
  5483. if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;
  5484. return x > y;
  5485. };
  5486. };
  5487. // `%TypedArray%.prototype.sort` method
  5488. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
  5489. exportTypedArrayMethod$3('sort', function sort(comparefn) {
  5490. if (comparefn !== undefined) aCallable$4(comparefn);
  5491. if (STABLE_SORT) return un$Sort(this, comparefn);
  5492. return internalSort(aTypedArray$2(this), getSortCompare(comparefn));
  5493. }, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);
  5494. var ArrayBufferViewCore$1 = arrayBufferViewCore;
  5495. var toLength$4 = toLength$a;
  5496. var toAbsoluteIndex$2 = toAbsoluteIndex$8;
  5497. var typedArraySpeciesConstructor = typedArraySpeciesConstructor$4;
  5498. var aTypedArray$1 = ArrayBufferViewCore$1.aTypedArray;
  5499. var exportTypedArrayMethod$2 = ArrayBufferViewCore$1.exportTypedArrayMethod;
  5500. // `%TypedArray%.prototype.subarray` method
  5501. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray
  5502. exportTypedArrayMethod$2('subarray', function subarray(begin, end) {
  5503. var O = aTypedArray$1(this);
  5504. var length = O.length;
  5505. var beginIndex = toAbsoluteIndex$2(begin, length);
  5506. var C = typedArraySpeciesConstructor(O);
  5507. return new C(
  5508. O.buffer,
  5509. O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,
  5510. toLength$4((end === undefined ? length : toAbsoluteIndex$2(end, length)) - beginIndex)
  5511. );
  5512. });
  5513. var global$l = global$F;
  5514. var apply$4 = functionApply;
  5515. var ArrayBufferViewCore = arrayBufferViewCore;
  5516. var fails$k = fails$H;
  5517. var arraySlice$5 = arraySlice$7;
  5518. var Int8Array$1 = global$l.Int8Array;
  5519. var aTypedArray = ArrayBufferViewCore.aTypedArray;
  5520. var exportTypedArrayMethod$1 = ArrayBufferViewCore.exportTypedArrayMethod;
  5521. var $toLocaleString = [].toLocaleString;
  5522. // iOS Safari 6.x fails here
  5523. var TO_LOCALE_STRING_BUG = !!Int8Array$1 && fails$k(function () {
  5524. $toLocaleString.call(new Int8Array$1(1));
  5525. });
  5526. var FORCED$3 = fails$k(function () {
  5527. return [1, 2].toLocaleString() != new Int8Array$1([1, 2]).toLocaleString();
  5528. }) || !fails$k(function () {
  5529. Int8Array$1.prototype.toLocaleString.call([1, 2]);
  5530. });
  5531. // `%TypedArray%.prototype.toLocaleString` method
  5532. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring
  5533. exportTypedArrayMethod$1('toLocaleString', function toLocaleString() {
  5534. return apply$4(
  5535. $toLocaleString,
  5536. TO_LOCALE_STRING_BUG ? arraySlice$5(aTypedArray(this)) : aTypedArray(this),
  5537. arraySlice$5(arguments)
  5538. );
  5539. }, FORCED$3);
  5540. var exportTypedArrayMethod = arrayBufferViewCore.exportTypedArrayMethod;
  5541. var fails$j = fails$H;
  5542. var global$k = global$F;
  5543. var uncurryThis$h = functionUncurryThis;
  5544. var Uint8Array$1 = global$k.Uint8Array;
  5545. var Uint8ArrayPrototype = Uint8Array$1 && Uint8Array$1.prototype || {};
  5546. var arrayToString = [].toString;
  5547. var join = uncurryThis$h([].join);
  5548. if (fails$j(function () { arrayToString.call({}); })) {
  5549. arrayToString = function toString() {
  5550. return join(this);
  5551. };
  5552. }
  5553. var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;
  5554. // `%TypedArray%.prototype.toString` method
  5555. // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring
  5556. exportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);
  5557. /*
  5558. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  5559. Redistribution and use in source and binary forms, with or without
  5560. modification, are permitted provided that the following conditions are met:
  5561. 1. Redistributions of source code must retain the above copyright notice,
  5562. this list of conditions and the following disclaimer.
  5563. 2. Redistributions in binary form must reproduce the above copyright
  5564. notice, this list of conditions and the following disclaimer in
  5565. the documentation and/or other materials provided with the distribution.
  5566. 3. The names of the authors may not be used to endorse or promote products
  5567. derived from this software without specific prior written permission.
  5568. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  5569. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  5570. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  5571. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  5572. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  5573. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  5574. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  5575. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  5576. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  5577. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  5578. */
  5579. var streamCodecShim = (function (library) {
  5580. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  5581. var registerDataHandler = arguments.length > 2 ? arguments[2] : undefined;
  5582. return {
  5583. Deflate: createCodecClass(library.Deflate, options.deflate, registerDataHandler),
  5584. Inflate: createCodecClass(library.Inflate, options.inflate, registerDataHandler)
  5585. };
  5586. });
  5587. function createCodecClass(constructor, constructorOptions, registerDataHandler) {
  5588. return /*#__PURE__*/function () {
  5589. function _class(options) {
  5590. _classCallCheck(this, _class);
  5591. var codecAdapter = this;
  5592. var onData = function onData(data) {
  5593. if (codecAdapter.pendingData) {
  5594. var pendingData = codecAdapter.pendingData;
  5595. codecAdapter.pendingData = new Uint8Array(pendingData.length + data.length);
  5596. codecAdapter.pendingData.set(pendingData, 0);
  5597. codecAdapter.pendingData.set(data, pendingData.length);
  5598. } else {
  5599. codecAdapter.pendingData = new Uint8Array(data);
  5600. }
  5601. };
  5602. codecAdapter.codec = new constructor(Object.assign({}, constructorOptions, options));
  5603. registerDataHandler(codecAdapter.codec, onData);
  5604. }
  5605. _createClass(_class, [{
  5606. key: "append",
  5607. value: function append(data) {
  5608. this.codec.push(data);
  5609. return getResponse(this);
  5610. }
  5611. }, {
  5612. key: "flush",
  5613. value: function flush() {
  5614. this.codec.push(new Uint8Array(0), true);
  5615. return getResponse(this);
  5616. }
  5617. }]);
  5618. return _class;
  5619. }();
  5620. function getResponse(codec) {
  5621. if (codec.pendingData) {
  5622. var output = codec.pendingData;
  5623. codec.pendingData = null;
  5624. return output;
  5625. } else {
  5626. return new Uint8Array(0);
  5627. }
  5628. }
  5629. }
  5630. var $$s = _export;
  5631. var $find = arrayIteration.find;
  5632. var addToUnscopables = addToUnscopables$2;
  5633. var FIND = 'find';
  5634. var SKIPS_HOLES = true;
  5635. // Shouldn't skip holes
  5636. if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });
  5637. // `Array.prototype.find` method
  5638. // https://tc39.es/ecma262/#sec-array.prototype.find
  5639. $$s({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {
  5640. find: function find(callbackfn /* , that = undefined */) {
  5641. return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  5642. }
  5643. });
  5644. // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
  5645. addToUnscopables(FIND);
  5646. var classof$4 = classofRaw$1;
  5647. var global$j = global$F;
  5648. var engineIsNode = classof$4(global$j.process) == 'process';
  5649. var userAgent$2 = engineUserAgent;
  5650. var engineIsIos = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent$2);
  5651. var global$i = global$F;
  5652. var apply$3 = functionApply;
  5653. var bind$4 = functionBindContext;
  5654. var isCallable$8 = isCallable$s;
  5655. var hasOwn$7 = hasOwnProperty_1;
  5656. var fails$i = fails$H;
  5657. var html = html$2;
  5658. var arraySlice$4 = arraySlice$7;
  5659. var createElement = documentCreateElement$2;
  5660. var validateArgumentsLength = validateArgumentsLength$3;
  5661. var IS_IOS$1 = engineIsIos;
  5662. var IS_NODE$2 = engineIsNode;
  5663. var set = global$i.setImmediate;
  5664. var clear = global$i.clearImmediate;
  5665. var process$2 = global$i.process;
  5666. var Dispatch = global$i.Dispatch;
  5667. var Function$1 = global$i.Function;
  5668. var MessageChannel = global$i.MessageChannel;
  5669. var String$1 = global$i.String;
  5670. var counter = 0;
  5671. var queue$1 = {};
  5672. var ONREADYSTATECHANGE = 'onreadystatechange';
  5673. var location, defer, channel, port;
  5674. try {
  5675. // Deno throws a ReferenceError on `location` access without `--location` flag
  5676. location = global$i.location;
  5677. } catch (error) { /* empty */ }
  5678. var run = function (id) {
  5679. if (hasOwn$7(queue$1, id)) {
  5680. var fn = queue$1[id];
  5681. delete queue$1[id];
  5682. fn();
  5683. }
  5684. };
  5685. var runner = function (id) {
  5686. return function () {
  5687. run(id);
  5688. };
  5689. };
  5690. var listener = function (event) {
  5691. run(event.data);
  5692. };
  5693. var post = function (id) {
  5694. // old engines have not location.origin
  5695. global$i.postMessage(String$1(id), location.protocol + '//' + location.host);
  5696. };
  5697. // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
  5698. if (!set || !clear) {
  5699. set = function setImmediate(handler) {
  5700. validateArgumentsLength(arguments.length, 1);
  5701. var fn = isCallable$8(handler) ? handler : Function$1(handler);
  5702. var args = arraySlice$4(arguments, 1);
  5703. queue$1[++counter] = function () {
  5704. apply$3(fn, undefined, args);
  5705. };
  5706. defer(counter);
  5707. return counter;
  5708. };
  5709. clear = function clearImmediate(id) {
  5710. delete queue$1[id];
  5711. };
  5712. // Node.js 0.8-
  5713. if (IS_NODE$2) {
  5714. defer = function (id) {
  5715. process$2.nextTick(runner(id));
  5716. };
  5717. // Sphere (JS game engine) Dispatch API
  5718. } else if (Dispatch && Dispatch.now) {
  5719. defer = function (id) {
  5720. Dispatch.now(runner(id));
  5721. };
  5722. // Browsers with MessageChannel, includes WebWorkers
  5723. // except iOS - https://github.com/zloirock/core-js/issues/624
  5724. } else if (MessageChannel && !IS_IOS$1) {
  5725. channel = new MessageChannel();
  5726. port = channel.port2;
  5727. channel.port1.onmessage = listener;
  5728. defer = bind$4(port.postMessage, port);
  5729. // Browsers with postMessage, skip WebWorkers
  5730. // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
  5731. } else if (
  5732. global$i.addEventListener &&
  5733. isCallable$8(global$i.postMessage) &&
  5734. !global$i.importScripts &&
  5735. location && location.protocol !== 'file:' &&
  5736. !fails$i(post)
  5737. ) {
  5738. defer = post;
  5739. global$i.addEventListener('message', listener, false);
  5740. // IE8-
  5741. } else if (ONREADYSTATECHANGE in createElement('script')) {
  5742. defer = function (id) {
  5743. html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {
  5744. html.removeChild(this);
  5745. run(id);
  5746. };
  5747. };
  5748. // Rest old browsers
  5749. } else {
  5750. defer = function (id) {
  5751. setTimeout(runner(id), 0);
  5752. };
  5753. }
  5754. }
  5755. var task$1 = {
  5756. set: set,
  5757. clear: clear
  5758. };
  5759. var userAgent$1 = engineUserAgent;
  5760. var global$h = global$F;
  5761. var engineIsIosPebble = /ipad|iphone|ipod/i.test(userAgent$1) && global$h.Pebble !== undefined;
  5762. var userAgent = engineUserAgent;
  5763. var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(userAgent);
  5764. var global$g = global$F;
  5765. var bind$3 = functionBindContext;
  5766. var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f;
  5767. var macrotask = task$1.set;
  5768. var IS_IOS = engineIsIos;
  5769. var IS_IOS_PEBBLE = engineIsIosPebble;
  5770. var IS_WEBOS_WEBKIT = engineIsWebosWebkit;
  5771. var IS_NODE$1 = engineIsNode;
  5772. var MutationObserver = global$g.MutationObserver || global$g.WebKitMutationObserver;
  5773. var document$2 = global$g.document;
  5774. var process$1 = global$g.process;
  5775. var Promise$1 = global$g.Promise;
  5776. // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
  5777. var queueMicrotaskDescriptor = getOwnPropertyDescriptor$3(global$g, 'queueMicrotask');
  5778. var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
  5779. var flush, head, last, notify$1, toggle, node, promise, then;
  5780. // modern engines have queueMicrotask method
  5781. if (!queueMicrotask) {
  5782. flush = function () {
  5783. var parent, fn;
  5784. if (IS_NODE$1 && (parent = process$1.domain)) parent.exit();
  5785. while (head) {
  5786. fn = head.fn;
  5787. head = head.next;
  5788. try {
  5789. fn();
  5790. } catch (error) {
  5791. if (head) notify$1();
  5792. else last = undefined;
  5793. throw error;
  5794. }
  5795. } last = undefined;
  5796. if (parent) parent.enter();
  5797. };
  5798. // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
  5799. // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898
  5800. if (!IS_IOS && !IS_NODE$1 && !IS_WEBOS_WEBKIT && MutationObserver && document$2) {
  5801. toggle = true;
  5802. node = document$2.createTextNode('');
  5803. new MutationObserver(flush).observe(node, { characterData: true });
  5804. notify$1 = function () {
  5805. node.data = toggle = !toggle;
  5806. };
  5807. // environments with maybe non-completely correct, but existent Promise
  5808. } else if (!IS_IOS_PEBBLE && Promise$1 && Promise$1.resolve) {
  5809. // Promise.resolve without an argument throws an error in LG WebOS 2
  5810. promise = Promise$1.resolve(undefined);
  5811. // workaround of WebKit ~ iOS Safari 10.1 bug
  5812. promise.constructor = Promise$1;
  5813. then = bind$3(promise.then, promise);
  5814. notify$1 = function () {
  5815. then(flush);
  5816. };
  5817. // Node.js without promises
  5818. } else if (IS_NODE$1) {
  5819. notify$1 = function () {
  5820. process$1.nextTick(flush);
  5821. };
  5822. // for other environments - macrotask based on:
  5823. // - setImmediate
  5824. // - MessageChannel
  5825. // - window.postMessage
  5826. // - onreadystatechange
  5827. // - setTimeout
  5828. } else {
  5829. // strange IE + webpack dev server bug - use .bind(global)
  5830. macrotask = bind$3(macrotask, global$g);
  5831. notify$1 = function () {
  5832. macrotask(flush);
  5833. };
  5834. }
  5835. }
  5836. var microtask$1 = queueMicrotask || function (fn) {
  5837. var task = { fn: fn, next: undefined };
  5838. if (last) last.next = task;
  5839. if (!head) {
  5840. head = task;
  5841. notify$1();
  5842. } last = task;
  5843. };
  5844. var global$f = global$F;
  5845. var hostReportErrors$1 = function (a, b) {
  5846. var console = global$f.console;
  5847. if (console && console.error) {
  5848. arguments.length == 1 ? console.error(a) : console.error(a, b);
  5849. }
  5850. };
  5851. var perform$3 = function (exec) {
  5852. try {
  5853. return { error: false, value: exec() };
  5854. } catch (error) {
  5855. return { error: true, value: error };
  5856. }
  5857. };
  5858. var Queue$1 = function () {
  5859. this.head = null;
  5860. this.tail = null;
  5861. };
  5862. Queue$1.prototype = {
  5863. add: function (item) {
  5864. var entry = { item: item, next: null };
  5865. if (this.head) this.tail.next = entry;
  5866. else this.head = entry;
  5867. this.tail = entry;
  5868. },
  5869. get: function () {
  5870. var entry = this.head;
  5871. if (entry) {
  5872. this.head = entry.next;
  5873. if (this.tail === entry) this.tail = null;
  5874. return entry.item;
  5875. }
  5876. }
  5877. };
  5878. var queue = Queue$1;
  5879. var global$e = global$F;
  5880. var promiseNativeConstructor = global$e.Promise;
  5881. var engineIsBrowser = typeof window == 'object' && typeof Deno != 'object';
  5882. var global$d = global$F;
  5883. var NativePromiseConstructor$3 = promiseNativeConstructor;
  5884. var isCallable$7 = isCallable$s;
  5885. var isForced$2 = isForced_1;
  5886. var inspectSource = inspectSource$4;
  5887. var wellKnownSymbol$a = wellKnownSymbol$t;
  5888. var IS_BROWSER = engineIsBrowser;
  5889. var V8_VERSION$2 = engineV8Version;
  5890. NativePromiseConstructor$3 && NativePromiseConstructor$3.prototype;
  5891. var SPECIES$3 = wellKnownSymbol$a('species');
  5892. var SUBCLASSING = false;
  5893. var NATIVE_PROMISE_REJECTION_EVENT$1 = isCallable$7(global$d.PromiseRejectionEvent);
  5894. var FORCED_PROMISE_CONSTRUCTOR$5 = isForced$2('Promise', function () {
  5895. var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor$3);
  5896. var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor$3);
  5897. // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
  5898. // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
  5899. // We can't detect it synchronously, so just check versions
  5900. if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION$2 === 66) return true;
  5901. // We can't use @@species feature detection in V8 since it causes
  5902. // deoptimization and performance degradation
  5903. // https://github.com/zloirock/core-js/issues/679
  5904. if (V8_VERSION$2 >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;
  5905. // Detect correctness of subclassing with @@species support
  5906. var promise = new NativePromiseConstructor$3(function (resolve) { resolve(1); });
  5907. var FakePromise = function (exec) {
  5908. exec(function () { /* empty */ }, function () { /* empty */ });
  5909. };
  5910. var constructor = promise.constructor = {};
  5911. constructor[SPECIES$3] = FakePromise;
  5912. SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;
  5913. if (!SUBCLASSING) return true;
  5914. // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
  5915. return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_PROMISE_REJECTION_EVENT$1;
  5916. });
  5917. var promiseConstructorDetection = {
  5918. CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR$5,
  5919. REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT$1,
  5920. SUBCLASSING: SUBCLASSING
  5921. };
  5922. var newPromiseCapability$2 = {};
  5923. var aCallable$3 = aCallable$9;
  5924. var PromiseCapability = function (C) {
  5925. var resolve, reject;
  5926. this.promise = new C(function ($$resolve, $$reject) {
  5927. if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
  5928. resolve = $$resolve;
  5929. reject = $$reject;
  5930. });
  5931. this.resolve = aCallable$3(resolve);
  5932. this.reject = aCallable$3(reject);
  5933. };
  5934. // `NewPromiseCapability` abstract operation
  5935. // https://tc39.es/ecma262/#sec-newpromisecapability
  5936. newPromiseCapability$2.f = function (C) {
  5937. return new PromiseCapability(C);
  5938. };
  5939. var $$r = _export;
  5940. var IS_NODE = engineIsNode;
  5941. var global$c = global$F;
  5942. var call$b = functionCall;
  5943. var defineBuiltIn$6 = defineBuiltIn$f;
  5944. var setPrototypeOf = objectSetPrototypeOf;
  5945. var setToStringTag$2 = setToStringTag$8;
  5946. var setSpecies$2 = setSpecies$4;
  5947. var aCallable$2 = aCallable$9;
  5948. var isCallable$6 = isCallable$s;
  5949. var isObject$8 = isObject$k;
  5950. var anInstance$2 = anInstance$7;
  5951. var speciesConstructor$1 = speciesConstructor$4;
  5952. var task = task$1.set;
  5953. var microtask = microtask$1;
  5954. var hostReportErrors = hostReportErrors$1;
  5955. var perform$2 = perform$3;
  5956. var Queue = queue;
  5957. var InternalStateModule$2 = internalState;
  5958. var NativePromiseConstructor$2 = promiseNativeConstructor;
  5959. var PromiseConstructorDetection = promiseConstructorDetection;
  5960. var newPromiseCapabilityModule$3 = newPromiseCapability$2;
  5961. var PROMISE = 'Promise';
  5962. var FORCED_PROMISE_CONSTRUCTOR$4 = PromiseConstructorDetection.CONSTRUCTOR;
  5963. var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;
  5964. var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;
  5965. var getInternalPromiseState = InternalStateModule$2.getterFor(PROMISE);
  5966. var setInternalState$2 = InternalStateModule$2.set;
  5967. var NativePromisePrototype$1 = NativePromiseConstructor$2 && NativePromiseConstructor$2.prototype;
  5968. var PromiseConstructor = NativePromiseConstructor$2;
  5969. var PromisePrototype = NativePromisePrototype$1;
  5970. var TypeError$3 = global$c.TypeError;
  5971. var document$1 = global$c.document;
  5972. var process = global$c.process;
  5973. var newPromiseCapability$1 = newPromiseCapabilityModule$3.f;
  5974. var newGenericPromiseCapability = newPromiseCapability$1;
  5975. var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global$c.dispatchEvent);
  5976. var UNHANDLED_REJECTION = 'unhandledrejection';
  5977. var REJECTION_HANDLED = 'rejectionhandled';
  5978. var PENDING = 0;
  5979. var FULFILLED = 1;
  5980. var REJECTED = 2;
  5981. var HANDLED = 1;
  5982. var UNHANDLED = 2;
  5983. var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
  5984. // helpers
  5985. var isThenable = function (it) {
  5986. var then;
  5987. return isObject$8(it) && isCallable$6(then = it.then) ? then : false;
  5988. };
  5989. var callReaction = function (reaction, state) {
  5990. var value = state.value;
  5991. var ok = state.state == FULFILLED;
  5992. var handler = ok ? reaction.ok : reaction.fail;
  5993. var resolve = reaction.resolve;
  5994. var reject = reaction.reject;
  5995. var domain = reaction.domain;
  5996. var result, then, exited;
  5997. try {
  5998. if (handler) {
  5999. if (!ok) {
  6000. if (state.rejection === UNHANDLED) onHandleUnhandled(state);
  6001. state.rejection = HANDLED;
  6002. }
  6003. if (handler === true) result = value;
  6004. else {
  6005. if (domain) domain.enter();
  6006. result = handler(value); // can throw
  6007. if (domain) {
  6008. domain.exit();
  6009. exited = true;
  6010. }
  6011. }
  6012. if (result === reaction.promise) {
  6013. reject(TypeError$3('Promise-chain cycle'));
  6014. } else if (then = isThenable(result)) {
  6015. call$b(then, result, resolve, reject);
  6016. } else resolve(result);
  6017. } else reject(value);
  6018. } catch (error) {
  6019. if (domain && !exited) domain.exit();
  6020. reject(error);
  6021. }
  6022. };
  6023. var notify = function (state, isReject) {
  6024. if (state.notified) return;
  6025. state.notified = true;
  6026. microtask(function () {
  6027. var reactions = state.reactions;
  6028. var reaction;
  6029. while (reaction = reactions.get()) {
  6030. callReaction(reaction, state);
  6031. }
  6032. state.notified = false;
  6033. if (isReject && !state.rejection) onUnhandled(state);
  6034. });
  6035. };
  6036. var dispatchEvent = function (name, promise, reason) {
  6037. var event, handler;
  6038. if (DISPATCH_EVENT) {
  6039. event = document$1.createEvent('Event');
  6040. event.promise = promise;
  6041. event.reason = reason;
  6042. event.initEvent(name, false, true);
  6043. global$c.dispatchEvent(event);
  6044. } else event = { promise: promise, reason: reason };
  6045. if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global$c['on' + name])) handler(event);
  6046. else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
  6047. };
  6048. var onUnhandled = function (state) {
  6049. call$b(task, global$c, function () {
  6050. var promise = state.facade;
  6051. var value = state.value;
  6052. var IS_UNHANDLED = isUnhandled(state);
  6053. var result;
  6054. if (IS_UNHANDLED) {
  6055. result = perform$2(function () {
  6056. if (IS_NODE) {
  6057. process.emit('unhandledRejection', value, promise);
  6058. } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
  6059. });
  6060. // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
  6061. state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
  6062. if (result.error) throw result.value;
  6063. }
  6064. });
  6065. };
  6066. var isUnhandled = function (state) {
  6067. return state.rejection !== HANDLED && !state.parent;
  6068. };
  6069. var onHandleUnhandled = function (state) {
  6070. call$b(task, global$c, function () {
  6071. var promise = state.facade;
  6072. if (IS_NODE) {
  6073. process.emit('rejectionHandled', promise);
  6074. } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
  6075. });
  6076. };
  6077. var bind$2 = function (fn, state, unwrap) {
  6078. return function (value) {
  6079. fn(state, value, unwrap);
  6080. };
  6081. };
  6082. var internalReject = function (state, value, unwrap) {
  6083. if (state.done) return;
  6084. state.done = true;
  6085. if (unwrap) state = unwrap;
  6086. state.value = value;
  6087. state.state = REJECTED;
  6088. notify(state, true);
  6089. };
  6090. var internalResolve = function (state, value, unwrap) {
  6091. if (state.done) return;
  6092. state.done = true;
  6093. if (unwrap) state = unwrap;
  6094. try {
  6095. if (state.facade === value) throw TypeError$3("Promise can't be resolved itself");
  6096. var then = isThenable(value);
  6097. if (then) {
  6098. microtask(function () {
  6099. var wrapper = { done: false };
  6100. try {
  6101. call$b(then, value,
  6102. bind$2(internalResolve, wrapper, state),
  6103. bind$2(internalReject, wrapper, state)
  6104. );
  6105. } catch (error) {
  6106. internalReject(wrapper, error, state);
  6107. }
  6108. });
  6109. } else {
  6110. state.value = value;
  6111. state.state = FULFILLED;
  6112. notify(state, false);
  6113. }
  6114. } catch (error) {
  6115. internalReject({ done: false }, error, state);
  6116. }
  6117. };
  6118. // constructor polyfill
  6119. if (FORCED_PROMISE_CONSTRUCTOR$4) {
  6120. // 25.4.3.1 Promise(executor)
  6121. PromiseConstructor = function Promise(executor) {
  6122. anInstance$2(this, PromisePrototype);
  6123. aCallable$2(executor);
  6124. call$b(Internal, this);
  6125. var state = getInternalPromiseState(this);
  6126. try {
  6127. executor(bind$2(internalResolve, state), bind$2(internalReject, state));
  6128. } catch (error) {
  6129. internalReject(state, error);
  6130. }
  6131. };
  6132. PromisePrototype = PromiseConstructor.prototype;
  6133. // eslint-disable-next-line no-unused-vars -- required for `.length`
  6134. Internal = function Promise(executor) {
  6135. setInternalState$2(this, {
  6136. type: PROMISE,
  6137. done: false,
  6138. notified: false,
  6139. parent: false,
  6140. reactions: new Queue(),
  6141. rejection: false,
  6142. state: PENDING,
  6143. value: undefined
  6144. });
  6145. };
  6146. // `Promise.prototype.then` method
  6147. // https://tc39.es/ecma262/#sec-promise.prototype.then
  6148. Internal.prototype = defineBuiltIn$6(PromisePrototype, 'then', function then(onFulfilled, onRejected) {
  6149. var state = getInternalPromiseState(this);
  6150. var reaction = newPromiseCapability$1(speciesConstructor$1(this, PromiseConstructor));
  6151. state.parent = true;
  6152. reaction.ok = isCallable$6(onFulfilled) ? onFulfilled : true;
  6153. reaction.fail = isCallable$6(onRejected) && onRejected;
  6154. reaction.domain = IS_NODE ? process.domain : undefined;
  6155. if (state.state == PENDING) state.reactions.add(reaction);
  6156. else microtask(function () {
  6157. callReaction(reaction, state);
  6158. });
  6159. return reaction.promise;
  6160. });
  6161. OwnPromiseCapability = function () {
  6162. var promise = new Internal();
  6163. var state = getInternalPromiseState(promise);
  6164. this.promise = promise;
  6165. this.resolve = bind$2(internalResolve, state);
  6166. this.reject = bind$2(internalReject, state);
  6167. };
  6168. newPromiseCapabilityModule$3.f = newPromiseCapability$1 = function (C) {
  6169. return C === PromiseConstructor || C === PromiseWrapper
  6170. ? new OwnPromiseCapability(C)
  6171. : newGenericPromiseCapability(C);
  6172. };
  6173. if (isCallable$6(NativePromiseConstructor$2) && NativePromisePrototype$1 !== Object.prototype) {
  6174. nativeThen = NativePromisePrototype$1.then;
  6175. if (!NATIVE_PROMISE_SUBCLASSING) {
  6176. // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs
  6177. defineBuiltIn$6(NativePromisePrototype$1, 'then', function then(onFulfilled, onRejected) {
  6178. var that = this;
  6179. return new PromiseConstructor(function (resolve, reject) {
  6180. call$b(nativeThen, that, resolve, reject);
  6181. }).then(onFulfilled, onRejected);
  6182. // https://github.com/zloirock/core-js/issues/640
  6183. }, { unsafe: true });
  6184. }
  6185. // make `.constructor === Promise` work for native promise-based APIs
  6186. try {
  6187. delete NativePromisePrototype$1.constructor;
  6188. } catch (error) { /* empty */ }
  6189. // make `instanceof Promise` work for native promise-based APIs
  6190. if (setPrototypeOf) {
  6191. setPrototypeOf(NativePromisePrototype$1, PromisePrototype);
  6192. }
  6193. }
  6194. }
  6195. $$r({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR$4 }, {
  6196. Promise: PromiseConstructor
  6197. });
  6198. setToStringTag$2(PromiseConstructor, PROMISE, false);
  6199. setSpecies$2(PROMISE);
  6200. var bind$1 = functionBindContext;
  6201. var call$a = functionCall;
  6202. var anObject$6 = anObject$i;
  6203. var tryToString$1 = tryToString$7;
  6204. var isArrayIteratorMethod = isArrayIteratorMethod$3;
  6205. var lengthOfArrayLike$3 = lengthOfArrayLike$f;
  6206. var isPrototypeOf$3 = objectIsPrototypeOf;
  6207. var getIterator = getIterator$4;
  6208. var getIteratorMethod = getIteratorMethod$5;
  6209. var iteratorClose = iteratorClose$2;
  6210. var $TypeError$3 = TypeError;
  6211. var Result = function (stopped, result) {
  6212. this.stopped = stopped;
  6213. this.result = result;
  6214. };
  6215. var ResultPrototype = Result.prototype;
  6216. var iterate$5 = function (iterable, unboundFunction, options) {
  6217. var that = options && options.that;
  6218. var AS_ENTRIES = !!(options && options.AS_ENTRIES);
  6219. var IS_ITERATOR = !!(options && options.IS_ITERATOR);
  6220. var INTERRUPTED = !!(options && options.INTERRUPTED);
  6221. var fn = bind$1(unboundFunction, that);
  6222. var iterator, iterFn, index, length, result, next, step;
  6223. var stop = function (condition) {
  6224. if (iterator) iteratorClose(iterator, 'normal', condition);
  6225. return new Result(true, condition);
  6226. };
  6227. var callFn = function (value) {
  6228. if (AS_ENTRIES) {
  6229. anObject$6(value);
  6230. return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
  6231. } return INTERRUPTED ? fn(value, stop) : fn(value);
  6232. };
  6233. if (IS_ITERATOR) {
  6234. iterator = iterable;
  6235. } else {
  6236. iterFn = getIteratorMethod(iterable);
  6237. if (!iterFn) throw $TypeError$3(tryToString$1(iterable) + ' is not iterable');
  6238. // optimisation for array iterators
  6239. if (isArrayIteratorMethod(iterFn)) {
  6240. for (index = 0, length = lengthOfArrayLike$3(iterable); length > index; index++) {
  6241. result = callFn(iterable[index]);
  6242. if (result && isPrototypeOf$3(ResultPrototype, result)) return result;
  6243. } return new Result(false);
  6244. }
  6245. iterator = getIterator(iterable, iterFn);
  6246. }
  6247. next = iterator.next;
  6248. while (!(step = call$a(next, iterator)).done) {
  6249. try {
  6250. result = callFn(step.value);
  6251. } catch (error) {
  6252. iteratorClose(iterator, 'throw', error);
  6253. }
  6254. if (typeof result == 'object' && result && isPrototypeOf$3(ResultPrototype, result)) return result;
  6255. } return new Result(false);
  6256. };
  6257. var NativePromiseConstructor$1 = promiseNativeConstructor;
  6258. var checkCorrectnessOfIteration$2 = checkCorrectnessOfIteration$4;
  6259. var FORCED_PROMISE_CONSTRUCTOR$3 = promiseConstructorDetection.CONSTRUCTOR;
  6260. var promiseStaticsIncorrectIteration = FORCED_PROMISE_CONSTRUCTOR$3 || !checkCorrectnessOfIteration$2(function (iterable) {
  6261. NativePromiseConstructor$1.all(iterable).then(undefined, function () { /* empty */ });
  6262. });
  6263. var $$q = _export;
  6264. var call$9 = functionCall;
  6265. var aCallable$1 = aCallable$9;
  6266. var newPromiseCapabilityModule$2 = newPromiseCapability$2;
  6267. var perform$1 = perform$3;
  6268. var iterate$4 = iterate$5;
  6269. var PROMISE_STATICS_INCORRECT_ITERATION$1 = promiseStaticsIncorrectIteration;
  6270. // `Promise.all` method
  6271. // https://tc39.es/ecma262/#sec-promise.all
  6272. $$q({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION$1 }, {
  6273. all: function all(iterable) {
  6274. var C = this;
  6275. var capability = newPromiseCapabilityModule$2.f(C);
  6276. var resolve = capability.resolve;
  6277. var reject = capability.reject;
  6278. var result = perform$1(function () {
  6279. var $promiseResolve = aCallable$1(C.resolve);
  6280. var values = [];
  6281. var counter = 0;
  6282. var remaining = 1;
  6283. iterate$4(iterable, function (promise) {
  6284. var index = counter++;
  6285. var alreadyCalled = false;
  6286. remaining++;
  6287. call$9($promiseResolve, C, promise).then(function (value) {
  6288. if (alreadyCalled) return;
  6289. alreadyCalled = true;
  6290. values[index] = value;
  6291. --remaining || resolve(values);
  6292. }, reject);
  6293. });
  6294. --remaining || resolve(values);
  6295. });
  6296. if (result.error) reject(result.value);
  6297. return capability.promise;
  6298. }
  6299. });
  6300. var $$p = _export;
  6301. var FORCED_PROMISE_CONSTRUCTOR$2 = promiseConstructorDetection.CONSTRUCTOR;
  6302. var NativePromiseConstructor = promiseNativeConstructor;
  6303. var getBuiltIn$4 = getBuiltIn$b;
  6304. var isCallable$5 = isCallable$s;
  6305. var defineBuiltIn$5 = defineBuiltIn$f;
  6306. var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
  6307. // `Promise.prototype.catch` method
  6308. // https://tc39.es/ecma262/#sec-promise.prototype.catch
  6309. $$p({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR$2, real: true }, {
  6310. 'catch': function (onRejected) {
  6311. return this.then(undefined, onRejected);
  6312. }
  6313. });
  6314. // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`
  6315. if (isCallable$5(NativePromiseConstructor)) {
  6316. var method = getBuiltIn$4('Promise').prototype['catch'];
  6317. if (NativePromisePrototype['catch'] !== method) {
  6318. defineBuiltIn$5(NativePromisePrototype, 'catch', method, { unsafe: true });
  6319. }
  6320. }
  6321. var $$o = _export;
  6322. var call$8 = functionCall;
  6323. var aCallable = aCallable$9;
  6324. var newPromiseCapabilityModule$1 = newPromiseCapability$2;
  6325. var perform = perform$3;
  6326. var iterate$3 = iterate$5;
  6327. var PROMISE_STATICS_INCORRECT_ITERATION = promiseStaticsIncorrectIteration;
  6328. // `Promise.race` method
  6329. // https://tc39.es/ecma262/#sec-promise.race
  6330. $$o({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {
  6331. race: function race(iterable) {
  6332. var C = this;
  6333. var capability = newPromiseCapabilityModule$1.f(C);
  6334. var reject = capability.reject;
  6335. var result = perform(function () {
  6336. var $promiseResolve = aCallable(C.resolve);
  6337. iterate$3(iterable, function (promise) {
  6338. call$8($promiseResolve, C, promise).then(capability.resolve, reject);
  6339. });
  6340. });
  6341. if (result.error) reject(result.value);
  6342. return capability.promise;
  6343. }
  6344. });
  6345. var $$n = _export;
  6346. var call$7 = functionCall;
  6347. var newPromiseCapabilityModule = newPromiseCapability$2;
  6348. var FORCED_PROMISE_CONSTRUCTOR$1 = promiseConstructorDetection.CONSTRUCTOR;
  6349. // `Promise.reject` method
  6350. // https://tc39.es/ecma262/#sec-promise.reject
  6351. $$n({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR$1 }, {
  6352. reject: function reject(r) {
  6353. var capability = newPromiseCapabilityModule.f(this);
  6354. call$7(capability.reject, undefined, r);
  6355. return capability.promise;
  6356. }
  6357. });
  6358. var anObject$5 = anObject$i;
  6359. var isObject$7 = isObject$k;
  6360. var newPromiseCapability = newPromiseCapability$2;
  6361. var promiseResolve$1 = function (C, x) {
  6362. anObject$5(C);
  6363. if (isObject$7(x) && x.constructor === C) return x;
  6364. var promiseCapability = newPromiseCapability.f(C);
  6365. var resolve = promiseCapability.resolve;
  6366. resolve(x);
  6367. return promiseCapability.promise;
  6368. };
  6369. var $$m = _export;
  6370. var getBuiltIn$3 = getBuiltIn$b;
  6371. var FORCED_PROMISE_CONSTRUCTOR = promiseConstructorDetection.CONSTRUCTOR;
  6372. var promiseResolve = promiseResolve$1;
  6373. getBuiltIn$3('Promise');
  6374. // `Promise.resolve` method
  6375. // https://tc39.es/ecma262/#sec-promise.resolve
  6376. $$m({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {
  6377. resolve: function resolve(x) {
  6378. return promiseResolve(this, x);
  6379. }
  6380. });
  6381. var $TypeError$2 = TypeError;
  6382. var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991
  6383. var doesNotExceedSafeInteger$2 = function (it) {
  6384. if (it > MAX_SAFE_INTEGER) throw $TypeError$2('Maximum allowed index exceeded');
  6385. return it;
  6386. };
  6387. var fails$h = fails$H;
  6388. var wellKnownSymbol$9 = wellKnownSymbol$t;
  6389. var V8_VERSION$1 = engineV8Version;
  6390. var SPECIES$2 = wellKnownSymbol$9('species');
  6391. var arrayMethodHasSpeciesSupport$4 = function (METHOD_NAME) {
  6392. // We can't use this feature detection in V8 since it causes
  6393. // deoptimization and serious performance degradation
  6394. // https://github.com/zloirock/core-js/issues/677
  6395. return V8_VERSION$1 >= 51 || !fails$h(function () {
  6396. var array = [];
  6397. var constructor = array.constructor = {};
  6398. constructor[SPECIES$2] = function () {
  6399. return { foo: 1 };
  6400. };
  6401. return array[METHOD_NAME](Boolean).foo !== 1;
  6402. });
  6403. };
  6404. var $$l = _export;
  6405. var toObject$3 = toObject$d;
  6406. var toAbsoluteIndex$1 = toAbsoluteIndex$8;
  6407. var toIntegerOrInfinity$1 = toIntegerOrInfinity$9;
  6408. var lengthOfArrayLike$2 = lengthOfArrayLike$f;
  6409. var doesNotExceedSafeInteger$1 = doesNotExceedSafeInteger$2;
  6410. var arraySpeciesCreate$1 = arraySpeciesCreate$3;
  6411. var createProperty$3 = createProperty$6;
  6412. var deletePropertyOrThrow = deletePropertyOrThrow$2;
  6413. var arrayMethodHasSpeciesSupport$3 = arrayMethodHasSpeciesSupport$4;
  6414. var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport$3('splice');
  6415. var max$2 = Math.max;
  6416. var min$4 = Math.min;
  6417. // `Array.prototype.splice` method
  6418. // https://tc39.es/ecma262/#sec-array.prototype.splice
  6419. // with adding support of @@species
  6420. $$l({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 }, {
  6421. splice: function splice(start, deleteCount /* , ...items */) {
  6422. var O = toObject$3(this);
  6423. var len = lengthOfArrayLike$2(O);
  6424. var actualStart = toAbsoluteIndex$1(start, len);
  6425. var argumentsLength = arguments.length;
  6426. var insertCount, actualDeleteCount, A, k, from, to;
  6427. if (argumentsLength === 0) {
  6428. insertCount = actualDeleteCount = 0;
  6429. } else if (argumentsLength === 1) {
  6430. insertCount = 0;
  6431. actualDeleteCount = len - actualStart;
  6432. } else {
  6433. insertCount = argumentsLength - 2;
  6434. actualDeleteCount = min$4(max$2(toIntegerOrInfinity$1(deleteCount), 0), len - actualStart);
  6435. }
  6436. doesNotExceedSafeInteger$1(len + insertCount - actualDeleteCount);
  6437. A = arraySpeciesCreate$1(O, actualDeleteCount);
  6438. for (k = 0; k < actualDeleteCount; k++) {
  6439. from = actualStart + k;
  6440. if (from in O) createProperty$3(A, k, O[from]);
  6441. }
  6442. A.length = actualDeleteCount;
  6443. if (insertCount < actualDeleteCount) {
  6444. for (k = actualStart; k < len - actualDeleteCount; k++) {
  6445. from = k + actualDeleteCount;
  6446. to = k + insertCount;
  6447. if (from in O) O[to] = O[from];
  6448. else deletePropertyOrThrow(O, to);
  6449. }
  6450. for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1);
  6451. } else if (insertCount > actualDeleteCount) {
  6452. for (k = len - actualDeleteCount; k > actualStart; k--) {
  6453. from = k + actualDeleteCount - 1;
  6454. to = k + insertCount - 1;
  6455. if (from in O) O[to] = O[from];
  6456. else deletePropertyOrThrow(O, to);
  6457. }
  6458. }
  6459. for (k = 0; k < insertCount; k++) {
  6460. O[k + actualStart] = arguments[k + 2];
  6461. }
  6462. O.length = len - actualDeleteCount + insertCount;
  6463. return A;
  6464. }
  6465. });
  6466. var global$b = global$F;
  6467. var globalIsFinite = global$b.isFinite;
  6468. // `Number.isFinite` method
  6469. // https://tc39.es/ecma262/#sec-number.isfinite
  6470. // eslint-disable-next-line es-x/no-number-isfinite -- safe
  6471. var numberIsFinite$1 = Number.isFinite || function isFinite(it) {
  6472. return typeof it == 'number' && globalIsFinite(it);
  6473. };
  6474. var $$k = _export;
  6475. var numberIsFinite = numberIsFinite$1;
  6476. // `Number.isFinite` method
  6477. // https://tc39.es/ecma262/#sec-number.isfinite
  6478. $$k({ target: 'Number', stat: true }, { isFinite: numberIsFinite });
  6479. var uncurryThis$g = functionUncurryThis;
  6480. // `thisNumberValue` abstract operation
  6481. // https://tc39.es/ecma262/#sec-thisnumbervalue
  6482. var thisNumberValue$1 = uncurryThis$g(1.0.valueOf);
  6483. // a string of all valid unicode whitespaces
  6484. var whitespaces$2 = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
  6485. '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
  6486. var uncurryThis$f = functionUncurryThis;
  6487. var requireObjectCoercible$4 = requireObjectCoercible$8;
  6488. var toString$7 = toString$a;
  6489. var whitespaces$1 = whitespaces$2;
  6490. var replace$4 = uncurryThis$f(''.replace);
  6491. var whitespace = '[' + whitespaces$1 + ']';
  6492. var ltrim = RegExp('^' + whitespace + whitespace + '*');
  6493. var rtrim = RegExp(whitespace + whitespace + '*$');
  6494. // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
  6495. var createMethod$1 = function (TYPE) {
  6496. return function ($this) {
  6497. var string = toString$7(requireObjectCoercible$4($this));
  6498. if (TYPE & 1) string = replace$4(string, ltrim, '');
  6499. if (TYPE & 2) string = replace$4(string, rtrim, '');
  6500. return string;
  6501. };
  6502. };
  6503. var stringTrim = {
  6504. // `String.prototype.{ trimLeft, trimStart }` methods
  6505. // https://tc39.es/ecma262/#sec-string.prototype.trimstart
  6506. start: createMethod$1(1),
  6507. // `String.prototype.{ trimRight, trimEnd }` methods
  6508. // https://tc39.es/ecma262/#sec-string.prototype.trimend
  6509. end: createMethod$1(2),
  6510. // `String.prototype.trim` method
  6511. // https://tc39.es/ecma262/#sec-string.prototype.trim
  6512. trim: createMethod$1(3)
  6513. };
  6514. var DESCRIPTORS$5 = descriptors;
  6515. var global$a = global$F;
  6516. var uncurryThis$e = functionUncurryThis;
  6517. var isForced$1 = isForced_1;
  6518. var defineBuiltIn$4 = defineBuiltIn$f;
  6519. var hasOwn$6 = hasOwnProperty_1;
  6520. var inheritIfRequired$1 = inheritIfRequired$3;
  6521. var isPrototypeOf$2 = objectIsPrototypeOf;
  6522. var isSymbol$2 = isSymbol$6;
  6523. var toPrimitive = toPrimitive$3;
  6524. var fails$g = fails$H;
  6525. var getOwnPropertyNames = objectGetOwnPropertyNames.f;
  6526. var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;
  6527. var defineProperty$5 = objectDefineProperty.f;
  6528. var thisNumberValue = thisNumberValue$1;
  6529. var trim = stringTrim.trim;
  6530. var NUMBER = 'Number';
  6531. var NativeNumber = global$a[NUMBER];
  6532. var NumberPrototype = NativeNumber.prototype;
  6533. var TypeError$2 = global$a.TypeError;
  6534. var arraySlice$3 = uncurryThis$e(''.slice);
  6535. var charCodeAt$1 = uncurryThis$e(''.charCodeAt);
  6536. // `ToNumeric` abstract operation
  6537. // https://tc39.es/ecma262/#sec-tonumeric
  6538. var toNumeric = function (value) {
  6539. var primValue = toPrimitive(value, 'number');
  6540. return typeof primValue == 'bigint' ? primValue : toNumber(primValue);
  6541. };
  6542. // `ToNumber` abstract operation
  6543. // https://tc39.es/ecma262/#sec-tonumber
  6544. var toNumber = function (argument) {
  6545. var it = toPrimitive(argument, 'number');
  6546. var first, third, radix, maxCode, digits, length, index, code;
  6547. if (isSymbol$2(it)) throw TypeError$2('Cannot convert a Symbol value to a number');
  6548. if (typeof it == 'string' && it.length > 2) {
  6549. it = trim(it);
  6550. first = charCodeAt$1(it, 0);
  6551. if (first === 43 || first === 45) {
  6552. third = charCodeAt$1(it, 2);
  6553. if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
  6554. } else if (first === 48) {
  6555. switch (charCodeAt$1(it, 1)) {
  6556. case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i
  6557. case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i
  6558. default: return +it;
  6559. }
  6560. digits = arraySlice$3(it, 2);
  6561. length = digits.length;
  6562. for (index = 0; index < length; index++) {
  6563. code = charCodeAt$1(digits, index);
  6564. // parseInt parses a string to a first unavailable symbol
  6565. // but ToNumber should return NaN if a string contains unavailable symbols
  6566. if (code < 48 || code > maxCode) return NaN;
  6567. } return parseInt(digits, radix);
  6568. }
  6569. } return +it;
  6570. };
  6571. // `Number` constructor
  6572. // https://tc39.es/ecma262/#sec-number-constructor
  6573. if (isForced$1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {
  6574. var NumberWrapper = function Number(value) {
  6575. var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));
  6576. var dummy = this;
  6577. // check on 1..constructor(foo) case
  6578. return isPrototypeOf$2(NumberPrototype, dummy) && fails$g(function () { thisNumberValue(dummy); })
  6579. ? inheritIfRequired$1(Object(n), dummy, NumberWrapper) : n;
  6580. };
  6581. for (var keys = DESCRIPTORS$5 ? getOwnPropertyNames(NativeNumber) : (
  6582. // ES3:
  6583. 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
  6584. // ES2015 (in case, if modules with ES2015 Number statics required before):
  6585. 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +
  6586. // ESNext
  6587. 'fromString,range'
  6588. ).split(','), j$1 = 0, key; keys.length > j$1; j$1++) {
  6589. if (hasOwn$6(NativeNumber, key = keys[j$1]) && !hasOwn$6(NumberWrapper, key)) {
  6590. defineProperty$5(NumberWrapper, key, getOwnPropertyDescriptor$2(NativeNumber, key));
  6591. }
  6592. }
  6593. NumberWrapper.prototype = NumberPrototype;
  6594. NumberPrototype.constructor = NumberWrapper;
  6595. defineBuiltIn$4(global$a, NUMBER, NumberWrapper, { constructor: true });
  6596. }
  6597. var $$j = _export;
  6598. var $filter = arrayIteration.filter;
  6599. var arrayMethodHasSpeciesSupport$2 = arrayMethodHasSpeciesSupport$4;
  6600. var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$2('filter');
  6601. // `Array.prototype.filter` method
  6602. // https://tc39.es/ecma262/#sec-array.prototype.filter
  6603. // with adding support of @@species
  6604. $$j({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 }, {
  6605. filter: function filter(callbackfn /* , thisArg */) {
  6606. return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  6607. }
  6608. });
  6609. var $forEach$1 = arrayIteration.forEach;
  6610. var arrayMethodIsStrict = arrayMethodIsStrict$2;
  6611. var STRICT_METHOD = arrayMethodIsStrict('forEach');
  6612. // `Array.prototype.forEach` method implementation
  6613. // https://tc39.es/ecma262/#sec-array.prototype.foreach
  6614. var arrayForEach = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {
  6615. return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  6616. // eslint-disable-next-line es-x/no-array-prototype-foreach -- safe
  6617. } : [].forEach;
  6618. var global$9 = global$F;
  6619. var DOMIterables = domIterables;
  6620. var DOMTokenListPrototype = domTokenListPrototype;
  6621. var forEach = arrayForEach;
  6622. var createNonEnumerableProperty$1 = createNonEnumerableProperty$9;
  6623. var handlePrototype = function (CollectionPrototype) {
  6624. // some Chrome versions have non-configurable methods on DOMTokenList
  6625. if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {
  6626. createNonEnumerableProperty$1(CollectionPrototype, 'forEach', forEach);
  6627. } catch (error) {
  6628. CollectionPrototype.forEach = forEach;
  6629. }
  6630. };
  6631. for (var COLLECTION_NAME in DOMIterables) {
  6632. if (DOMIterables[COLLECTION_NAME]) {
  6633. handlePrototype(global$9[COLLECTION_NAME] && global$9[COLLECTION_NAME].prototype);
  6634. }
  6635. }
  6636. handlePrototype(DOMTokenListPrototype);
  6637. // A type of promise-like that resolves synchronously and supports only one observer
  6638. const _Pact = /*#__PURE__*/(function() {
  6639. function _Pact() {}
  6640. _Pact.prototype.then = function(onFulfilled, onRejected) {
  6641. const result = new _Pact();
  6642. const state = this.s;
  6643. if (state) {
  6644. const callback = state & 1 ? onFulfilled : onRejected;
  6645. if (callback) {
  6646. try {
  6647. _settle(result, 1, callback(this.v));
  6648. } catch (e) {
  6649. _settle(result, 2, e);
  6650. }
  6651. return result;
  6652. } else {
  6653. return this;
  6654. }
  6655. }
  6656. this.o = function(_this) {
  6657. try {
  6658. const value = _this.v;
  6659. if (_this.s & 1) {
  6660. _settle(result, 1, onFulfilled ? onFulfilled(value) : value);
  6661. } else if (onRejected) {
  6662. _settle(result, 1, onRejected(value));
  6663. } else {
  6664. _settle(result, 2, value);
  6665. }
  6666. } catch (e) {
  6667. _settle(result, 2, e);
  6668. }
  6669. };
  6670. return result;
  6671. };
  6672. return _Pact;
  6673. })();
  6674. // Settles a pact synchronously
  6675. function _settle(pact, state, value) {
  6676. if (!pact.s) {
  6677. if (value instanceof _Pact) {
  6678. if (value.s) {
  6679. if (state & 1) {
  6680. state = value.s;
  6681. }
  6682. value = value.v;
  6683. } else {
  6684. value.o = _settle.bind(null, pact, state);
  6685. return;
  6686. }
  6687. }
  6688. if (value && value.then) {
  6689. value.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));
  6690. return;
  6691. }
  6692. pact.s = state;
  6693. pact.v = value;
  6694. const observer = pact.o;
  6695. if (observer) {
  6696. observer(pact);
  6697. }
  6698. }
  6699. }
  6700. function _isSettledPact(thenable) {
  6701. return thenable instanceof _Pact && thenable.s & 1;
  6702. }
  6703. // Converts argument to a function that always returns a Promise
  6704. function _async(f) {
  6705. return function() {
  6706. for (var args = [], i = 0; i < arguments.length; i++) {
  6707. args[i] = arguments[i];
  6708. }
  6709. try {
  6710. return Promise.resolve(f.apply(this, args));
  6711. } catch(e) {
  6712. return Promise.reject(e);
  6713. }
  6714. }
  6715. }
  6716. // Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)
  6717. function _await(value, then, direct) {
  6718. if (direct) {
  6719. return then ? then(value) : value;
  6720. }
  6721. if (!value || !value.then) {
  6722. value = Promise.resolve(value);
  6723. }
  6724. return then ? value.then(then) : value;
  6725. }
  6726. // Awaits on a value that may or may not be a Promise, then ignores it
  6727. function _awaitIgnored(value, direct) {
  6728. if (!direct) {
  6729. return value && value.then ? value.then(_empty) : Promise.resolve();
  6730. }
  6731. }
  6732. // Proceeds after a value has resolved, or proceeds immediately if the value is not thenable
  6733. function _continue(value, then) {
  6734. return value && value.then ? value.then(then) : then(value);
  6735. }
  6736. typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
  6737. typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
  6738. // Asynchronously implement a generic for loop
  6739. function _for(test, update, body) {
  6740. var stage;
  6741. for (;;) {
  6742. var shouldContinue = test();
  6743. if (_isSettledPact(shouldContinue)) {
  6744. shouldContinue = shouldContinue.v;
  6745. }
  6746. if (!shouldContinue) {
  6747. return result;
  6748. }
  6749. if (shouldContinue.then) {
  6750. stage = 0;
  6751. break;
  6752. }
  6753. var result = body();
  6754. if (result && result.then) {
  6755. if (_isSettledPact(result)) {
  6756. result = result.s;
  6757. } else {
  6758. stage = 1;
  6759. break;
  6760. }
  6761. }
  6762. if (update) {
  6763. var updateValue = update();
  6764. if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
  6765. stage = 2;
  6766. break;
  6767. }
  6768. }
  6769. }
  6770. var pact = new _Pact();
  6771. var reject = _settle.bind(null, pact, 2);
  6772. (stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);
  6773. return pact;
  6774. function _resumeAfterBody(value) {
  6775. result = value;
  6776. do {
  6777. if (update) {
  6778. updateValue = update();
  6779. if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
  6780. updateValue.then(_resumeAfterUpdate).then(void 0, reject);
  6781. return;
  6782. }
  6783. }
  6784. shouldContinue = test();
  6785. if (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {
  6786. _settle(pact, 1, result);
  6787. return;
  6788. }
  6789. if (shouldContinue.then) {
  6790. shouldContinue.then(_resumeAfterTest).then(void 0, reject);
  6791. return;
  6792. }
  6793. result = body();
  6794. if (_isSettledPact(result)) {
  6795. result = result.v;
  6796. }
  6797. } while (!result || !result.then);
  6798. result.then(_resumeAfterBody).then(void 0, reject);
  6799. }
  6800. function _resumeAfterTest(shouldContinue) {
  6801. if (shouldContinue) {
  6802. result = body();
  6803. if (result && result.then) {
  6804. result.then(_resumeAfterBody).then(void 0, reject);
  6805. } else {
  6806. _resumeAfterBody(result);
  6807. }
  6808. } else {
  6809. _settle(pact, 1, result);
  6810. }
  6811. }
  6812. function _resumeAfterUpdate() {
  6813. if (shouldContinue = test()) {
  6814. if (shouldContinue.then) {
  6815. shouldContinue.then(_resumeAfterTest).then(void 0, reject);
  6816. } else {
  6817. _resumeAfterTest(shouldContinue);
  6818. }
  6819. } else {
  6820. _settle(pact, 1, result);
  6821. }
  6822. }
  6823. }
  6824. // Asynchronously implement a do ... while loop
  6825. function _do(body, test) {
  6826. var awaitBody;
  6827. do {
  6828. var result = body();
  6829. if (result && result.then) {
  6830. if (_isSettledPact(result)) {
  6831. result = result.v;
  6832. } else {
  6833. awaitBody = true;
  6834. break;
  6835. }
  6836. }
  6837. var shouldContinue = test();
  6838. if (_isSettledPact(shouldContinue)) {
  6839. shouldContinue = shouldContinue.v;
  6840. }
  6841. if (!shouldContinue) {
  6842. return result;
  6843. }
  6844. } while (!shouldContinue.then);
  6845. const pact = new _Pact();
  6846. const reject = _settle.bind(null, pact, 2);
  6847. (awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);
  6848. return pact;
  6849. function _resumeAfterBody(value) {
  6850. result = value;
  6851. for (;;) {
  6852. shouldContinue = test();
  6853. if (_isSettledPact(shouldContinue)) {
  6854. shouldContinue = shouldContinue.v;
  6855. }
  6856. if (!shouldContinue) {
  6857. break;
  6858. }
  6859. if (shouldContinue.then) {
  6860. shouldContinue.then(_resumeAfterTest).then(void 0, reject);
  6861. return;
  6862. }
  6863. result = body();
  6864. if (result && result.then) {
  6865. if (_isSettledPact(result)) {
  6866. result = result.v;
  6867. } else {
  6868. result.then(_resumeAfterBody).then(void 0, reject);
  6869. return;
  6870. }
  6871. }
  6872. }
  6873. _settle(pact, 1, result);
  6874. }
  6875. function _resumeAfterTest(shouldContinue) {
  6876. if (shouldContinue) {
  6877. do {
  6878. result = body();
  6879. if (result && result.then) {
  6880. if (_isSettledPact(result)) {
  6881. result = result.v;
  6882. } else {
  6883. result.then(_resumeAfterBody).then(void 0, reject);
  6884. return;
  6885. }
  6886. }
  6887. shouldContinue = test();
  6888. if (_isSettledPact(shouldContinue)) {
  6889. shouldContinue = shouldContinue.v;
  6890. }
  6891. if (!shouldContinue) {
  6892. _settle(pact, 1, result);
  6893. return;
  6894. }
  6895. } while (!shouldContinue.then);
  6896. shouldContinue.then(_resumeAfterTest).then(void 0, reject);
  6897. } else {
  6898. _settle(pact, 1, result);
  6899. }
  6900. }
  6901. }
  6902. // Asynchronously call a function and pass the result to explicitly passed continuations
  6903. function _call(body, then, direct) {
  6904. if (direct) {
  6905. return then ? then(body()) : body();
  6906. }
  6907. try {
  6908. var result = Promise.resolve(body());
  6909. return then ? result.then(then) : result;
  6910. } catch (e) {
  6911. return Promise.reject(e);
  6912. }
  6913. }
  6914. // Asynchronously call a function and swallow the result
  6915. function _callIgnored(body, direct) {
  6916. return _call(body, _empty, direct);
  6917. }
  6918. // Asynchronously call a function and pass the result to explicitly passed continuations
  6919. function _invoke(body, then) {
  6920. var result = body();
  6921. if (result && result.then) {
  6922. return result.then(then);
  6923. }
  6924. return then(result);
  6925. }
  6926. // Asynchronously call a function and swallow the result
  6927. function _invokeIgnored(body) {
  6928. var result = body();
  6929. if (result && result.then) {
  6930. return result.then(_empty);
  6931. }
  6932. }
  6933. // Asynchronously call a function and send errors to recovery continuation
  6934. function _catch(body, recover) {
  6935. try {
  6936. var result = body();
  6937. } catch(e) {
  6938. return recover(e);
  6939. }
  6940. if (result && result.then) {
  6941. return result.then(void 0, recover);
  6942. }
  6943. return result;
  6944. }
  6945. // Asynchronously await a promise and pass the result to a finally continuation
  6946. function _finallyRethrows(body, finalizer) {
  6947. try {
  6948. var result = body();
  6949. } catch (e) {
  6950. return finalizer(true, e);
  6951. }
  6952. if (result && result.then) {
  6953. return result.then(finalizer.bind(null, false), finalizer.bind(null, true));
  6954. }
  6955. return finalizer(false, result);
  6956. }
  6957. // Rethrow or return a value from a finally continuation
  6958. function _rethrow(thrown, value) {
  6959. if (thrown)
  6960. throw value;
  6961. return value;
  6962. }
  6963. // Empty function to implement break and other control flow that ignores asynchronous results
  6964. function _empty() {
  6965. }
  6966. var isObject$6 = isObject$k;
  6967. var classof$3 = classofRaw$1;
  6968. var wellKnownSymbol$8 = wellKnownSymbol$t;
  6969. var MATCH$1 = wellKnownSymbol$8('match');
  6970. // `IsRegExp` abstract operation
  6971. // https://tc39.es/ecma262/#sec-isregexp
  6972. var isRegexp = function (it) {
  6973. var isRegExp;
  6974. return isObject$6(it) && ((isRegExp = it[MATCH$1]) !== undefined ? !!isRegExp : classof$3(it) == 'RegExp');
  6975. };
  6976. var isRegExp$1 = isRegexp;
  6977. var $TypeError$1 = TypeError;
  6978. var notARegexp = function (it) {
  6979. if (isRegExp$1(it)) {
  6980. throw $TypeError$1("The method doesn't accept regular expressions");
  6981. } return it;
  6982. };
  6983. var wellKnownSymbol$7 = wellKnownSymbol$t;
  6984. var MATCH = wellKnownSymbol$7('match');
  6985. var correctIsRegexpLogic = function (METHOD_NAME) {
  6986. var regexp = /./;
  6987. try {
  6988. '/./'[METHOD_NAME](regexp);
  6989. } catch (error1) {
  6990. try {
  6991. regexp[MATCH] = false;
  6992. return '/./'[METHOD_NAME](regexp);
  6993. } catch (error2) { /* empty */ }
  6994. } return false;
  6995. };
  6996. var $$i = _export;
  6997. var uncurryThis$d = functionUncurryThis;
  6998. var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;
  6999. var toLength$3 = toLength$a;
  7000. var toString$6 = toString$a;
  7001. var notARegExp$1 = notARegexp;
  7002. var requireObjectCoercible$3 = requireObjectCoercible$8;
  7003. var correctIsRegExpLogic$1 = correctIsRegexpLogic;
  7004. // eslint-disable-next-line es-x/no-string-prototype-startswith -- safe
  7005. var un$StartsWith = uncurryThis$d(''.startsWith);
  7006. var stringSlice$5 = uncurryThis$d(''.slice);
  7007. var min$3 = Math.min;
  7008. var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegExpLogic$1('startsWith');
  7009. // https://github.com/zloirock/core-js/pull/702
  7010. var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () {
  7011. var descriptor = getOwnPropertyDescriptor$1(String.prototype, 'startsWith');
  7012. return descriptor && !descriptor.writable;
  7013. }();
  7014. // `String.prototype.startsWith` method
  7015. // https://tc39.es/ecma262/#sec-string.prototype.startswith
  7016. $$i({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 }, {
  7017. startsWith: function startsWith(searchString /* , position = 0 */) {
  7018. var that = toString$6(requireObjectCoercible$3(this));
  7019. notARegExp$1(searchString);
  7020. var index = toLength$3(min$3(arguments.length > 1 ? arguments[1] : undefined, that.length));
  7021. var search = toString$6(searchString);
  7022. return un$StartsWith
  7023. ? un$StartsWith(that, search, index)
  7024. : stringSlice$5(that, index, index + search.length) === search;
  7025. }
  7026. });
  7027. /*
  7028. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  7029. Redistribution and use in source and binary forms, with or without
  7030. modification, are permitted provided that the following conditions are met:
  7031. 1. Redistributions of source code must retain the above copyright notice,
  7032. this list of conditions and the following disclaimer.
  7033. 2. Redistributions in binary form must reproduce the above copyright
  7034. notice, this list of conditions and the following disclaimer in
  7035. the documentation and/or other materials provided with the distribution.
  7036. 3. The names of the authors may not be used to endorse or promote products
  7037. derived from this software without specific prior written permission.
  7038. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  7039. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  7040. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  7041. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  7042. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  7043. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  7044. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  7045. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  7046. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  7047. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  7048. */
  7049. var table = [];
  7050. for (var i = 0; i < 256; i++) {
  7051. var t = i;
  7052. for (var j = 0; j < 8; j++) {
  7053. if (t & 1) {
  7054. t = t >>> 1 ^ 0xEDB88320;
  7055. } else {
  7056. t = t >>> 1;
  7057. }
  7058. }
  7059. table[i] = t;
  7060. }
  7061. var Crc32 = /*#__PURE__*/function () {
  7062. function Crc32(crc) {
  7063. _classCallCheck(this, Crc32);
  7064. this.crc = crc || -1;
  7065. }
  7066. _createClass(Crc32, [{
  7067. key: "append",
  7068. value: function append(data) {
  7069. var crc = this.crc | 0;
  7070. for (var offset = 0, length = data.length | 0; offset < length; offset++) {
  7071. crc = crc >>> 8 ^ table[(crc ^ data[offset]) & 0xFF];
  7072. }
  7073. this.crc = crc;
  7074. }
  7075. }, {
  7076. key: "get",
  7077. value: function get() {
  7078. return ~this.crc;
  7079. }
  7080. }]);
  7081. return Crc32;
  7082. }();
  7083. var $$h = _export;
  7084. var from = arrayFrom$1;
  7085. var checkCorrectnessOfIteration$1 = checkCorrectnessOfIteration$4;
  7086. var INCORRECT_ITERATION = !checkCorrectnessOfIteration$1(function (iterable) {
  7087. // eslint-disable-next-line es-x/no-array-from -- required for testing
  7088. Array.from(iterable);
  7089. });
  7090. // `Array.from` method
  7091. // https://tc39.es/ecma262/#sec-array.from
  7092. $$h({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
  7093. from: from
  7094. });
  7095. function encodeText(value) {
  7096. if (typeof TextEncoder == "undefined") {
  7097. value = unescape(encodeURIComponent(value));
  7098. var result = new Uint8Array(value.length);
  7099. for (var i = 0; i < result.length; i++) {
  7100. result[i] = value.charCodeAt(i);
  7101. }
  7102. return result;
  7103. } else {
  7104. return new TextEncoder().encode(value);
  7105. }
  7106. }
  7107. var $$g = _export;
  7108. var fails$f = fails$H;
  7109. var isArray$2 = isArray$4;
  7110. var isObject$5 = isObject$k;
  7111. var toObject$2 = toObject$d;
  7112. var lengthOfArrayLike$1 = lengthOfArrayLike$f;
  7113. var doesNotExceedSafeInteger = doesNotExceedSafeInteger$2;
  7114. var createProperty$2 = createProperty$6;
  7115. var arraySpeciesCreate = arraySpeciesCreate$3;
  7116. var arrayMethodHasSpeciesSupport$1 = arrayMethodHasSpeciesSupport$4;
  7117. var wellKnownSymbol$6 = wellKnownSymbol$t;
  7118. var V8_VERSION = engineV8Version;
  7119. var IS_CONCAT_SPREADABLE = wellKnownSymbol$6('isConcatSpreadable');
  7120. // We can't use this feature detection in V8 since it causes
  7121. // deoptimization and serious performance degradation
  7122. // https://github.com/zloirock/core-js/issues/679
  7123. var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails$f(function () {
  7124. var array = [];
  7125. array[IS_CONCAT_SPREADABLE] = false;
  7126. return array.concat()[0] !== array;
  7127. });
  7128. var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport$1('concat');
  7129. var isConcatSpreadable = function (O) {
  7130. if (!isObject$5(O)) return false;
  7131. var spreadable = O[IS_CONCAT_SPREADABLE];
  7132. return spreadable !== undefined ? !!spreadable : isArray$2(O);
  7133. };
  7134. var FORCED$2 = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
  7135. // `Array.prototype.concat` method
  7136. // https://tc39.es/ecma262/#sec-array.prototype.concat
  7137. // with adding support of @@isConcatSpreadable and @@species
  7138. $$g({ target: 'Array', proto: true, arity: 1, forced: FORCED$2 }, {
  7139. // eslint-disable-next-line no-unused-vars -- required for `.length`
  7140. concat: function concat(arg) {
  7141. var O = toObject$2(this);
  7142. var A = arraySpeciesCreate(O, 0);
  7143. var n = 0;
  7144. var i, k, length, len, E;
  7145. for (i = -1, length = arguments.length; i < length; i++) {
  7146. E = i === -1 ? O : arguments[i];
  7147. if (isConcatSpreadable(E)) {
  7148. len = lengthOfArrayLike$1(E);
  7149. doesNotExceedSafeInteger(n + len);
  7150. for (k = 0; k < len; k++, n++) if (k in E) createProperty$2(A, n, E[k]);
  7151. } else {
  7152. doesNotExceedSafeInteger(n + 1);
  7153. createProperty$2(A, n++, E);
  7154. }
  7155. }
  7156. A.length = n;
  7157. return A;
  7158. }
  7159. });
  7160. var $$f = _export;
  7161. var isArray$1 = isArray$4;
  7162. var isConstructor = isConstructor$4;
  7163. var isObject$4 = isObject$k;
  7164. var toAbsoluteIndex = toAbsoluteIndex$8;
  7165. var lengthOfArrayLike = lengthOfArrayLike$f;
  7166. var toIndexedObject$3 = toIndexedObject$b;
  7167. var createProperty$1 = createProperty$6;
  7168. var wellKnownSymbol$5 = wellKnownSymbol$t;
  7169. var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$4;
  7170. var un$Slice = arraySlice$7;
  7171. var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');
  7172. var SPECIES$1 = wellKnownSymbol$5('species');
  7173. var $Array = Array;
  7174. var max$1 = Math.max;
  7175. // `Array.prototype.slice` method
  7176. // https://tc39.es/ecma262/#sec-array.prototype.slice
  7177. // fallback for not array-like ES3 strings and DOM objects
  7178. $$f({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
  7179. slice: function slice(start, end) {
  7180. var O = toIndexedObject$3(this);
  7181. var length = lengthOfArrayLike(O);
  7182. var k = toAbsoluteIndex(start, length);
  7183. var fin = toAbsoluteIndex(end === undefined ? length : end, length);
  7184. // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
  7185. var Constructor, result, n;
  7186. if (isArray$1(O)) {
  7187. Constructor = O.constructor;
  7188. // cross-realm fallback
  7189. if (isConstructor(Constructor) && (Constructor === $Array || isArray$1(Constructor.prototype))) {
  7190. Constructor = undefined;
  7191. } else if (isObject$4(Constructor)) {
  7192. Constructor = Constructor[SPECIES$1];
  7193. if (Constructor === null) Constructor = undefined;
  7194. }
  7195. if (Constructor === $Array || Constructor === undefined) {
  7196. return un$Slice(O, k, fin);
  7197. }
  7198. }
  7199. result = new (Constructor === undefined ? $Array : Constructor)(max$1(fin - k, 0));
  7200. for (n = 0; k < fin; k++, n++) if (k in O) createProperty$1(result, n, O[k]);
  7201. result.length = n;
  7202. return result;
  7203. }
  7204. });
  7205. var createTypedArrayConstructor$1 = typedArrayConstructor.exports;
  7206. // `Uint32Array` constructor
  7207. // https://tc39.es/ecma262/#sec-typedarray-objects
  7208. createTypedArrayConstructor$1('Uint32', function (init) {
  7209. return function Uint32Array(data, byteOffset, length) {
  7210. return init(this, data, byteOffset, length);
  7211. };
  7212. });
  7213. var $$e = _export;
  7214. var global$8 = global$F;
  7215. var arrayBufferModule = arrayBuffer;
  7216. var setSpecies$1 = setSpecies$4;
  7217. var ARRAY_BUFFER = 'ArrayBuffer';
  7218. var ArrayBuffer$1 = arrayBufferModule[ARRAY_BUFFER];
  7219. var NativeArrayBuffer = global$8[ARRAY_BUFFER];
  7220. // `ArrayBuffer` constructor
  7221. // https://tc39.es/ecma262/#sec-arraybuffer-constructor
  7222. $$e({ global: true, constructor: true, forced: NativeArrayBuffer !== ArrayBuffer$1 }, {
  7223. ArrayBuffer: ArrayBuffer$1
  7224. });
  7225. setSpecies$1(ARRAY_BUFFER);
  7226. // Derived from https://github.com/xqdoo00o/jszip/blob/master/lib/sjcl.js and https://github.com/bitwiseshiftleft/sjcl
  7227. /*// deno-lint-ignore-file no-this-alias *
  7228. /*
  7229. * SJCL is open. You can use, modify and redistribute it under a BSD
  7230. * license or under the GNU GPL, version 2.0.
  7231. */
  7232. /** @fileOverview Javascript cryptography implementation.
  7233. *
  7234. * Crush to remove comments, shorten variable names and
  7235. * generally reduce transmission size.
  7236. *
  7237. * @author Emily Stark
  7238. * @author Mike Hamburg
  7239. * @author Dan Boneh
  7240. */
  7241. /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
  7242. /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
  7243. *
  7244. * @author Emily Stark
  7245. * @author Mike Hamburg
  7246. * @author Dan Boneh
  7247. */
  7248. /**
  7249. * Arrays of bits, encoded as arrays of Numbers.
  7250. * @namespace
  7251. * @description
  7252. * <p>
  7253. * These objects are the currency accepted by SJCL's crypto functions.
  7254. * </p>
  7255. *
  7256. * <p>
  7257. * Most of our crypto primitives operate on arrays of 4-byte words internally,
  7258. * but many of them can take arguments that are not a multiple of 4 bytes.
  7259. * This library encodes arrays of bits (whose size need not be a multiple of 8
  7260. * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
  7261. * array of words, 32 bits at a time. Since the words are double-precision
  7262. * floating point numbers, they fit some extra data. We use this (in a private,
  7263. * possibly-changing manner) to encode the number of bits actually present
  7264. * in the last word of the array.
  7265. * </p>
  7266. *
  7267. * <p>
  7268. * Because bitwise ops clear this out-of-band data, these arrays can be passed
  7269. * to ciphers like AES which want arrays of words.
  7270. * </p>
  7271. */
  7272. var bitArray = {
  7273. /**
  7274. * Concatenate two bit arrays.
  7275. * @param {bitArray} a1 The first array.
  7276. * @param {bitArray} a2 The second array.
  7277. * @return {bitArray} The concatenation of a1 and a2.
  7278. */
  7279. concat: function concat(a1, a2) {
  7280. if (a1.length === 0 || a2.length === 0) {
  7281. return a1.concat(a2);
  7282. }
  7283. var last = a1[a1.length - 1],
  7284. shift = bitArray.getPartial(last);
  7285. if (shift === 32) {
  7286. return a1.concat(a2);
  7287. } else {
  7288. return bitArray._shiftRight(a2, shift, last | 0, a1.slice(0, a1.length - 1));
  7289. }
  7290. },
  7291. /**
  7292. * Find the length of an array of bits.
  7293. * @param {bitArray} a The array.
  7294. * @return {Number} The length of a, in bits.
  7295. */
  7296. bitLength: function bitLength(a) {
  7297. var l = a.length;
  7298. if (l === 0) {
  7299. return 0;
  7300. }
  7301. var x = a[l - 1];
  7302. return (l - 1) * 32 + bitArray.getPartial(x);
  7303. },
  7304. /**
  7305. * Truncate an array.
  7306. * @param {bitArray} a The array.
  7307. * @param {Number} len The length to truncate to, in bits.
  7308. * @return {bitArray} A new array, truncated to len bits.
  7309. */
  7310. clamp: function clamp(a, len) {
  7311. if (a.length * 32 < len) {
  7312. return a;
  7313. }
  7314. a = a.slice(0, Math.ceil(len / 32));
  7315. var l = a.length;
  7316. len = len & 31;
  7317. if (l > 0 && len) {
  7318. a[l - 1] = bitArray.partial(len, a[l - 1] & 0x80000000 >> len - 1, 1);
  7319. }
  7320. return a;
  7321. },
  7322. /**
  7323. * Make a partial word for a bit array.
  7324. * @param {Number} len The number of bits in the word.
  7325. * @param {Number} x The bits.
  7326. * @param {Number} [_end=0] Pass 1 if x has already been shifted to the high side.
  7327. * @return {Number} The partial word.
  7328. */
  7329. partial: function partial(len, x, _end) {
  7330. if (len === 32) {
  7331. return x;
  7332. }
  7333. return (_end ? x | 0 : x << 32 - len) + len * 0x10000000000;
  7334. },
  7335. /**
  7336. * Get the number of bits used by a partial word.
  7337. * @param {Number} x The partial word.
  7338. * @return {Number} The number of bits used by the partial word.
  7339. */
  7340. getPartial: function getPartial(x) {
  7341. return Math.round(x / 0x10000000000) || 32;
  7342. },
  7343. /** Shift an array right.
  7344. * @param {bitArray} a The array to shift.
  7345. * @param {Number} shift The number of bits to shift.
  7346. * @param {Number} [carry=0] A byte to carry in
  7347. * @param {bitArray} [out=[]] An array to prepend to the output.
  7348. * @private
  7349. */
  7350. _shiftRight: function _shiftRight(a, shift, carry, out) {
  7351. if (out === undefined) {
  7352. out = [];
  7353. }
  7354. for (; shift >= 32; shift -= 32) {
  7355. out.push(carry);
  7356. carry = 0;
  7357. }
  7358. if (shift === 0) {
  7359. return out.concat(a);
  7360. }
  7361. for (var i = 0; i < a.length; i++) {
  7362. out.push(carry | a[i] >>> shift);
  7363. carry = a[i] << 32 - shift;
  7364. }
  7365. var last2 = a.length ? a[a.length - 1] : 0;
  7366. var shift2 = bitArray.getPartial(last2);
  7367. out.push(bitArray.partial(shift + shift2 & 31, shift + shift2 > 32 ? carry : out.pop(), 1));
  7368. return out;
  7369. }
  7370. };
  7371. /** @fileOverview Bit array codec implementations.
  7372. *
  7373. * @author Emily Stark
  7374. * @author Mike Hamburg
  7375. * @author Dan Boneh
  7376. */
  7377. /**
  7378. * Arrays of bytes
  7379. * @namespace
  7380. */
  7381. var codec = {
  7382. bytes: {
  7383. /** Convert from a bitArray to an array of bytes. */
  7384. fromBits: function fromBits(arr) {
  7385. var bl = bitArray.bitLength(arr);
  7386. var byteLength = bl / 8;
  7387. var out = new Uint8Array(byteLength);
  7388. var tmp;
  7389. for (var i = 0; i < byteLength; i++) {
  7390. if ((i & 3) === 0) {
  7391. tmp = arr[i / 4];
  7392. }
  7393. out[i] = tmp >>> 24;
  7394. tmp <<= 8;
  7395. }
  7396. return out;
  7397. },
  7398. /** Convert from an array of bytes to a bitArray. */
  7399. toBits: function toBits(bytes) {
  7400. var out = [];
  7401. var i;
  7402. var tmp = 0;
  7403. for (i = 0; i < bytes.length; i++) {
  7404. tmp = tmp << 8 | bytes[i];
  7405. if ((i & 3) === 3) {
  7406. out.push(tmp);
  7407. tmp = 0;
  7408. }
  7409. }
  7410. if (i & 3) {
  7411. out.push(bitArray.partial(8 * (i & 3), tmp));
  7412. }
  7413. return out;
  7414. }
  7415. }
  7416. };
  7417. var hash = {};
  7418. /**
  7419. * Context for a SHA-1 operation in progress.
  7420. * @constructor
  7421. */
  7422. hash.sha1 = function (hash) {
  7423. if (hash) {
  7424. this._h = hash._h.slice(0);
  7425. this._buffer = hash._buffer.slice(0);
  7426. this._length = hash._length;
  7427. } else {
  7428. this.reset();
  7429. }
  7430. };
  7431. hash.sha1.prototype = {
  7432. /**
  7433. * The hash's block size, in bits.
  7434. * @constant
  7435. */
  7436. blockSize: 512,
  7437. /**
  7438. * Reset the hash state.
  7439. * @return this
  7440. */
  7441. reset: function reset() {
  7442. var sha1 = this;
  7443. sha1._h = this._init.slice(0);
  7444. sha1._buffer = [];
  7445. sha1._length = 0;
  7446. return sha1;
  7447. },
  7448. /**
  7449. * Input several words to the hash.
  7450. * @param {bitArray|String} data the data to hash.
  7451. * @return this
  7452. */
  7453. update: function update(data) {
  7454. var sha1 = this;
  7455. if (typeof data === "string") {
  7456. data = codec.utf8String.toBits(data);
  7457. }
  7458. var b = sha1._buffer = bitArray.concat(sha1._buffer, data);
  7459. var ol = sha1._length;
  7460. var nl = sha1._length = ol + bitArray.bitLength(data);
  7461. if (nl > 9007199254740991) {
  7462. throw new Error("Cannot hash more than 2^53 - 1 bits");
  7463. }
  7464. var c = new Uint32Array(b);
  7465. var j = 0;
  7466. for (var i = sha1.blockSize + ol - (sha1.blockSize + ol & sha1.blockSize - 1); i <= nl; i += sha1.blockSize) {
  7467. sha1._block(c.subarray(16 * j, 16 * (j + 1)));
  7468. j += 1;
  7469. }
  7470. b.splice(0, 16 * j);
  7471. return sha1;
  7472. },
  7473. /**
  7474. * Complete hashing and output the hash value.
  7475. * @return {bitArray} The hash value, an array of 5 big-endian words. TODO
  7476. */
  7477. finalize: function finalize() {
  7478. var sha1 = this;
  7479. var b = sha1._buffer;
  7480. var h = sha1._h; // Round out and push the buffer
  7481. b = bitArray.concat(b, [bitArray.partial(1, 1)]); // Round out the buffer to a multiple of 16 words, less the 2 length words.
  7482. for (var i = b.length + 2; i & 15; i++) {
  7483. b.push(0);
  7484. } // append the length
  7485. b.push(Math.floor(sha1._length / 0x100000000));
  7486. b.push(sha1._length | 0);
  7487. while (b.length) {
  7488. sha1._block(b.splice(0, 16));
  7489. }
  7490. sha1.reset();
  7491. return h;
  7492. },
  7493. /**
  7494. * The SHA-1 initialization vector.
  7495. * @private
  7496. */
  7497. _init: [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0],
  7498. /**
  7499. * The SHA-1 hash key.
  7500. * @private
  7501. */
  7502. _key: [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6],
  7503. /**
  7504. * The SHA-1 logical functions f(0), f(1), ..., f(79).
  7505. * @private
  7506. */
  7507. _f: function _f(t, b, c, d) {
  7508. if (t <= 19) {
  7509. return b & c | ~b & d;
  7510. } else if (t <= 39) {
  7511. return b ^ c ^ d;
  7512. } else if (t <= 59) {
  7513. return b & c | b & d | c & d;
  7514. } else if (t <= 79) {
  7515. return b ^ c ^ d;
  7516. }
  7517. },
  7518. /**
  7519. * Circular left-shift operator.
  7520. * @private
  7521. */
  7522. _S: function _S(n, x) {
  7523. return x << n | x >>> 32 - n;
  7524. },
  7525. /**
  7526. * Perform one cycle of SHA-1.
  7527. * @param {Uint32Array|bitArray} words one block of words.
  7528. * @private
  7529. */
  7530. _block: function _block(words) {
  7531. var sha1 = this;
  7532. var h = sha1._h; // When words is passed to _block, it has 16 elements. SHA1 _block
  7533. // function extends words with new elements (at the end there are 80 elements).
  7534. // The problem is that if we use Uint32Array instead of Array,
  7535. // the length of Uint32Array cannot be changed. Thus, we replace words with a
  7536. // normal Array here.
  7537. var w = Array(80); // do not use Uint32Array here as the instantiation is slower
  7538. for (var j = 0; j < 16; j++) {
  7539. w[j] = words[j];
  7540. }
  7541. var a = h[0];
  7542. var b = h[1];
  7543. var c = h[2];
  7544. var d = h[3];
  7545. var e = h[4];
  7546. for (var t = 0; t <= 79; t++) {
  7547. if (t >= 16) {
  7548. w[t] = sha1._S(1, w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16]);
  7549. }
  7550. var tmp = sha1._S(5, a) + sha1._f(t, b, c, d) + e + w[t] + sha1._key[Math.floor(t / 20)] | 0;
  7551. e = d;
  7552. d = c;
  7553. c = sha1._S(30, b);
  7554. b = a;
  7555. a = tmp;
  7556. }
  7557. h[0] = h[0] + a | 0;
  7558. h[1] = h[1] + b | 0;
  7559. h[2] = h[2] + c | 0;
  7560. h[3] = h[3] + d | 0;
  7561. h[4] = h[4] + e | 0;
  7562. }
  7563. };
  7564. /** @fileOverview Low-level AES implementation.
  7565. *
  7566. * This file contains a low-level implementation of AES, optimized for
  7567. * size and for efficiency on several browsers. It is based on
  7568. * OpenSSL's aes_core.c, a public-domain implementation by Vincent
  7569. * Rijmen, Antoon Bosselaers and Paulo Barreto.
  7570. *
  7571. * An older version of this implementation is available in the public
  7572. * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
  7573. * Stanford University 2008-2010 and BSD-licensed for liability
  7574. * reasons.
  7575. *
  7576. * @author Emily Stark
  7577. * @author Mike Hamburg
  7578. * @author Dan Boneh
  7579. */
  7580. var cipher = {};
  7581. /**
  7582. * Schedule out an AES key for both encryption and decryption. This
  7583. * is a low-level class. Use a cipher mode to do bulk encryption.
  7584. *
  7585. * @constructor
  7586. * @param {Array} key The key as an array of 4, 6 or 8 words.
  7587. */
  7588. cipher.aes = /*#__PURE__*/function () {
  7589. function _class(key) {
  7590. _classCallCheck(this, _class);
  7591. /**
  7592. * The expanded S-box and inverse S-box tables. These will be computed
  7593. * on the client so that we don't have to send them down the wire.
  7594. *
  7595. * There are two tables, _tables[0] is for encryption and
  7596. * _tables[1] is for decryption.
  7597. *
  7598. * The first 4 sub-tables are the expanded S-box with MixColumns. The
  7599. * last (_tables[01][4]) is the S-box itself.
  7600. *
  7601. * @private
  7602. */
  7603. var aes = this;
  7604. aes._tables = [[[], [], [], [], []], [[], [], [], [], []]];
  7605. if (!aes._tables[0][0][0]) {
  7606. aes._precompute();
  7607. }
  7608. var sbox = aes._tables[0][4];
  7609. var decTable = aes._tables[1];
  7610. var keyLen = key.length;
  7611. var i,
  7612. encKey,
  7613. decKey,
  7614. rcon = 1;
  7615. if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {
  7616. throw new Error("invalid aes key size");
  7617. }
  7618. aes._key = [encKey = key.slice(0), decKey = []]; // schedule encryption keys
  7619. for (i = keyLen; i < 4 * keyLen + 28; i++) {
  7620. var tmp = encKey[i - 1]; // apply sbox
  7621. if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {
  7622. tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; // shift rows and add rcon
  7623. if (i % keyLen === 0) {
  7624. tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;
  7625. rcon = rcon << 1 ^ (rcon >> 7) * 283;
  7626. }
  7627. }
  7628. encKey[i] = encKey[i - keyLen] ^ tmp;
  7629. } // schedule decryption keys
  7630. for (var j = 0; i; j++, i--) {
  7631. var _tmp = encKey[j & 3 ? i : i - 4];
  7632. if (i <= 4 || j < 4) {
  7633. decKey[j] = _tmp;
  7634. } else {
  7635. decKey[j] = decTable[0][sbox[_tmp >>> 24]] ^ decTable[1][sbox[_tmp >> 16 & 255]] ^ decTable[2][sbox[_tmp >> 8 & 255]] ^ decTable[3][sbox[_tmp & 255]];
  7636. }
  7637. }
  7638. } // public
  7639. /* Something like this might appear here eventually
  7640. name: "AES",
  7641. blockSize: 4,
  7642. keySizes: [4,6,8],
  7643. */
  7644. /**
  7645. * Encrypt an array of 4 big-endian words.
  7646. * @param {Array} data The plaintext.
  7647. * @return {Array} The ciphertext.
  7648. */
  7649. _createClass(_class, [{
  7650. key: "encrypt",
  7651. value: function encrypt(data) {
  7652. return this._crypt(data, 0);
  7653. }
  7654. /**
  7655. * Decrypt an array of 4 big-endian words.
  7656. * @param {Array} data The ciphertext.
  7657. * @return {Array} The plaintext.
  7658. */
  7659. }, {
  7660. key: "decrypt",
  7661. value: function decrypt(data) {
  7662. return this._crypt(data, 1);
  7663. }
  7664. /**
  7665. * Expand the S-box tables.
  7666. *
  7667. * @private
  7668. */
  7669. }, {
  7670. key: "_precompute",
  7671. value: function _precompute() {
  7672. var encTable = this._tables[0];
  7673. var decTable = this._tables[1];
  7674. var sbox = encTable[4];
  7675. var sboxInv = decTable[4];
  7676. var d = [];
  7677. var th = [];
  7678. var xInv, x2, x4, x8; // Compute double and third tables
  7679. for (var i = 0; i < 256; i++) {
  7680. th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;
  7681. }
  7682. for (var x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {
  7683. // Compute sbox
  7684. var s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;
  7685. s = s >> 8 ^ s & 255 ^ 99;
  7686. sbox[x] = s;
  7687. sboxInv[s] = x; // Compute MixColumns
  7688. x8 = d[x4 = d[x2 = d[x]]];
  7689. var tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;
  7690. var tEnc = d[s] * 0x101 ^ s * 0x1010100;
  7691. for (var _i = 0; _i < 4; _i++) {
  7692. encTable[_i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;
  7693. decTable[_i][s] = tDec = tDec << 24 ^ tDec >>> 8;
  7694. }
  7695. } // Compactify. Considerable speedup on Firefox.
  7696. for (var _i2 = 0; _i2 < 5; _i2++) {
  7697. encTable[_i2] = encTable[_i2].slice(0);
  7698. decTable[_i2] = decTable[_i2].slice(0);
  7699. }
  7700. }
  7701. /**
  7702. * Encryption and decryption core.
  7703. * @param {Array} input Four words to be encrypted or decrypted.
  7704. * @param dir The direction, 0 for encrypt and 1 for decrypt.
  7705. * @return {Array} The four encrypted or decrypted words.
  7706. * @private
  7707. */
  7708. }, {
  7709. key: "_crypt",
  7710. value: function _crypt(input, dir) {
  7711. if (input.length !== 4) {
  7712. throw new Error("invalid aes block size");
  7713. }
  7714. var key = this._key[dir];
  7715. var nInnerRounds = key.length / 4 - 2;
  7716. var out = [0, 0, 0, 0];
  7717. var table = this._tables[dir]; // load up the tables
  7718. var t0 = table[0];
  7719. var t1 = table[1];
  7720. var t2 = table[2];
  7721. var t3 = table[3];
  7722. var sbox = table[4]; // state variables a,b,c,d are loaded with pre-whitened data
  7723. var a = input[0] ^ key[0];
  7724. var b = input[dir ? 3 : 1] ^ key[1];
  7725. var c = input[2] ^ key[2];
  7726. var d = input[dir ? 1 : 3] ^ key[3];
  7727. var kIndex = 4;
  7728. var a2, b2, c2; // Inner rounds. Cribbed from OpenSSL.
  7729. for (var i = 0; i < nInnerRounds; i++) {
  7730. a2 = t0[a >>> 24] ^ t1[b >> 16 & 255] ^ t2[c >> 8 & 255] ^ t3[d & 255] ^ key[kIndex];
  7731. b2 = t0[b >>> 24] ^ t1[c >> 16 & 255] ^ t2[d >> 8 & 255] ^ t3[a & 255] ^ key[kIndex + 1];
  7732. c2 = t0[c >>> 24] ^ t1[d >> 16 & 255] ^ t2[a >> 8 & 255] ^ t3[b & 255] ^ key[kIndex + 2];
  7733. d = t0[d >>> 24] ^ t1[a >> 16 & 255] ^ t2[b >> 8 & 255] ^ t3[c & 255] ^ key[kIndex + 3];
  7734. kIndex += 4;
  7735. a = a2;
  7736. b = b2;
  7737. c = c2;
  7738. } // Last round.
  7739. for (var _i3 = 0; _i3 < 4; _i3++) {
  7740. out[dir ? 3 & -_i3 : _i3] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];
  7741. a2 = a;
  7742. a = b;
  7743. b = c;
  7744. c = d;
  7745. d = a2;
  7746. }
  7747. return out;
  7748. }
  7749. }]);
  7750. return _class;
  7751. }();
  7752. /**
  7753. * Random values
  7754. * @namespace
  7755. */
  7756. var random = {
  7757. /**
  7758. * Generate random words with pure js, cryptographically not as strong & safe as native implementation.
  7759. * @param {TypedArray} typedArray The array to fill.
  7760. * @return {TypedArray} The random values.
  7761. */
  7762. getRandomValues: function getRandomValues(typedArray) {
  7763. var words = new Uint32Array(typedArray.buffer);
  7764. var r = function r(m_w) {
  7765. var m_z = 0x3ade68b1;
  7766. var mask = 0xffffffff;
  7767. return function () {
  7768. m_z = 0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10) & mask;
  7769. m_w = 0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10) & mask;
  7770. var result = ((m_z << 0x10) + m_w & mask) / 0x100000000 + .5;
  7771. return result * (Math.random() > .5 ? 1 : -1);
  7772. };
  7773. };
  7774. for (var i = 0, rcache; i < typedArray.length; i += 4) {
  7775. var _r = r((rcache || Math.random()) * 0x100000000);
  7776. rcache = _r() * 0x3ade67b7;
  7777. words[i / 4] = _r() * 0x100000000 | 0;
  7778. }
  7779. return typedArray;
  7780. }
  7781. };
  7782. /** @fileOverview CTR mode implementation.
  7783. *
  7784. * Special thanks to Roy Nicholson for pointing out a bug in our
  7785. * implementation.
  7786. *
  7787. * @author Emily Stark
  7788. * @author Mike Hamburg
  7789. * @author Dan Boneh
  7790. */
  7791. /** Brian Gladman's CTR Mode.
  7792. * @constructor
  7793. * @param {Object} _prf The aes instance to generate key.
  7794. * @param {bitArray} _iv The iv for ctr mode, it must be 128 bits.
  7795. */
  7796. var mode = {};
  7797. /**
  7798. * Brian Gladman's CTR Mode.
  7799. * @namespace
  7800. */
  7801. mode.ctrGladman = /*#__PURE__*/function () {
  7802. function _class2(prf, iv) {
  7803. _classCallCheck(this, _class2);
  7804. this._prf = prf;
  7805. this._initIv = iv;
  7806. this._iv = iv;
  7807. }
  7808. _createClass(_class2, [{
  7809. key: "reset",
  7810. value: function reset() {
  7811. this._iv = this._initIv;
  7812. }
  7813. /** Input some data to calculate.
  7814. * @param {bitArray} data the data to process, it must be intergral multiple of 128 bits unless it's the last.
  7815. */
  7816. }, {
  7817. key: "update",
  7818. value: function update(data) {
  7819. return this.calculate(this._prf, data, this._iv);
  7820. }
  7821. }, {
  7822. key: "incWord",
  7823. value: function incWord(word) {
  7824. if ((word >> 24 & 0xff) === 0xff) {
  7825. //overflow
  7826. var b1 = word >> 16 & 0xff;
  7827. var b2 = word >> 8 & 0xff;
  7828. var b3 = word & 0xff;
  7829. if (b1 === 0xff) {
  7830. // overflow b1
  7831. b1 = 0;
  7832. if (b2 === 0xff) {
  7833. b2 = 0;
  7834. if (b3 === 0xff) {
  7835. b3 = 0;
  7836. } else {
  7837. ++b3;
  7838. }
  7839. } else {
  7840. ++b2;
  7841. }
  7842. } else {
  7843. ++b1;
  7844. }
  7845. word = 0;
  7846. word += b1 << 16;
  7847. word += b2 << 8;
  7848. word += b3;
  7849. } else {
  7850. word += 0x01 << 24;
  7851. }
  7852. return word;
  7853. }
  7854. }, {
  7855. key: "incCounter",
  7856. value: function incCounter(counter) {
  7857. if ((counter[0] = this.incWord(counter[0])) === 0) {
  7858. // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8
  7859. counter[1] = this.incWord(counter[1]);
  7860. }
  7861. }
  7862. }, {
  7863. key: "calculate",
  7864. value: function calculate(prf, data, iv) {
  7865. var l;
  7866. if (!(l = data.length)) {
  7867. return [];
  7868. }
  7869. var bl = bitArray.bitLength(data);
  7870. for (var i = 0; i < l; i += 4) {
  7871. this.incCounter(iv);
  7872. var e = prf.encrypt(iv);
  7873. data[i] ^= e[0];
  7874. data[i + 1] ^= e[1];
  7875. data[i + 2] ^= e[2];
  7876. data[i + 3] ^= e[3];
  7877. }
  7878. return bitArray.clamp(data, bl);
  7879. }
  7880. }]);
  7881. return _class2;
  7882. }();
  7883. var misc = {
  7884. importKey: function importKey(password) {
  7885. return new misc.hmacSha1(codec.bytes.toBits(password));
  7886. },
  7887. pbkdf2: function pbkdf2(prf, salt, count, length) {
  7888. count = count || 10000;
  7889. if (length < 0 || count < 0) {
  7890. throw new Error("invalid params to pbkdf2");
  7891. }
  7892. var byteLength = (length >> 5) + 1 << 2;
  7893. var u, ui, i, j, k;
  7894. var arrayBuffer = new ArrayBuffer(byteLength);
  7895. var out = new DataView(arrayBuffer);
  7896. var outLength = 0;
  7897. var b = bitArray;
  7898. salt = codec.bytes.toBits(salt);
  7899. for (k = 1; outLength < (byteLength || 1); k++) {
  7900. u = ui = prf.encrypt(b.concat(salt, [k]));
  7901. for (i = 1; i < count; i++) {
  7902. ui = prf.encrypt(ui);
  7903. for (j = 0; j < ui.length; j++) {
  7904. u[j] ^= ui[j];
  7905. }
  7906. }
  7907. for (i = 0; outLength < (byteLength || 1) && i < u.length; i++) {
  7908. out.setInt32(outLength, u[i]);
  7909. outLength += 4;
  7910. }
  7911. }
  7912. return arrayBuffer.slice(0, length / 8);
  7913. }
  7914. };
  7915. /** @fileOverview HMAC implementation.
  7916. *
  7917. * @author Emily Stark
  7918. * @author Mike Hamburg
  7919. * @author Dan Boneh
  7920. */
  7921. /** HMAC with the specified hash function.
  7922. * @constructor
  7923. * @param {bitArray} key the key for HMAC.
  7924. * @param {Object} [Hash=hash.sha1] The hash function to use.
  7925. */
  7926. misc.hmacSha1 = /*#__PURE__*/function () {
  7927. function _class3(key) {
  7928. _classCallCheck(this, _class3);
  7929. var hmac = this;
  7930. var Hash = hmac._hash = hash.sha1;
  7931. var exKey = [[], []];
  7932. var bs = Hash.prototype.blockSize / 32;
  7933. hmac._baseHash = [new Hash(), new Hash()];
  7934. if (key.length > bs) {
  7935. key = Hash.hash(key);
  7936. }
  7937. for (var i = 0; i < bs; i++) {
  7938. exKey[0][i] = key[i] ^ 0x36363636;
  7939. exKey[1][i] = key[i] ^ 0x5C5C5C5C;
  7940. }
  7941. hmac._baseHash[0].update(exKey[0]);
  7942. hmac._baseHash[1].update(exKey[1]);
  7943. hmac._resultHash = new Hash(hmac._baseHash[0]);
  7944. }
  7945. _createClass(_class3, [{
  7946. key: "reset",
  7947. value: function reset() {
  7948. var hmac = this;
  7949. hmac._resultHash = new hmac._hash(hmac._baseHash[0]);
  7950. hmac._updated = false;
  7951. }
  7952. }, {
  7953. key: "update",
  7954. value: function update(data) {
  7955. var hmac = this;
  7956. hmac._updated = true;
  7957. hmac._resultHash.update(data);
  7958. }
  7959. }, {
  7960. key: "digest",
  7961. value: function digest() {
  7962. var hmac = this;
  7963. var w = hmac._resultHash.finalize();
  7964. var result = new hmac._hash(hmac._baseHash[1]).update(w).finalize();
  7965. hmac.reset();
  7966. return result;
  7967. }
  7968. }, {
  7969. key: "encrypt",
  7970. value: function encrypt(data) {
  7971. if (!this._updated) {
  7972. this.update(data);
  7973. return this.digest(data);
  7974. } else {
  7975. throw new Error("encrypt on already updated hmac called!");
  7976. }
  7977. }
  7978. }]);
  7979. return _class3;
  7980. }();
  7981. var deriveBits = _async(function (algorithm, baseKey, length) {
  7982. if (CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof crypto.subtle.deriveBits == "function") {
  7983. return crypto.subtle.deriveBits(algorithm, baseKey, length);
  7984. } else {
  7985. return misc.pbkdf2(baseKey, algorithm.salt, DERIVED_BITS_ALGORITHM.iterations, length);
  7986. }
  7987. });
  7988. var createKeys$1 = _async(function (target, password, salt) {
  7989. var encodedPassword = encodeText(password);
  7990. return _await(importKey(RAW_FORMAT, encodedPassword, BASE_KEY_ALGORITHM, false, DERIVED_BITS_USAGE), function (basekey) {
  7991. return _await(deriveBits(Object.assign({
  7992. salt: salt
  7993. }, DERIVED_BITS_ALGORITHM), basekey, 8 * (KEY_LENGTH[target.strength] * 2 + 2)), function (derivedBits) {
  7994. var compositeKey = new Uint8Array(derivedBits);
  7995. target.keys = {
  7996. key: codecBytes.toBits(subarray(compositeKey, 0, KEY_LENGTH[target.strength])),
  7997. authentication: codecBytes.toBits(subarray(compositeKey, KEY_LENGTH[target.strength], KEY_LENGTH[target.strength] * 2)),
  7998. passwordVerification: subarray(compositeKey, KEY_LENGTH[target.strength] * 2)
  7999. };
  8000. });
  8001. });
  8002. });
  8003. var createEncryptionKeys = _async(function (encrypt, password) {
  8004. var salt = getRandomValues(new Uint8Array(SALT_LENGTH[encrypt.strength]));
  8005. return _await(createKeys$1(encrypt, password, salt), function () {
  8006. return concat$1(salt, encrypt.keys.passwordVerification);
  8007. });
  8008. });
  8009. var createDecryptionKeys = _async(function (decrypt, preambleArray, password) {
  8010. return _await(createKeys$1(decrypt, password, subarray(preambleArray, 0, SALT_LENGTH[decrypt.strength])), function () {
  8011. var passwordVerification = subarray(preambleArray, SALT_LENGTH[decrypt.strength]);
  8012. var passwordVerificationKey = decrypt.keys.passwordVerification;
  8013. if (passwordVerificationKey[0] != passwordVerification[0] || passwordVerificationKey[1] != passwordVerification[1]) {
  8014. throw new Error(ERR_INVALID_PASSWORD);
  8015. }
  8016. });
  8017. });
  8018. var ERR_INVALID_PASSWORD = "Invalid pasword";
  8019. var BLOCK_LENGTH = 16;
  8020. var RAW_FORMAT = "raw";
  8021. var PBKDF2_ALGORITHM = {
  8022. name: "PBKDF2"
  8023. };
  8024. var HASH_ALGORITHM = {
  8025. name: "HMAC"
  8026. };
  8027. var HASH_FUNCTION = "SHA-1";
  8028. var BASE_KEY_ALGORITHM = Object.assign({
  8029. hash: HASH_ALGORITHM
  8030. }, PBKDF2_ALGORITHM);
  8031. var DERIVED_BITS_ALGORITHM = Object.assign({
  8032. iterations: 1000,
  8033. hash: {
  8034. name: HASH_FUNCTION
  8035. }
  8036. }, PBKDF2_ALGORITHM);
  8037. var DERIVED_BITS_USAGE = ["deriveBits"];
  8038. var SALT_LENGTH = [8, 12, 16];
  8039. var KEY_LENGTH = [16, 24, 32];
  8040. var SIGNATURE_LENGTH = 10;
  8041. var COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];
  8042. var CRYPTO_API_SUPPORTED = typeof crypto != "undefined";
  8043. var SUBTLE_API_SUPPORTED = CRYPTO_API_SUPPORTED && typeof crypto.subtle != "undefined";
  8044. var codecBytes = codec.bytes;
  8045. var Aes = cipher.aes;
  8046. var CtrGladman = mode.ctrGladman;
  8047. var HmacSha1 = misc.hmacSha1;
  8048. var AESDecrypt = /*#__PURE__*/function () {
  8049. function AESDecrypt(password, signed, strength) {
  8050. _classCallCheck(this, AESDecrypt);
  8051. Object.assign(this, {
  8052. password: password,
  8053. signed: signed,
  8054. strength: strength - 1,
  8055. pendingInput: new Uint8Array(0)
  8056. });
  8057. }
  8058. _createClass(AESDecrypt, [{
  8059. key: "append",
  8060. value: function append(input) {
  8061. try {
  8062. var _this2 = this;
  8063. var aesCrypto = _this2;
  8064. return _await(_invoke(function () {
  8065. if (aesCrypto.password) {
  8066. var preamble = subarray(input, 0, SALT_LENGTH[aesCrypto.strength] + 2);
  8067. return _await(createDecryptionKeys(aesCrypto, preamble, aesCrypto.password), function () {
  8068. aesCrypto.password = null;
  8069. aesCrypto.aesCtrGladman = new CtrGladman(new Aes(aesCrypto.keys.key), Array.from(COUNTER_DEFAULT_VALUE));
  8070. aesCrypto.hmac = new HmacSha1(aesCrypto.keys.authentication);
  8071. input = subarray(input, SALT_LENGTH[aesCrypto.strength] + 2);
  8072. });
  8073. }
  8074. }, function () {
  8075. var output = new Uint8Array(input.length - SIGNATURE_LENGTH - (input.length - SIGNATURE_LENGTH) % BLOCK_LENGTH);
  8076. return _append(aesCrypto, input, output, 0, SIGNATURE_LENGTH, true);
  8077. }));
  8078. } catch (e) {
  8079. return Promise.reject(e);
  8080. }
  8081. }
  8082. }, {
  8083. key: "flush",
  8084. value: function flush() {
  8085. var aesCrypto = this;
  8086. var pendingInput = aesCrypto.pendingInput;
  8087. var chunkToDecrypt = subarray(pendingInput, 0, pendingInput.length - SIGNATURE_LENGTH);
  8088. var originalSignature = subarray(pendingInput, pendingInput.length - SIGNATURE_LENGTH);
  8089. var decryptedChunkArray = new Uint8Array(0);
  8090. if (chunkToDecrypt.length) {
  8091. var encryptedChunk = codecBytes.toBits(chunkToDecrypt);
  8092. aesCrypto.hmac.update(encryptedChunk);
  8093. var decryptedChunk = aesCrypto.aesCtrGladman.update(encryptedChunk);
  8094. decryptedChunkArray = codecBytes.fromBits(decryptedChunk);
  8095. }
  8096. var valid = true;
  8097. if (aesCrypto.signed) {
  8098. var signature = subarray(codecBytes.fromBits(aesCrypto.hmac.digest()), 0, SIGNATURE_LENGTH);
  8099. for (var indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
  8100. if (signature[indexSignature] != originalSignature[indexSignature]) {
  8101. valid = false;
  8102. }
  8103. }
  8104. }
  8105. return {
  8106. valid: valid,
  8107. data: decryptedChunkArray
  8108. };
  8109. }
  8110. }]);
  8111. return AESDecrypt;
  8112. }();
  8113. var AESEncrypt = /*#__PURE__*/function () {
  8114. function AESEncrypt(password, strength) {
  8115. _classCallCheck(this, AESEncrypt);
  8116. Object.assign(this, {
  8117. password: password,
  8118. strength: strength - 1,
  8119. pendingInput: new Uint8Array(0)
  8120. });
  8121. }
  8122. _createClass(AESEncrypt, [{
  8123. key: "append",
  8124. value: function append(input) {
  8125. try {
  8126. var _this4 = this;
  8127. var aesCrypto = _this4;
  8128. var preamble = new Uint8Array(0);
  8129. return _await(_invoke(function () {
  8130. if (aesCrypto.password) {
  8131. return _await(createEncryptionKeys(aesCrypto, aesCrypto.password), function (_createEncryptionKeys) {
  8132. preamble = _createEncryptionKeys;
  8133. aesCrypto.password = null;
  8134. aesCrypto.aesCtrGladman = new CtrGladman(new Aes(aesCrypto.keys.key), Array.from(COUNTER_DEFAULT_VALUE));
  8135. aesCrypto.hmac = new HmacSha1(aesCrypto.keys.authentication);
  8136. });
  8137. }
  8138. }, function () {
  8139. var output = new Uint8Array(preamble.length + input.length - input.length % BLOCK_LENGTH);
  8140. output.set(preamble, 0);
  8141. return _append(aesCrypto, input, output, preamble.length, 0);
  8142. }));
  8143. } catch (e) {
  8144. return Promise.reject(e);
  8145. }
  8146. }
  8147. }, {
  8148. key: "flush",
  8149. value: function flush() {
  8150. var aesCrypto = this;
  8151. var encryptedChunkArray = new Uint8Array(0);
  8152. if (aesCrypto.pendingInput.length) {
  8153. var encryptedChunk = aesCrypto.aesCtrGladman.update(codecBytes.toBits(aesCrypto.pendingInput));
  8154. aesCrypto.hmac.update(encryptedChunk);
  8155. encryptedChunkArray = codecBytes.fromBits(encryptedChunk);
  8156. }
  8157. var signature = subarray(codecBytes.fromBits(aesCrypto.hmac.digest()), 0, SIGNATURE_LENGTH);
  8158. return {
  8159. data: concat$1(encryptedChunkArray, signature),
  8160. signature: signature
  8161. };
  8162. }
  8163. }]);
  8164. return AESEncrypt;
  8165. }();
  8166. function _append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
  8167. var inputLength = input.length - paddingEnd;
  8168. if (aesCrypto.pendingInput.length) {
  8169. input = concat$1(aesCrypto.pendingInput, input);
  8170. output = expand(output, inputLength - inputLength % BLOCK_LENGTH);
  8171. }
  8172. var offset;
  8173. for (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {
  8174. var inputChunk = codecBytes.toBits(subarray(input, offset, offset + BLOCK_LENGTH));
  8175. if (verifySignature) {
  8176. aesCrypto.hmac.update(inputChunk);
  8177. }
  8178. var outputChunk = aesCrypto.aesCtrGladman.update(inputChunk);
  8179. if (!verifySignature) {
  8180. aesCrypto.hmac.update(outputChunk);
  8181. }
  8182. output.set(codecBytes.fromBits(outputChunk), offset + paddingStart);
  8183. }
  8184. aesCrypto.pendingInput = subarray(input, offset);
  8185. return output;
  8186. }
  8187. function getRandomValues(array) {
  8188. if (CRYPTO_API_SUPPORTED && typeof crypto.getRandomValues == "function") {
  8189. return crypto.getRandomValues(array);
  8190. } else {
  8191. return random.getRandomValues(array);
  8192. }
  8193. }
  8194. function importKey(format, password, algorithm, extractable, keyUsages) {
  8195. if (CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof crypto.subtle.importKey == "function") {
  8196. return crypto.subtle.importKey(format, password, algorithm, extractable, keyUsages);
  8197. } else {
  8198. return misc.importKey(password);
  8199. }
  8200. }
  8201. function concat$1(leftArray, rightArray) {
  8202. var array = leftArray;
  8203. if (leftArray.length + rightArray.length) {
  8204. array = new Uint8Array(leftArray.length + rightArray.length);
  8205. array.set(leftArray, 0);
  8206. array.set(rightArray, leftArray.length);
  8207. }
  8208. return array;
  8209. }
  8210. function expand(inputArray, length) {
  8211. if (length && length > inputArray.length) {
  8212. var array = inputArray;
  8213. inputArray = new Uint8Array(length);
  8214. inputArray.set(array, 0);
  8215. }
  8216. return inputArray;
  8217. }
  8218. function subarray(array, begin, end) {
  8219. return array.subarray(begin, end);
  8220. }
  8221. var $$d = _export;
  8222. var fails$e = fails$H;
  8223. // eslint-disable-next-line es-x/no-math-imul -- required for testing
  8224. var $imul = Math.imul;
  8225. var FORCED$1 = fails$e(function () {
  8226. return $imul(0xFFFFFFFF, 5) != -5 || $imul.length != 2;
  8227. });
  8228. // `Math.imul` method
  8229. // https://tc39.es/ecma262/#sec-math.imul
  8230. // some WebKit versions fails with big numbers, some has wrong arity
  8231. $$d({ target: 'Math', stat: true, forced: FORCED$1 }, {
  8232. imul: function imul(x, y) {
  8233. var UINT16 = 0xFFFF;
  8234. var xn = +x;
  8235. var yn = +y;
  8236. var xl = UINT16 & xn;
  8237. var yl = UINT16 & yn;
  8238. return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
  8239. }
  8240. });
  8241. var HEADER_LENGTH = 12;
  8242. var ZipCryptoDecrypt = /*#__PURE__*/function () {
  8243. function ZipCryptoDecrypt(password, passwordVerification) {
  8244. _classCallCheck(this, ZipCryptoDecrypt);
  8245. var zipCrypto = this;
  8246. Object.assign(zipCrypto, {
  8247. password: password,
  8248. passwordVerification: passwordVerification
  8249. });
  8250. createKeys(zipCrypto, password);
  8251. }
  8252. _createClass(ZipCryptoDecrypt, [{
  8253. key: "append",
  8254. value: function append(input) {
  8255. var zipCrypto = this;
  8256. if (zipCrypto.password) {
  8257. var decryptedHeader = decrypt(zipCrypto, input.subarray(0, HEADER_LENGTH));
  8258. zipCrypto.password = null;
  8259. if (decryptedHeader[HEADER_LENGTH - 1] != zipCrypto.passwordVerification) {
  8260. throw new Error(ERR_INVALID_PASSWORD);
  8261. }
  8262. input = input.subarray(HEADER_LENGTH);
  8263. }
  8264. return decrypt(zipCrypto, input);
  8265. }
  8266. }, {
  8267. key: "flush",
  8268. value: function flush() {
  8269. return {
  8270. valid: true,
  8271. data: new Uint8Array(0)
  8272. };
  8273. }
  8274. }]);
  8275. return ZipCryptoDecrypt;
  8276. }();
  8277. var ZipCryptoEncrypt = /*#__PURE__*/function () {
  8278. function ZipCryptoEncrypt(password, passwordVerification) {
  8279. _classCallCheck(this, ZipCryptoEncrypt);
  8280. var zipCrypto = this;
  8281. Object.assign(zipCrypto, {
  8282. password: password,
  8283. passwordVerification: passwordVerification
  8284. });
  8285. createKeys(zipCrypto, password);
  8286. }
  8287. _createClass(ZipCryptoEncrypt, [{
  8288. key: "append",
  8289. value: function append(input) {
  8290. var zipCrypto = this;
  8291. var output;
  8292. var offset;
  8293. if (zipCrypto.password) {
  8294. zipCrypto.password = null;
  8295. var header = crypto.getRandomValues(new Uint8Array(HEADER_LENGTH));
  8296. header[HEADER_LENGTH - 1] = zipCrypto.passwordVerification;
  8297. output = new Uint8Array(input.length + header.length);
  8298. output.set(encrypt(zipCrypto, header), 0);
  8299. offset = HEADER_LENGTH;
  8300. } else {
  8301. output = new Uint8Array(input.length);
  8302. offset = 0;
  8303. }
  8304. output.set(encrypt(zipCrypto, input), offset);
  8305. return output;
  8306. }
  8307. }, {
  8308. key: "flush",
  8309. value: function flush() {
  8310. return {
  8311. data: new Uint8Array(0)
  8312. };
  8313. }
  8314. }]);
  8315. return ZipCryptoEncrypt;
  8316. }();
  8317. function decrypt(target, input) {
  8318. var output = new Uint8Array(input.length);
  8319. for (var index = 0; index < input.length; index++) {
  8320. output[index] = getByte(target) ^ input[index];
  8321. updateKeys(target, output[index]);
  8322. }
  8323. return output;
  8324. }
  8325. function encrypt(target, input) {
  8326. var output = new Uint8Array(input.length);
  8327. for (var index = 0; index < input.length; index++) {
  8328. output[index] = getByte(target) ^ input[index];
  8329. updateKeys(target, input[index]);
  8330. }
  8331. return output;
  8332. }
  8333. function createKeys(target, password) {
  8334. target.keys = [0x12345678, 0x23456789, 0x34567890];
  8335. target.crcKey0 = new Crc32(target.keys[0]);
  8336. target.crcKey2 = new Crc32(target.keys[2]);
  8337. for (var index = 0; index < password.length; index++) {
  8338. updateKeys(target, password.charCodeAt(index));
  8339. }
  8340. }
  8341. function updateKeys(target, byte) {
  8342. target.crcKey0.append([byte]);
  8343. target.keys[0] = ~target.crcKey0.get();
  8344. target.keys[1] = getInt32(target.keys[1] + getInt8(target.keys[0]));
  8345. target.keys[1] = getInt32(Math.imul(target.keys[1], 134775813) + 1);
  8346. target.crcKey2.append([target.keys[1] >>> 24]);
  8347. target.keys[2] = ~target.crcKey2.get();
  8348. }
  8349. function getByte(target) {
  8350. var temp = target.keys[2] | 2;
  8351. return getInt8(Math.imul(temp, temp ^ 1) >>> 8);
  8352. }
  8353. function getInt8(number) {
  8354. return number & 0xFF;
  8355. }
  8356. function getInt32(number) {
  8357. return number & 0xFFFFFFFF;
  8358. }
  8359. var CODEC_DEFLATE = "deflate";
  8360. var CODEC_INFLATE = "inflate";
  8361. var ERR_INVALID_SIGNATURE = "Invalid signature";
  8362. var Inflate = /*#__PURE__*/function () {
  8363. function Inflate(codecConstructor, _ref, _ref2) {
  8364. var signature = _ref.signature,
  8365. password = _ref.password,
  8366. signed = _ref.signed,
  8367. compressed = _ref.compressed,
  8368. zipCrypto = _ref.zipCrypto,
  8369. passwordVerification = _ref.passwordVerification,
  8370. encryptionStrength = _ref.encryptionStrength;
  8371. var chunkSize = _ref2.chunkSize;
  8372. _classCallCheck(this, Inflate);
  8373. var encrypted = Boolean(password);
  8374. Object.assign(this, {
  8375. signature: signature,
  8376. encrypted: encrypted,
  8377. signed: signed,
  8378. compressed: compressed,
  8379. inflate: compressed && new codecConstructor({
  8380. chunkSize: chunkSize
  8381. }),
  8382. crc32: signed && new Crc32(),
  8383. zipCrypto: zipCrypto,
  8384. decrypt: encrypted && zipCrypto ? new ZipCryptoDecrypt(password, passwordVerification) : new AESDecrypt(password, signed, encryptionStrength)
  8385. });
  8386. }
  8387. _createClass(Inflate, [{
  8388. key: "append",
  8389. value: function append(data) {
  8390. try {
  8391. var _this2 = this;
  8392. var codec = _this2;
  8393. return _await(_invoke(function () {
  8394. if (codec.encrypted && data.length) {
  8395. return _await(codec.decrypt.append(data), function (_codec$decrypt$append) {
  8396. data = _codec$decrypt$append;
  8397. });
  8398. }
  8399. }, function () {
  8400. return _invoke(function () {
  8401. if (codec.compressed && data.length) {
  8402. return _await(codec.inflate.append(data), function (_codec$inflate$append) {
  8403. data = _codec$inflate$append;
  8404. });
  8405. }
  8406. }, function () {
  8407. if ((!codec.encrypted || codec.zipCrypto) && codec.signed && data.length) {
  8408. codec.crc32.append(data);
  8409. }
  8410. return data;
  8411. });
  8412. }));
  8413. } catch (e) {
  8414. return Promise.reject(e);
  8415. }
  8416. }
  8417. }, {
  8418. key: "flush",
  8419. value: function flush() {
  8420. try {
  8421. var _this4 = this;
  8422. var codec = _this4;
  8423. var signature;
  8424. var data = new Uint8Array(0);
  8425. if (codec.encrypted) {
  8426. var result = codec.decrypt.flush();
  8427. if (!result.valid) {
  8428. throw new Error(ERR_INVALID_SIGNATURE);
  8429. }
  8430. data = result.data;
  8431. }
  8432. if ((!codec.encrypted || codec.zipCrypto) && codec.signed) {
  8433. var dataViewSignature = new DataView(new Uint8Array(4).buffer);
  8434. signature = codec.crc32.get();
  8435. dataViewSignature.setUint32(0, signature);
  8436. if (codec.signature != dataViewSignature.getUint32(0, false)) {
  8437. throw new Error(ERR_INVALID_SIGNATURE);
  8438. }
  8439. }
  8440. return _await(_invoke(function () {
  8441. if (codec.compressed) {
  8442. return _await(codec.inflate.append(data), function (_codec$inflate$append2) {
  8443. data = _codec$inflate$append2 || new Uint8Array(0);
  8444. return _awaitIgnored(codec.inflate.flush());
  8445. });
  8446. }
  8447. }, function () {
  8448. return {
  8449. data: data,
  8450. signature: signature
  8451. };
  8452. }));
  8453. } catch (e) {
  8454. return Promise.reject(e);
  8455. }
  8456. }
  8457. }]);
  8458. return Inflate;
  8459. }();
  8460. var Deflate = /*#__PURE__*/function () {
  8461. function Deflate(codecConstructor, _ref3, _ref4) {
  8462. var encrypted = _ref3.encrypted,
  8463. signed = _ref3.signed,
  8464. compressed = _ref3.compressed,
  8465. level = _ref3.level,
  8466. zipCrypto = _ref3.zipCrypto,
  8467. password = _ref3.password,
  8468. passwordVerification = _ref3.passwordVerification,
  8469. encryptionStrength = _ref3.encryptionStrength;
  8470. var chunkSize = _ref4.chunkSize;
  8471. _classCallCheck(this, Deflate);
  8472. Object.assign(this, {
  8473. encrypted: encrypted,
  8474. signed: signed,
  8475. compressed: compressed,
  8476. deflate: compressed && new codecConstructor({
  8477. level: level || 5,
  8478. chunkSize: chunkSize
  8479. }),
  8480. crc32: signed && new Crc32(),
  8481. zipCrypto: zipCrypto,
  8482. encrypt: encrypted && zipCrypto ? new ZipCryptoEncrypt(password, passwordVerification) : new AESEncrypt(password, encryptionStrength)
  8483. });
  8484. }
  8485. _createClass(Deflate, [{
  8486. key: "append",
  8487. value: function append(inputData) {
  8488. try {
  8489. var _this6 = this;
  8490. var codec = _this6;
  8491. var data = inputData;
  8492. return _await(_invoke(function () {
  8493. if (codec.compressed && inputData.length) {
  8494. return _await(codec.deflate.append(inputData), function (_codec$deflate$append) {
  8495. data = _codec$deflate$append;
  8496. });
  8497. }
  8498. }, function () {
  8499. return _invoke(function () {
  8500. if (codec.encrypted && data.length) {
  8501. return _await(codec.encrypt.append(data), function (_codec$encrypt$append) {
  8502. data = _codec$encrypt$append;
  8503. });
  8504. }
  8505. }, function () {
  8506. if ((!codec.encrypted || codec.zipCrypto) && codec.signed && inputData.length) {
  8507. codec.crc32.append(inputData);
  8508. }
  8509. return data;
  8510. });
  8511. }));
  8512. } catch (e) {
  8513. return Promise.reject(e);
  8514. }
  8515. }
  8516. }, {
  8517. key: "flush",
  8518. value: function flush() {
  8519. try {
  8520. var _this8 = this;
  8521. var codec = _this8;
  8522. var signature;
  8523. var data = new Uint8Array(0);
  8524. return _await(_invoke(function () {
  8525. if (codec.compressed) {
  8526. return _await(codec.deflate.flush(), function (_codec$deflate$flush) {
  8527. data = _codec$deflate$flush || new Uint8Array(0);
  8528. });
  8529. }
  8530. }, function () {
  8531. return _invoke(function () {
  8532. if (codec.encrypted) {
  8533. return _await(codec.encrypt.append(data), function (_codec$encrypt$append2) {
  8534. data = _codec$encrypt$append2;
  8535. var result = codec.encrypt.flush();
  8536. signature = result.signature;
  8537. var newData = new Uint8Array(data.length + result.data.length);
  8538. newData.set(data, 0);
  8539. newData.set(result.data, data.length);
  8540. data = newData;
  8541. });
  8542. }
  8543. }, function () {
  8544. if ((!codec.encrypted || codec.zipCrypto) && codec.signed) {
  8545. signature = codec.crc32.get();
  8546. }
  8547. return {
  8548. data: data,
  8549. signature: signature
  8550. };
  8551. });
  8552. }));
  8553. } catch (e) {
  8554. return Promise.reject(e);
  8555. }
  8556. }
  8557. }]);
  8558. return Deflate;
  8559. }();
  8560. function createCodec$1(codecConstructor, options, config) {
  8561. if (options.codecType.startsWith(CODEC_DEFLATE)) {
  8562. return new Deflate(codecConstructor, options, config);
  8563. } else if (options.codecType.startsWith(CODEC_INFLATE)) {
  8564. return new Inflate(codecConstructor, options, config);
  8565. }
  8566. }
  8567. var MESSAGE_INIT = "init";
  8568. var MESSAGE_APPEND = "append";
  8569. var MESSAGE_FLUSH = "flush";
  8570. var MESSAGE_EVENT_TYPE = "message";
  8571. var classicWorkersSupported = true;
  8572. var getWorker = (function (workerData, codecConstructor, options, config, _onTaskFinished, webWorker, scripts) {
  8573. Object.assign(workerData, {
  8574. busy: true,
  8575. codecConstructor: codecConstructor,
  8576. options: Object.assign({}, options),
  8577. scripts: scripts,
  8578. terminate: function terminate() {
  8579. if (workerData.worker && !workerData.busy) {
  8580. workerData.worker.terminate();
  8581. workerData.interface = null;
  8582. }
  8583. },
  8584. onTaskFinished: function onTaskFinished() {
  8585. workerData.busy = false;
  8586. _onTaskFinished(workerData);
  8587. }
  8588. });
  8589. return webWorker ? createWebWorkerInterface(workerData, config) : createWorkerInterface(workerData, config);
  8590. });
  8591. function createWorkerInterface(workerData, config) {
  8592. var interfaceCodec = createCodec$1(workerData.codecConstructor, workerData.options, config);
  8593. return {
  8594. append: function append(data) {
  8595. try {
  8596. return _await(_catch(function () {
  8597. return _await(interfaceCodec.append(data));
  8598. }, function (error) {
  8599. workerData.onTaskFinished();
  8600. throw error;
  8601. }));
  8602. } catch (e) {
  8603. return Promise.reject(e);
  8604. }
  8605. },
  8606. flush: function flush() {
  8607. try {
  8608. return _await(_finallyRethrows(function () {
  8609. return _await(interfaceCodec.flush());
  8610. }, function (_wasThrown, _result) {
  8611. workerData.onTaskFinished();
  8612. return _rethrow(_wasThrown, _result);
  8613. }));
  8614. } catch (e) {
  8615. return Promise.reject(e);
  8616. }
  8617. },
  8618. abort: function abort() {
  8619. workerData.onTaskFinished();
  8620. }
  8621. };
  8622. }
  8623. function createWebWorkerInterface(workerData, config) {
  8624. var initAndSendMessage = _async(function (message) {
  8625. return _invoke(function () {
  8626. if (!messageTask) {
  8627. var options = workerData.options;
  8628. var scripts = workerData.scripts.slice(1);
  8629. return _awaitIgnored(sendMessage({
  8630. scripts: scripts,
  8631. type: MESSAGE_INIT,
  8632. options: options,
  8633. config: {
  8634. chunkSize: config.chunkSize
  8635. }
  8636. }));
  8637. }
  8638. }, function () {
  8639. return sendMessage(message);
  8640. });
  8641. });
  8642. var messageTask;
  8643. var workerOptions = {
  8644. type: "module"
  8645. };
  8646. if (!workerData.interface) {
  8647. if (!classicWorkersSupported) {
  8648. workerData.worker = getWorker(workerOptions, config.baseURL);
  8649. } else {
  8650. try {
  8651. workerData.worker = getWorker({}, config.baseURL);
  8652. } catch (_error) {
  8653. classicWorkersSupported = false;
  8654. workerData.worker = getWorker(workerOptions, config.baseURL);
  8655. }
  8656. }
  8657. workerData.worker.addEventListener(MESSAGE_EVENT_TYPE, onMessage, false);
  8658. workerData.interface = {
  8659. append: function append(data) {
  8660. return initAndSendMessage({
  8661. type: MESSAGE_APPEND,
  8662. data: data
  8663. });
  8664. },
  8665. flush: function flush() {
  8666. return initAndSendMessage({
  8667. type: MESSAGE_FLUSH
  8668. });
  8669. },
  8670. abort: function abort() {
  8671. workerData.onTaskFinished();
  8672. }
  8673. };
  8674. }
  8675. return workerData.interface;
  8676. function getWorker(options, baseURL) {
  8677. var url, scriptUrl;
  8678. url = workerData.scripts[0];
  8679. if (typeof url == "function") {
  8680. url = url();
  8681. }
  8682. try {
  8683. scriptUrl = new URL(url, baseURL);
  8684. } catch (_error) {
  8685. scriptUrl = url;
  8686. }
  8687. return new Worker(scriptUrl, options);
  8688. }
  8689. function sendMessage(message) {
  8690. var worker = workerData.worker;
  8691. var result = new Promise(function (resolve, reject) {
  8692. return messageTask = {
  8693. resolve: resolve,
  8694. reject: reject
  8695. };
  8696. });
  8697. try {
  8698. if (message.data) {
  8699. try {
  8700. message.data = message.data.buffer;
  8701. worker.postMessage(message, [message.data]);
  8702. } catch (_error) {
  8703. worker.postMessage(message);
  8704. }
  8705. } else {
  8706. worker.postMessage(message);
  8707. }
  8708. } catch (error) {
  8709. messageTask.reject(error);
  8710. messageTask = null;
  8711. workerData.onTaskFinished();
  8712. }
  8713. return result;
  8714. }
  8715. function onMessage(event) {
  8716. var message = event.data;
  8717. if (messageTask) {
  8718. var reponseError = message.error;
  8719. var type = message.type;
  8720. if (reponseError) {
  8721. var error = new Error(reponseError.message);
  8722. error.stack = reponseError.stack;
  8723. messageTask.reject(error);
  8724. messageTask = null;
  8725. workerData.onTaskFinished();
  8726. } else if (type == MESSAGE_INIT || type == MESSAGE_FLUSH || type == MESSAGE_APPEND) {
  8727. var data = message.data;
  8728. if (type == MESSAGE_FLUSH) {
  8729. messageTask.resolve({
  8730. data: new Uint8Array(data),
  8731. signature: message.signature
  8732. });
  8733. messageTask = null;
  8734. workerData.onTaskFinished();
  8735. } else {
  8736. messageTask.resolve(data && new Uint8Array(data));
  8737. }
  8738. }
  8739. }
  8740. }
  8741. }
  8742. var pool = [];
  8743. var pendingRequests = [];
  8744. function createCodec(codecConstructor, options, config) {
  8745. var streamCopy = !options.compressed && !options.signed && !options.encrypted;
  8746. var webWorker = !streamCopy && (options.useWebWorkers || options.useWebWorkers === undefined && config.useWebWorkers);
  8747. var scripts = webWorker && config.workerScripts ? config.workerScripts[options.codecType] : [];
  8748. if (pool.length < config.maxWorkers) {
  8749. var workerData = {};
  8750. pool.push(workerData);
  8751. return getWorker(workerData, codecConstructor, options, config, onTaskFinished, webWorker, scripts);
  8752. } else {
  8753. var _workerData = pool.find(function (workerData) {
  8754. return !workerData.busy;
  8755. });
  8756. if (_workerData) {
  8757. clearTerminateTimeout(_workerData);
  8758. return getWorker(_workerData, codecConstructor, options, config, onTaskFinished, webWorker, scripts);
  8759. } else {
  8760. return new Promise(function (resolve) {
  8761. return pendingRequests.push({
  8762. resolve: resolve,
  8763. codecConstructor: codecConstructor,
  8764. options: options,
  8765. webWorker: webWorker,
  8766. scripts: scripts
  8767. });
  8768. });
  8769. }
  8770. }
  8771. function onTaskFinished(workerData) {
  8772. if (pendingRequests.length) {
  8773. var _pendingRequests$spli = pendingRequests.splice(0, 1),
  8774. _pendingRequests$spli2 = _slicedToArray(_pendingRequests$spli, 1),
  8775. _pendingRequests$spli3 = _pendingRequests$spli2[0],
  8776. resolve = _pendingRequests$spli3.resolve,
  8777. _codecConstructor = _pendingRequests$spli3.codecConstructor,
  8778. _options = _pendingRequests$spli3.options,
  8779. _webWorker = _pendingRequests$spli3.webWorker,
  8780. _scripts = _pendingRequests$spli3.scripts;
  8781. resolve(getWorker(workerData, _codecConstructor, _options, config, onTaskFinished, _webWorker, _scripts));
  8782. } else if (workerData.worker) {
  8783. clearTerminateTimeout(workerData);
  8784. if (Number.isFinite(config.terminateWorkerTimeout) && config.terminateWorkerTimeout >= 0) {
  8785. workerData.terminateTimeout = setTimeout(function () {
  8786. pool = pool.filter(function (data) {
  8787. return data != workerData;
  8788. });
  8789. workerData.terminate();
  8790. }, config.terminateWorkerTimeout);
  8791. }
  8792. } else {
  8793. pool = pool.filter(function (data) {
  8794. return data != workerData;
  8795. });
  8796. }
  8797. }
  8798. }
  8799. function clearTerminateTimeout(workerData) {
  8800. if (workerData.terminateTimeout) {
  8801. clearTimeout(workerData.terminateTimeout);
  8802. workerData.terminateTimeout = null;
  8803. }
  8804. }
  8805. function terminateWorkers() {
  8806. pool.forEach(function (workerData) {
  8807. clearTerminateTimeout(workerData);
  8808. workerData.terminate();
  8809. });
  8810. }
  8811. var writeData = _async(function (writer, data) {
  8812. return _invoke(function () {
  8813. if (data.length) {
  8814. return _awaitIgnored(writer.writeUint8Array(data));
  8815. }
  8816. }, function () {
  8817. return data.length;
  8818. });
  8819. });
  8820. var processData = _async(function (codec, reader, writer, offset, inputLengthGetter, config, options) {
  8821. var processChunk = _async(function () {
  8822. var chunkOffset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  8823. var outputLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  8824. var signal = options.signal;
  8825. var inputLength = inputLengthGetter();
  8826. if (chunkOffset < inputLength) {
  8827. testAborted(signal, codec);
  8828. return _await(reader.readUint8Array(chunkOffset + offset, Math.min(chunkSize, inputLength - chunkOffset)), function (inputData) {
  8829. var chunkLength = inputData.length;
  8830. testAborted(signal, codec);
  8831. return _await(codec.append(inputData), function (data) {
  8832. testAborted(signal, codec);
  8833. return _await(writeData(writer, data), function (_writeData) {
  8834. outputLength += _writeData;
  8835. if (options.onprogress) {
  8836. try {
  8837. options.onprogress(chunkOffset + chunkLength, inputLength);
  8838. } catch (error) {// ignored
  8839. }
  8840. }
  8841. return processChunk(chunkOffset + chunkSize, outputLength);
  8842. });
  8843. });
  8844. });
  8845. } else {
  8846. return _await(codec.flush(), function (result) {
  8847. return _await(writeData(writer, result.data), function (_writeData2) {
  8848. outputLength += _writeData2;
  8849. return {
  8850. signature: result.signature,
  8851. length: outputLength
  8852. };
  8853. });
  8854. });
  8855. }
  8856. });
  8857. var chunkSize = Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);
  8858. return processChunk();
  8859. });
  8860. /*
  8861. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  8862. Redistribution and use in source and binary forms, with or without
  8863. modification, are permitted provided that the following conditions are met:
  8864. 1. Redistributions of source code must retain the above copyright notice,
  8865. this list of conditions and the following disclaimer.
  8866. 2. Redistributions in binary form must reproduce the above copyright
  8867. notice, this list of conditions and the following disclaimer in
  8868. the documentation and/or other materials provided with the distribution.
  8869. 3. The names of the authors may not be used to endorse or promote products
  8870. derived from this software without specific prior written permission.
  8871. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  8872. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  8873. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  8874. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  8875. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  8876. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  8877. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  8878. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  8879. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  8880. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  8881. */
  8882. var MINIMUM_CHUNK_SIZE = 64;
  8883. var ERR_ABORT = "Abort error";
  8884. function testAborted(signal, codec) {
  8885. if (signal && signal.aborted) {
  8886. codec.abort();
  8887. throw new Error(ERR_ABORT);
  8888. }
  8889. }
  8890. var global$7 = global$F;
  8891. var path$1 = global$7;
  8892. var wellKnownSymbolWrapped = {};
  8893. var wellKnownSymbol$4 = wellKnownSymbol$t;
  8894. wellKnownSymbolWrapped.f = wellKnownSymbol$4;
  8895. var path = path$1;
  8896. var hasOwn$5 = hasOwnProperty_1;
  8897. var wrappedWellKnownSymbolModule$1 = wellKnownSymbolWrapped;
  8898. var defineProperty$4 = objectDefineProperty.f;
  8899. var defineWellKnownSymbol$2 = function (NAME) {
  8900. var Symbol = path.Symbol || (path.Symbol = {});
  8901. if (!hasOwn$5(Symbol, NAME)) defineProperty$4(Symbol, NAME, {
  8902. value: wrappedWellKnownSymbolModule$1.f(NAME)
  8903. });
  8904. };
  8905. var defineWellKnownSymbol$1 = defineWellKnownSymbol$2;
  8906. // `Symbol.iterator` well-known symbol
  8907. // https://tc39.es/ecma262/#sec-symbol.iterator
  8908. defineWellKnownSymbol$1('iterator');
  8909. var objectGetOwnPropertyNamesExternal = {};
  8910. /* eslint-disable es-x/no-object-getownpropertynames -- safe */
  8911. var classof$2 = classofRaw$1;
  8912. var toIndexedObject$2 = toIndexedObject$b;
  8913. var $getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
  8914. var arraySlice$2 = arraySliceSimple;
  8915. var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
  8916. ? Object.getOwnPropertyNames(window) : [];
  8917. var getWindowNames = function (it) {
  8918. try {
  8919. return $getOwnPropertyNames$1(it);
  8920. } catch (error) {
  8921. return arraySlice$2(windowNames);
  8922. }
  8923. };
  8924. // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
  8925. objectGetOwnPropertyNamesExternal.f = function getOwnPropertyNames(it) {
  8926. return windowNames && classof$2(it) == 'Window'
  8927. ? getWindowNames(it)
  8928. : $getOwnPropertyNames$1(toIndexedObject$2(it));
  8929. };
  8930. var call$6 = functionCall;
  8931. var getBuiltIn$2 = getBuiltIn$b;
  8932. var wellKnownSymbol$3 = wellKnownSymbol$t;
  8933. var defineBuiltIn$3 = defineBuiltIn$f;
  8934. var symbolDefineToPrimitive = function () {
  8935. var Symbol = getBuiltIn$2('Symbol');
  8936. var SymbolPrototype = Symbol && Symbol.prototype;
  8937. var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
  8938. var TO_PRIMITIVE = wellKnownSymbol$3('toPrimitive');
  8939. if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
  8940. // `Symbol.prototype[@@toPrimitive]` method
  8941. // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
  8942. // eslint-disable-next-line no-unused-vars -- required for .length
  8943. defineBuiltIn$3(SymbolPrototype, TO_PRIMITIVE, function (hint) {
  8944. return call$6(valueOf, this);
  8945. }, { arity: 1 });
  8946. }
  8947. };
  8948. var $$c = _export;
  8949. var global$6 = global$F;
  8950. var call$5 = functionCall;
  8951. var uncurryThis$c = functionUncurryThis;
  8952. var DESCRIPTORS$4 = descriptors;
  8953. var NATIVE_SYMBOL$4 = nativeSymbol;
  8954. var fails$d = fails$H;
  8955. var hasOwn$4 = hasOwnProperty_1;
  8956. var isPrototypeOf$1 = objectIsPrototypeOf;
  8957. var anObject$4 = anObject$i;
  8958. var toIndexedObject$1 = toIndexedObject$b;
  8959. var toPropertyKey = toPropertyKey$5;
  8960. var $toString = toString$a;
  8961. var createPropertyDescriptor = createPropertyDescriptor$7;
  8962. var nativeObjectCreate = objectCreate;
  8963. var objectKeys$1 = objectKeys$4;
  8964. var getOwnPropertyNamesModule$1 = objectGetOwnPropertyNames;
  8965. var getOwnPropertyNamesExternal = objectGetOwnPropertyNamesExternal;
  8966. var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols;
  8967. var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor;
  8968. var definePropertyModule = objectDefineProperty;
  8969. var definePropertiesModule = objectDefineProperties;
  8970. var propertyIsEnumerableModule = objectPropertyIsEnumerable;
  8971. var defineBuiltIn$2 = defineBuiltIn$f;
  8972. var shared$3 = shared$7.exports;
  8973. var sharedKey = sharedKey$4;
  8974. var hiddenKeys$1 = hiddenKeys$6;
  8975. var uid$1 = uid$5;
  8976. var wellKnownSymbol$2 = wellKnownSymbol$t;
  8977. var wrappedWellKnownSymbolModule = wellKnownSymbolWrapped;
  8978. var defineWellKnownSymbol = defineWellKnownSymbol$2;
  8979. var defineSymbolToPrimitive = symbolDefineToPrimitive;
  8980. var setToStringTag$1 = setToStringTag$8;
  8981. var InternalStateModule$1 = internalState;
  8982. var $forEach = arrayIteration.forEach;
  8983. var HIDDEN = sharedKey('hidden');
  8984. var SYMBOL = 'Symbol';
  8985. var PROTOTYPE = 'prototype';
  8986. var setInternalState$1 = InternalStateModule$1.set;
  8987. var getInternalState$1 = InternalStateModule$1.getterFor(SYMBOL);
  8988. var ObjectPrototype = Object[PROTOTYPE];
  8989. var $Symbol = global$6.Symbol;
  8990. var SymbolPrototype$1 = $Symbol && $Symbol[PROTOTYPE];
  8991. var TypeError$1 = global$6.TypeError;
  8992. var QObject = global$6.QObject;
  8993. var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
  8994. var nativeDefineProperty = definePropertyModule.f;
  8995. var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
  8996. var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
  8997. var push$3 = uncurryThis$c([].push);
  8998. var AllSymbols = shared$3('symbols');
  8999. var ObjectPrototypeSymbols = shared$3('op-symbols');
  9000. var WellKnownSymbolsStore = shared$3('wks');
  9001. // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
  9002. var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
  9003. // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
  9004. var setSymbolDescriptor = DESCRIPTORS$4 && fails$d(function () {
  9005. return nativeObjectCreate(nativeDefineProperty({}, 'a', {
  9006. get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
  9007. })).a != 7;
  9008. }) ? function (O, P, Attributes) {
  9009. var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
  9010. if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
  9011. nativeDefineProperty(O, P, Attributes);
  9012. if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
  9013. nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
  9014. }
  9015. } : nativeDefineProperty;
  9016. var wrap = function (tag, description) {
  9017. var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype$1);
  9018. setInternalState$1(symbol, {
  9019. type: SYMBOL,
  9020. tag: tag,
  9021. description: description
  9022. });
  9023. if (!DESCRIPTORS$4) symbol.description = description;
  9024. return symbol;
  9025. };
  9026. var $defineProperty = function defineProperty(O, P, Attributes) {
  9027. if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
  9028. anObject$4(O);
  9029. var key = toPropertyKey(P);
  9030. anObject$4(Attributes);
  9031. if (hasOwn$4(AllSymbols, key)) {
  9032. if (!Attributes.enumerable) {
  9033. if (!hasOwn$4(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
  9034. O[HIDDEN][key] = true;
  9035. } else {
  9036. if (hasOwn$4(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
  9037. Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
  9038. } return setSymbolDescriptor(O, key, Attributes);
  9039. } return nativeDefineProperty(O, key, Attributes);
  9040. };
  9041. var $defineProperties = function defineProperties(O, Properties) {
  9042. anObject$4(O);
  9043. var properties = toIndexedObject$1(Properties);
  9044. var keys = objectKeys$1(properties).concat($getOwnPropertySymbols(properties));
  9045. $forEach(keys, function (key) {
  9046. if (!DESCRIPTORS$4 || call$5($propertyIsEnumerable$1, properties, key)) $defineProperty(O, key, properties[key]);
  9047. });
  9048. return O;
  9049. };
  9050. var $create = function create(O, Properties) {
  9051. return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
  9052. };
  9053. var $propertyIsEnumerable$1 = function propertyIsEnumerable(V) {
  9054. var P = toPropertyKey(V);
  9055. var enumerable = call$5(nativePropertyIsEnumerable, this, P);
  9056. if (this === ObjectPrototype && hasOwn$4(AllSymbols, P) && !hasOwn$4(ObjectPrototypeSymbols, P)) return false;
  9057. return enumerable || !hasOwn$4(this, P) || !hasOwn$4(AllSymbols, P) || hasOwn$4(this, HIDDEN) && this[HIDDEN][P]
  9058. ? enumerable : true;
  9059. };
  9060. var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
  9061. var it = toIndexedObject$1(O);
  9062. var key = toPropertyKey(P);
  9063. if (it === ObjectPrototype && hasOwn$4(AllSymbols, key) && !hasOwn$4(ObjectPrototypeSymbols, key)) return;
  9064. var descriptor = nativeGetOwnPropertyDescriptor(it, key);
  9065. if (descriptor && hasOwn$4(AllSymbols, key) && !(hasOwn$4(it, HIDDEN) && it[HIDDEN][key])) {
  9066. descriptor.enumerable = true;
  9067. }
  9068. return descriptor;
  9069. };
  9070. var $getOwnPropertyNames = function getOwnPropertyNames(O) {
  9071. var names = nativeGetOwnPropertyNames(toIndexedObject$1(O));
  9072. var result = [];
  9073. $forEach(names, function (key) {
  9074. if (!hasOwn$4(AllSymbols, key) && !hasOwn$4(hiddenKeys$1, key)) push$3(result, key);
  9075. });
  9076. return result;
  9077. };
  9078. var $getOwnPropertySymbols = function (O) {
  9079. var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
  9080. var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject$1(O));
  9081. var result = [];
  9082. $forEach(names, function (key) {
  9083. if (hasOwn$4(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn$4(ObjectPrototype, key))) {
  9084. push$3(result, AllSymbols[key]);
  9085. }
  9086. });
  9087. return result;
  9088. };
  9089. // `Symbol` constructor
  9090. // https://tc39.es/ecma262/#sec-symbol-constructor
  9091. if (!NATIVE_SYMBOL$4) {
  9092. $Symbol = function Symbol() {
  9093. if (isPrototypeOf$1(SymbolPrototype$1, this)) throw TypeError$1('Symbol is not a constructor');
  9094. var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
  9095. var tag = uid$1(description);
  9096. var setter = function (value) {
  9097. if (this === ObjectPrototype) call$5(setter, ObjectPrototypeSymbols, value);
  9098. if (hasOwn$4(this, HIDDEN) && hasOwn$4(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
  9099. setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
  9100. };
  9101. if (DESCRIPTORS$4 && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
  9102. return wrap(tag, description);
  9103. };
  9104. SymbolPrototype$1 = $Symbol[PROTOTYPE];
  9105. defineBuiltIn$2(SymbolPrototype$1, 'toString', function toString() {
  9106. return getInternalState$1(this).tag;
  9107. });
  9108. defineBuiltIn$2($Symbol, 'withoutSetter', function (description) {
  9109. return wrap(uid$1(description), description);
  9110. });
  9111. propertyIsEnumerableModule.f = $propertyIsEnumerable$1;
  9112. definePropertyModule.f = $defineProperty;
  9113. definePropertiesModule.f = $defineProperties;
  9114. getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
  9115. getOwnPropertyNamesModule$1.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
  9116. getOwnPropertySymbolsModule$1.f = $getOwnPropertySymbols;
  9117. wrappedWellKnownSymbolModule.f = function (name) {
  9118. return wrap(wellKnownSymbol$2(name), name);
  9119. };
  9120. if (DESCRIPTORS$4) {
  9121. // https://github.com/tc39/proposal-Symbol-description
  9122. nativeDefineProperty(SymbolPrototype$1, 'description', {
  9123. configurable: true,
  9124. get: function description() {
  9125. return getInternalState$1(this).description;
  9126. }
  9127. });
  9128. {
  9129. defineBuiltIn$2(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable$1, { unsafe: true });
  9130. }
  9131. }
  9132. }
  9133. $$c({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL$4, sham: !NATIVE_SYMBOL$4 }, {
  9134. Symbol: $Symbol
  9135. });
  9136. $forEach(objectKeys$1(WellKnownSymbolsStore), function (name) {
  9137. defineWellKnownSymbol(name);
  9138. });
  9139. $$c({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL$4 }, {
  9140. useSetter: function () { USE_SETTER = true; },
  9141. useSimple: function () { USE_SETTER = false; }
  9142. });
  9143. $$c({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL$4, sham: !DESCRIPTORS$4 }, {
  9144. // `Object.create` method
  9145. // https://tc39.es/ecma262/#sec-object.create
  9146. create: $create,
  9147. // `Object.defineProperty` method
  9148. // https://tc39.es/ecma262/#sec-object.defineproperty
  9149. defineProperty: $defineProperty,
  9150. // `Object.defineProperties` method
  9151. // https://tc39.es/ecma262/#sec-object.defineproperties
  9152. defineProperties: $defineProperties,
  9153. // `Object.getOwnPropertyDescriptor` method
  9154. // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
  9155. getOwnPropertyDescriptor: $getOwnPropertyDescriptor
  9156. });
  9157. $$c({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL$4 }, {
  9158. // `Object.getOwnPropertyNames` method
  9159. // https://tc39.es/ecma262/#sec-object.getownpropertynames
  9160. getOwnPropertyNames: $getOwnPropertyNames
  9161. });
  9162. // `Symbol.prototype[@@toPrimitive]` method
  9163. // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
  9164. defineSymbolToPrimitive();
  9165. // `Symbol.prototype[@@toStringTag]` property
  9166. // https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
  9167. setToStringTag$1($Symbol, SYMBOL);
  9168. hiddenKeys$1[HIDDEN] = true;
  9169. var NATIVE_SYMBOL$3 = nativeSymbol;
  9170. /* eslint-disable es-x/no-symbol -- safe */
  9171. var nativeSymbolRegistry = NATIVE_SYMBOL$3 && !!Symbol['for'] && !!Symbol.keyFor;
  9172. var $$b = _export;
  9173. var getBuiltIn$1 = getBuiltIn$b;
  9174. var hasOwn$3 = hasOwnProperty_1;
  9175. var toString$5 = toString$a;
  9176. var shared$2 = shared$7.exports;
  9177. var NATIVE_SYMBOL_REGISTRY$1 = nativeSymbolRegistry;
  9178. var StringToSymbolRegistry = shared$2('string-to-symbol-registry');
  9179. var SymbolToStringRegistry$1 = shared$2('symbol-to-string-registry');
  9180. // `Symbol.for` method
  9181. // https://tc39.es/ecma262/#sec-symbol.for
  9182. $$b({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY$1 }, {
  9183. 'for': function (key) {
  9184. var string = toString$5(key);
  9185. if (hasOwn$3(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
  9186. var symbol = getBuiltIn$1('Symbol')(string);
  9187. StringToSymbolRegistry[string] = symbol;
  9188. SymbolToStringRegistry$1[symbol] = string;
  9189. return symbol;
  9190. }
  9191. });
  9192. var $$a = _export;
  9193. var hasOwn$2 = hasOwnProperty_1;
  9194. var isSymbol$1 = isSymbol$6;
  9195. var tryToString = tryToString$7;
  9196. var shared$1 = shared$7.exports;
  9197. var NATIVE_SYMBOL_REGISTRY = nativeSymbolRegistry;
  9198. var SymbolToStringRegistry = shared$1('symbol-to-string-registry');
  9199. // `Symbol.keyFor` method
  9200. // https://tc39.es/ecma262/#sec-symbol.keyfor
  9201. $$a({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
  9202. keyFor: function keyFor(sym) {
  9203. if (!isSymbol$1(sym)) throw TypeError(tryToString(sym) + ' is not a symbol');
  9204. if (hasOwn$2(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
  9205. }
  9206. });
  9207. var $$9 = _export;
  9208. var getBuiltIn = getBuiltIn$b;
  9209. var apply$2 = functionApply;
  9210. var call$4 = functionCall;
  9211. var uncurryThis$b = functionUncurryThis;
  9212. var fails$c = fails$H;
  9213. var isArray = isArray$4;
  9214. var isCallable$4 = isCallable$s;
  9215. var isObject$3 = isObject$k;
  9216. var isSymbol = isSymbol$6;
  9217. var arraySlice$1 = arraySlice$7;
  9218. var NATIVE_SYMBOL$2 = nativeSymbol;
  9219. var $stringify = getBuiltIn('JSON', 'stringify');
  9220. var exec$2 = uncurryThis$b(/./.exec);
  9221. var charAt$3 = uncurryThis$b(''.charAt);
  9222. var charCodeAt = uncurryThis$b(''.charCodeAt);
  9223. var replace$3 = uncurryThis$b(''.replace);
  9224. var numberToString = uncurryThis$b(1.0.toString);
  9225. var tester = /[\uD800-\uDFFF]/g;
  9226. var low = /^[\uD800-\uDBFF]$/;
  9227. var hi = /^[\uDC00-\uDFFF]$/;
  9228. var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL$2 || fails$c(function () {
  9229. var symbol = getBuiltIn('Symbol')();
  9230. // MS Edge converts symbol values to JSON as {}
  9231. return $stringify([symbol]) != '[null]'
  9232. // WebKit converts symbol values to JSON as null
  9233. || $stringify({ a: symbol }) != '{}'
  9234. // V8 throws on boxed symbols
  9235. || $stringify(Object(symbol)) != '{}';
  9236. });
  9237. // https://github.com/tc39/proposal-well-formed-stringify
  9238. var ILL_FORMED_UNICODE = fails$c(function () {
  9239. return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
  9240. || $stringify('\uDEAD') !== '"\\udead"';
  9241. });
  9242. var stringifyWithSymbolsFix = function (it, replacer) {
  9243. var args = arraySlice$1(arguments);
  9244. var $replacer = replacer;
  9245. if (!isObject$3(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
  9246. if (!isArray(replacer)) replacer = function (key, value) {
  9247. if (isCallable$4($replacer)) value = call$4($replacer, this, key, value);
  9248. if (!isSymbol(value)) return value;
  9249. };
  9250. args[1] = replacer;
  9251. return apply$2($stringify, null, args);
  9252. };
  9253. var fixIllFormed = function (match, offset, string) {
  9254. var prev = charAt$3(string, offset - 1);
  9255. var next = charAt$3(string, offset + 1);
  9256. if ((exec$2(low, match) && !exec$2(hi, next)) || (exec$2(hi, match) && !exec$2(low, prev))) {
  9257. return '\\u' + numberToString(charCodeAt(match, 0), 16);
  9258. } return match;
  9259. };
  9260. if ($stringify) {
  9261. // `JSON.stringify` method
  9262. // https://tc39.es/ecma262/#sec-json.stringify
  9263. $$9({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {
  9264. // eslint-disable-next-line no-unused-vars -- required for `.length`
  9265. stringify: function stringify(it, replacer, space) {
  9266. var args = arraySlice$1(arguments);
  9267. var result = apply$2(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
  9268. return ILL_FORMED_UNICODE && typeof result == 'string' ? replace$3(result, tester, fixIllFormed) : result;
  9269. }
  9270. });
  9271. }
  9272. var $$8 = _export;
  9273. var NATIVE_SYMBOL$1 = nativeSymbol;
  9274. var fails$b = fails$H;
  9275. var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols;
  9276. var toObject$1 = toObject$d;
  9277. // V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
  9278. // https://bugs.chromium.org/p/v8/issues/detail?id=3443
  9279. var FORCED = !NATIVE_SYMBOL$1 || fails$b(function () { getOwnPropertySymbolsModule.f(1); });
  9280. // `Object.getOwnPropertySymbols` method
  9281. // https://tc39.es/ecma262/#sec-object.getownpropertysymbols
  9282. $$8({ target: 'Object', stat: true, forced: FORCED }, {
  9283. getOwnPropertySymbols: function getOwnPropertySymbols(it) {
  9284. var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  9285. return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject$1(it)) : [];
  9286. }
  9287. });
  9288. var $$7 = _export;
  9289. var DESCRIPTORS$3 = descriptors;
  9290. var global$5 = global$F;
  9291. var uncurryThis$a = functionUncurryThis;
  9292. var hasOwn$1 = hasOwnProperty_1;
  9293. var isCallable$3 = isCallable$s;
  9294. var isPrototypeOf = objectIsPrototypeOf;
  9295. var toString$4 = toString$a;
  9296. var defineProperty$3 = objectDefineProperty.f;
  9297. var copyConstructorProperties = copyConstructorProperties$2;
  9298. var NativeSymbol = global$5.Symbol;
  9299. var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
  9300. if (DESCRIPTORS$3 && isCallable$3(NativeSymbol) && (!('description' in SymbolPrototype) ||
  9301. // Safari 12 bug
  9302. NativeSymbol().description !== undefined
  9303. )) {
  9304. var EmptyStringDescriptionStore = {};
  9305. // wrap Symbol constructor for correct work with undefined description
  9306. var SymbolWrapper = function Symbol() {
  9307. var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString$4(arguments[0]);
  9308. var result = isPrototypeOf(SymbolPrototype, this)
  9309. ? new NativeSymbol(description)
  9310. // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'
  9311. : description === undefined ? NativeSymbol() : NativeSymbol(description);
  9312. if (description === '') EmptyStringDescriptionStore[result] = true;
  9313. return result;
  9314. };
  9315. copyConstructorProperties(SymbolWrapper, NativeSymbol);
  9316. SymbolWrapper.prototype = SymbolPrototype;
  9317. SymbolPrototype.constructor = SymbolWrapper;
  9318. var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
  9319. var symbolToString = uncurryThis$a(SymbolPrototype.toString);
  9320. var symbolValueOf = uncurryThis$a(SymbolPrototype.valueOf);
  9321. var regexp = /^Symbol\((.*)\)[^)]+$/;
  9322. var replace$2 = uncurryThis$a(''.replace);
  9323. var stringSlice$4 = uncurryThis$a(''.slice);
  9324. defineProperty$3(SymbolPrototype, 'description', {
  9325. configurable: true,
  9326. get: function description() {
  9327. var symbol = symbolValueOf(this);
  9328. var string = symbolToString(symbol);
  9329. if (hasOwn$1(EmptyStringDescriptionStore, symbol)) return '';
  9330. var desc = NATIVE_SYMBOL ? stringSlice$4(string, 7, -1) : replace$2(string, regexp, '$1');
  9331. return desc === '' ? undefined : desc;
  9332. }
  9333. });
  9334. $$7({ global: true, constructor: true, forced: true }, {
  9335. Symbol: SymbolWrapper
  9336. });
  9337. }
  9338. var $$6 = _export;
  9339. var iterate$2 = iterate$5;
  9340. var createProperty = createProperty$6;
  9341. // `Object.fromEntries` method
  9342. // https://github.com/tc39/proposal-object-from-entries
  9343. $$6({ target: 'Object', stat: true }, {
  9344. fromEntries: function fromEntries(iterable) {
  9345. var obj = {};
  9346. iterate$2(iterable, function (k, v) {
  9347. createProperty(obj, k, v);
  9348. }, { AS_ENTRIES: true });
  9349. return obj;
  9350. }
  9351. });
  9352. var anObject$3 = anObject$i;
  9353. // `RegExp.prototype.flags` getter implementation
  9354. // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
  9355. var regexpFlags$1 = function () {
  9356. var that = anObject$3(this);
  9357. var result = '';
  9358. if (that.hasIndices) result += 'd';
  9359. if (that.global) result += 'g';
  9360. if (that.ignoreCase) result += 'i';
  9361. if (that.multiline) result += 'm';
  9362. if (that.dotAll) result += 's';
  9363. if (that.unicode) result += 'u';
  9364. if (that.unicodeSets) result += 'v';
  9365. if (that.sticky) result += 'y';
  9366. return result;
  9367. };
  9368. var fails$a = fails$H;
  9369. var global$4 = global$F;
  9370. // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
  9371. var $RegExp$2 = global$4.RegExp;
  9372. var UNSUPPORTED_Y$2 = fails$a(function () {
  9373. var re = $RegExp$2('a', 'y');
  9374. re.lastIndex = 2;
  9375. return re.exec('abcd') != null;
  9376. });
  9377. // UC Browser bug
  9378. // https://github.com/zloirock/core-js/issues/1008
  9379. var MISSED_STICKY = UNSUPPORTED_Y$2 || fails$a(function () {
  9380. return !$RegExp$2('a', 'y').sticky;
  9381. });
  9382. var BROKEN_CARET = UNSUPPORTED_Y$2 || fails$a(function () {
  9383. // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
  9384. var re = $RegExp$2('^r', 'gy');
  9385. re.lastIndex = 2;
  9386. return re.exec('str') != null;
  9387. });
  9388. var regexpStickyHelpers = {
  9389. BROKEN_CARET: BROKEN_CARET,
  9390. MISSED_STICKY: MISSED_STICKY,
  9391. UNSUPPORTED_Y: UNSUPPORTED_Y$2
  9392. };
  9393. var fails$9 = fails$H;
  9394. var global$3 = global$F;
  9395. // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError
  9396. var $RegExp$1 = global$3.RegExp;
  9397. var regexpUnsupportedDotAll = fails$9(function () {
  9398. var re = $RegExp$1('.', 's');
  9399. return !(re.dotAll && re.exec('\n') && re.flags === 's');
  9400. });
  9401. var fails$8 = fails$H;
  9402. var global$2 = global$F;
  9403. // babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError
  9404. var $RegExp = global$2.RegExp;
  9405. var regexpUnsupportedNcg = fails$8(function () {
  9406. var re = $RegExp('(?<a>b)', 'g');
  9407. return re.exec('b').groups.a !== 'b' ||
  9408. 'b'.replace(re, '$<a>c') !== 'bc';
  9409. });
  9410. /* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */
  9411. /* eslint-disable regexp/no-useless-quantifier -- testing */
  9412. var call$3 = functionCall;
  9413. var uncurryThis$9 = functionUncurryThis;
  9414. var toString$3 = toString$a;
  9415. var regexpFlags = regexpFlags$1;
  9416. var stickyHelpers$1 = regexpStickyHelpers;
  9417. var shared = shared$7.exports;
  9418. var create$1 = objectCreate;
  9419. var getInternalState = internalState.get;
  9420. var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll;
  9421. var UNSUPPORTED_NCG = regexpUnsupportedNcg;
  9422. var nativeReplace = shared('native-string-replace', String.prototype.replace);
  9423. var nativeExec = RegExp.prototype.exec;
  9424. var patchedExec = nativeExec;
  9425. var charAt$2 = uncurryThis$9(''.charAt);
  9426. var indexOf = uncurryThis$9(''.indexOf);
  9427. var replace$1 = uncurryThis$9(''.replace);
  9428. var stringSlice$3 = uncurryThis$9(''.slice);
  9429. var UPDATES_LAST_INDEX_WRONG = (function () {
  9430. var re1 = /a/;
  9431. var re2 = /b*/g;
  9432. call$3(nativeExec, re1, 'a');
  9433. call$3(nativeExec, re2, 'a');
  9434. return re1.lastIndex !== 0 || re2.lastIndex !== 0;
  9435. })();
  9436. var UNSUPPORTED_Y$1 = stickyHelpers$1.BROKEN_CARET;
  9437. // nonparticipating capturing group, copied from es5-shim's String#split patch.
  9438. var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
  9439. var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$1 || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;
  9440. if (PATCH) {
  9441. patchedExec = function exec(string) {
  9442. var re = this;
  9443. var state = getInternalState(re);
  9444. var str = toString$3(string);
  9445. var raw = state.raw;
  9446. var result, reCopy, lastIndex, match, i, object, group;
  9447. if (raw) {
  9448. raw.lastIndex = re.lastIndex;
  9449. result = call$3(patchedExec, raw, str);
  9450. re.lastIndex = raw.lastIndex;
  9451. return result;
  9452. }
  9453. var groups = state.groups;
  9454. var sticky = UNSUPPORTED_Y$1 && re.sticky;
  9455. var flags = call$3(regexpFlags, re);
  9456. var source = re.source;
  9457. var charsAdded = 0;
  9458. var strCopy = str;
  9459. if (sticky) {
  9460. flags = replace$1(flags, 'y', '');
  9461. if (indexOf(flags, 'g') === -1) {
  9462. flags += 'g';
  9463. }
  9464. strCopy = stringSlice$3(str, re.lastIndex);
  9465. // Support anchored sticky behavior.
  9466. if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$2(str, re.lastIndex - 1) !== '\n')) {
  9467. source = '(?: ' + source + ')';
  9468. strCopy = ' ' + strCopy;
  9469. charsAdded++;
  9470. }
  9471. // ^(? + rx + ) is needed, in combination with some str slicing, to
  9472. // simulate the 'y' flag.
  9473. reCopy = new RegExp('^(?:' + source + ')', flags);
  9474. }
  9475. if (NPCG_INCLUDED) {
  9476. reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
  9477. }
  9478. if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
  9479. match = call$3(nativeExec, sticky ? reCopy : re, strCopy);
  9480. if (sticky) {
  9481. if (match) {
  9482. match.input = stringSlice$3(match.input, charsAdded);
  9483. match[0] = stringSlice$3(match[0], charsAdded);
  9484. match.index = re.lastIndex;
  9485. re.lastIndex += match[0].length;
  9486. } else re.lastIndex = 0;
  9487. } else if (UPDATES_LAST_INDEX_WRONG && match) {
  9488. re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
  9489. }
  9490. if (NPCG_INCLUDED && match && match.length > 1) {
  9491. // Fix browsers whose `exec` methods don't consistently return `undefined`
  9492. // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
  9493. call$3(nativeReplace, match[0], reCopy, function () {
  9494. for (i = 1; i < arguments.length - 2; i++) {
  9495. if (arguments[i] === undefined) match[i] = undefined;
  9496. }
  9497. });
  9498. }
  9499. if (match && groups) {
  9500. match.groups = object = create$1(null);
  9501. for (i = 0; i < groups.length; i++) {
  9502. group = groups[i];
  9503. object[group[0]] = match[group[1]];
  9504. }
  9505. }
  9506. return match;
  9507. };
  9508. }
  9509. var regexpExec$3 = patchedExec;
  9510. var $$5 = _export;
  9511. var exec$1 = regexpExec$3;
  9512. // `RegExp.prototype.exec` method
  9513. // https://tc39.es/ecma262/#sec-regexp.prototype.exec
  9514. $$5({ target: 'RegExp', proto: true, forced: /./.exec !== exec$1 }, {
  9515. exec: exec$1
  9516. });
  9517. // TODO: Remove from `core-js@4` since it's moved to entry points
  9518. var uncurryThis$8 = functionUncurryThis;
  9519. var defineBuiltIn$1 = defineBuiltIn$f;
  9520. var regexpExec$2 = regexpExec$3;
  9521. var fails$7 = fails$H;
  9522. var wellKnownSymbol$1 = wellKnownSymbol$t;
  9523. var createNonEnumerableProperty = createNonEnumerableProperty$9;
  9524. var SPECIES = wellKnownSymbol$1('species');
  9525. var RegExpPrototype = RegExp.prototype;
  9526. var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) {
  9527. var SYMBOL = wellKnownSymbol$1(KEY);
  9528. var DELEGATES_TO_SYMBOL = !fails$7(function () {
  9529. // String methods call symbol-named RegEp methods
  9530. var O = {};
  9531. O[SYMBOL] = function () { return 7; };
  9532. return ''[KEY](O) != 7;
  9533. });
  9534. var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$7(function () {
  9535. // Symbol-named RegExp methods call .exec
  9536. var execCalled = false;
  9537. var re = /a/;
  9538. if (KEY === 'split') {
  9539. // We can't use real regex here since it causes deoptimization
  9540. // and serious performance degradation in V8
  9541. // https://github.com/zloirock/core-js/issues/306
  9542. re = {};
  9543. // RegExp[@@split] doesn't call the regex's exec method, but first creates
  9544. // a new one. We need to return the patched regex when creating the new one.
  9545. re.constructor = {};
  9546. re.constructor[SPECIES] = function () { return re; };
  9547. re.flags = '';
  9548. re[SYMBOL] = /./[SYMBOL];
  9549. }
  9550. re.exec = function () { execCalled = true; return null; };
  9551. re[SYMBOL]('');
  9552. return !execCalled;
  9553. });
  9554. if (
  9555. !DELEGATES_TO_SYMBOL ||
  9556. !DELEGATES_TO_EXEC ||
  9557. FORCED
  9558. ) {
  9559. var uncurriedNativeRegExpMethod = uncurryThis$8(/./[SYMBOL]);
  9560. var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
  9561. var uncurriedNativeMethod = uncurryThis$8(nativeMethod);
  9562. var $exec = regexp.exec;
  9563. if ($exec === regexpExec$2 || $exec === RegExpPrototype.exec) {
  9564. if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
  9565. // The native String method already delegates to @@method (this
  9566. // polyfilled function), leasing to infinite recursion.
  9567. // We avoid it by directly calling the native @@method method.
  9568. return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };
  9569. }
  9570. return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };
  9571. }
  9572. return { done: false };
  9573. });
  9574. defineBuiltIn$1(String.prototype, KEY, methods[0]);
  9575. defineBuiltIn$1(RegExpPrototype, SYMBOL, methods[1]);
  9576. }
  9577. if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);
  9578. };
  9579. var charAt$1 = stringMultibyte.charAt;
  9580. // `AdvanceStringIndex` abstract operation
  9581. // https://tc39.es/ecma262/#sec-advancestringindex
  9582. var advanceStringIndex$2 = function (S, index, unicode) {
  9583. return index + (unicode ? charAt$1(S, index).length : 1);
  9584. };
  9585. var call$2 = functionCall;
  9586. var anObject$2 = anObject$i;
  9587. var isCallable$2 = isCallable$s;
  9588. var classof$1 = classofRaw$1;
  9589. var regexpExec$1 = regexpExec$3;
  9590. var $TypeError = TypeError;
  9591. // `RegExpExec` abstract operation
  9592. // https://tc39.es/ecma262/#sec-regexpexec
  9593. var regexpExecAbstract = function (R, S) {
  9594. var exec = R.exec;
  9595. if (isCallable$2(exec)) {
  9596. var result = call$2(exec, R, S);
  9597. if (result !== null) anObject$2(result);
  9598. return result;
  9599. }
  9600. if (classof$1(R) === 'RegExp') return call$2(regexpExec$1, R, S);
  9601. throw $TypeError('RegExp#exec called on incompatible receiver');
  9602. };
  9603. var apply$1 = functionApply;
  9604. var call$1 = functionCall;
  9605. var uncurryThis$7 = functionUncurryThis;
  9606. var fixRegExpWellKnownSymbolLogic$1 = fixRegexpWellKnownSymbolLogic;
  9607. var isRegExp = isRegexp;
  9608. var anObject$1 = anObject$i;
  9609. var requireObjectCoercible$2 = requireObjectCoercible$8;
  9610. var speciesConstructor = speciesConstructor$4;
  9611. var advanceStringIndex$1 = advanceStringIndex$2;
  9612. var toLength$2 = toLength$a;
  9613. var toString$2 = toString$a;
  9614. var getMethod$1 = getMethod$5;
  9615. var arraySlice = arraySliceSimple;
  9616. var callRegExpExec = regexpExecAbstract;
  9617. var regexpExec = regexpExec$3;
  9618. var stickyHelpers = regexpStickyHelpers;
  9619. var fails$6 = fails$H;
  9620. var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
  9621. var MAX_UINT32 = 0xFFFFFFFF;
  9622. var min$2 = Math.min;
  9623. var $push = [].push;
  9624. var exec = uncurryThis$7(/./.exec);
  9625. var push$2 = uncurryThis$7($push);
  9626. var stringSlice$2 = uncurryThis$7(''.slice);
  9627. // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
  9628. // Weex JS has frozen built-in prototypes, so use try / catch wrapper
  9629. var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails$6(function () {
  9630. // eslint-disable-next-line regexp/no-empty-group -- required for testing
  9631. var re = /(?:)/;
  9632. var originalExec = re.exec;
  9633. re.exec = function () { return originalExec.apply(this, arguments); };
  9634. var result = 'ab'.split(re);
  9635. return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
  9636. });
  9637. // @@split logic
  9638. fixRegExpWellKnownSymbolLogic$1('split', function (SPLIT, nativeSplit, maybeCallNative) {
  9639. var internalSplit;
  9640. if (
  9641. 'abbc'.split(/(b)*/)[1] == 'c' ||
  9642. // eslint-disable-next-line regexp/no-empty-group -- required for testing
  9643. 'test'.split(/(?:)/, -1).length != 4 ||
  9644. 'ab'.split(/(?:ab)*/).length != 2 ||
  9645. '.'.split(/(.?)(.?)/).length != 4 ||
  9646. // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing
  9647. '.'.split(/()()/).length > 1 ||
  9648. ''.split(/.?/).length
  9649. ) {
  9650. // based on es5-shim implementation, need to rework it
  9651. internalSplit = function (separator, limit) {
  9652. var string = toString$2(requireObjectCoercible$2(this));
  9653. var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
  9654. if (lim === 0) return [];
  9655. if (separator === undefined) return [string];
  9656. // If `separator` is not a regex, use native split
  9657. if (!isRegExp(separator)) {
  9658. return call$1(nativeSplit, string, separator, lim);
  9659. }
  9660. var output = [];
  9661. var flags = (separator.ignoreCase ? 'i' : '') +
  9662. (separator.multiline ? 'm' : '') +
  9663. (separator.unicode ? 'u' : '') +
  9664. (separator.sticky ? 'y' : '');
  9665. var lastLastIndex = 0;
  9666. // Make `global` and avoid `lastIndex` issues by working with a copy
  9667. var separatorCopy = new RegExp(separator.source, flags + 'g');
  9668. var match, lastIndex, lastLength;
  9669. while (match = call$1(regexpExec, separatorCopy, string)) {
  9670. lastIndex = separatorCopy.lastIndex;
  9671. if (lastIndex > lastLastIndex) {
  9672. push$2(output, stringSlice$2(string, lastLastIndex, match.index));
  9673. if (match.length > 1 && match.index < string.length) apply$1($push, output, arraySlice(match, 1));
  9674. lastLength = match[0].length;
  9675. lastLastIndex = lastIndex;
  9676. if (output.length >= lim) break;
  9677. }
  9678. if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
  9679. }
  9680. if (lastLastIndex === string.length) {
  9681. if (lastLength || !exec(separatorCopy, '')) push$2(output, '');
  9682. } else push$2(output, stringSlice$2(string, lastLastIndex));
  9683. return output.length > lim ? arraySlice(output, 0, lim) : output;
  9684. };
  9685. // Chakra, V8
  9686. } else if ('0'.split(undefined, 0).length) {
  9687. internalSplit = function (separator, limit) {
  9688. return separator === undefined && limit === 0 ? [] : call$1(nativeSplit, this, separator, limit);
  9689. };
  9690. } else internalSplit = nativeSplit;
  9691. return [
  9692. // `String.prototype.split` method
  9693. // https://tc39.es/ecma262/#sec-string.prototype.split
  9694. function split(separator, limit) {
  9695. var O = requireObjectCoercible$2(this);
  9696. var splitter = separator == undefined ? undefined : getMethod$1(separator, SPLIT);
  9697. return splitter
  9698. ? call$1(splitter, separator, O, limit)
  9699. : call$1(internalSplit, toString$2(O), separator, limit);
  9700. },
  9701. // `RegExp.prototype[@@split]` method
  9702. // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
  9703. //
  9704. // NOTE: This cannot be properly polyfilled in engines that don't support
  9705. // the 'y' flag.
  9706. function (string, limit) {
  9707. var rx = anObject$1(this);
  9708. var S = toString$2(string);
  9709. var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);
  9710. if (res.done) return res.value;
  9711. var C = speciesConstructor(rx, RegExp);
  9712. var unicodeMatching = rx.unicode;
  9713. var flags = (rx.ignoreCase ? 'i' : '') +
  9714. (rx.multiline ? 'm' : '') +
  9715. (rx.unicode ? 'u' : '') +
  9716. (UNSUPPORTED_Y ? 'g' : 'y');
  9717. // ^(? + rx + ) is needed, in combination with some S slicing, to
  9718. // simulate the 'y' flag.
  9719. var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);
  9720. var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
  9721. if (lim === 0) return [];
  9722. if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];
  9723. var p = 0;
  9724. var q = 0;
  9725. var A = [];
  9726. while (q < S.length) {
  9727. splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
  9728. var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice$2(S, q) : S);
  9729. var e;
  9730. if (
  9731. z === null ||
  9732. (e = min$2(toLength$2(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p
  9733. ) {
  9734. q = advanceStringIndex$1(S, q, unicodeMatching);
  9735. } else {
  9736. push$2(A, stringSlice$2(S, p, q));
  9737. if (A.length === lim) return A;
  9738. for (var i = 1; i <= z.length - 1; i++) {
  9739. push$2(A, z[i]);
  9740. if (A.length === lim) return A;
  9741. }
  9742. q = p = e;
  9743. }
  9744. }
  9745. push$2(A, stringSlice$2(S, p));
  9746. return A;
  9747. }
  9748. ];
  9749. }, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);
  9750. var PROPER_FUNCTION_NAME = functionName.PROPER;
  9751. var fails$5 = fails$H;
  9752. var whitespaces = whitespaces$2;
  9753. var non = '\u200B\u0085\u180E';
  9754. // check that a method works with the correct list
  9755. // of whitespaces and has a correct name
  9756. var stringTrimForced = function (METHOD_NAME) {
  9757. return fails$5(function () {
  9758. return !!whitespaces[METHOD_NAME]()
  9759. || non[METHOD_NAME]() !== non
  9760. || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);
  9761. });
  9762. };
  9763. var $$4 = _export;
  9764. var $trim = stringTrim.trim;
  9765. var forcedStringTrimMethod = stringTrimForced;
  9766. // `String.prototype.trim` method
  9767. // https://tc39.es/ecma262/#sec-string.prototype.trim
  9768. $$4({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
  9769. trim: function trim() {
  9770. return $trim(this);
  9771. }
  9772. });
  9773. var uncurryThis$6 = functionUncurryThis;
  9774. var toObject = toObject$d;
  9775. var floor = Math.floor;
  9776. var charAt = uncurryThis$6(''.charAt);
  9777. var replace = uncurryThis$6(''.replace);
  9778. var stringSlice$1 = uncurryThis$6(''.slice);
  9779. var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
  9780. var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
  9781. // `GetSubstitution` abstract operation
  9782. // https://tc39.es/ecma262/#sec-getsubstitution
  9783. var getSubstitution$1 = function (matched, str, position, captures, namedCaptures, replacement) {
  9784. var tailPos = position + matched.length;
  9785. var m = captures.length;
  9786. var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
  9787. if (namedCaptures !== undefined) {
  9788. namedCaptures = toObject(namedCaptures);
  9789. symbols = SUBSTITUTION_SYMBOLS;
  9790. }
  9791. return replace(replacement, symbols, function (match, ch) {
  9792. var capture;
  9793. switch (charAt(ch, 0)) {
  9794. case '$': return '$';
  9795. case '&': return matched;
  9796. case '`': return stringSlice$1(str, 0, position);
  9797. case "'": return stringSlice$1(str, tailPos);
  9798. case '<':
  9799. capture = namedCaptures[stringSlice$1(ch, 1, -1)];
  9800. break;
  9801. default: // \d\d?
  9802. var n = +ch;
  9803. if (n === 0) return match;
  9804. if (n > m) {
  9805. var f = floor(n / 10);
  9806. if (f === 0) return match;
  9807. if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);
  9808. return match;
  9809. }
  9810. capture = captures[n - 1];
  9811. }
  9812. return capture === undefined ? '' : capture;
  9813. });
  9814. };
  9815. var apply = functionApply;
  9816. var call = functionCall;
  9817. var uncurryThis$5 = functionUncurryThis;
  9818. var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic;
  9819. var fails$4 = fails$H;
  9820. var anObject = anObject$i;
  9821. var isCallable$1 = isCallable$s;
  9822. var toIntegerOrInfinity = toIntegerOrInfinity$9;
  9823. var toLength$1 = toLength$a;
  9824. var toString$1 = toString$a;
  9825. var requireObjectCoercible$1 = requireObjectCoercible$8;
  9826. var advanceStringIndex = advanceStringIndex$2;
  9827. var getMethod = getMethod$5;
  9828. var getSubstitution = getSubstitution$1;
  9829. var regExpExec$1 = regexpExecAbstract;
  9830. var wellKnownSymbol = wellKnownSymbol$t;
  9831. var REPLACE = wellKnownSymbol('replace');
  9832. var max = Math.max;
  9833. var min$1 = Math.min;
  9834. var concat = uncurryThis$5([].concat);
  9835. var push$1 = uncurryThis$5([].push);
  9836. var stringIndexOf = uncurryThis$5(''.indexOf);
  9837. var stringSlice = uncurryThis$5(''.slice);
  9838. var maybeToString = function (it) {
  9839. return it === undefined ? it : String(it);
  9840. };
  9841. // IE <= 11 replaces $0 with the whole match, as if it was $&
  9842. // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
  9843. var REPLACE_KEEPS_$0 = (function () {
  9844. // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing
  9845. return 'a'.replace(/./, '$0') === '$0';
  9846. })();
  9847. // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
  9848. var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
  9849. if (/./[REPLACE]) {
  9850. return /./[REPLACE]('a', '$0') === '';
  9851. }
  9852. return false;
  9853. })();
  9854. var REPLACE_SUPPORTS_NAMED_GROUPS = !fails$4(function () {
  9855. var re = /./;
  9856. re.exec = function () {
  9857. var result = [];
  9858. result.groups = { a: '7' };
  9859. return result;
  9860. };
  9861. // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive
  9862. return ''.replace(re, '$<a>') !== '7';
  9863. });
  9864. // @@replace logic
  9865. fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {
  9866. var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';
  9867. return [
  9868. // `String.prototype.replace` method
  9869. // https://tc39.es/ecma262/#sec-string.prototype.replace
  9870. function replace(searchValue, replaceValue) {
  9871. var O = requireObjectCoercible$1(this);
  9872. var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);
  9873. return replacer
  9874. ? call(replacer, searchValue, O, replaceValue)
  9875. : call(nativeReplace, toString$1(O), searchValue, replaceValue);
  9876. },
  9877. // `RegExp.prototype[@@replace]` method
  9878. // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
  9879. function (string, replaceValue) {
  9880. var rx = anObject(this);
  9881. var S = toString$1(string);
  9882. if (
  9883. typeof replaceValue == 'string' &&
  9884. stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&
  9885. stringIndexOf(replaceValue, '$<') === -1
  9886. ) {
  9887. var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
  9888. if (res.done) return res.value;
  9889. }
  9890. var functionalReplace = isCallable$1(replaceValue);
  9891. if (!functionalReplace) replaceValue = toString$1(replaceValue);
  9892. var global = rx.global;
  9893. if (global) {
  9894. var fullUnicode = rx.unicode;
  9895. rx.lastIndex = 0;
  9896. }
  9897. var results = [];
  9898. while (true) {
  9899. var result = regExpExec$1(rx, S);
  9900. if (result === null) break;
  9901. push$1(results, result);
  9902. if (!global) break;
  9903. var matchStr = toString$1(result[0]);
  9904. if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength$1(rx.lastIndex), fullUnicode);
  9905. }
  9906. var accumulatedResult = '';
  9907. var nextSourcePosition = 0;
  9908. for (var i = 0; i < results.length; i++) {
  9909. result = results[i];
  9910. var matched = toString$1(result[0]);
  9911. var position = max(min$1(toIntegerOrInfinity(result.index), S.length), 0);
  9912. var captures = [];
  9913. // NOTE: This is equivalent to
  9914. // captures = result.slice(1).map(maybeToString)
  9915. // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
  9916. // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
  9917. // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
  9918. for (var j = 1; j < result.length; j++) push$1(captures, maybeToString(result[j]));
  9919. var namedCaptures = result.groups;
  9920. if (functionalReplace) {
  9921. var replacerArgs = concat([matched], captures, position, S);
  9922. if (namedCaptures !== undefined) push$1(replacerArgs, namedCaptures);
  9923. var replacement = toString$1(apply(replaceValue, undefined, replacerArgs));
  9924. } else {
  9925. replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
  9926. }
  9927. if (position >= nextSourcePosition) {
  9928. accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
  9929. nextSourcePosition = position + matched.length;
  9930. }
  9931. }
  9932. return accumulatedResult + stringSlice(S, nextSourcePosition);
  9933. }
  9934. ];
  9935. }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
  9936. var internalMetadata = {exports: {}};
  9937. // FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it
  9938. var fails$3 = fails$H;
  9939. var arrayBufferNonExtensible = fails$3(function () {
  9940. if (typeof ArrayBuffer == 'function') {
  9941. var buffer = new ArrayBuffer(8);
  9942. // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-defineproperty -- safe
  9943. if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });
  9944. }
  9945. });
  9946. var fails$2 = fails$H;
  9947. var isObject$2 = isObject$k;
  9948. var classof = classofRaw$1;
  9949. var ARRAY_BUFFER_NON_EXTENSIBLE = arrayBufferNonExtensible;
  9950. // eslint-disable-next-line es-x/no-object-isextensible -- safe
  9951. var $isExtensible = Object.isExtensible;
  9952. var FAILS_ON_PRIMITIVES = fails$2(function () { $isExtensible(1); });
  9953. // `Object.isExtensible` method
  9954. // https://tc39.es/ecma262/#sec-object.isextensible
  9955. var objectIsExtensible = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {
  9956. if (!isObject$2(it)) return false;
  9957. if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;
  9958. return $isExtensible ? $isExtensible(it) : true;
  9959. } : $isExtensible;
  9960. var fails$1 = fails$H;
  9961. var freezing = !fails$1(function () {
  9962. // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-preventextensions -- required for testing
  9963. return Object.isExtensible(Object.preventExtensions({}));
  9964. });
  9965. var $$3 = _export;
  9966. var uncurryThis$4 = functionUncurryThis;
  9967. var hiddenKeys = hiddenKeys$6;
  9968. var isObject$1 = isObject$k;
  9969. var hasOwn = hasOwnProperty_1;
  9970. var defineProperty$2 = objectDefineProperty.f;
  9971. var getOwnPropertyNamesModule = objectGetOwnPropertyNames;
  9972. var getOwnPropertyNamesExternalModule = objectGetOwnPropertyNamesExternal;
  9973. var isExtensible = objectIsExtensible;
  9974. var uid = uid$5;
  9975. var FREEZING = freezing;
  9976. var REQUIRED = false;
  9977. var METADATA = uid('meta');
  9978. var id = 0;
  9979. var setMetadata = function (it) {
  9980. defineProperty$2(it, METADATA, { value: {
  9981. objectID: 'O' + id++, // object ID
  9982. weakData: {} // weak collections IDs
  9983. } });
  9984. };
  9985. var fastKey$1 = function (it, create) {
  9986. // return a primitive with prefix
  9987. if (!isObject$1(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
  9988. if (!hasOwn(it, METADATA)) {
  9989. // can't set metadata to uncaught frozen object
  9990. if (!isExtensible(it)) return 'F';
  9991. // not necessary to add metadata
  9992. if (!create) return 'E';
  9993. // add missing metadata
  9994. setMetadata(it);
  9995. // return object ID
  9996. } return it[METADATA].objectID;
  9997. };
  9998. var getWeakData = function (it, create) {
  9999. if (!hasOwn(it, METADATA)) {
  10000. // can't set metadata to uncaught frozen object
  10001. if (!isExtensible(it)) return true;
  10002. // not necessary to add metadata
  10003. if (!create) return false;
  10004. // add missing metadata
  10005. setMetadata(it);
  10006. // return the store of weak collections IDs
  10007. } return it[METADATA].weakData;
  10008. };
  10009. // add metadata on freeze-family methods calling
  10010. var onFreeze = function (it) {
  10011. if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
  10012. return it;
  10013. };
  10014. var enable = function () {
  10015. meta.enable = function () { /* empty */ };
  10016. REQUIRED = true;
  10017. var getOwnPropertyNames = getOwnPropertyNamesModule.f;
  10018. var splice = uncurryThis$4([].splice);
  10019. var test = {};
  10020. test[METADATA] = 1;
  10021. // prevent exposing of metadata key
  10022. if (getOwnPropertyNames(test).length) {
  10023. getOwnPropertyNamesModule.f = function (it) {
  10024. var result = getOwnPropertyNames(it);
  10025. for (var i = 0, length = result.length; i < length; i++) {
  10026. if (result[i] === METADATA) {
  10027. splice(result, i, 1);
  10028. break;
  10029. }
  10030. } return result;
  10031. };
  10032. $$3({ target: 'Object', stat: true, forced: true }, {
  10033. getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
  10034. });
  10035. }
  10036. };
  10037. var meta = internalMetadata.exports = {
  10038. enable: enable,
  10039. fastKey: fastKey$1,
  10040. getWeakData: getWeakData,
  10041. onFreeze: onFreeze
  10042. };
  10043. hiddenKeys[METADATA] = true;
  10044. var $$2 = _export;
  10045. var global$1 = global$F;
  10046. var uncurryThis$3 = functionUncurryThis;
  10047. var isForced = isForced_1;
  10048. var defineBuiltIn = defineBuiltIn$f;
  10049. var InternalMetadataModule = internalMetadata.exports;
  10050. var iterate$1 = iterate$5;
  10051. var anInstance$1 = anInstance$7;
  10052. var isCallable = isCallable$s;
  10053. var isObject = isObject$k;
  10054. var fails = fails$H;
  10055. var checkCorrectnessOfIteration = checkCorrectnessOfIteration$4;
  10056. var setToStringTag = setToStringTag$8;
  10057. var inheritIfRequired = inheritIfRequired$3;
  10058. var collection$2 = function (CONSTRUCTOR_NAME, wrapper, common) {
  10059. var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
  10060. var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
  10061. var ADDER = IS_MAP ? 'set' : 'add';
  10062. var NativeConstructor = global$1[CONSTRUCTOR_NAME];
  10063. var NativePrototype = NativeConstructor && NativeConstructor.prototype;
  10064. var Constructor = NativeConstructor;
  10065. var exported = {};
  10066. var fixMethod = function (KEY) {
  10067. var uncurriedNativeMethod = uncurryThis$3(NativePrototype[KEY]);
  10068. defineBuiltIn(NativePrototype, KEY,
  10069. KEY == 'add' ? function add(value) {
  10070. uncurriedNativeMethod(this, value === 0 ? 0 : value);
  10071. return this;
  10072. } : KEY == 'delete' ? function (key) {
  10073. return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
  10074. } : KEY == 'get' ? function get(key) {
  10075. return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);
  10076. } : KEY == 'has' ? function has(key) {
  10077. return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
  10078. } : function set(key, value) {
  10079. uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
  10080. return this;
  10081. }
  10082. );
  10083. };
  10084. var REPLACE = isForced(
  10085. CONSTRUCTOR_NAME,
  10086. !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {
  10087. new NativeConstructor().entries().next();
  10088. }))
  10089. );
  10090. if (REPLACE) {
  10091. // create collection constructor
  10092. Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
  10093. InternalMetadataModule.enable();
  10094. } else if (isForced(CONSTRUCTOR_NAME, true)) {
  10095. var instance = new Constructor();
  10096. // early implementations not supports chaining
  10097. var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
  10098. // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
  10099. var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });
  10100. // most early implementations doesn't supports iterables, most modern - not close it correctly
  10101. // eslint-disable-next-line no-new -- required for testing
  10102. var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });
  10103. // for early implementations -0 and +0 not the same
  10104. var BUGGY_ZERO = !IS_WEAK && fails(function () {
  10105. // V8 ~ Chromium 42- fails only with 5+ elements
  10106. var $instance = new NativeConstructor();
  10107. var index = 5;
  10108. while (index--) $instance[ADDER](index, index);
  10109. return !$instance.has(-0);
  10110. });
  10111. if (!ACCEPT_ITERABLES) {
  10112. Constructor = wrapper(function (dummy, iterable) {
  10113. anInstance$1(dummy, NativePrototype);
  10114. var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
  10115. if (iterable != undefined) iterate$1(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
  10116. return that;
  10117. });
  10118. Constructor.prototype = NativePrototype;
  10119. NativePrototype.constructor = Constructor;
  10120. }
  10121. if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
  10122. fixMethod('delete');
  10123. fixMethod('has');
  10124. IS_MAP && fixMethod('get');
  10125. }
  10126. if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
  10127. // weak collections should not contains .clear method
  10128. if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;
  10129. }
  10130. exported[CONSTRUCTOR_NAME] = Constructor;
  10131. $$2({ global: true, constructor: true, forced: Constructor != NativeConstructor }, exported);
  10132. setToStringTag(Constructor, CONSTRUCTOR_NAME);
  10133. if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
  10134. return Constructor;
  10135. };
  10136. var defineProperty$1 = objectDefineProperty.f;
  10137. var create = objectCreate;
  10138. var defineBuiltIns = defineBuiltIns$3;
  10139. var bind = functionBindContext;
  10140. var anInstance = anInstance$7;
  10141. var iterate = iterate$5;
  10142. var defineIterator = defineIterator$3;
  10143. var setSpecies = setSpecies$4;
  10144. var DESCRIPTORS$2 = descriptors;
  10145. var fastKey = internalMetadata.exports.fastKey;
  10146. var InternalStateModule = internalState;
  10147. var setInternalState = InternalStateModule.set;
  10148. var internalStateGetterFor = InternalStateModule.getterFor;
  10149. var collectionStrong$2 = {
  10150. getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
  10151. var Constructor = wrapper(function (that, iterable) {
  10152. anInstance(that, Prototype);
  10153. setInternalState(that, {
  10154. type: CONSTRUCTOR_NAME,
  10155. index: create(null),
  10156. first: undefined,
  10157. last: undefined,
  10158. size: 0
  10159. });
  10160. if (!DESCRIPTORS$2) that.size = 0;
  10161. if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
  10162. });
  10163. var Prototype = Constructor.prototype;
  10164. var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
  10165. var define = function (that, key, value) {
  10166. var state = getInternalState(that);
  10167. var entry = getEntry(that, key);
  10168. var previous, index;
  10169. // change existing entry
  10170. if (entry) {
  10171. entry.value = value;
  10172. // create new entry
  10173. } else {
  10174. state.last = entry = {
  10175. index: index = fastKey(key, true),
  10176. key: key,
  10177. value: value,
  10178. previous: previous = state.last,
  10179. next: undefined,
  10180. removed: false
  10181. };
  10182. if (!state.first) state.first = entry;
  10183. if (previous) previous.next = entry;
  10184. if (DESCRIPTORS$2) state.size++;
  10185. else that.size++;
  10186. // add to index
  10187. if (index !== 'F') state.index[index] = entry;
  10188. } return that;
  10189. };
  10190. var getEntry = function (that, key) {
  10191. var state = getInternalState(that);
  10192. // fast case
  10193. var index = fastKey(key);
  10194. var entry;
  10195. if (index !== 'F') return state.index[index];
  10196. // frozen object case
  10197. for (entry = state.first; entry; entry = entry.next) {
  10198. if (entry.key == key) return entry;
  10199. }
  10200. };
  10201. defineBuiltIns(Prototype, {
  10202. // `{ Map, Set }.prototype.clear()` methods
  10203. // https://tc39.es/ecma262/#sec-map.prototype.clear
  10204. // https://tc39.es/ecma262/#sec-set.prototype.clear
  10205. clear: function clear() {
  10206. var that = this;
  10207. var state = getInternalState(that);
  10208. var data = state.index;
  10209. var entry = state.first;
  10210. while (entry) {
  10211. entry.removed = true;
  10212. if (entry.previous) entry.previous = entry.previous.next = undefined;
  10213. delete data[entry.index];
  10214. entry = entry.next;
  10215. }
  10216. state.first = state.last = undefined;
  10217. if (DESCRIPTORS$2) state.size = 0;
  10218. else that.size = 0;
  10219. },
  10220. // `{ Map, Set }.prototype.delete(key)` methods
  10221. // https://tc39.es/ecma262/#sec-map.prototype.delete
  10222. // https://tc39.es/ecma262/#sec-set.prototype.delete
  10223. 'delete': function (key) {
  10224. var that = this;
  10225. var state = getInternalState(that);
  10226. var entry = getEntry(that, key);
  10227. if (entry) {
  10228. var next = entry.next;
  10229. var prev = entry.previous;
  10230. delete state.index[entry.index];
  10231. entry.removed = true;
  10232. if (prev) prev.next = next;
  10233. if (next) next.previous = prev;
  10234. if (state.first == entry) state.first = next;
  10235. if (state.last == entry) state.last = prev;
  10236. if (DESCRIPTORS$2) state.size--;
  10237. else that.size--;
  10238. } return !!entry;
  10239. },
  10240. // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods
  10241. // https://tc39.es/ecma262/#sec-map.prototype.foreach
  10242. // https://tc39.es/ecma262/#sec-set.prototype.foreach
  10243. forEach: function forEach(callbackfn /* , that = undefined */) {
  10244. var state = getInternalState(this);
  10245. var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  10246. var entry;
  10247. while (entry = entry ? entry.next : state.first) {
  10248. boundFunction(entry.value, entry.key, this);
  10249. // revert to the last existing entry
  10250. while (entry && entry.removed) entry = entry.previous;
  10251. }
  10252. },
  10253. // `{ Map, Set}.prototype.has(key)` methods
  10254. // https://tc39.es/ecma262/#sec-map.prototype.has
  10255. // https://tc39.es/ecma262/#sec-set.prototype.has
  10256. has: function has(key) {
  10257. return !!getEntry(this, key);
  10258. }
  10259. });
  10260. defineBuiltIns(Prototype, IS_MAP ? {
  10261. // `Map.prototype.get(key)` method
  10262. // https://tc39.es/ecma262/#sec-map.prototype.get
  10263. get: function get(key) {
  10264. var entry = getEntry(this, key);
  10265. return entry && entry.value;
  10266. },
  10267. // `Map.prototype.set(key, value)` method
  10268. // https://tc39.es/ecma262/#sec-map.prototype.set
  10269. set: function set(key, value) {
  10270. return define(this, key === 0 ? 0 : key, value);
  10271. }
  10272. } : {
  10273. // `Set.prototype.add(value)` method
  10274. // https://tc39.es/ecma262/#sec-set.prototype.add
  10275. add: function add(value) {
  10276. return define(this, value = value === 0 ? 0 : value, value);
  10277. }
  10278. });
  10279. if (DESCRIPTORS$2) defineProperty$1(Prototype, 'size', {
  10280. get: function () {
  10281. return getInternalState(this).size;
  10282. }
  10283. });
  10284. return Constructor;
  10285. },
  10286. setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {
  10287. var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';
  10288. var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
  10289. var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
  10290. // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods
  10291. // https://tc39.es/ecma262/#sec-map.prototype.entries
  10292. // https://tc39.es/ecma262/#sec-map.prototype.keys
  10293. // https://tc39.es/ecma262/#sec-map.prototype.values
  10294. // https://tc39.es/ecma262/#sec-map.prototype-@@iterator
  10295. // https://tc39.es/ecma262/#sec-set.prototype.entries
  10296. // https://tc39.es/ecma262/#sec-set.prototype.keys
  10297. // https://tc39.es/ecma262/#sec-set.prototype.values
  10298. // https://tc39.es/ecma262/#sec-set.prototype-@@iterator
  10299. defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {
  10300. setInternalState(this, {
  10301. type: ITERATOR_NAME,
  10302. target: iterated,
  10303. state: getInternalCollectionState(iterated),
  10304. kind: kind,
  10305. last: undefined
  10306. });
  10307. }, function () {
  10308. var state = getInternalIteratorState(this);
  10309. var kind = state.kind;
  10310. var entry = state.last;
  10311. // revert to the last existing entry
  10312. while (entry && entry.removed) entry = entry.previous;
  10313. // get next entry
  10314. if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
  10315. // or finish the iteration
  10316. state.target = undefined;
  10317. return { value: undefined, done: true };
  10318. }
  10319. // return step by kind
  10320. if (kind == 'keys') return { value: entry.key, done: false };
  10321. if (kind == 'values') return { value: entry.value, done: false };
  10322. return { value: [entry.key, entry.value], done: false };
  10323. }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
  10324. // `{ Map, Set }.prototype[@@species]` accessors
  10325. // https://tc39.es/ecma262/#sec-get-map-@@species
  10326. // https://tc39.es/ecma262/#sec-get-set-@@species
  10327. setSpecies(CONSTRUCTOR_NAME);
  10328. }
  10329. };
  10330. var collection$1 = collection$2;
  10331. var collectionStrong$1 = collectionStrong$2;
  10332. // `Map` constructor
  10333. // https://tc39.es/ecma262/#sec-map-objects
  10334. collection$1('Map', function (init) {
  10335. return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };
  10336. }, collectionStrong$1);
  10337. var DESCRIPTORS$1 = descriptors;
  10338. var uncurryThis$2 = functionUncurryThis;
  10339. var objectKeys = objectKeys$4;
  10340. var toIndexedObject = toIndexedObject$b;
  10341. var $propertyIsEnumerable = objectPropertyIsEnumerable.f;
  10342. var propertyIsEnumerable = uncurryThis$2($propertyIsEnumerable);
  10343. var push = uncurryThis$2([].push);
  10344. // `Object.{ entries, values }` methods implementation
  10345. var createMethod = function (TO_ENTRIES) {
  10346. return function (it) {
  10347. var O = toIndexedObject(it);
  10348. var keys = objectKeys(O);
  10349. var length = keys.length;
  10350. var i = 0;
  10351. var result = [];
  10352. var key;
  10353. while (length > i) {
  10354. key = keys[i++];
  10355. if (!DESCRIPTORS$1 || propertyIsEnumerable(O, key)) {
  10356. push(result, TO_ENTRIES ? [key, O[key]] : O[key]);
  10357. }
  10358. }
  10359. return result;
  10360. };
  10361. };
  10362. var objectToArray = {
  10363. // `Object.entries` method
  10364. // https://tc39.es/ecma262/#sec-object.entries
  10365. entries: createMethod(true),
  10366. // `Object.values` method
  10367. // https://tc39.es/ecma262/#sec-object.values
  10368. values: createMethod(false)
  10369. };
  10370. var $$1 = _export;
  10371. var $entries = objectToArray.entries;
  10372. // `Object.entries` method
  10373. // https://tc39.es/ecma262/#sec-object.entries
  10374. $$1({ target: 'Object', stat: true }, {
  10375. entries: function entries(O) {
  10376. return $entries(O);
  10377. }
  10378. });
  10379. var sendFetchRequest = _async(function (method, _ref2, headers) {
  10380. var options = _ref2.options,
  10381. url = _ref2.url;
  10382. return _await(fetch(url, Object.assign({}, options, {
  10383. method: method,
  10384. headers: headers
  10385. })), function (response) {
  10386. if (response.status < 400) {
  10387. return response;
  10388. } else {
  10389. throw new Error(ERR_HTTP_STATUS + (response.statusText || response.status));
  10390. }
  10391. });
  10392. });
  10393. var getContentLength = _async(function (httpReader, sendRequest, getRequestData) {
  10394. return _invokeIgnored(function () {
  10395. if (httpReader.preventHeadRequest) {
  10396. return _awaitIgnored(getRequestData(httpReader, httpReader.options));
  10397. } else {
  10398. return _await(sendRequest(HTTP_METHOD_HEAD, httpReader, getHeaders(httpReader)), function (response) {
  10399. var contentLength = response.headers.get(HTTP_HEADER_CONTENT_LENGTH);
  10400. return _invokeIgnored(function () {
  10401. if (contentLength) {
  10402. httpReader.size = Number(contentLength);
  10403. } else {
  10404. return _awaitIgnored(getRequestData(httpReader, httpReader.options));
  10405. }
  10406. });
  10407. });
  10408. }
  10409. });
  10410. });
  10411. var getRequestData = _async(function (httpReader, sendRequest) {
  10412. return _await(sendRequest(HTTP_METHOD_GET, httpReader, getHeaders(httpReader)), function (response) {
  10413. return _await(response.arrayBuffer(), function (_response$arrayBuffer2) {
  10414. httpReader.data = new Uint8Array(_response$arrayBuffer2);
  10415. if (!httpReader.size) {
  10416. httpReader.size = httpReader.data.length;
  10417. }
  10418. });
  10419. });
  10420. });
  10421. var getXMLHttpRequestData = _async(function (httpReader) {
  10422. return _awaitIgnored(getRequestData(httpReader, sendXMLHttpRequest));
  10423. });
  10424. var getFetchRequestData = _async(function (httpReader) {
  10425. return _awaitIgnored(getRequestData(httpReader, sendFetchRequest));
  10426. });
  10427. var readUint8ArrayHttpReader = _async(function (httpReader, index, length, sendRequest, getRequestData) {
  10428. if (httpReader.useRangeHeader || httpReader.forceRangeRequests) {
  10429. return _await(sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, index, length)), function (response) {
  10430. if (response.status != 206) {
  10431. throw new Error(ERR_HTTP_RANGE);
  10432. }
  10433. return _await(response.arrayBuffer(), function (_response$arrayBuffer) {
  10434. return new Uint8Array(_response$arrayBuffer);
  10435. });
  10436. });
  10437. } else {
  10438. return _invoke(function () {
  10439. if (!httpReader.data) {
  10440. return _awaitIgnored(getRequestData(httpReader, httpReader.options));
  10441. }
  10442. }, function () {
  10443. return new Uint8Array(httpReader.data.subarray(index, index + length));
  10444. });
  10445. }
  10446. });
  10447. var initHttpReader = _async(function (httpReader, sendRequest, getRequestData) {
  10448. return function () {
  10449. if (isHttpFamily(httpReader.url) && (httpReader.useRangeHeader || httpReader.forceRangeRequests)) {
  10450. return _await(sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader)), function (response) {
  10451. return function () {
  10452. if (!httpReader.forceRangeRequests && response.headers.get(HTTP_HEADER_ACCEPT_RANGES) != HTTP_RANGE_UNIT) {
  10453. throw new Error(ERR_HTTP_RANGE);
  10454. } else {
  10455. var contentSize;
  10456. var contentRangeHeader = response.headers.get(HTTP_HEADER_CONTENT_RANGE);
  10457. if (contentRangeHeader) {
  10458. var splitHeader = contentRangeHeader.trim().split(/\s*\/\s*/);
  10459. if (splitHeader.length) {
  10460. var headerValue = splitHeader[1];
  10461. if (headerValue && headerValue != "*") {
  10462. contentSize = Number(headerValue);
  10463. }
  10464. }
  10465. }
  10466. return _invokeIgnored(function () {
  10467. if (contentSize === undefined) {
  10468. return _awaitIgnored(getContentLength(httpReader, sendRequest, getRequestData));
  10469. } else {
  10470. httpReader.size = contentSize;
  10471. }
  10472. });
  10473. }
  10474. }();
  10475. });
  10476. } else {
  10477. return _awaitIgnored(getContentLength(httpReader, sendRequest, getRequestData));
  10478. }
  10479. }();
  10480. });
  10481. /*
  10482. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  10483. Redistribution and use in source and binary forms, with or without
  10484. modification, are permitted provided that the following conditions are met:
  10485. 1. Redistributions of source code must retain the above copyright notice,
  10486. this list of conditions and the following disclaimer.
  10487. 2. Redistributions in binary form must reproduce the above copyright
  10488. notice, this list of conditions and the following disclaimer in
  10489. the documentation and/or other materials provided with the distribution.
  10490. 3. The names of the authors may not be used to endorse or promote products
  10491. derived from this software without specific prior written permission.
  10492. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  10493. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  10494. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  10495. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  10496. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  10497. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  10498. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  10499. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  10500. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  10501. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  10502. */
  10503. /* global Blob, FileReader, atob, btoa, XMLHttpRequest, document, fetch */
  10504. var ERR_HTTP_STATUS = "HTTP error ";
  10505. var ERR_HTTP_RANGE = "HTTP Range not supported";
  10506. var ERR_NOT_SEEKABLE_READER = "Reader is not seekable";
  10507. var CONTENT_TYPE_TEXT_PLAIN = "text/plain";
  10508. var HTTP_HEADER_CONTENT_LENGTH = "Content-Length";
  10509. var HTTP_HEADER_CONTENT_RANGE = "Content-Range";
  10510. var HTTP_HEADER_ACCEPT_RANGES = "Accept-Ranges";
  10511. var HTTP_HEADER_RANGE = "Range";
  10512. var HTTP_METHOD_HEAD = "HEAD";
  10513. var HTTP_METHOD_GET = "GET";
  10514. var HTTP_RANGE_UNIT = "bytes";
  10515. var Stream = /*#__PURE__*/function () {
  10516. function Stream() {
  10517. _classCallCheck(this, Stream);
  10518. this.size = 0;
  10519. }
  10520. _createClass(Stream, [{
  10521. key: "init",
  10522. value: function init() {
  10523. this.initialized = true;
  10524. }
  10525. }]);
  10526. return Stream;
  10527. }();
  10528. var Reader = /*#__PURE__*/function (_Stream) {
  10529. _inherits(Reader, _Stream);
  10530. var _super = _createSuper(Reader);
  10531. function Reader() {
  10532. _classCallCheck(this, Reader);
  10533. return _super.apply(this, arguments);
  10534. }
  10535. return _createClass(Reader);
  10536. }(Stream);
  10537. var Writer = /*#__PURE__*/function (_Stream2) {
  10538. _inherits(Writer, _Stream2);
  10539. var _super2 = _createSuper(Writer);
  10540. function Writer() {
  10541. _classCallCheck(this, Writer);
  10542. return _super2.apply(this, arguments);
  10543. }
  10544. _createClass(Writer, [{
  10545. key: "writeUint8Array",
  10546. value: function writeUint8Array(array) {
  10547. this.size += array.length;
  10548. }
  10549. }]);
  10550. return Writer;
  10551. }(Stream);
  10552. var TextReader = /*#__PURE__*/function (_Reader) {
  10553. _inherits(TextReader, _Reader);
  10554. var _super3 = _createSuper(TextReader);
  10555. function TextReader(text) {
  10556. var _this;
  10557. _classCallCheck(this, TextReader);
  10558. _this = _super3.call(this);
  10559. _this.blobReader = new BlobReader(new Blob([text], {
  10560. type: CONTENT_TYPE_TEXT_PLAIN
  10561. }));
  10562. return _this;
  10563. }
  10564. _createClass(TextReader, [{
  10565. key: "init",
  10566. value: function init() {
  10567. _get(_getPrototypeOf(TextReader.prototype), "init", this).call(this);
  10568. this.blobReader.init();
  10569. this.size = this.blobReader.size;
  10570. }
  10571. }, {
  10572. key: "readUint8Array",
  10573. value: function readUint8Array(offset, length) {
  10574. return this.blobReader.readUint8Array(offset, length);
  10575. }
  10576. }]);
  10577. return TextReader;
  10578. }(Reader);
  10579. var TextWriter = /*#__PURE__*/function (_Writer) {
  10580. _inherits(TextWriter, _Writer);
  10581. var _super4 = _createSuper(TextWriter);
  10582. function TextWriter(encoding) {
  10583. var _this2;
  10584. _classCallCheck(this, TextWriter);
  10585. _this2 = _super4.call(this);
  10586. _this2.encoding = encoding;
  10587. _this2.blob = new Blob([], {
  10588. type: CONTENT_TYPE_TEXT_PLAIN
  10589. });
  10590. return _this2;
  10591. }
  10592. _createClass(TextWriter, [{
  10593. key: "writeUint8Array",
  10594. value: function writeUint8Array(array) {
  10595. _get(_getPrototypeOf(TextWriter.prototype), "writeUint8Array", this).call(this, array);
  10596. this.blob = new Blob([this.blob, array.buffer], {
  10597. type: CONTENT_TYPE_TEXT_PLAIN
  10598. });
  10599. }
  10600. }, {
  10601. key: "getData",
  10602. value: function getData() {
  10603. var _this3 = this;
  10604. if (this.blob.text) {
  10605. return this.blob.text();
  10606. } else {
  10607. var reader = new FileReader();
  10608. return new Promise(function (resolve, reject) {
  10609. reader.onload = function (event) {
  10610. return resolve(event.target.result);
  10611. };
  10612. reader.onerror = function () {
  10613. return reject(reader.error);
  10614. };
  10615. reader.readAsText(_this3.blob, _this3.encoding);
  10616. });
  10617. }
  10618. }
  10619. }]);
  10620. return TextWriter;
  10621. }(Writer);
  10622. var Data64URIReader = /*#__PURE__*/function (_Reader2) {
  10623. _inherits(Data64URIReader, _Reader2);
  10624. var _super5 = _createSuper(Data64URIReader);
  10625. function Data64URIReader(dataURI) {
  10626. var _this4;
  10627. _classCallCheck(this, Data64URIReader);
  10628. _this4 = _super5.call(this);
  10629. _this4.dataURI = dataURI;
  10630. var dataEnd = dataURI.length;
  10631. while (dataURI.charAt(dataEnd - 1) == "=") {
  10632. dataEnd--;
  10633. }
  10634. _this4.dataStart = dataURI.indexOf(",") + 1;
  10635. _this4.size = Math.floor((dataEnd - _this4.dataStart) * 0.75);
  10636. return _this4;
  10637. }
  10638. _createClass(Data64URIReader, [{
  10639. key: "readUint8Array",
  10640. value: function readUint8Array(offset, length) {
  10641. var dataArray = new Uint8Array(length);
  10642. var start = Math.floor(offset / 3) * 4;
  10643. var bytes = atob(this.dataURI.substring(start + this.dataStart, Math.ceil((offset + length) / 3) * 4 + this.dataStart));
  10644. var delta = offset - Math.floor(start / 4) * 3;
  10645. for (var indexByte = delta; indexByte < delta + length; indexByte++) {
  10646. dataArray[indexByte - delta] = bytes.charCodeAt(indexByte);
  10647. }
  10648. return dataArray;
  10649. }
  10650. }]);
  10651. return Data64URIReader;
  10652. }(Reader);
  10653. var Data64URIWriter = /*#__PURE__*/function (_Writer2) {
  10654. _inherits(Data64URIWriter, _Writer2);
  10655. var _super6 = _createSuper(Data64URIWriter);
  10656. function Data64URIWriter(contentType) {
  10657. var _this5;
  10658. _classCallCheck(this, Data64URIWriter);
  10659. _this5 = _super6.call(this);
  10660. _this5.data = "data:" + (contentType || "") + ";base64,";
  10661. _this5.pending = [];
  10662. return _this5;
  10663. }
  10664. _createClass(Data64URIWriter, [{
  10665. key: "writeUint8Array",
  10666. value: function writeUint8Array(array) {
  10667. _get(_getPrototypeOf(Data64URIWriter.prototype), "writeUint8Array", this).call(this, array);
  10668. var indexArray = 0;
  10669. var dataString = this.pending;
  10670. var delta = this.pending.length;
  10671. this.pending = "";
  10672. for (indexArray = 0; indexArray < Math.floor((delta + array.length) / 3) * 3 - delta; indexArray++) {
  10673. dataString += String.fromCharCode(array[indexArray]);
  10674. }
  10675. for (; indexArray < array.length; indexArray++) {
  10676. this.pending += String.fromCharCode(array[indexArray]);
  10677. }
  10678. if (dataString.length > 2) {
  10679. this.data += btoa(dataString);
  10680. } else {
  10681. this.pending = dataString;
  10682. }
  10683. }
  10684. }, {
  10685. key: "getData",
  10686. value: function getData() {
  10687. return this.data + btoa(this.pending);
  10688. }
  10689. }]);
  10690. return Data64URIWriter;
  10691. }(Writer);
  10692. var BlobReader = /*#__PURE__*/function (_Reader3) {
  10693. _inherits(BlobReader, _Reader3);
  10694. var _super7 = _createSuper(BlobReader);
  10695. function BlobReader(blob) {
  10696. var _this6;
  10697. _classCallCheck(this, BlobReader);
  10698. _this6 = _super7.call(this);
  10699. _this6.blob = blob;
  10700. _this6.size = blob.size;
  10701. return _this6;
  10702. }
  10703. _createClass(BlobReader, [{
  10704. key: "readUint8Array",
  10705. value: function readUint8Array(offset, length) {
  10706. try {
  10707. var _this8 = this;
  10708. if (_this8.blob.arrayBuffer) {
  10709. return _await(_this8.blob.slice(offset, offset + length).arrayBuffer(), function (_this7$blob$slice$arr) {
  10710. return new Uint8Array(_this7$blob$slice$arr);
  10711. });
  10712. } else {
  10713. var reader = new FileReader();
  10714. return _await(new Promise(function (resolve, reject) {
  10715. reader.onload = function (event) {
  10716. return resolve(new Uint8Array(event.target.result));
  10717. };
  10718. reader.onerror = function () {
  10719. return reject(reader.error);
  10720. };
  10721. reader.readAsArrayBuffer(_this8.blob.slice(offset, offset + length));
  10722. }));
  10723. }
  10724. } catch (e) {
  10725. return Promise.reject(e);
  10726. }
  10727. }
  10728. }]);
  10729. return BlobReader;
  10730. }(Reader);
  10731. var BlobWriter = /*#__PURE__*/function (_Writer3) {
  10732. _inherits(BlobWriter, _Writer3);
  10733. var _super8 = _createSuper(BlobWriter);
  10734. function BlobWriter(contentType) {
  10735. var _this9;
  10736. _classCallCheck(this, BlobWriter);
  10737. _this9 = _super8.call(this);
  10738. _this9.contentType = contentType;
  10739. _this9.arrayBuffersMaxlength = 8;
  10740. initArrayBuffers(_assertThisInitialized(_this9));
  10741. return _this9;
  10742. }
  10743. _createClass(BlobWriter, [{
  10744. key: "writeUint8Array",
  10745. value: function writeUint8Array(array) {
  10746. _get(_getPrototypeOf(BlobWriter.prototype), "writeUint8Array", this).call(this, array);
  10747. if (this.arrayBuffers.length == this.arrayBuffersMaxlength) {
  10748. flushArrayBuffers(this);
  10749. }
  10750. this.arrayBuffers.push(array.buffer);
  10751. }
  10752. }, {
  10753. key: "getData",
  10754. value: function getData() {
  10755. if (!this.blob) {
  10756. if (this.arrayBuffers.length) {
  10757. flushArrayBuffers(this);
  10758. }
  10759. this.blob = this.pendingBlob;
  10760. initArrayBuffers(this);
  10761. }
  10762. return this.blob;
  10763. }
  10764. }]);
  10765. return BlobWriter;
  10766. }(Writer);
  10767. function initArrayBuffers(blobWriter) {
  10768. blobWriter.pendingBlob = new Blob([], {
  10769. type: blobWriter.contentType
  10770. });
  10771. blobWriter.arrayBuffers = [];
  10772. }
  10773. function flushArrayBuffers(blobWriter) {
  10774. blobWriter.pendingBlob = new Blob([blobWriter.pendingBlob].concat(_toConsumableArray(blobWriter.arrayBuffers)), {
  10775. type: blobWriter.contentType
  10776. });
  10777. blobWriter.arrayBuffers = [];
  10778. }
  10779. var ReadableStreamReader = /*#__PURE__*/function () {
  10780. function ReadableStreamReader(readableStream) {
  10781. _classCallCheck(this, ReadableStreamReader);
  10782. this.readableStream = readableStream;
  10783. this.reader = readableStream.getReader();
  10784. this.size = Infinity;
  10785. this.index = 0;
  10786. this.currentSize = 0;
  10787. this.pendingValue = new Uint8Array();
  10788. }
  10789. _createClass(ReadableStreamReader, [{
  10790. key: "init",
  10791. value: function init() {
  10792. this.initialized = true;
  10793. }
  10794. }, {
  10795. key: "readUint8Array",
  10796. value: function readUint8Array(index, length) {
  10797. try {
  10798. var _this11 = this;
  10799. if (_this11.index != index) {
  10800. throw new Error(ERR_NOT_SEEKABLE_READER);
  10801. }
  10802. var data = new Uint8Array(length);
  10803. var size = 0,
  10804. done;
  10805. return _await(_continue(_do(function () {
  10806. return _await(_this11.reader.read(), function (result) {
  10807. var value = result.value;
  10808. done = result.done;
  10809. if (value) {
  10810. _this11.currentSize += value.length;
  10811. } else {
  10812. value = _this11.pendingValue;
  10813. _this11.pendingValue = new Uint8Array();
  10814. }
  10815. if (_this11.pendingValue.length) {
  10816. var newValue = new Uint8Array(_this11.pendingValue.length + value.length);
  10817. newValue.set(_this11.pendingValue);
  10818. newValue.set(value, _this11.pendingValue.length);
  10819. _this11.pendingValue = new Uint8Array();
  10820. value = newValue;
  10821. }
  10822. if (size + value.length > length) {
  10823. data.set(value.subarray(0, length), size);
  10824. _this11.pendingValue = value.subarray(length);
  10825. size += length;
  10826. } else {
  10827. data.set(value, size);
  10828. size += value.length;
  10829. }
  10830. });
  10831. }, function () {
  10832. return size < length && !done;
  10833. }), function () {
  10834. if (done && _this11.size == Infinity) {
  10835. _this11.size = _this11.currentSize;
  10836. }
  10837. if (_this11.size < length) {
  10838. data = data.slice(0, _this11.size);
  10839. length = _this11.size;
  10840. }
  10841. _this11.index += length;
  10842. return data;
  10843. }));
  10844. } catch (e) {
  10845. return Promise.reject(e);
  10846. }
  10847. }
  10848. }]);
  10849. return ReadableStreamReader;
  10850. }();
  10851. var WritableStreamWriter = /*#__PURE__*/function (_Writer4) {
  10852. _inherits(WritableStreamWriter, _Writer4);
  10853. var _super9 = _createSuper(WritableStreamWriter);
  10854. function WritableStreamWriter(writableStream) {
  10855. var _this12;
  10856. _classCallCheck(this, WritableStreamWriter);
  10857. _this12 = _super9.call(this);
  10858. _this12.writableStream = writableStream;
  10859. _this12.writer = writableStream.getWriter();
  10860. return _this12;
  10861. }
  10862. _createClass(WritableStreamWriter, [{
  10863. key: "writeUint8Array",
  10864. value: function writeUint8Array(array) {
  10865. try {
  10866. var _this14 = this;
  10867. return _await(_this14.writer.ready, function () {
  10868. return _this14.writer.write(array);
  10869. });
  10870. } catch (e) {
  10871. return Promise.reject(e);
  10872. }
  10873. }
  10874. }, {
  10875. key: "getData",
  10876. value: function getData() {
  10877. try {
  10878. var _this16 = this;
  10879. return _await(_this16.writer.ready, function () {
  10880. return _await(_this16.writer.close(), function () {
  10881. return _this16.writableStream;
  10882. });
  10883. });
  10884. } catch (e) {
  10885. return Promise.reject(e);
  10886. }
  10887. }
  10888. }]);
  10889. return WritableStreamWriter;
  10890. }(Writer);
  10891. var FetchReader = /*#__PURE__*/function (_Reader4) {
  10892. _inherits(FetchReader, _Reader4);
  10893. var _super10 = _createSuper(FetchReader);
  10894. function FetchReader(url, options) {
  10895. var _this17;
  10896. _classCallCheck(this, FetchReader);
  10897. _this17 = _super10.call(this);
  10898. _this17.url = url;
  10899. _this17.preventHeadRequest = options.preventHeadRequest;
  10900. _this17.useRangeHeader = options.useRangeHeader;
  10901. _this17.forceRangeRequests = options.forceRangeRequests;
  10902. _this17.options = Object.assign({}, options);
  10903. delete _this17.options.preventHeadRequest;
  10904. delete _this17.options.useRangeHeader;
  10905. delete _this17.options.forceRangeRequests;
  10906. delete _this17.options.useXHR;
  10907. return _this17;
  10908. }
  10909. _createClass(FetchReader, [{
  10910. key: "init",
  10911. value: function init() {
  10912. try {
  10913. var _this19 = this;
  10914. _get(_getPrototypeOf(FetchReader.prototype), "init", _this19).call(_this19);
  10915. return _await(_awaitIgnored(initHttpReader(_this19, sendFetchRequest, getFetchRequestData)));
  10916. } catch (e) {
  10917. return Promise.reject(e);
  10918. }
  10919. }
  10920. }, {
  10921. key: "readUint8Array",
  10922. value: function readUint8Array(index, length) {
  10923. return readUint8ArrayHttpReader(this, index, length, sendFetchRequest, getFetchRequestData);
  10924. }
  10925. }]);
  10926. return FetchReader;
  10927. }(Reader);
  10928. var XHRReader = /*#__PURE__*/function (_Reader5) {
  10929. _inherits(XHRReader, _Reader5);
  10930. var _super11 = _createSuper(XHRReader);
  10931. function XHRReader(url, options) {
  10932. var _this20;
  10933. _classCallCheck(this, XHRReader);
  10934. _this20 = _super11.call(this);
  10935. _this20.url = url;
  10936. _this20.preventHeadRequest = options.preventHeadRequest;
  10937. _this20.useRangeHeader = options.useRangeHeader;
  10938. _this20.forceRangeRequests = options.forceRangeRequests;
  10939. _this20.options = options;
  10940. return _this20;
  10941. }
  10942. _createClass(XHRReader, [{
  10943. key: "init",
  10944. value: function init() {
  10945. try {
  10946. var _this22 = this;
  10947. _get(_getPrototypeOf(XHRReader.prototype), "init", _this22).call(_this22);
  10948. return _await(_awaitIgnored(initHttpReader(_this22, sendXMLHttpRequest, getXMLHttpRequestData)));
  10949. } catch (e) {
  10950. return Promise.reject(e);
  10951. }
  10952. }
  10953. }, {
  10954. key: "readUint8Array",
  10955. value: function readUint8Array(index, length) {
  10956. return readUint8ArrayHttpReader(this, index, length, sendXMLHttpRequest, getXMLHttpRequestData);
  10957. }
  10958. }]);
  10959. return XHRReader;
  10960. }(Reader);
  10961. function getRangeHeaders(httpReader) {
  10962. var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  10963. var length = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  10964. return Object.assign({}, getHeaders(httpReader), _defineProperty({}, HTTP_HEADER_RANGE, HTTP_RANGE_UNIT + "=" + index + "-" + (index + length - 1)));
  10965. }
  10966. function getHeaders(httpReader) {
  10967. var headers = httpReader.options.headers;
  10968. if (headers) {
  10969. if (Symbol.iterator in headers) {
  10970. return Object.fromEntries(headers);
  10971. } else {
  10972. return headers;
  10973. }
  10974. }
  10975. }
  10976. function sendXMLHttpRequest(method, _ref, headers) {
  10977. var url = _ref.url;
  10978. return new Promise(function (resolve, reject) {
  10979. var request = new XMLHttpRequest();
  10980. request.addEventListener("load", function () {
  10981. if (request.status < 400) {
  10982. var _headers = [];
  10983. request.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach(function (header) {
  10984. var splitHeader = header.trim().split(/\s*:\s*/);
  10985. splitHeader[0] = splitHeader[0].trim().replace(/^[a-z]|-[a-z]/g, function (value) {
  10986. return value.toUpperCase();
  10987. });
  10988. _headers.push(splitHeader);
  10989. });
  10990. resolve({
  10991. status: request.status,
  10992. arrayBuffer: function arrayBuffer() {
  10993. return request.response;
  10994. },
  10995. headers: new Map(_headers)
  10996. });
  10997. } else {
  10998. reject(new Error(ERR_HTTP_STATUS + (request.statusText || request.status)));
  10999. }
  11000. }, false);
  11001. request.addEventListener("error", function (event) {
  11002. return reject(event.detail.error);
  11003. }, false);
  11004. request.open(method, url);
  11005. if (headers) {
  11006. for (var _i = 0, _Object$entries = Object.entries(headers); _i < _Object$entries.length; _i++) {
  11007. var entry = _Object$entries[_i];
  11008. request.setRequestHeader(entry[0], entry[1]);
  11009. }
  11010. }
  11011. request.responseType = "arraybuffer";
  11012. request.send();
  11013. });
  11014. }
  11015. var HttpReader = /*#__PURE__*/function (_Reader6) {
  11016. _inherits(HttpReader, _Reader6);
  11017. var _super12 = _createSuper(HttpReader);
  11018. function HttpReader(url) {
  11019. var _this23;
  11020. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  11021. _classCallCheck(this, HttpReader);
  11022. _this23 = _super12.call(this);
  11023. _this23.url = url;
  11024. if (options.useXHR) {
  11025. _this23.reader = new XHRReader(url, options);
  11026. } else {
  11027. _this23.reader = new FetchReader(url, options);
  11028. }
  11029. return _this23;
  11030. }
  11031. _createClass(HttpReader, [{
  11032. key: "size",
  11033. get: function get() {
  11034. return this.reader.size;
  11035. },
  11036. set: function set(value) {// ignored
  11037. }
  11038. }, {
  11039. key: "init",
  11040. value: function init() {
  11041. try {
  11042. var _this25 = this;
  11043. _get(_getPrototypeOf(HttpReader.prototype), "init", _this25).call(_this25);
  11044. return _await(_awaitIgnored(_this25.reader.init()));
  11045. } catch (e) {
  11046. return Promise.reject(e);
  11047. }
  11048. }
  11049. }, {
  11050. key: "readUint8Array",
  11051. value: function readUint8Array(index, length) {
  11052. return this.reader.readUint8Array(index, length);
  11053. }
  11054. }]);
  11055. return HttpReader;
  11056. }(Reader);
  11057. var HttpRangeReader = /*#__PURE__*/function (_HttpReader) {
  11058. _inherits(HttpRangeReader, _HttpReader);
  11059. var _super13 = _createSuper(HttpRangeReader);
  11060. function HttpRangeReader(url) {
  11061. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  11062. _classCallCheck(this, HttpRangeReader);
  11063. options.useRangeHeader = true;
  11064. return _super13.call(this, url, options);
  11065. }
  11066. return _createClass(HttpRangeReader);
  11067. }(HttpReader);
  11068. var Uint8ArrayReader = /*#__PURE__*/function (_Reader7) {
  11069. _inherits(Uint8ArrayReader, _Reader7);
  11070. var _super14 = _createSuper(Uint8ArrayReader);
  11071. function Uint8ArrayReader(array) {
  11072. var _this26;
  11073. _classCallCheck(this, Uint8ArrayReader);
  11074. _this26 = _super14.call(this);
  11075. _this26.array = array;
  11076. _this26.size = array.length;
  11077. return _this26;
  11078. }
  11079. _createClass(Uint8ArrayReader, [{
  11080. key: "readUint8Array",
  11081. value: function readUint8Array(index, length) {
  11082. return this.array.slice(index, index + length);
  11083. }
  11084. }]);
  11085. return Uint8ArrayReader;
  11086. }(Reader);
  11087. var Uint8ArrayWriter = /*#__PURE__*/function (_Writer5) {
  11088. _inherits(Uint8ArrayWriter, _Writer5);
  11089. var _super15 = _createSuper(Uint8ArrayWriter);
  11090. function Uint8ArrayWriter() {
  11091. var _this27;
  11092. _classCallCheck(this, Uint8ArrayWriter);
  11093. _this27 = _super15.call(this);
  11094. _this27.array = new Uint8Array(0);
  11095. return _this27;
  11096. }
  11097. _createClass(Uint8ArrayWriter, [{
  11098. key: "writeUint8Array",
  11099. value: function writeUint8Array(array) {
  11100. _get(_getPrototypeOf(Uint8ArrayWriter.prototype), "writeUint8Array", this).call(this, array);
  11101. var previousArray = this.array;
  11102. this.array = new Uint8Array(previousArray.length + array.length);
  11103. this.array.set(previousArray);
  11104. this.array.set(array, previousArray.length);
  11105. }
  11106. }, {
  11107. key: "getData",
  11108. value: function getData() {
  11109. return this.array;
  11110. }
  11111. }]);
  11112. return Uint8ArrayWriter;
  11113. }(Writer);
  11114. function isHttpFamily(url) {
  11115. if (typeof document != "undefined") {
  11116. var anchor = document.createElement("a");
  11117. anchor.href = url;
  11118. return anchor.protocol == "http:" || anchor.protocol == "https:";
  11119. } else {
  11120. return /^https?:\/\//i.test(url);
  11121. }
  11122. }
  11123. var $ = _export;
  11124. var uncurryThis$1 = functionUncurryThis;
  11125. var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
  11126. var toLength = toLength$a;
  11127. var toString = toString$a;
  11128. var notARegExp = notARegexp;
  11129. var requireObjectCoercible = requireObjectCoercible$8;
  11130. var correctIsRegExpLogic = correctIsRegexpLogic;
  11131. // eslint-disable-next-line es-x/no-string-prototype-endswith -- safe
  11132. var un$EndsWith = uncurryThis$1(''.endsWith);
  11133. var slice = uncurryThis$1(''.slice);
  11134. var min = Math.min;
  11135. var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');
  11136. // https://github.com/zloirock/core-js/pull/702
  11137. var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () {
  11138. var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');
  11139. return descriptor && !descriptor.writable;
  11140. }();
  11141. // `String.prototype.endsWith` method
  11142. // https://tc39.es/ecma262/#sec-string.prototype.endswith
  11143. $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
  11144. endsWith: function endsWith(searchString /* , endPosition = @length */) {
  11145. var that = toString(requireObjectCoercible(this));
  11146. notARegExp(searchString);
  11147. var endPosition = arguments.length > 1 ? arguments[1] : undefined;
  11148. var len = that.length;
  11149. var end = endPosition === undefined ? len : min(toLength(endPosition), len);
  11150. var search = toString(searchString);
  11151. return un$EndsWith
  11152. ? un$EndsWith(that, search, end)
  11153. : slice(that, end - search.length, end) === search;
  11154. }
  11155. });
  11156. /*
  11157. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  11158. Redistribution and use in source and binary forms, with or without
  11159. modification, are permitted provided that the following conditions are met:
  11160. 1. Redistributions of source code must retain the above copyright notice,
  11161. this list of conditions and the following disclaimer.
  11162. 2. Redistributions in binary form must reproduce the above copyright
  11163. notice, this list of conditions and the following disclaimer in
  11164. the documentation and/or other materials provided with the distribution.
  11165. 3. The names of the authors may not be used to endorse or promote products
  11166. derived from this software without specific prior written permission.
  11167. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  11168. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  11169. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  11170. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  11171. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11172. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  11173. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  11174. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  11175. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  11176. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  11177. */
  11178. var MAX_32_BITS = 0xffffffff;
  11179. var MAX_16_BITS = 0xffff;
  11180. var COMPRESSION_METHOD_DEFLATE = 0x08;
  11181. var COMPRESSION_METHOD_STORE = 0x00;
  11182. var COMPRESSION_METHOD_AES = 0x63;
  11183. var LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;
  11184. var DATA_DESCRIPTOR_RECORD_SIGNATURE = 0x08074b50;
  11185. var CENTRAL_FILE_HEADER_SIGNATURE = 0x02014b50;
  11186. var END_OF_CENTRAL_DIR_SIGNATURE = 0x06054b50;
  11187. var ZIP64_END_OF_CENTRAL_DIR_SIGNATURE = 0x06064b50;
  11188. var ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE = 0x07064b50;
  11189. var END_OF_CENTRAL_DIR_LENGTH = 22;
  11190. var ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH = 20;
  11191. var ZIP64_END_OF_CENTRAL_DIR_LENGTH = 56;
  11192. 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;
  11193. var ZIP64_TOTAL_NUMBER_OF_DISKS = 1;
  11194. var EXTRAFIELD_TYPE_ZIP64 = 0x0001;
  11195. var EXTRAFIELD_TYPE_AES = 0x9901;
  11196. var EXTRAFIELD_TYPE_NTFS = 0x000a;
  11197. var EXTRAFIELD_TYPE_NTFS_TAG1 = 0x0001;
  11198. var EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP = 0x5455;
  11199. var EXTRAFIELD_TYPE_UNICODE_PATH = 0x7075;
  11200. var EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;
  11201. var BITFLAG_ENCRYPTED = 0x01;
  11202. var BITFLAG_LEVEL = 0x06;
  11203. var BITFLAG_DATA_DESCRIPTOR = 0x0008;
  11204. var BITFLAG_LANG_ENCODING_FLAG = 0x0800;
  11205. var FILE_ATTR_MSDOS_DIR_MASK = 0x10;
  11206. var VERSION_DEFLATE = 0x14;
  11207. var VERSION_ZIP64 = 0x2D;
  11208. var VERSION_AES = 0x33;
  11209. var DIRECTORY_SIGNATURE = "/";
  11210. var MAX_DATE = new Date(2107, 11, 31);
  11211. var MIN_DATE = new Date(1980, 0, 1);
  11212. /*
  11213. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  11214. Redistribution and use in source and binary forms, with or without
  11215. modification, are permitted provided that the following conditions are met:
  11216. 1. Redistributions of source code must retain the above copyright notice,
  11217. this list of conditions and the following disclaimer.
  11218. 2. Redistributions in binary form must reproduce the above copyright
  11219. notice, this list of conditions and the following disclaimer in
  11220. the documentation and/or other materials provided with the distribution.
  11221. 3. The names of the authors may not be used to endorse or promote products
  11222. derived from this software without specific prior written permission.
  11223. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  11224. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  11225. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  11226. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  11227. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11228. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  11229. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  11230. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  11231. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  11232. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  11233. */
  11234. var CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
  11235. var decodeCP437 = (function (stringValue) {
  11236. var result = "";
  11237. for (var indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
  11238. result += CP437[stringValue[indexCharacter]];
  11239. }
  11240. return result;
  11241. });
  11242. function decodeText(value, encoding) {
  11243. if (encoding && encoding.trim().toLowerCase() == "cp437") {
  11244. return decodeCP437(value);
  11245. } else if (typeof TextDecoder == "undefined") {
  11246. var fileReader = new FileReader();
  11247. return new Promise(function (resolve, reject) {
  11248. fileReader.onload = function (event) {
  11249. return resolve(event.target.result);
  11250. };
  11251. fileReader.onerror = function () {
  11252. return reject(fileReader.error);
  11253. };
  11254. fileReader.readAsText(new Blob([value]));
  11255. });
  11256. } else {
  11257. return new TextDecoder(encoding).decode(value);
  11258. }
  11259. }
  11260. /*
  11261. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  11262. Redistribution and use in source and binary forms, with or without
  11263. modification, are permitted provided that the following conditions are met:
  11264. 1. Redistributions of source code must retain the above copyright notice,
  11265. this list of conditions and the following disclaimer.
  11266. 2. Redistributions in binary form must reproduce the above copyright
  11267. notice, this list of conditions and the following disclaimer in
  11268. the documentation and/or other materials provided with the distribution.
  11269. 3. The names of the authors may not be used to endorse or promote products
  11270. derived from this software without specific prior written permission.
  11271. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  11272. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  11273. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  11274. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  11275. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11276. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  11277. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  11278. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  11279. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  11280. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  11281. */
  11282. 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"];
  11283. var Entry = /*#__PURE__*/_createClass(function Entry(data) {
  11284. var _this = this;
  11285. _classCallCheck(this, Entry);
  11286. PROPERTY_NAMES.forEach(function (name) {
  11287. return _this[name] = data[name];
  11288. });
  11289. });
  11290. var seekSignature = _async(function (reader, signature, startOffset, minimumBytes, maximumLength) {
  11291. var seek = _async(function (length) {
  11292. var offset = startOffset - length;
  11293. return _await(readUint8Array(reader, offset, length), function (bytes) {
  11294. for (var indexByte = bytes.length - minimumBytes; indexByte >= 0; indexByte--) {
  11295. if (bytes[indexByte] == signatureArray[0] && bytes[indexByte + 1] == signatureArray[1] && bytes[indexByte + 2] == signatureArray[2] && bytes[indexByte + 3] == signatureArray[3]) {
  11296. return {
  11297. offset: offset + indexByte,
  11298. buffer: bytes.slice(indexByte, indexByte + minimumBytes).buffer
  11299. };
  11300. }
  11301. }
  11302. });
  11303. });
  11304. var signatureArray = new Uint8Array(4);
  11305. var signatureView = getDataView$1(signatureArray);
  11306. setUint32$1(signatureView, 0, signature);
  11307. var maximumBytes = minimumBytes + maximumLength;
  11308. return _await(seek(minimumBytes), function (_seek) {
  11309. return _await(_seek || seek(Math.min(maximumBytes, startOffset)), void 0, _seek);
  11310. });
  11311. });
  11312. var readExtraFieldUnicode = _async(function (extraFieldUnicode, propertyName, rawPropertyName, directory, fileEntry) {
  11313. var extraFieldView = getDataView$1(extraFieldUnicode.data);
  11314. extraFieldUnicode.version = getUint8(extraFieldView, 0);
  11315. extraFieldUnicode.signature = getUint32(extraFieldView, 1);
  11316. var crc32 = new Crc32();
  11317. crc32.append(fileEntry[rawPropertyName]);
  11318. var dataViewSignature = getDataView$1(new Uint8Array(4));
  11319. dataViewSignature.setUint32(0, crc32.get(), true);
  11320. return _await(decodeText(extraFieldUnicode.data.subarray(5)), function (_decodeText) {
  11321. extraFieldUnicode[propertyName] = _decodeText;
  11322. extraFieldUnicode.valid = !fileEntry.bitFlag.languageEncodingFlag && extraFieldUnicode.signature == getUint32(dataViewSignature, 0);
  11323. if (extraFieldUnicode.valid) {
  11324. directory[propertyName] = extraFieldUnicode[propertyName];
  11325. directory[propertyName + "UTF8"] = true;
  11326. }
  11327. });
  11328. });
  11329. var readCommonFooter = _async(function (fileEntry, directory, dataView, offset) {
  11330. var rawExtraField = directory.rawExtraField;
  11331. var extraField = directory.extraField = new Map();
  11332. var rawExtraFieldView = getDataView$1(new Uint8Array(rawExtraField));
  11333. var offsetExtraField = 0;
  11334. try {
  11335. while (offsetExtraField < rawExtraField.length) {
  11336. var type = getUint16(rawExtraFieldView, offsetExtraField);
  11337. var size = getUint16(rawExtraFieldView, offsetExtraField + 2);
  11338. extraField.set(type, {
  11339. type: type,
  11340. data: rawExtraField.slice(offsetExtraField + 4, offsetExtraField + 4 + size)
  11341. });
  11342. offsetExtraField += 4 + size;
  11343. }
  11344. } catch (_error) {// ignored
  11345. }
  11346. var compressionMethod = getUint16(dataView, offset + 4);
  11347. directory.signature = getUint32(dataView, offset + 10);
  11348. directory.uncompressedSize = getUint32(dataView, offset + 18);
  11349. directory.compressedSize = getUint32(dataView, offset + 14);
  11350. var extraFieldZip64 = extraField.get(EXTRAFIELD_TYPE_ZIP64);
  11351. if (extraFieldZip64) {
  11352. readExtraFieldZip64(extraFieldZip64, directory);
  11353. directory.extraFieldZip64 = extraFieldZip64;
  11354. }
  11355. var extraFieldUnicodePath = extraField.get(EXTRAFIELD_TYPE_UNICODE_PATH);
  11356. return _invoke(function () {
  11357. if (extraFieldUnicodePath) {
  11358. return _await(readExtraFieldUnicode(extraFieldUnicodePath, "filename", "rawFilename", directory, fileEntry), function () {
  11359. directory.extraFieldUnicodePath = extraFieldUnicodePath;
  11360. });
  11361. }
  11362. }, function () {
  11363. var extraFieldUnicodeComment = extraField.get(EXTRAFIELD_TYPE_UNICODE_COMMENT);
  11364. return _invoke(function () {
  11365. if (extraFieldUnicodeComment) {
  11366. return _await(readExtraFieldUnicode(extraFieldUnicodeComment, "comment", "rawComment", directory, fileEntry), function () {
  11367. directory.extraFieldUnicodeComment = extraFieldUnicodeComment;
  11368. });
  11369. }
  11370. }, function () {
  11371. var extraFieldAES = extraField.get(EXTRAFIELD_TYPE_AES);
  11372. if (extraFieldAES) {
  11373. readExtraFieldAES(extraFieldAES, directory, compressionMethod);
  11374. directory.extraFieldAES = extraFieldAES;
  11375. } else {
  11376. directory.compressionMethod = compressionMethod;
  11377. }
  11378. var extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
  11379. if (extraFieldNTFS) {
  11380. readExtraFieldNTFS(extraFieldNTFS, directory);
  11381. directory.extraFieldNTFS = extraFieldNTFS;
  11382. }
  11383. var extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
  11384. if (extraFieldExtendedTimestamp) {
  11385. readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory);
  11386. directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
  11387. }
  11388. });
  11389. });
  11390. });
  11391. var ERR_BAD_FORMAT = "File format is not recognized";
  11392. var ERR_EOCDR_NOT_FOUND = "End of central directory not found";
  11393. var ERR_EOCDR_ZIP64_NOT_FOUND = "End of Zip64 central directory not found";
  11394. var ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = "End of Zip64 central directory locator not found";
  11395. var ERR_CENTRAL_DIRECTORY_NOT_FOUND = "Central directory header not found";
  11396. var ERR_LOCAL_FILE_HEADER_NOT_FOUND = "Local file header not found";
  11397. var ERR_EXTRAFIELD_ZIP64_NOT_FOUND = "Zip64 extra field not found";
  11398. var ERR_ENCRYPTED = "File contains encrypted entry";
  11399. var ERR_UNSUPPORTED_ENCRYPTION = "Encryption method not supported";
  11400. var ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
  11401. var CHARSET_UTF8 = "utf-8";
  11402. var CHARSET_CP437 = "cp437";
  11403. var ZIP64_PROPERTIES = ["uncompressedSize", "compressedSize", "offset"];
  11404. var ZipReader = /*#__PURE__*/function () {
  11405. function ZipReader(reader) {
  11406. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  11407. _classCallCheck(this, ZipReader);
  11408. Object.assign(this, {
  11409. reader: reader,
  11410. options: options,
  11411. config: getConfiguration()
  11412. });
  11413. }
  11414. _createClass(ZipReader, [{
  11415. key: "getEntriesGenerator",
  11416. value: function getEntriesGenerator() {
  11417. var _this = this;
  11418. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  11419. return _wrapAsyncGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
  11420. var zipReader, reader, endOfDirectoryInfo, endOfDirectoryView, directoryDataLength, directoryDataOffset, filesLength, prependedDataLength, endOfDirectoryLocatorArray, endOfDirectoryLocatorView, endOfDirectoryArray, _endOfDirectoryView, expectedDirectoryDataOffset, originalDirectoryDataOffset, offset, directoryArray, directoryView, _expectedDirectoryDataOffset, _originalDirectoryDataOffset, _loop, indexFile;
  11421. return _regeneratorRuntime().wrap(function _callee$(_context2) {
  11422. while (1) {
  11423. switch (_context2.prev = _context2.next) {
  11424. case 0:
  11425. zipReader = _this;
  11426. reader = zipReader.reader;
  11427. if (reader.initialized) {
  11428. _context2.next = 5;
  11429. break;
  11430. }
  11431. _context2.next = 5;
  11432. return _awaitAsyncGenerator(reader.init());
  11433. case 5:
  11434. if (!(reader.size < END_OF_CENTRAL_DIR_LENGTH)) {
  11435. _context2.next = 7;
  11436. break;
  11437. }
  11438. throw new Error(ERR_BAD_FORMAT);
  11439. case 7:
  11440. _context2.next = 9;
  11441. return _awaitAsyncGenerator(seekSignature(reader, END_OF_CENTRAL_DIR_SIGNATURE, reader.size, END_OF_CENTRAL_DIR_LENGTH, MAX_16_BITS * 16));
  11442. case 9:
  11443. endOfDirectoryInfo = _context2.sent;
  11444. if (endOfDirectoryInfo) {
  11445. _context2.next = 12;
  11446. break;
  11447. }
  11448. throw new Error(ERR_EOCDR_NOT_FOUND);
  11449. case 12:
  11450. endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
  11451. directoryDataLength = getUint32(endOfDirectoryView, 12);
  11452. directoryDataOffset = getUint32(endOfDirectoryView, 16);
  11453. filesLength = getUint16(endOfDirectoryView, 8);
  11454. prependedDataLength = 0;
  11455. if (!(directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS)) {
  11456. _context2.next = 43;
  11457. break;
  11458. }
  11459. _context2.next = 20;
  11460. return _awaitAsyncGenerator(readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH));
  11461. case 20:
  11462. endOfDirectoryLocatorArray = _context2.sent;
  11463. endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
  11464. if (!(getUint32(endOfDirectoryLocatorView, 0) != ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE)) {
  11465. _context2.next = 24;
  11466. break;
  11467. }
  11468. throw new Error(ERR_EOCDR_ZIP64_NOT_FOUND);
  11469. case 24:
  11470. directoryDataOffset = getBigUint64(endOfDirectoryLocatorView, 8);
  11471. _context2.next = 27;
  11472. return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH));
  11473. case 27:
  11474. endOfDirectoryArray = _context2.sent;
  11475. _endOfDirectoryView = getDataView$1(endOfDirectoryArray);
  11476. expectedDirectoryDataOffset = endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH - ZIP64_END_OF_CENTRAL_DIR_LENGTH;
  11477. if (!(getUint32(_endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE && directoryDataOffset != expectedDirectoryDataOffset)) {
  11478. _context2.next = 38;
  11479. break;
  11480. }
  11481. originalDirectoryDataOffset = directoryDataOffset;
  11482. directoryDataOffset = expectedDirectoryDataOffset;
  11483. prependedDataLength = directoryDataOffset - originalDirectoryDataOffset;
  11484. _context2.next = 36;
  11485. return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH));
  11486. case 36:
  11487. endOfDirectoryArray = _context2.sent;
  11488. _endOfDirectoryView = getDataView$1(endOfDirectoryArray);
  11489. case 38:
  11490. if (!(getUint32(_endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE)) {
  11491. _context2.next = 40;
  11492. break;
  11493. }
  11494. throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
  11495. case 40:
  11496. filesLength = getBigUint64(_endOfDirectoryView, 32);
  11497. directoryDataLength = getBigUint64(_endOfDirectoryView, 40);
  11498. directoryDataOffset -= directoryDataLength;
  11499. case 43:
  11500. if (!(directoryDataOffset < 0 || directoryDataOffset >= reader.size)) {
  11501. _context2.next = 45;
  11502. break;
  11503. }
  11504. throw new Error(ERR_BAD_FORMAT);
  11505. case 45:
  11506. offset = 0;
  11507. _context2.next = 48;
  11508. return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, directoryDataLength));
  11509. case 48:
  11510. directoryArray = _context2.sent;
  11511. directoryView = getDataView$1(directoryArray);
  11512. if (!directoryDataLength) {
  11513. _context2.next = 60;
  11514. break;
  11515. }
  11516. _expectedDirectoryDataOffset = endOfDirectoryInfo.offset - directoryDataLength;
  11517. if (!(getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE && directoryDataOffset != _expectedDirectoryDataOffset)) {
  11518. _context2.next = 60;
  11519. break;
  11520. }
  11521. _originalDirectoryDataOffset = directoryDataOffset;
  11522. directoryDataOffset = _expectedDirectoryDataOffset;
  11523. prependedDataLength = directoryDataOffset - _originalDirectoryDataOffset;
  11524. _context2.next = 58;
  11525. return _awaitAsyncGenerator(readUint8Array(reader, directoryDataOffset, directoryDataLength));
  11526. case 58:
  11527. directoryArray = _context2.sent;
  11528. directoryView = getDataView$1(directoryArray);
  11529. case 60:
  11530. if (!(directoryDataOffset < 0 || directoryDataOffset >= reader.size)) {
  11531. _context2.next = 62;
  11532. break;
  11533. }
  11534. throw new Error(ERR_BAD_FORMAT);
  11535. case 62:
  11536. _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop(indexFile) {
  11537. var fileEntry, languageEncodingFlag, filenameOffset, extraFieldOffset, commentOffset, versionMadeBy, msDosCompatible, endOffset, filenameEncoding, commentEncoding, _yield$_awaitAsyncGen, _yield$_awaitAsyncGen2, filename, comment, entry;
  11538. return _regeneratorRuntime().wrap(function _loop$(_context) {
  11539. while (1) {
  11540. switch (_context.prev = _context.next) {
  11541. case 0:
  11542. fileEntry = new ZipEntry(reader, zipReader.config, zipReader.options);
  11543. if (!(getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE)) {
  11544. _context.next = 3;
  11545. break;
  11546. }
  11547. throw new Error(ERR_CENTRAL_DIRECTORY_NOT_FOUND);
  11548. case 3:
  11549. readCommonHeader(fileEntry, directoryView, offset + 6);
  11550. languageEncodingFlag = Boolean(fileEntry.bitFlag.languageEncodingFlag);
  11551. filenameOffset = offset + 46;
  11552. extraFieldOffset = filenameOffset + fileEntry.filenameLength;
  11553. commentOffset = extraFieldOffset + fileEntry.extraFieldLength;
  11554. versionMadeBy = getUint16(directoryView, offset + 4);
  11555. msDosCompatible = (versionMadeBy & 0) == 0;
  11556. Object.assign(fileEntry, {
  11557. versionMadeBy: versionMadeBy,
  11558. msDosCompatible: msDosCompatible,
  11559. compressedSize: 0,
  11560. uncompressedSize: 0,
  11561. commentLength: getUint16(directoryView, offset + 32),
  11562. directory: msDosCompatible && (getUint8(directoryView, offset + 38) & FILE_ATTR_MSDOS_DIR_MASK) == FILE_ATTR_MSDOS_DIR_MASK,
  11563. offset: getUint32(directoryView, offset + 42) + prependedDataLength,
  11564. internalFileAttribute: getUint32(directoryView, offset + 34),
  11565. externalFileAttribute: getUint32(directoryView, offset + 38),
  11566. rawFilename: directoryArray.subarray(filenameOffset, extraFieldOffset),
  11567. filenameUTF8: languageEncodingFlag,
  11568. commentUTF8: languageEncodingFlag,
  11569. rawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset)
  11570. });
  11571. endOffset = commentOffset + fileEntry.commentLength;
  11572. fileEntry.rawComment = directoryArray.subarray(commentOffset, endOffset);
  11573. filenameEncoding = getOptionValue$1(zipReader, options, "filenameEncoding");
  11574. commentEncoding = getOptionValue$1(zipReader, options, "commentEncoding");
  11575. _context.next = 17;
  11576. return _awaitAsyncGenerator(Promise.all([decodeText(fileEntry.rawFilename, fileEntry.filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437), decodeText(fileEntry.rawComment, fileEntry.commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437)]));
  11577. case 17:
  11578. _yield$_awaitAsyncGen = _context.sent;
  11579. _yield$_awaitAsyncGen2 = _slicedToArray(_yield$_awaitAsyncGen, 2);
  11580. filename = _yield$_awaitAsyncGen2[0];
  11581. comment = _yield$_awaitAsyncGen2[1];
  11582. fileEntry.filename = filename;
  11583. fileEntry.comment = comment;
  11584. if (!fileEntry.directory && fileEntry.filename.endsWith(DIRECTORY_SIGNATURE)) {
  11585. fileEntry.directory = true;
  11586. }
  11587. _context.next = 26;
  11588. return _awaitAsyncGenerator(readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6));
  11589. case 26:
  11590. entry = new Entry(fileEntry);
  11591. entry.getData = function (writer, options) {
  11592. return fileEntry.getData(writer, entry, options);
  11593. };
  11594. offset = endOffset;
  11595. if (options.onprogress) {
  11596. try {
  11597. options.onprogress(indexFile + 1, filesLength, new Entry(fileEntry));
  11598. } catch (_error) {// ignored
  11599. }
  11600. }
  11601. _context.next = 32;
  11602. return entry;
  11603. case 32:
  11604. case "end":
  11605. return _context.stop();
  11606. }
  11607. }
  11608. }, _loop);
  11609. });
  11610. indexFile = 0;
  11611. case 64:
  11612. if (!(indexFile < filesLength)) {
  11613. _context2.next = 69;
  11614. break;
  11615. }
  11616. return _context2.delegateYield(_loop(indexFile), "t0", 66);
  11617. case 66:
  11618. indexFile++;
  11619. _context2.next = 64;
  11620. break;
  11621. case 69:
  11622. return _context2.abrupt("return", true);
  11623. case 70:
  11624. case "end":
  11625. return _context2.stop();
  11626. }
  11627. }
  11628. }, _callee);
  11629. }))();
  11630. }
  11631. }, {
  11632. key: "getEntries",
  11633. value: function getEntries() {
  11634. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  11635. try {
  11636. var _this3 = this;
  11637. var entries = [];
  11638. var iter = _this3.getEntriesGenerator(options);
  11639. var curr = iter.next();
  11640. return _await(_continue(_for(function () {
  11641. return _await(!!curr, function (_curr) {
  11642. return !_curr.done;
  11643. });
  11644. }, void 0, function () {
  11645. var _push = entries.push;
  11646. return _await(curr, function (_curr2) {
  11647. _push.call(entries, _curr2.value);
  11648. curr = iter.next();
  11649. });
  11650. }), function () {
  11651. return entries;
  11652. }));
  11653. } catch (e) {
  11654. return Promise.reject(e);
  11655. }
  11656. }
  11657. }, {
  11658. key: "close",
  11659. value: function close() {
  11660. return _await();
  11661. }
  11662. }]);
  11663. return ZipReader;
  11664. }();
  11665. var ZipEntry = /*#__PURE__*/function () {
  11666. function ZipEntry(reader, config, options) {
  11667. _classCallCheck(this, ZipEntry);
  11668. Object.assign(this, {
  11669. reader: reader,
  11670. config: config,
  11671. options: options
  11672. });
  11673. }
  11674. _createClass(ZipEntry, [{
  11675. key: "getData",
  11676. value: function getData(writer, fileEntry) {
  11677. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  11678. try {
  11679. var _this5 = this;
  11680. var zipEntry = _this5;
  11681. var reader = zipEntry.reader,
  11682. offset = zipEntry.offset,
  11683. extraFieldAES = zipEntry.extraFieldAES,
  11684. compressionMethod = zipEntry.compressionMethod,
  11685. config = zipEntry.config,
  11686. bitFlag = zipEntry.bitFlag,
  11687. signature = zipEntry.signature,
  11688. rawLastModDate = zipEntry.rawLastModDate,
  11689. compressedSize = zipEntry.compressedSize;
  11690. var localDirectory = zipEntry.localDirectory = {};
  11691. return _await(_invoke(function () {
  11692. if (!reader.initialized) {
  11693. return _awaitIgnored(reader.init());
  11694. }
  11695. }, function () {
  11696. return _await(readUint8Array(reader, offset, 30), function (dataArray) {
  11697. var dataView = getDataView$1(dataArray);
  11698. var password = getOptionValue$1(zipEntry, options, "password");
  11699. password = password && password.length && password;
  11700. if (extraFieldAES) {
  11701. if (extraFieldAES.originalCompressionMethod != COMPRESSION_METHOD_AES) {
  11702. throw new Error(ERR_UNSUPPORTED_COMPRESSION);
  11703. }
  11704. }
  11705. if (compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE) {
  11706. throw new Error(ERR_UNSUPPORTED_COMPRESSION);
  11707. }
  11708. if (getUint32(dataView, 0) != LOCAL_FILE_HEADER_SIGNATURE) {
  11709. throw new Error(ERR_LOCAL_FILE_HEADER_NOT_FOUND);
  11710. }
  11711. readCommonHeader(localDirectory, dataView, 4);
  11712. return _await(readUint8Array(reader, offset, 30 + localDirectory.filenameLength + localDirectory.extraFieldLength), function (_readUint8Array) {
  11713. dataArray = _readUint8Array;
  11714. localDirectory.rawExtraField = dataArray.subarray(30 + localDirectory.filenameLength);
  11715. return _await(readCommonFooter(zipEntry, localDirectory, dataView, 4), function () {
  11716. fileEntry.lastAccessDate = localDirectory.lastAccessDate;
  11717. fileEntry.creationDate = localDirectory.creationDate;
  11718. var encrypted = zipEntry.encrypted && localDirectory.encrypted;
  11719. var zipCrypto = encrypted && !extraFieldAES;
  11720. if (encrypted) {
  11721. if (!zipCrypto && extraFieldAES.strength === undefined) {
  11722. throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
  11723. } else if (!password) {
  11724. throw new Error(ERR_ENCRYPTED);
  11725. }
  11726. }
  11727. return _await(createCodec(config.Inflate, {
  11728. codecType: CODEC_INFLATE,
  11729. password: password,
  11730. zipCrypto: zipCrypto,
  11731. encryptionStrength: extraFieldAES && extraFieldAES.strength,
  11732. signed: getOptionValue$1(zipEntry, options, "checkSignature"),
  11733. passwordVerification: zipCrypto && (bitFlag.dataDescriptor ? rawLastModDate >>> 8 & 0xFF : signature >>> 24 & 0xFF),
  11734. signature: signature,
  11735. compressed: compressionMethod != 0,
  11736. encrypted: encrypted,
  11737. useWebWorkers: getOptionValue$1(zipEntry, options, "useWebWorkers")
  11738. }, config), function (codec) {
  11739. return _invoke(function () {
  11740. if (!writer.initialized) {
  11741. return _awaitIgnored(writer.init());
  11742. }
  11743. }, function () {
  11744. var signal = getOptionValue$1(zipEntry, options, "signal");
  11745. var dataOffset = offset + 30 + localDirectory.filenameLength + localDirectory.extraFieldLength;
  11746. return _await(processData(codec, reader, writer, dataOffset, function () {
  11747. return compressedSize;
  11748. }, config, {
  11749. onprogress: options.onprogress,
  11750. signal: signal
  11751. }), function () {
  11752. return writer.getData();
  11753. });
  11754. });
  11755. });
  11756. });
  11757. });
  11758. });
  11759. }));
  11760. } catch (e) {
  11761. return Promise.reject(e);
  11762. }
  11763. }
  11764. }]);
  11765. return ZipEntry;
  11766. }();
  11767. function readCommonHeader(directory, dataView, offset) {
  11768. var rawBitFlag = directory.rawBitFlag = getUint16(dataView, offset + 2);
  11769. var encrypted = (rawBitFlag & BITFLAG_ENCRYPTED) == BITFLAG_ENCRYPTED;
  11770. var rawLastModDate = getUint32(dataView, offset + 6);
  11771. Object.assign(directory, {
  11772. encrypted: encrypted,
  11773. version: getUint16(dataView, offset),
  11774. bitFlag: {
  11775. level: (rawBitFlag & BITFLAG_LEVEL) >> 1,
  11776. dataDescriptor: (rawBitFlag & BITFLAG_DATA_DESCRIPTOR) == BITFLAG_DATA_DESCRIPTOR,
  11777. languageEncodingFlag: (rawBitFlag & BITFLAG_LANG_ENCODING_FLAG) == BITFLAG_LANG_ENCODING_FLAG
  11778. },
  11779. rawLastModDate: rawLastModDate,
  11780. lastModDate: getDate(rawLastModDate),
  11781. filenameLength: getUint16(dataView, offset + 22),
  11782. extraFieldLength: getUint16(dataView, offset + 24)
  11783. });
  11784. }
  11785. function readExtraFieldZip64(extraFieldZip64, directory) {
  11786. directory.zip64 = true;
  11787. var extraFieldView = getDataView$1(extraFieldZip64.data);
  11788. extraFieldZip64.values = [];
  11789. for (var indexValue = 0; indexValue < Math.floor(extraFieldZip64.data.length / 8); indexValue++) {
  11790. extraFieldZip64.values.push(getBigUint64(extraFieldView, 0 + indexValue * 8));
  11791. }
  11792. var missingProperties = ZIP64_PROPERTIES.filter(function (propertyName) {
  11793. return directory[propertyName] == MAX_32_BITS;
  11794. });
  11795. for (var indexMissingProperty = 0; indexMissingProperty < missingProperties.length; indexMissingProperty++) {
  11796. extraFieldZip64[missingProperties[indexMissingProperty]] = extraFieldZip64.values[indexMissingProperty];
  11797. }
  11798. ZIP64_PROPERTIES.forEach(function (propertyName) {
  11799. if (directory[propertyName] == MAX_32_BITS) {
  11800. if (extraFieldZip64[propertyName] !== undefined) {
  11801. directory[propertyName] = extraFieldZip64[propertyName];
  11802. } else {
  11803. throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
  11804. }
  11805. }
  11806. });
  11807. }
  11808. function readExtraFieldAES(extraFieldAES, directory, compressionMethod) {
  11809. var extraFieldView = getDataView$1(extraFieldAES.data);
  11810. extraFieldAES.vendorVersion = getUint8(extraFieldView, 0);
  11811. extraFieldAES.vendorId = getUint8(extraFieldView, 2);
  11812. var strength = getUint8(extraFieldView, 4);
  11813. extraFieldAES.strength = strength;
  11814. extraFieldAES.originalCompressionMethod = compressionMethod;
  11815. directory.compressionMethod = extraFieldAES.compressionMethod = getUint16(extraFieldView, 5);
  11816. }
  11817. function readExtraFieldNTFS(extraFieldNTFS, directory) {
  11818. var extraFieldView = getDataView$1(extraFieldNTFS.data);
  11819. var offsetExtraField = 4;
  11820. var tag1Data;
  11821. try {
  11822. while (offsetExtraField < extraFieldNTFS.data.length && !tag1Data) {
  11823. var tagValue = getUint16(extraFieldView, offsetExtraField);
  11824. var attributeSize = getUint16(extraFieldView, offsetExtraField + 2);
  11825. if (tagValue == EXTRAFIELD_TYPE_NTFS_TAG1) {
  11826. tag1Data = extraFieldNTFS.data.slice(offsetExtraField + 4, offsetExtraField + 4 + attributeSize);
  11827. }
  11828. offsetExtraField += 4 + attributeSize;
  11829. }
  11830. } catch (_error) {// ignored
  11831. }
  11832. try {
  11833. if (tag1Data && tag1Data.length == 24) {
  11834. var tag1View = getDataView$1(tag1Data);
  11835. var rawLastModDate = tag1View.getBigUint64(0, true);
  11836. var rawLastAccessDate = tag1View.getBigUint64(8, true);
  11837. var rawCreationDate = tag1View.getBigUint64(16, true);
  11838. Object.assign(extraFieldNTFS, {
  11839. rawLastModDate: rawLastModDate,
  11840. rawLastAccessDate: rawLastAccessDate,
  11841. rawCreationDate: rawCreationDate
  11842. });
  11843. var lastModDate = getDateNTFS(rawLastModDate);
  11844. var lastAccessDate = getDateNTFS(rawLastAccessDate);
  11845. var creationDate = getDateNTFS(rawCreationDate);
  11846. var extraFieldData = {
  11847. lastModDate: lastModDate,
  11848. lastAccessDate: lastAccessDate,
  11849. creationDate: creationDate
  11850. };
  11851. Object.assign(extraFieldNTFS, extraFieldData);
  11852. Object.assign(directory, extraFieldData);
  11853. }
  11854. } catch (_error) {// ignored
  11855. }
  11856. }
  11857. function readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory) {
  11858. var extraFieldView = getDataView$1(extraFieldExtendedTimestamp.data);
  11859. var flags = getUint8(extraFieldView, 0);
  11860. var timeProperties = [];
  11861. var timeRawProperties = [];
  11862. if ((flags & 0x1) == 0x1) {
  11863. timeProperties.push("lastModDate");
  11864. timeRawProperties.push("rawLastModDate");
  11865. }
  11866. if ((flags & 0x2) == 0x2) {
  11867. timeProperties.push("lastAccessDate");
  11868. timeRawProperties.push("rawLastAccessDate");
  11869. }
  11870. if ((flags & 0x4) == 0x4) {
  11871. timeProperties.push("creationDate");
  11872. timeRawProperties.push("rawCreationDate");
  11873. }
  11874. var offset = 1;
  11875. timeProperties.forEach(function (propertyName, indexProperty) {
  11876. if (extraFieldExtendedTimestamp.data.length >= offset + 4) {
  11877. var time = getUint32(extraFieldView, offset);
  11878. directory[propertyName] = extraFieldExtendedTimestamp[propertyName] = new Date(time * 1000);
  11879. var rawPropertyName = timeRawProperties[indexProperty];
  11880. extraFieldExtendedTimestamp[rawPropertyName] = time;
  11881. }
  11882. offset += 4;
  11883. });
  11884. }
  11885. function getOptionValue$1(zipReader, options, name) {
  11886. return options[name] === undefined ? zipReader.options[name] : options[name];
  11887. }
  11888. function getDate(timeRaw) {
  11889. var date = (timeRaw & 0xffff0000) >> 16,
  11890. time = timeRaw & 0x0000ffff;
  11891. try {
  11892. return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
  11893. } catch (_error) {// ignored
  11894. }
  11895. }
  11896. function getDateNTFS(timeRaw) {
  11897. return new Date(Number(timeRaw / BigInt(10000) - BigInt(11644473600000)));
  11898. }
  11899. function getUint8(view, offset) {
  11900. return view.getUint8(offset);
  11901. }
  11902. function getUint16(view, offset) {
  11903. return view.getUint16(offset, true);
  11904. }
  11905. function getUint32(view, offset) {
  11906. return view.getUint32(offset, true);
  11907. }
  11908. function getBigUint64(view, offset) {
  11909. return Number(view.getBigUint64(offset, true));
  11910. }
  11911. function setUint32$1(view, offset, value) {
  11912. view.setUint32(offset, value, true);
  11913. }
  11914. function getDataView$1(array) {
  11915. return new DataView(array.buffer);
  11916. }
  11917. function readUint8Array(reader, offset, size) {
  11918. return reader.readUint8Array(offset, size);
  11919. }
  11920. var collection = collection$2;
  11921. var collectionStrong = collectionStrong$2;
  11922. // `Set` constructor
  11923. // https://tc39.es/ecma262/#sec-set-objects
  11924. collection('Set', function (init) {
  11925. return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };
  11926. }, collectionStrong);
  11927. var DESCRIPTORS = descriptors;
  11928. var FUNCTION_NAME_EXISTS = functionName.EXISTS;
  11929. var uncurryThis = functionUncurryThis;
  11930. var defineProperty = objectDefineProperty.f;
  11931. var FunctionPrototype = Function.prototype;
  11932. var functionToString = uncurryThis(FunctionPrototype.toString);
  11933. var nameRE = /function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/;
  11934. var regExpExec = uncurryThis(nameRE.exec);
  11935. var NAME = 'name';
  11936. // Function instances `.name` property
  11937. // https://tc39.es/ecma262/#sec-function-instances-name
  11938. if (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {
  11939. defineProperty(FunctionPrototype, NAME, {
  11940. configurable: true,
  11941. get: function () {
  11942. try {
  11943. return regExpExec(nameRE, functionToString(this))[1];
  11944. } catch (error) {
  11945. return '';
  11946. }
  11947. }
  11948. });
  11949. }
  11950. var createTypedArrayConstructor = typedArrayConstructor.exports;
  11951. // `Uint16Array` constructor
  11952. // https://tc39.es/ecma262/#sec-typedarray-objects
  11953. createTypedArrayConstructor('Uint16', function (init) {
  11954. return function Uint16Array(data, byteOffset, length) {
  11955. return init(this, data, byteOffset, length);
  11956. };
  11957. });
  11958. var writeBlob = _async(function (writer, blob) {
  11959. var writeSlice = _async(function () {
  11960. return _invokeIgnored(function () {
  11961. if (start < blob.size) {
  11962. return _await(sliceAsArrayBuffer(blob, start, start + blockSize), function (arrayBuffer) {
  11963. return _await(writer.writeUint8Array(new Uint8Array(arrayBuffer)), function () {
  11964. start += blockSize;
  11965. return _callIgnored(writeSlice);
  11966. });
  11967. });
  11968. }
  11969. });
  11970. });
  11971. var start = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
  11972. var blockSize = 512 * 1024 * 1024;
  11973. return _callIgnored(writeSlice);
  11974. });
  11975. var closeFile = _async(function (zipWriter, comment, options) {
  11976. var writer = zipWriter.writer;
  11977. var files = zipWriter.files;
  11978. var offset = 0;
  11979. var directoryDataLength = 0;
  11980. var directoryOffset = zipWriter.offset;
  11981. var filesLength = files.size;
  11982. var _iterator = _createForOfIteratorHelper(files),
  11983. _step;
  11984. try {
  11985. for (_iterator.s(); !(_step = _iterator.n()).done;) {
  11986. var _step$value = _slicedToArray(_step.value, 2),
  11987. fileEntry = _step$value[1];
  11988. directoryDataLength += 46 + fileEntry.rawFilename.length + fileEntry.rawComment.length + fileEntry.rawExtraFieldZip64.length + fileEntry.rawExtraFieldAES.length + fileEntry.rawExtraFieldExtendedTimestamp.length + fileEntry.rawExtraFieldNTFS.length + fileEntry.rawExtraField.length;
  11989. }
  11990. } catch (err) {
  11991. _iterator.e(err);
  11992. } finally {
  11993. _iterator.f();
  11994. }
  11995. var zip64 = options.zip64 || zipWriter.options.zip64 || false;
  11996. if (directoryOffset >= MAX_32_BITS || directoryDataLength >= MAX_32_BITS || filesLength >= MAX_16_BITS) {
  11997. if (options.zip64 === false || zipWriter.options.zip64 === false) {
  11998. throw new Error(ERR_UNSUPPORTED_FORMAT);
  11999. } else {
  12000. zip64 = true;
  12001. }
  12002. }
  12003. var directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
  12004. var directoryView = getDataView(directoryArray);
  12005. if (comment && comment.length) {
  12006. if (comment.length <= MAX_16_BITS) {
  12007. setUint16(directoryView, offset + 20, comment.length);
  12008. } else {
  12009. throw new Error(ERR_INVALID_COMMENT);
  12010. }
  12011. }
  12012. var _iterator2 = _createForOfIteratorHelper(Array.from(files.values()).entries()),
  12013. _step2;
  12014. try {
  12015. for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
  12016. var _step2$value = _slicedToArray(_step2.value, 2),
  12017. indexFileEntry = _step2$value[0],
  12018. _fileEntry = _step2$value[1];
  12019. var rawFilename = _fileEntry.rawFilename,
  12020. rawExtraFieldZip64 = _fileEntry.rawExtraFieldZip64,
  12021. rawExtraFieldAES = _fileEntry.rawExtraFieldAES,
  12022. rawExtraField = _fileEntry.rawExtraField,
  12023. rawComment = _fileEntry.rawComment,
  12024. versionMadeBy = _fileEntry.versionMadeBy,
  12025. headerArray = _fileEntry.headerArray,
  12026. directory = _fileEntry.directory,
  12027. _zip = _fileEntry.zip64,
  12028. msDosCompatible = _fileEntry.msDosCompatible,
  12029. internalFileAttribute = _fileEntry.internalFileAttribute,
  12030. externalFileAttribute = _fileEntry.externalFileAttribute;
  12031. var rawExtraFieldExtendedTimestamp = void 0;
  12032. var rawExtraFieldNTFS = void 0;
  12033. if (_fileEntry.extendedTimestamp) {
  12034. rawExtraFieldNTFS = _fileEntry.rawExtraFieldNTFS;
  12035. rawExtraFieldExtendedTimestamp = new Uint8Array(9);
  12036. var extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);
  12037. setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
  12038. setUint16(extraFieldExtendedTimestampView, 2, rawExtraFieldExtendedTimestamp.length - 4);
  12039. setUint8(extraFieldExtendedTimestampView, 4, 0x1);
  12040. setUint32(extraFieldExtendedTimestampView, 5, Math.floor(_fileEntry.lastModDate.getTime() / 1000));
  12041. } else {
  12042. rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array(0);
  12043. }
  12044. var extraFieldLength = rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length + rawExtraField.length;
  12045. setUint32(directoryView, offset, CENTRAL_FILE_HEADER_SIGNATURE);
  12046. setUint16(directoryView, offset + 4, versionMadeBy);
  12047. arraySet(directoryArray, headerArray, offset + 6);
  12048. setUint16(directoryView, offset + 30, extraFieldLength);
  12049. setUint16(directoryView, offset + 32, rawComment.length);
  12050. setUint32(directoryView, offset + 34, internalFileAttribute);
  12051. if (externalFileAttribute) {
  12052. setUint32(directoryView, offset + 38, externalFileAttribute);
  12053. } else if (directory && msDosCompatible) {
  12054. setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
  12055. }
  12056. if (_zip) {
  12057. setUint32(directoryView, offset + 42, MAX_32_BITS);
  12058. } else {
  12059. setUint32(directoryView, offset + 42, _fileEntry.offset);
  12060. }
  12061. arraySet(directoryArray, rawFilename, offset + 46);
  12062. arraySet(directoryArray, rawExtraFieldZip64, offset + 46 + rawFilename.length);
  12063. arraySet(directoryArray, rawExtraFieldAES, offset + 46 + rawFilename.length + rawExtraFieldZip64.length);
  12064. arraySet(directoryArray, rawExtraFieldExtendedTimestamp, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length);
  12065. arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length);
  12066. arraySet(directoryArray, rawExtraField, offset + 46 + rawFilename.length + rawExtraFieldZip64.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
  12067. arraySet(directoryArray, rawComment, offset + 46 + rawFilename.length + extraFieldLength);
  12068. offset += 46 + rawFilename.length + extraFieldLength + rawComment.length;
  12069. if (options.onprogress) {
  12070. try {
  12071. options.onprogress(indexFileEntry + 1, files.size, new Entry(_fileEntry));
  12072. } catch (_error) {// ignored
  12073. }
  12074. }
  12075. }
  12076. } catch (err) {
  12077. _iterator2.e(err);
  12078. } finally {
  12079. _iterator2.f();
  12080. }
  12081. if (zip64) {
  12082. setUint32(directoryView, offset, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);
  12083. setBigUint64(directoryView, offset + 4, BigInt(44));
  12084. setUint16(directoryView, offset + 12, 45);
  12085. setUint16(directoryView, offset + 14, 45);
  12086. setBigUint64(directoryView, offset + 24, BigInt(filesLength));
  12087. setBigUint64(directoryView, offset + 32, BigInt(filesLength));
  12088. setBigUint64(directoryView, offset + 40, BigInt(directoryDataLength));
  12089. setBigUint64(directoryView, offset + 48, BigInt(directoryOffset));
  12090. setUint32(directoryView, offset + 56, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
  12091. setBigUint64(directoryView, offset + 64, BigInt(directoryOffset) + BigInt(directoryDataLength));
  12092. setUint32(directoryView, offset + 72, ZIP64_TOTAL_NUMBER_OF_DISKS);
  12093. filesLength = MAX_16_BITS;
  12094. directoryOffset = MAX_32_BITS;
  12095. directoryDataLength = MAX_32_BITS;
  12096. offset += 76;
  12097. }
  12098. setUint32(directoryView, offset, END_OF_CENTRAL_DIR_SIGNATURE);
  12099. setUint16(directoryView, offset + 8, filesLength);
  12100. setUint16(directoryView, offset + 10, filesLength);
  12101. setUint32(directoryView, offset + 12, directoryDataLength);
  12102. setUint32(directoryView, offset + 16, directoryOffset);
  12103. return _await(writer.writeUint8Array(directoryArray), function () {
  12104. return _invokeIgnored(function () {
  12105. if (comment && comment.length) {
  12106. return _awaitIgnored(writer.writeUint8Array(comment));
  12107. }
  12108. });
  12109. });
  12110. });
  12111. var createFileEntry = _async(function (reader, writer, config, options) {
  12112. var rawFilename = options.rawFilename,
  12113. lastAccessDate = options.lastAccessDate,
  12114. creationDate = options.creationDate,
  12115. password = options.password,
  12116. level = options.level,
  12117. zip64 = options.zip64,
  12118. zipCrypto = options.zipCrypto,
  12119. dataDescriptor = options.dataDescriptor,
  12120. dataDescriptorSignature = options.dataDescriptorSignature,
  12121. directory = options.directory,
  12122. version = options.version,
  12123. versionMadeBy = options.versionMadeBy,
  12124. rawComment = options.rawComment,
  12125. rawExtraField = options.rawExtraField,
  12126. useWebWorkers = options.useWebWorkers,
  12127. onprogress = options.onprogress,
  12128. signal = options.signal,
  12129. encryptionStrength = options.encryptionStrength,
  12130. extendedTimestamp = options.extendedTimestamp,
  12131. msDosCompatible = options.msDosCompatible,
  12132. internalFileAttribute = options.internalFileAttribute,
  12133. externalFileAttribute = options.externalFileAttribute;
  12134. var encrypted = Boolean(password && password.length);
  12135. var compressed = level !== 0 && !directory;
  12136. var rawExtraFieldAES;
  12137. if (encrypted && !zipCrypto) {
  12138. rawExtraFieldAES = new Uint8Array(EXTRAFIELD_DATA_AES.length + 2);
  12139. var extraFieldAESView = getDataView(rawExtraFieldAES);
  12140. setUint16(extraFieldAESView, 0, EXTRAFIELD_TYPE_AES);
  12141. arraySet(rawExtraFieldAES, EXTRAFIELD_DATA_AES, 2);
  12142. setUint8(extraFieldAESView, 8, encryptionStrength);
  12143. } else {
  12144. rawExtraFieldAES = new Uint8Array(0);
  12145. }
  12146. var rawExtraFieldNTFS;
  12147. var rawExtraFieldExtendedTimestamp;
  12148. if (extendedTimestamp) {
  12149. rawExtraFieldExtendedTimestamp = new Uint8Array(9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0));
  12150. var extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);
  12151. setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
  12152. setUint16(extraFieldExtendedTimestampView, 2, rawExtraFieldExtendedTimestamp.length - 4);
  12153. var extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
  12154. setUint8(extraFieldExtendedTimestampView, 4, extraFieldExtendedTimestampFlag);
  12155. setUint32(extraFieldExtendedTimestampView, 5, Math.floor(options.lastModDate.getTime() / 1000));
  12156. if (lastAccessDate) {
  12157. setUint32(extraFieldExtendedTimestampView, 9, Math.floor(lastAccessDate.getTime() / 1000));
  12158. }
  12159. if (creationDate) {
  12160. setUint32(extraFieldExtendedTimestampView, 13, Math.floor(creationDate.getTime() / 1000));
  12161. }
  12162. try {
  12163. rawExtraFieldNTFS = new Uint8Array(36);
  12164. var extraFieldNTFSView = getDataView(rawExtraFieldNTFS);
  12165. var lastModTimeNTFS = getTimeNTFS(options.lastModDate);
  12166. setUint16(extraFieldNTFSView, 0, EXTRAFIELD_TYPE_NTFS);
  12167. setUint16(extraFieldNTFSView, 2, 32);
  12168. setUint16(extraFieldNTFSView, 8, EXTRAFIELD_TYPE_NTFS_TAG1);
  12169. setUint16(extraFieldNTFSView, 10, 24);
  12170. setBigUint64(extraFieldNTFSView, 12, lastModTimeNTFS);
  12171. setBigUint64(extraFieldNTFSView, 20, getTimeNTFS(lastAccessDate) || lastModTimeNTFS);
  12172. setBigUint64(extraFieldNTFSView, 28, getTimeNTFS(creationDate) || lastModTimeNTFS);
  12173. } catch (_error) {
  12174. rawExtraFieldNTFS = new Uint8Array(0);
  12175. }
  12176. } else {
  12177. rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array(0);
  12178. }
  12179. var fileEntry = {
  12180. version: version || VERSION_DEFLATE,
  12181. versionMadeBy: versionMadeBy,
  12182. zip64: zip64,
  12183. directory: Boolean(directory),
  12184. filenameUTF8: true,
  12185. rawFilename: rawFilename,
  12186. commentUTF8: true,
  12187. rawComment: rawComment,
  12188. rawExtraFieldZip64: zip64 ? new Uint8Array(EXTRAFIELD_LENGTH_ZIP64 + 4) : new Uint8Array(0),
  12189. rawExtraFieldExtendedTimestamp: rawExtraFieldExtendedTimestamp,
  12190. rawExtraFieldNTFS: rawExtraFieldNTFS,
  12191. rawExtraFieldAES: rawExtraFieldAES,
  12192. rawExtraField: rawExtraField,
  12193. extendedTimestamp: extendedTimestamp,
  12194. msDosCompatible: msDosCompatible,
  12195. internalFileAttribute: internalFileAttribute,
  12196. externalFileAttribute: externalFileAttribute
  12197. };
  12198. var uncompressedSize = fileEntry.uncompressedSize = 0;
  12199. var bitFlag = BITFLAG_LANG_ENCODING_FLAG;
  12200. if (dataDescriptor) {
  12201. bitFlag = bitFlag | BITFLAG_DATA_DESCRIPTOR;
  12202. }
  12203. var compressionMethod = COMPRESSION_METHOD_STORE;
  12204. if (compressed) {
  12205. compressionMethod = COMPRESSION_METHOD_DEFLATE;
  12206. }
  12207. if (zip64) {
  12208. fileEntry.version = fileEntry.version > VERSION_ZIP64 ? fileEntry.version : VERSION_ZIP64;
  12209. }
  12210. if (encrypted) {
  12211. bitFlag = bitFlag | BITFLAG_ENCRYPTED;
  12212. if (!zipCrypto) {
  12213. fileEntry.version = fileEntry.version > VERSION_AES ? fileEntry.version : VERSION_AES;
  12214. compressionMethod = COMPRESSION_METHOD_AES;
  12215. if (compressed) {
  12216. fileEntry.rawExtraFieldAES[9] = COMPRESSION_METHOD_DEFLATE;
  12217. }
  12218. }
  12219. }
  12220. fileEntry.compressionMethod = compressionMethod;
  12221. var headerArray = fileEntry.headerArray = new Uint8Array(26);
  12222. var headerView = getDataView(headerArray);
  12223. setUint16(headerView, 0, fileEntry.version);
  12224. setUint16(headerView, 2, bitFlag);
  12225. setUint16(headerView, 4, compressionMethod);
  12226. var dateArray = new Uint32Array(1);
  12227. var dateView = getDataView(dateArray);
  12228. var lastModDate;
  12229. if (options.lastModDate < MIN_DATE) {
  12230. lastModDate = MIN_DATE;
  12231. } else if (options.lastModDate > MAX_DATE) {
  12232. lastModDate = MAX_DATE;
  12233. } else {
  12234. lastModDate = options.lastModDate;
  12235. }
  12236. setUint16(dateView, 0, (lastModDate.getHours() << 6 | lastModDate.getMinutes()) << 5 | lastModDate.getSeconds() / 2);
  12237. setUint16(dateView, 2, (lastModDate.getFullYear() - 1980 << 4 | lastModDate.getMonth() + 1) << 5 | lastModDate.getDate());
  12238. var rawLastModDate = dateArray[0];
  12239. setUint32(headerView, 6, rawLastModDate);
  12240. setUint16(headerView, 22, rawFilename.length);
  12241. var extraFieldLength = rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length + fileEntry.rawExtraField.length;
  12242. setUint16(headerView, 24, extraFieldLength);
  12243. var localHeaderArray = new Uint8Array(30 + rawFilename.length + extraFieldLength);
  12244. var localHeaderView = getDataView(localHeaderArray);
  12245. setUint32(localHeaderView, 0, LOCAL_FILE_HEADER_SIGNATURE);
  12246. arraySet(localHeaderArray, headerArray, 4);
  12247. arraySet(localHeaderArray, rawFilename, 30);
  12248. arraySet(localHeaderArray, rawExtraFieldAES, 30 + rawFilename.length);
  12249. arraySet(localHeaderArray, rawExtraFieldExtendedTimestamp, 30 + rawFilename.length + rawExtraFieldAES.length);
  12250. arraySet(localHeaderArray, rawExtraFieldNTFS, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length);
  12251. arraySet(localHeaderArray, fileEntry.rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
  12252. var result;
  12253. var compressedSize = 0;
  12254. return _invoke(function () {
  12255. if (reader) {
  12256. return _await(createCodec(config.Deflate, {
  12257. codecType: CODEC_DEFLATE,
  12258. level: level,
  12259. password: password,
  12260. encryptionStrength: encryptionStrength,
  12261. zipCrypto: encrypted && zipCrypto,
  12262. passwordVerification: encrypted && zipCrypto && rawLastModDate >> 8 & 0xFF,
  12263. signed: true,
  12264. compressed: compressed,
  12265. encrypted: encrypted,
  12266. useWebWorkers: useWebWorkers
  12267. }, config), function (codec) {
  12268. return _await(writer.writeUint8Array(localHeaderArray), function () {
  12269. fileEntry.dataWritten = true;
  12270. return _await(processData(codec, reader, writer, 0, function () {
  12271. return reader.size;
  12272. }, config, {
  12273. onprogress: onprogress,
  12274. signal: signal
  12275. }), function (_processData) {
  12276. result = _processData;
  12277. uncompressedSize = fileEntry.uncompressedSize = reader.size;
  12278. compressedSize = result.length;
  12279. });
  12280. });
  12281. });
  12282. } else {
  12283. return _await(writer.writeUint8Array(localHeaderArray), function () {
  12284. fileEntry.dataWritten = true;
  12285. });
  12286. }
  12287. }, function () {
  12288. var dataDescriptorArray = new Uint8Array(0);
  12289. var dataDescriptorView,
  12290. dataDescriptorOffset = 0;
  12291. if (dataDescriptor) {
  12292. dataDescriptorArray = new Uint8Array(zip64 ? dataDescriptorSignature ? 24 : 20 : dataDescriptorSignature ? 16 : 12);
  12293. dataDescriptorView = getDataView(dataDescriptorArray);
  12294. if (dataDescriptorSignature) {
  12295. dataDescriptorOffset = 4;
  12296. setUint32(dataDescriptorView, 0, DATA_DESCRIPTOR_RECORD_SIGNATURE);
  12297. }
  12298. }
  12299. if (reader) {
  12300. var signature = result.signature;
  12301. if ((!encrypted || zipCrypto) && signature !== undefined) {
  12302. setUint32(headerView, 10, signature);
  12303. fileEntry.signature = signature;
  12304. if (dataDescriptor) {
  12305. setUint32(dataDescriptorView, dataDescriptorOffset, signature);
  12306. }
  12307. }
  12308. if (zip64) {
  12309. var rawExtraFieldZip64View = getDataView(fileEntry.rawExtraFieldZip64);
  12310. setUint16(rawExtraFieldZip64View, 0, EXTRAFIELD_TYPE_ZIP64);
  12311. setUint16(rawExtraFieldZip64View, 2, EXTRAFIELD_LENGTH_ZIP64);
  12312. setUint32(headerView, 14, MAX_32_BITS);
  12313. setBigUint64(rawExtraFieldZip64View, 12, BigInt(compressedSize));
  12314. setUint32(headerView, 18, MAX_32_BITS);
  12315. setBigUint64(rawExtraFieldZip64View, 4, BigInt(uncompressedSize));
  12316. if (dataDescriptor) {
  12317. setBigUint64(dataDescriptorView, dataDescriptorOffset + 4, BigInt(compressedSize));
  12318. setBigUint64(dataDescriptorView, dataDescriptorOffset + 12, BigInt(uncompressedSize));
  12319. }
  12320. } else {
  12321. setUint32(headerView, 14, compressedSize);
  12322. setUint32(headerView, 18, uncompressedSize);
  12323. if (dataDescriptor) {
  12324. setUint32(dataDescriptorView, dataDescriptorOffset + 4, compressedSize);
  12325. setUint32(dataDescriptorView, dataDescriptorOffset + 8, uncompressedSize);
  12326. }
  12327. }
  12328. }
  12329. return _invoke(function () {
  12330. if (dataDescriptor) {
  12331. return _awaitIgnored(writer.writeUint8Array(dataDescriptorArray));
  12332. }
  12333. }, function () {
  12334. var length = localHeaderArray.length + compressedSize + dataDescriptorArray.length;
  12335. Object.assign(fileEntry, {
  12336. compressedSize: compressedSize,
  12337. lastModDate: lastModDate,
  12338. rawLastModDate: rawLastModDate,
  12339. creationDate: creationDate,
  12340. lastAccessDate: lastAccessDate,
  12341. encrypted: encrypted,
  12342. length: length
  12343. });
  12344. return fileEntry;
  12345. });
  12346. });
  12347. });
  12348. var getFileEntry = _async(function (zipWriter, name, reader, options) {
  12349. var files = zipWriter.files;
  12350. var writer = zipWriter.writer;
  12351. var previousFileEntry = Array.from(files.values()).pop();
  12352. var fileEntry = {};
  12353. var bufferedWrite;
  12354. var resolveLockUnbufferedWrite;
  12355. var resolveLockCurrentFileEntry;
  12356. files.set(name, fileEntry);
  12357. return _finallyRethrows(function () {
  12358. return _catch(function () {
  12359. var lockPreviousFileEntry;
  12360. var fileWriter;
  12361. var lockCurrentFileEntry;
  12362. if (options.keepOrder) {
  12363. lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
  12364. }
  12365. fileEntry.lock = lockCurrentFileEntry = new Promise(function (resolve) {
  12366. return resolveLockCurrentFileEntry = resolve;
  12367. });
  12368. return _invoke(function () {
  12369. if (options.bufferedWrite || zipWriter.lockWrite || !options.dataDescriptor) {
  12370. fileWriter = new BlobWriter();
  12371. fileWriter.init();
  12372. bufferedWrite = true;
  12373. } else {
  12374. zipWriter.lockWrite = new Promise(function (resolve) {
  12375. return resolveLockUnbufferedWrite = resolve;
  12376. });
  12377. return _invoke(function () {
  12378. if (!writer.initialized) {
  12379. return _awaitIgnored(writer.init());
  12380. }
  12381. }, function () {
  12382. fileWriter = writer;
  12383. });
  12384. }
  12385. }, function () {
  12386. return _await(createFileEntry(reader, fileWriter, zipWriter.config, options), function (_createFileEntry) {
  12387. fileEntry = _createFileEntry;
  12388. fileEntry.lock = lockCurrentFileEntry;
  12389. files.set(name, fileEntry);
  12390. fileEntry.filename = name;
  12391. return _invoke(function () {
  12392. if (bufferedWrite) {
  12393. var indexWrittenData = 0;
  12394. var blob = fileWriter.getData();
  12395. return _await(Promise.all([zipWriter.lockWrite, lockPreviousFileEntry]), function () {
  12396. var pendingFileEntry;
  12397. return _continue(_do(function () {
  12398. pendingFileEntry = Array.from(files.values()).find(function (fileEntry) {
  12399. return fileEntry.writingBufferedData;
  12400. });
  12401. return _invokeIgnored(function () {
  12402. if (pendingFileEntry) {
  12403. return _awaitIgnored(pendingFileEntry.lock);
  12404. }
  12405. });
  12406. }, function () {
  12407. return !!pendingFileEntry && !!pendingFileEntry.lock;
  12408. }), function () {
  12409. fileEntry.writingBufferedData = true;
  12410. return _invoke(function () {
  12411. if (!options.dataDescriptor) {
  12412. var headerLength = 26;
  12413. return _await(sliceAsArrayBuffer(blob, 0, headerLength), function (arrayBuffer) {
  12414. var arrayBufferView = new DataView(arrayBuffer);
  12415. if (!fileEntry.encrypted || options.zipCrypto) {
  12416. setUint32(arrayBufferView, 14, fileEntry.signature);
  12417. }
  12418. if (fileEntry.zip64) {
  12419. setUint32(arrayBufferView, 18, MAX_32_BITS);
  12420. setUint32(arrayBufferView, 22, MAX_32_BITS);
  12421. } else {
  12422. setUint32(arrayBufferView, 18, fileEntry.compressedSize);
  12423. setUint32(arrayBufferView, 22, fileEntry.uncompressedSize);
  12424. }
  12425. return _await(writer.writeUint8Array(new Uint8Array(arrayBuffer)), function () {
  12426. indexWrittenData = headerLength;
  12427. });
  12428. });
  12429. }
  12430. }, function () {
  12431. return _await(writeBlob(writer, blob, indexWrittenData), function () {
  12432. delete fileEntry.writingBufferedData;
  12433. });
  12434. });
  12435. });
  12436. });
  12437. }
  12438. }, function () {
  12439. fileEntry.offset = zipWriter.offset;
  12440. if (fileEntry.zip64) {
  12441. var rawExtraFieldZip64View = getDataView(fileEntry.rawExtraFieldZip64);
  12442. setBigUint64(rawExtraFieldZip64View, 20, BigInt(fileEntry.offset));
  12443. } else if (fileEntry.offset >= MAX_32_BITS) {
  12444. throw new Error(ERR_UNSUPPORTED_FORMAT);
  12445. }
  12446. zipWriter.offset += fileEntry.length;
  12447. return fileEntry;
  12448. });
  12449. });
  12450. });
  12451. }, function (error) {
  12452. if (bufferedWrite && fileEntry.writingBufferedData || !bufferedWrite && fileEntry.dataWritten) {
  12453. error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
  12454. if (fileEntry.uncompressedSize) {
  12455. zipWriter.offset += fileEntry.uncompressedSize;
  12456. }
  12457. }
  12458. files.delete(name);
  12459. throw error;
  12460. });
  12461. }, function (_wasThrown2, _result3) {
  12462. resolveLockCurrentFileEntry();
  12463. if (resolveLockUnbufferedWrite) {
  12464. resolveLockUnbufferedWrite();
  12465. }
  12466. return _rethrow(_wasThrown2, _result3);
  12467. });
  12468. });
  12469. var addFile = _async(function (zipWriter, name, reader, options) {
  12470. name = name.trim();
  12471. if (options.directory && !name.endsWith(DIRECTORY_SIGNATURE)) {
  12472. name += DIRECTORY_SIGNATURE;
  12473. } else {
  12474. options.directory = name.endsWith(DIRECTORY_SIGNATURE);
  12475. }
  12476. if (zipWriter.files.has(name)) {
  12477. throw new Error(ERR_DUPLICATED_NAME);
  12478. }
  12479. var rawFilename = encodeText(name);
  12480. if (rawFilename.length > MAX_16_BITS) {
  12481. throw new Error(ERR_INVALID_ENTRY_NAME);
  12482. }
  12483. var comment = options.comment || "";
  12484. var rawComment = encodeText(comment);
  12485. if (rawComment.length > MAX_16_BITS) {
  12486. throw new Error(ERR_INVALID_ENTRY_COMMENT);
  12487. }
  12488. var version = zipWriter.options.version || options.version || 0;
  12489. if (version > MAX_16_BITS) {
  12490. throw new Error(ERR_INVALID_VERSION);
  12491. }
  12492. var versionMadeBy = zipWriter.options.versionMadeBy || options.versionMadeBy || 20;
  12493. if (versionMadeBy > MAX_16_BITS) {
  12494. throw new Error(ERR_INVALID_VERSION);
  12495. }
  12496. var lastModDate = getOptionValue(zipWriter, options, "lastModDate") || new Date();
  12497. var lastAccessDate = getOptionValue(zipWriter, options, "lastAccessDate");
  12498. var creationDate = getOptionValue(zipWriter, options, "creationDate");
  12499. var password = getOptionValue(zipWriter, options, "password");
  12500. var encryptionStrength = getOptionValue(zipWriter, options, "encryptionStrength") || 3;
  12501. var zipCrypto = getOptionValue(zipWriter, options, "zipCrypto");
  12502. if (password !== undefined && encryptionStrength !== undefined && (encryptionStrength < 1 || encryptionStrength > 3)) {
  12503. throw new Error(ERR_INVALID_ENCRYPTION_STRENGTH);
  12504. }
  12505. var rawExtraField = new Uint8Array(0);
  12506. var extraField = options.extraField;
  12507. if (extraField) {
  12508. var extraFieldSize = 0;
  12509. var offset = 0;
  12510. extraField.forEach(function (data) {
  12511. return extraFieldSize += 4 + data.length;
  12512. });
  12513. rawExtraField = new Uint8Array(extraFieldSize);
  12514. extraField.forEach(function (data, type) {
  12515. if (type > MAX_16_BITS) {
  12516. throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
  12517. }
  12518. if (data.length > MAX_16_BITS) {
  12519. throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
  12520. }
  12521. arraySet(rawExtraField, new Uint16Array([type]), offset);
  12522. arraySet(rawExtraField, new Uint16Array([data.length]), offset + 2);
  12523. arraySet(rawExtraField, data, offset + 4);
  12524. offset += 4 + data.length;
  12525. });
  12526. }
  12527. var extendedTimestamp = getOptionValue(zipWriter, options, "extendedTimestamp");
  12528. if (extendedTimestamp === undefined) {
  12529. extendedTimestamp = true;
  12530. }
  12531. var maximumCompressedSize = 0;
  12532. var keepOrder = getOptionValue(zipWriter, options, "keepOrder");
  12533. if (keepOrder === undefined) {
  12534. keepOrder = true;
  12535. }
  12536. var uncompressedSize = 0;
  12537. var msDosCompatible = getOptionValue(zipWriter, options, "msDosCompatible");
  12538. if (msDosCompatible === undefined) {
  12539. msDosCompatible = true;
  12540. }
  12541. var internalFileAttribute = getOptionValue(zipWriter, options, "internalFileAttribute") || 0;
  12542. var externalFileAttribute = getOptionValue(zipWriter, options, "externalFileAttribute") || 0;
  12543. return _invoke(function () {
  12544. if (reader) {
  12545. return _invoke(function () {
  12546. if (!reader.initialized) {
  12547. return _awaitIgnored(reader.init());
  12548. }
  12549. }, function () {
  12550. uncompressedSize = reader.size;
  12551. maximumCompressedSize = getMaximumCompressedSize(uncompressedSize);
  12552. });
  12553. }
  12554. }, function () {
  12555. var zip64 = options.zip64 || zipWriter.options.zip64 || false;
  12556. if (zipWriter.offset + zipWriter.pendingCompressedSize >= MAX_32_BITS || uncompressedSize >= MAX_32_BITS || maximumCompressedSize >= MAX_32_BITS) {
  12557. if (options.zip64 === false || zipWriter.options.zip64 === false || !keepOrder) {
  12558. throw new Error(ERR_UNSUPPORTED_FORMAT);
  12559. } else {
  12560. zip64 = true;
  12561. }
  12562. }
  12563. zipWriter.pendingCompressedSize += maximumCompressedSize;
  12564. return _await(Promise.resolve(), function () {
  12565. var level = getOptionValue(zipWriter, options, "level");
  12566. var useWebWorkers = getOptionValue(zipWriter, options, "useWebWorkers");
  12567. var bufferedWrite = getOptionValue(zipWriter, options, "bufferedWrite");
  12568. var dataDescriptor = getOptionValue(zipWriter, options, "dataDescriptor");
  12569. var dataDescriptorSignature = getOptionValue(zipWriter, options, "dataDescriptorSignature");
  12570. var signal = getOptionValue(zipWriter, options, "signal");
  12571. if (dataDescriptor === undefined) {
  12572. dataDescriptor = true;
  12573. }
  12574. if (dataDescriptor && dataDescriptorSignature === undefined) {
  12575. dataDescriptorSignature = false;
  12576. }
  12577. return _await(getFileEntry(zipWriter, name, reader, Object.assign({}, options, {
  12578. rawFilename: rawFilename,
  12579. rawComment: rawComment,
  12580. version: version,
  12581. versionMadeBy: versionMadeBy,
  12582. lastModDate: lastModDate,
  12583. lastAccessDate: lastAccessDate,
  12584. creationDate: creationDate,
  12585. rawExtraField: rawExtraField,
  12586. zip64: zip64,
  12587. password: password,
  12588. level: level,
  12589. useWebWorkers: useWebWorkers,
  12590. encryptionStrength: encryptionStrength,
  12591. extendedTimestamp: extendedTimestamp,
  12592. zipCrypto: zipCrypto,
  12593. bufferedWrite: bufferedWrite,
  12594. keepOrder: keepOrder,
  12595. dataDescriptor: dataDescriptor,
  12596. dataDescriptorSignature: dataDescriptorSignature,
  12597. signal: signal,
  12598. msDosCompatible: msDosCompatible,
  12599. internalFileAttribute: internalFileAttribute,
  12600. externalFileAttribute: externalFileAttribute
  12601. })), function (fileEntry) {
  12602. if (maximumCompressedSize) {
  12603. zipWriter.pendingCompressedSize -= maximumCompressedSize;
  12604. }
  12605. Object.assign(fileEntry, {
  12606. name: name,
  12607. comment: comment,
  12608. extraField: extraField
  12609. });
  12610. return new Entry(fileEntry);
  12611. });
  12612. });
  12613. });
  12614. });
  12615. var ERR_DUPLICATED_NAME = "File already exists";
  12616. var ERR_INVALID_COMMENT = "Zip file comment exceeds 64KB";
  12617. var ERR_INVALID_ENTRY_COMMENT = "File entry comment exceeds 64KB";
  12618. var ERR_INVALID_ENTRY_NAME = "File entry name exceeds 64KB";
  12619. var ERR_INVALID_VERSION = "Version exceeds 65535";
  12620. var ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
  12621. var ERR_INVALID_EXTRAFIELD_TYPE = "Extra field type exceeds 65535";
  12622. var ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
  12623. var ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported";
  12624. var EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
  12625. var EXTRAFIELD_LENGTH_ZIP64 = 24;
  12626. var workers = 0;
  12627. var ZipWriter = /*#__PURE__*/function () {
  12628. function ZipWriter(writer) {
  12629. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  12630. _classCallCheck(this, ZipWriter);
  12631. Object.assign(this, {
  12632. writer: writer,
  12633. options: options,
  12634. config: getConfiguration(),
  12635. files: new Map(),
  12636. offset: writer.size,
  12637. pendingCompressedSize: 0,
  12638. pendingEntries: [],
  12639. pendingAddFileCalls: new Set()
  12640. });
  12641. }
  12642. _createClass(ZipWriter, [{
  12643. key: "add",
  12644. value: function add() {
  12645. var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
  12646. var reader = arguments.length > 1 ? arguments[1] : undefined;
  12647. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  12648. try {
  12649. var _this2 = this;
  12650. var zipWriter = _this2;
  12651. return _await(function () {
  12652. if (workers < zipWriter.config.maxWorkers) {
  12653. workers++;
  12654. var promiseAddFile;
  12655. return _finallyRethrows(function () {
  12656. promiseAddFile = addFile(zipWriter, name, reader, options);
  12657. _this2.pendingAddFileCalls.add(promiseAddFile);
  12658. return _await(promiseAddFile);
  12659. }, function (_wasThrown, _result) {
  12660. _this2.pendingAddFileCalls.delete(promiseAddFile);
  12661. workers--;
  12662. var pendingEntry = zipWriter.pendingEntries.shift();
  12663. if (pendingEntry) {
  12664. zipWriter.add(pendingEntry.name, pendingEntry.reader, pendingEntry.options).then(pendingEntry.resolve).catch(pendingEntry.reject);
  12665. }
  12666. return _rethrow(_wasThrown, _result);
  12667. });
  12668. } else {
  12669. return new Promise(function (resolve, reject) {
  12670. return zipWriter.pendingEntries.push({
  12671. name: name,
  12672. reader: reader,
  12673. options: options,
  12674. resolve: resolve,
  12675. reject: reject
  12676. });
  12677. });
  12678. }
  12679. }());
  12680. } catch (e) {
  12681. return Promise.reject(e);
  12682. }
  12683. }
  12684. }, {
  12685. key: "close",
  12686. value: function close(comment) {
  12687. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  12688. try {
  12689. var _this4 = this;
  12690. if (comment === undefined) comment = new Uint8Array(0);
  12691. return _await(_continue(_for(function () {
  12692. return !!_this4.pendingAddFileCalls.size;
  12693. }, void 0, function () {
  12694. return _awaitIgnored(Promise.all(Array.from(_this4.pendingAddFileCalls)));
  12695. }), function () {
  12696. return _await(closeFile(_this4, comment, options), function () {
  12697. return _this4.writer.getData();
  12698. });
  12699. }));
  12700. } catch (e) {
  12701. return Promise.reject(e);
  12702. }
  12703. }
  12704. }]);
  12705. return ZipWriter;
  12706. }();
  12707. function sliceAsArrayBuffer(blob, start, end) {
  12708. if (blob.arrayBuffer) {
  12709. if (start || end) {
  12710. return blob.slice(start, end).arrayBuffer();
  12711. } else {
  12712. return blob.arrayBuffer();
  12713. }
  12714. } else {
  12715. var fileReader = new FileReader();
  12716. return new Promise(function (resolve, reject) {
  12717. fileReader.onload = function (event) {
  12718. return resolve(event.target.result);
  12719. };
  12720. fileReader.onerror = function () {
  12721. return reject(fileReader.error);
  12722. };
  12723. fileReader.readAsArrayBuffer(start || end ? blob.slice(start, end) : blob);
  12724. });
  12725. }
  12726. }
  12727. function getTimeNTFS(date) {
  12728. if (date) {
  12729. return (BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000);
  12730. }
  12731. }
  12732. function getOptionValue(zipWriter, options, name) {
  12733. return options[name] === undefined ? zipWriter.options[name] : options[name];
  12734. }
  12735. function getMaximumCompressedSize(uncompressedSize) {
  12736. return uncompressedSize + 5 * (Math.floor(uncompressedSize / 16383) + 1);
  12737. }
  12738. function setUint8(view, offset, value) {
  12739. view.setUint8(offset, value);
  12740. }
  12741. function setUint16(view, offset, value) {
  12742. view.setUint16(offset, value, true);
  12743. }
  12744. function setUint32(view, offset, value) {
  12745. view.setUint32(offset, value, true);
  12746. }
  12747. function setBigUint64(view, offset, value) {
  12748. view.setBigUint64(offset, value, true);
  12749. }
  12750. function arraySet(array, typedArray, offset) {
  12751. array.set(typedArray, offset);
  12752. }
  12753. function getDataView(array) {
  12754. return new DataView(array.buffer);
  12755. }
  12756. /*
  12757. Copyright (c) 2022 Gildas Lormeau. All rights reserved.
  12758. Redistribution and use in source and binary forms, with or without
  12759. modification, are permitted provided that the following conditions are met:
  12760. 1. Redistributions of source code must retain the above copyright notice,
  12761. this list of conditions and the following disclaimer.
  12762. 2. Redistributions in binary form must reproduce the above copyright
  12763. notice, this list of conditions and the following disclaimer in
  12764. the documentation and/or other materials provided with the distribution.
  12765. 3. The names of the authors may not be used to endorse or promote products
  12766. derived from this software without specific prior written permission.
  12767. THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  12768. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  12769. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  12770. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  12771. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  12772. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  12773. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  12774. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  12775. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  12776. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  12777. */
  12778. var baseURL;
  12779. try {
  12780. 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-es5.js', document.baseURI).href));
  12781. } catch (error) {// ignored
  12782. }
  12783. configure({
  12784. baseURL: baseURL
  12785. });
  12786. d(configure);
  12787. exports.BlobReader = BlobReader;
  12788. exports.BlobWriter = BlobWriter;
  12789. exports.Data64URIReader = Data64URIReader;
  12790. exports.Data64URIWriter = Data64URIWriter;
  12791. exports.ERR_ABORT = ERR_ABORT;
  12792. exports.ERR_BAD_FORMAT = ERR_BAD_FORMAT;
  12793. exports.ERR_CENTRAL_DIRECTORY_NOT_FOUND = ERR_CENTRAL_DIRECTORY_NOT_FOUND;
  12794. exports.ERR_DUPLICATED_NAME = ERR_DUPLICATED_NAME;
  12795. exports.ERR_ENCRYPTED = ERR_ENCRYPTED;
  12796. exports.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND;
  12797. exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
  12798. exports.ERR_EOCDR_ZIP64_NOT_FOUND = ERR_EOCDR_ZIP64_NOT_FOUND;
  12799. exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
  12800. exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
  12801. exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
  12802. exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
  12803. exports.ERR_INVALID_ENTRY_COMMENT = ERR_INVALID_ENTRY_COMMENT;
  12804. exports.ERR_INVALID_ENTRY_NAME = ERR_INVALID_ENTRY_NAME;
  12805. exports.ERR_INVALID_EXTRAFIELD_DATA = ERR_INVALID_EXTRAFIELD_DATA;
  12806. exports.ERR_INVALID_EXTRAFIELD_TYPE = ERR_INVALID_EXTRAFIELD_TYPE;
  12807. exports.ERR_INVALID_PASSWORD = ERR_INVALID_PASSWORD;
  12808. exports.ERR_INVALID_SIGNATURE = ERR_INVALID_SIGNATURE;
  12809. exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
  12810. exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
  12811. exports.ERR_NOT_SEEKABLE_READER = ERR_NOT_SEEKABLE_READER;
  12812. exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION;
  12813. exports.ERR_UNSUPPORTED_ENCRYPTION = ERR_UNSUPPORTED_ENCRYPTION;
  12814. exports.ERR_UNSUPPORTED_FORMAT = ERR_UNSUPPORTED_FORMAT;
  12815. exports.HttpRangeReader = HttpRangeReader;
  12816. exports.HttpReader = HttpReader;
  12817. exports.ReadableStreamReader = ReadableStreamReader;
  12818. exports.Reader = Reader;
  12819. exports.TextReader = TextReader;
  12820. exports.TextWriter = TextWriter;
  12821. exports.Uint8ArrayReader = Uint8ArrayReader;
  12822. exports.Uint8ArrayWriter = Uint8ArrayWriter;
  12823. exports.WritableStreamWriter = WritableStreamWriter;
  12824. exports.Writer = Writer;
  12825. exports.ZipReader = ZipReader;
  12826. exports.ZipWriter = ZipWriter;
  12827. exports.configure = configure;
  12828. exports.getMimeType = getMimeType;
  12829. exports.initShimAsyncCodec = streamCodecShim;
  12830. exports.terminateWorkers = terminateWorkers;
  12831. Object.defineProperty(exports, '__esModule', { value: true });
  12832. }));