app-service.js 3.1 MB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593
  1. if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
  2. Promise.prototype.finally = function(callback) {
  3. const promise = this.constructor;
  4. return this.then(
  5. (value) => promise.resolve(callback()).then(() => value),
  6. (reason) => promise.resolve(callback()).then(() => {
  7. throw reason;
  8. })
  9. );
  10. };
  11. }
  12. ;
  13. if (typeof uni !== "undefined" && uni && uni.requireGlobal) {
  14. const global2 = uni.requireGlobal();
  15. ArrayBuffer = global2.ArrayBuffer;
  16. Int8Array = global2.Int8Array;
  17. Uint8Array = global2.Uint8Array;
  18. Uint8ClampedArray = global2.Uint8ClampedArray;
  19. Int16Array = global2.Int16Array;
  20. Uint16Array = global2.Uint16Array;
  21. Int32Array = global2.Int32Array;
  22. Uint32Array = global2.Uint32Array;
  23. Float32Array = global2.Float32Array;
  24. Float64Array = global2.Float64Array;
  25. BigInt64Array = global2.BigInt64Array;
  26. BigUint64Array = global2.BigUint64Array;
  27. }
  28. ;
  29. if (uni.restoreGlobal) {
  30. uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval);
  31. }
  32. (function(vue) {
  33. "use strict";
  34. const _sfc_main$10 = /* @__PURE__ */ vue.defineComponent({
  35. __name: "CustomNavbar",
  36. setup(__props, { expose: __expose }) {
  37. __expose();
  38. const { safeAreaInsets } = uni.getSystemInfoSync();
  39. const __returned__ = { safeAreaInsets };
  40. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  41. return __returned__;
  42. }
  43. });
  44. const _imports_0$2 = "/static/images/logo.png";
  45. const _export_sfc = (sfc, props) => {
  46. const target = sfc.__vccOpts || sfc;
  47. for (const [key, val] of props) {
  48. target[key] = val;
  49. }
  50. return target;
  51. };
  52. function _sfc_render$$(_ctx, _cache, $props, $setup, $data, $options) {
  53. return vue.openBlock(), vue.createElementBlock(
  54. "view",
  55. {
  56. class: "navbar",
  57. style: vue.normalizeStyle({ paddingTop: $setup.safeAreaInsets.top + 10 + "px" })
  58. },
  59. [
  60. vue.createCommentVNode(" logo文字 "),
  61. vue.createElementVNode("view", { class: "logo" }, [
  62. vue.createElementVNode("image", {
  63. class: "logo-image",
  64. src: _imports_0$2
  65. })
  66. ])
  67. ],
  68. 4
  69. /* STYLE */
  70. );
  71. }
  72. const CustomNavbar = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["render", _sfc_render$$], ["__scopeId", "data-v-ff0d84a2"], ["__file", "E:/demo/hmrabbit/src/pages/index/components/CustomNavbar.vue"]]);
  73. const _sfc_main$$ = /* @__PURE__ */ vue.defineComponent({
  74. __name: "CategoryPanel",
  75. props: {
  76. list: { type: Array, required: true }
  77. },
  78. setup(__props, { expose: __expose }) {
  79. __expose();
  80. const __returned__ = {};
  81. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  82. return __returned__;
  83. }
  84. });
  85. function _sfc_render$_(_ctx, _cache, $props, $setup, $data, $options) {
  86. return vue.openBlock(), vue.createElementBlock("view", { class: "category" }, [
  87. (vue.openBlock(true), vue.createElementBlock(
  88. vue.Fragment,
  89. null,
  90. vue.renderList($props.list, (item) => {
  91. return vue.openBlock(), vue.createElementBlock("navigator", {
  92. class: "category-item",
  93. "hover-class": "none",
  94. url: item.target,
  95. key: item.id
  96. }, [
  97. vue.createElementVNode(
  98. "view",
  99. {
  100. class: "icon",
  101. style: vue.normalizeStyle({
  102. "background-image": `linear-gradient(45deg, ${item.colors[0]} 0%, ${item.colors[1]} 99%, ${item.colors[0]} 100%)`
  103. })
  104. },
  105. [
  106. vue.createElementVNode("image", {
  107. class: "",
  108. src: item.icon
  109. }, null, 8, ["src"])
  110. ],
  111. 4
  112. /* STYLE */
  113. ),
  114. vue.createElementVNode(
  115. "text",
  116. { class: "text" },
  117. vue.toDisplayString(item.name),
  118. 1
  119. /* TEXT */
  120. )
  121. ], 8, ["url"]);
  122. }),
  123. 128
  124. /* KEYED_FRAGMENT */
  125. ))
  126. ]);
  127. }
  128. const CategoryPanel = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$_], ["__scopeId", "data-v-44ae5a81"], ["__file", "E:/demo/hmrabbit/src/pages/index/components/CategoryPanel.vue"]]);
  129. const _sfc_main$_ = /* @__PURE__ */ vue.defineComponent({
  130. __name: "index",
  131. setup(__props, { expose: __expose }) {
  132. __expose();
  133. const categoryList = vue.ref([
  134. {
  135. colors: ["#4facfe", "#00f2fe"],
  136. target: "/pages/inbound/inbound",
  137. icon: "/static/home/inbound.png",
  138. name: "入库"
  139. },
  140. {
  141. colors: ["#6991c7", "#a3bded"],
  142. target: "/pages/weigh/weigh",
  143. icon: "/static/home/weigh.png",
  144. name: "称重"
  145. },
  146. {
  147. colors: ["#005bea", "#00c6fb"],
  148. target: "/pages/outbound/outbound",
  149. icon: "/static/home/outbound.png",
  150. name: "出库"
  151. },
  152. {
  153. colors: ["#667eea", "#764ba2"],
  154. target: "/pages/warehouseScan/warehouseScan",
  155. icon: "/static/home/houscan.png",
  156. name: "仓库扫描"
  157. },
  158. {
  159. colors: ["#f83600", "#f9d423"],
  160. target: "/pages/printer/printer",
  161. icon: "/static/home/houscan.png",
  162. name: "打印"
  163. },
  164. {
  165. colors: ["#ff0844", "#ffb199"],
  166. target: "/pages/scanLotno/scanLotno",
  167. icon: "/static/home/link.png",
  168. name: "托盘/批次"
  169. },
  170. {
  171. colors: ["#29323c", "#485563"],
  172. target: "/pages/waybillNo/waybillNo",
  173. icon: "/static/home/link.png",
  174. name: "库位绑定"
  175. },
  176. {
  177. colors: ["#2af598", "#009efd"],
  178. target: "/pages/pickup/waybillPickUpOrder",
  179. icon: "/static/home/pickup.png",
  180. name: "取件单"
  181. },
  182. {
  183. colors: ["#4facfe", "#00f2fe"],
  184. target: "/pages/waybillDeliveryOrder/waybillDeliveryOrder",
  185. icon: "/static/home/dispatch.png",
  186. name: "派送单"
  187. }
  188. ]);
  189. const __returned__ = { categoryList, CustomNavbar, CategoryPanel };
  190. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  191. return __returned__;
  192. }
  193. });
  194. function _sfc_render$Z(_ctx, _cache, $props, $setup, $data, $options) {
  195. return vue.openBlock(), vue.createElementBlock("view", { class: "viewport" }, [
  196. vue.createCommentVNode(" 自定义导航栏 "),
  197. vue.createVNode($setup["CustomNavbar"]),
  198. vue.createCommentVNode(" 滚动容器 "),
  199. vue.createElementVNode("scroll-view", {
  200. "enable-back-to-top": "",
  201. "refresher-enabled": false,
  202. class: "scroll-view",
  203. "scroll-y": ""
  204. }, [
  205. vue.createCommentVNode(" 分类面板 "),
  206. vue.createVNode($setup["CategoryPanel"], { list: $setup.categoryList }, null, 8, ["list"])
  207. ])
  208. ]);
  209. }
  210. const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$Z], ["__file", "E:/demo/hmrabbit/src/pages/index/index.vue"]]);
  211. const _sfc_main$Z = /* @__PURE__ */ vue.defineComponent({
  212. __name: "XtxSwiper",
  213. props: {
  214. list: { type: Array, required: true }
  215. },
  216. setup(__props, { expose: __expose }) {
  217. __expose();
  218. const activeIndex = vue.ref(0);
  219. const onChange = (ev) => {
  220. activeIndex.value = ev.detail.current;
  221. };
  222. const __returned__ = { activeIndex, onChange };
  223. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  224. return __returned__;
  225. }
  226. });
  227. function _sfc_render$Y(_ctx, _cache, $props, $setup, $data, $options) {
  228. return vue.openBlock(), vue.createElementBlock("view", { class: "carousel" }, [
  229. vue.createElementVNode(
  230. "swiper",
  231. {
  232. circular: true,
  233. autoplay: false,
  234. interval: 3e3,
  235. onChange: $setup.onChange
  236. },
  237. [
  238. (vue.openBlock(true), vue.createElementBlock(
  239. vue.Fragment,
  240. null,
  241. vue.renderList($props.list, (item) => {
  242. return vue.openBlock(), vue.createElementBlock("swiper-item", {
  243. key: item.id
  244. }, [
  245. vue.createElementVNode("navigator", {
  246. url: "/pages/index/index",
  247. "hover-class": "none",
  248. class: "navigator"
  249. }, [
  250. vue.createElementVNode("image", {
  251. mode: "aspectFill",
  252. class: "image",
  253. src: item.imgUrl
  254. }, null, 8, ["src"])
  255. ])
  256. ]);
  257. }),
  258. 128
  259. /* KEYED_FRAGMENT */
  260. ))
  261. ],
  262. 32
  263. /* NEED_HYDRATION */
  264. ),
  265. vue.createCommentVNode(" 指示点 "),
  266. vue.createElementVNode("view", { class: "indicator" }, [
  267. (vue.openBlock(true), vue.createElementBlock(
  268. vue.Fragment,
  269. null,
  270. vue.renderList($props.list, (item, index) => {
  271. return vue.openBlock(), vue.createElementBlock(
  272. "text",
  273. {
  274. key: item.id,
  275. class: vue.normalizeClass(["dot", { active: index === $setup.activeIndex }])
  276. },
  277. null,
  278. 2
  279. /* CLASS */
  280. );
  281. }),
  282. 128
  283. /* KEYED_FRAGMENT */
  284. ))
  285. ])
  286. ]);
  287. }
  288. const __easycom_0$c = /* @__PURE__ */ _export_sfc(_sfc_main$Z, [["render", _sfc_render$Y], ["__scopeId", "data-v-17cc3903"], ["__file", "E:/demo/hmrabbit/src/components/XtxSwiper.vue"]]);
  289. const ON_SHOW = "onShow";
  290. const ON_HIDE = "onHide";
  291. const ON_LAUNCH = "onLaunch";
  292. const ON_LOAD = "onLoad";
  293. const ON_UNLOAD = "onUnload";
  294. const ON_BACK_PRESS = "onBackPress";
  295. const ON_NAVIGATION_BAR_BUTTON_TAP = "onNavigationBarButtonTap";
  296. function requireNativePlugin(name) {
  297. return weex.requireModule(name);
  298. }
  299. function formatAppLog(type, filename, ...args) {
  300. if (uni.__log__) {
  301. uni.__log__(type, filename, ...args);
  302. } else {
  303. console[type].apply(console, [...args, filename]);
  304. }
  305. }
  306. function resolveEasycom(component, easycom2) {
  307. return typeof component === "string" ? easycom2 : component;
  308. }
  309. const createHook = (lifecycle) => (hook, target = vue.getCurrentInstance()) => {
  310. !vue.isInSSRComponentSetup && vue.injectHook(lifecycle, hook, target);
  311. };
  312. const onShow = /* @__PURE__ */ createHook(ON_SHOW);
  313. const onHide = /* @__PURE__ */ createHook(ON_HIDE);
  314. const onLaunch = /* @__PURE__ */ createHook(ON_LAUNCH);
  315. const onLoad = /* @__PURE__ */ createHook(ON_LOAD);
  316. const onUnload = /* @__PURE__ */ createHook(ON_UNLOAD);
  317. const onBackPress = /* @__PURE__ */ createHook(ON_BACK_PRESS);
  318. const onNavigationBarButtonTap = /* @__PURE__ */ createHook(ON_NAVIGATION_BAR_BUTTON_TAP);
  319. var isVue2 = false;
  320. function set$1(target, key, val) {
  321. if (Array.isArray(target)) {
  322. target.length = Math.max(target.length, key);
  323. target.splice(key, 1, val);
  324. return val;
  325. }
  326. target[key] = val;
  327. return val;
  328. }
  329. function del(target, key) {
  330. if (Array.isArray(target)) {
  331. target.splice(key, 1);
  332. return;
  333. }
  334. delete target[key];
  335. }
  336. function getDevtoolsGlobalHook() {
  337. return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;
  338. }
  339. function getTarget() {
  340. return typeof navigator !== "undefined" && typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {};
  341. }
  342. const isProxyAvailable = typeof Proxy === "function";
  343. const HOOK_SETUP = "devtools-plugin:setup";
  344. const HOOK_PLUGIN_SETTINGS_SET = "plugin:settings:set";
  345. let supported;
  346. let perf;
  347. function isPerformanceSupported() {
  348. var _a;
  349. if (supported !== void 0) {
  350. return supported;
  351. }
  352. if (typeof window !== "undefined" && window.performance) {
  353. supported = true;
  354. perf = window.performance;
  355. } else if (typeof global !== "undefined" && ((_a = global.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {
  356. supported = true;
  357. perf = global.perf_hooks.performance;
  358. } else {
  359. supported = false;
  360. }
  361. return supported;
  362. }
  363. function now() {
  364. return isPerformanceSupported() ? perf.now() : Date.now();
  365. }
  366. class ApiProxy {
  367. constructor(plugin, hook) {
  368. this.target = null;
  369. this.targetQueue = [];
  370. this.onQueue = [];
  371. this.plugin = plugin;
  372. this.hook = hook;
  373. const defaultSettings = {};
  374. if (plugin.settings) {
  375. for (const id in plugin.settings) {
  376. const item = plugin.settings[id];
  377. defaultSettings[id] = item.defaultValue;
  378. }
  379. }
  380. const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;
  381. let currentSettings = Object.assign({}, defaultSettings);
  382. try {
  383. const raw = localStorage.getItem(localSettingsSaveId);
  384. const data = JSON.parse(raw);
  385. Object.assign(currentSettings, data);
  386. } catch (e2) {
  387. }
  388. this.fallbacks = {
  389. getSettings() {
  390. return currentSettings;
  391. },
  392. setSettings(value) {
  393. try {
  394. localStorage.setItem(localSettingsSaveId, JSON.stringify(value));
  395. } catch (e2) {
  396. }
  397. currentSettings = value;
  398. },
  399. now() {
  400. return now();
  401. }
  402. };
  403. if (hook) {
  404. hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {
  405. if (pluginId === this.plugin.id) {
  406. this.fallbacks.setSettings(value);
  407. }
  408. });
  409. }
  410. this.proxiedOn = new Proxy({}, {
  411. get: (_target, prop) => {
  412. if (this.target) {
  413. return this.target.on[prop];
  414. } else {
  415. return (...args) => {
  416. this.onQueue.push({
  417. method: prop,
  418. args
  419. });
  420. };
  421. }
  422. }
  423. });
  424. this.proxiedTarget = new Proxy({}, {
  425. get: (_target, prop) => {
  426. if (this.target) {
  427. return this.target[prop];
  428. } else if (prop === "on") {
  429. return this.proxiedOn;
  430. } else if (Object.keys(this.fallbacks).includes(prop)) {
  431. return (...args) => {
  432. this.targetQueue.push({
  433. method: prop,
  434. args,
  435. resolve: () => {
  436. }
  437. });
  438. return this.fallbacks[prop](...args);
  439. };
  440. } else {
  441. return (...args) => {
  442. return new Promise((resolve) => {
  443. this.targetQueue.push({
  444. method: prop,
  445. args,
  446. resolve
  447. });
  448. });
  449. };
  450. }
  451. }
  452. });
  453. }
  454. async setRealTarget(target) {
  455. this.target = target;
  456. for (const item of this.onQueue) {
  457. this.target.on[item.method](...item.args);
  458. }
  459. for (const item of this.targetQueue) {
  460. item.resolve(await this.target[item.method](...item.args));
  461. }
  462. }
  463. }
  464. function setupDevtoolsPlugin(pluginDescriptor, setupFn) {
  465. const descriptor = pluginDescriptor;
  466. const target = getTarget();
  467. const hook = getDevtoolsGlobalHook();
  468. const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;
  469. if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {
  470. hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);
  471. } else {
  472. const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;
  473. const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];
  474. list.push({
  475. pluginDescriptor: descriptor,
  476. setupFn,
  477. proxy
  478. });
  479. if (proxy)
  480. setupFn(proxy.proxiedTarget);
  481. }
  482. }
  483. /*!
  484. * pinia v2.0.27
  485. * (c) 2022 Eduardo San Martin Morote
  486. * @license MIT
  487. */
  488. let activePinia;
  489. const setActivePinia = (pinia2) => activePinia = pinia2;
  490. const piniaSymbol = Symbol("pinia");
  491. function isPlainObject(o2) {
  492. return o2 && typeof o2 === "object" && Object.prototype.toString.call(o2) === "[object Object]" && typeof o2.toJSON !== "function";
  493. }
  494. var MutationType;
  495. (function(MutationType2) {
  496. MutationType2["direct"] = "direct";
  497. MutationType2["patchObject"] = "patch object";
  498. MutationType2["patchFunction"] = "patch function";
  499. })(MutationType || (MutationType = {}));
  500. const IS_CLIENT = typeof window !== "undefined";
  501. const USE_DEVTOOLS = IS_CLIENT;
  502. const _global = /* @__PURE__ */ (() => typeof window === "object" && window.window === window ? window : typeof self === "object" && self.self === self ? self : typeof global === "object" && global.global === global ? global : typeof globalThis === "object" ? globalThis : { HTMLElement: null })();
  503. function bom(blob, { autoBom = false } = {}) {
  504. if (autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
  505. return new Blob([String.fromCharCode(65279), blob], { type: blob.type });
  506. }
  507. return blob;
  508. }
  509. function download(url, name, opts) {
  510. const xhr = new XMLHttpRequest();
  511. xhr.open("GET", url);
  512. xhr.responseType = "blob";
  513. xhr.onload = function() {
  514. saveAs(xhr.response, name, opts);
  515. };
  516. xhr.onerror = function() {
  517. console.error("could not download file");
  518. };
  519. xhr.send();
  520. }
  521. function corsEnabled(url) {
  522. const xhr = new XMLHttpRequest();
  523. xhr.open("HEAD", url, false);
  524. try {
  525. xhr.send();
  526. } catch (e2) {
  527. }
  528. return xhr.status >= 200 && xhr.status <= 299;
  529. }
  530. function click(node) {
  531. try {
  532. node.dispatchEvent(new MouseEvent("click"));
  533. } catch (e2) {
  534. const evt = document.createEvent("MouseEvents");
  535. evt.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
  536. node.dispatchEvent(evt);
  537. }
  538. }
  539. const _navigator = typeof navigator === "object" ? navigator : { userAgent: "" };
  540. const isMacOSWebView = /* @__PURE__ */ (() => /Macintosh/.test(_navigator.userAgent) && /AppleWebKit/.test(_navigator.userAgent) && !/Safari/.test(_navigator.userAgent))();
  541. const saveAs = !IS_CLIENT ? () => {
  542. } : (
  543. // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program
  544. typeof HTMLAnchorElement !== "undefined" && "download" in HTMLAnchorElement.prototype && !isMacOSWebView ? downloadSaveAs : (
  545. // Use msSaveOrOpenBlob as a second approach
  546. "msSaveOrOpenBlob" in _navigator ? msSaveAs : (
  547. // Fallback to using FileReader and a popup
  548. fileSaverSaveAs
  549. )
  550. )
  551. );
  552. function downloadSaveAs(blob, name = "download", opts) {
  553. const a2 = document.createElement("a");
  554. a2.download = name;
  555. a2.rel = "noopener";
  556. if (typeof blob === "string") {
  557. a2.href = blob;
  558. if (a2.origin !== location.origin) {
  559. if (corsEnabled(a2.href)) {
  560. download(blob, name, opts);
  561. } else {
  562. a2.target = "_blank";
  563. click(a2);
  564. }
  565. } else {
  566. click(a2);
  567. }
  568. } else {
  569. a2.href = URL.createObjectURL(blob);
  570. setTimeout(function() {
  571. URL.revokeObjectURL(a2.href);
  572. }, 4e4);
  573. setTimeout(function() {
  574. click(a2);
  575. }, 0);
  576. }
  577. }
  578. function msSaveAs(blob, name = "download", opts) {
  579. if (typeof blob === "string") {
  580. if (corsEnabled(blob)) {
  581. download(blob, name, opts);
  582. } else {
  583. const a2 = document.createElement("a");
  584. a2.href = blob;
  585. a2.target = "_blank";
  586. setTimeout(function() {
  587. click(a2);
  588. });
  589. }
  590. } else {
  591. navigator.msSaveOrOpenBlob(bom(blob, opts), name);
  592. }
  593. }
  594. function fileSaverSaveAs(blob, name, opts, popup2) {
  595. popup2 = popup2 || open("", "_blank");
  596. if (popup2) {
  597. popup2.document.title = popup2.document.body.innerText = "downloading...";
  598. }
  599. if (typeof blob === "string")
  600. return download(blob, name, opts);
  601. const force = blob.type === "application/octet-stream";
  602. const isSafari = /constructor/i.test(String(_global.HTMLElement)) || "safari" in _global;
  603. const isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent);
  604. if ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== "undefined") {
  605. const reader = new FileReader();
  606. reader.onloadend = function() {
  607. let url = reader.result;
  608. if (typeof url !== "string") {
  609. popup2 = null;
  610. throw new Error("Wrong reader.result type");
  611. }
  612. url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, "data:attachment/file;");
  613. if (popup2) {
  614. popup2.location.href = url;
  615. } else {
  616. location.assign(url);
  617. }
  618. popup2 = null;
  619. };
  620. reader.readAsDataURL(blob);
  621. } else {
  622. const url = URL.createObjectURL(blob);
  623. if (popup2)
  624. popup2.location.assign(url);
  625. else
  626. location.href = url;
  627. popup2 = null;
  628. setTimeout(function() {
  629. URL.revokeObjectURL(url);
  630. }, 4e4);
  631. }
  632. }
  633. function toastMessage(message, type) {
  634. const piniaMessage = "🍍 " + message;
  635. if (typeof __VUE_DEVTOOLS_TOAST__ === "function") {
  636. __VUE_DEVTOOLS_TOAST__(piniaMessage, type);
  637. } else if (type === "error") {
  638. console.error(piniaMessage);
  639. } else if (type === "warn") {
  640. console.warn(piniaMessage);
  641. } else {
  642. console.log(piniaMessage);
  643. }
  644. }
  645. function isPinia(o2) {
  646. return "_a" in o2 && "install" in o2;
  647. }
  648. function checkClipboardAccess() {
  649. if (!("clipboard" in navigator)) {
  650. toastMessage(`Your browser doesn't support the Clipboard API`, "error");
  651. return true;
  652. }
  653. }
  654. function checkNotFocusedError(error) {
  655. if (error instanceof Error && error.message.toLowerCase().includes("document is not focused")) {
  656. toastMessage('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.', "warn");
  657. return true;
  658. }
  659. return false;
  660. }
  661. async function actionGlobalCopyState(pinia2) {
  662. if (checkClipboardAccess())
  663. return;
  664. try {
  665. await navigator.clipboard.writeText(JSON.stringify(pinia2.state.value));
  666. toastMessage("Global state copied to clipboard.");
  667. } catch (error) {
  668. if (checkNotFocusedError(error))
  669. return;
  670. toastMessage(`Failed to serialize the state. Check the console for more details.`, "error");
  671. console.error(error);
  672. }
  673. }
  674. async function actionGlobalPasteState(pinia2) {
  675. if (checkClipboardAccess())
  676. return;
  677. try {
  678. pinia2.state.value = JSON.parse(await navigator.clipboard.readText());
  679. toastMessage("Global state pasted from clipboard.");
  680. } catch (error) {
  681. if (checkNotFocusedError(error))
  682. return;
  683. toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, "error");
  684. console.error(error);
  685. }
  686. }
  687. async function actionGlobalSaveState(pinia2) {
  688. try {
  689. saveAs(new Blob([JSON.stringify(pinia2.state.value)], {
  690. type: "text/plain;charset=utf-8"
  691. }), "pinia-state.json");
  692. } catch (error) {
  693. toastMessage(`Failed to export the state as JSON. Check the console for more details.`, "error");
  694. console.error(error);
  695. }
  696. }
  697. let fileInput;
  698. function getFileOpener() {
  699. if (!fileInput) {
  700. fileInput = document.createElement("input");
  701. fileInput.type = "file";
  702. fileInput.accept = ".json";
  703. }
  704. function openFile() {
  705. return new Promise((resolve, reject) => {
  706. fileInput.onchange = async () => {
  707. const files = fileInput.files;
  708. if (!files)
  709. return resolve(null);
  710. const file = files.item(0);
  711. if (!file)
  712. return resolve(null);
  713. return resolve({ text: await file.text(), file });
  714. };
  715. fileInput.oncancel = () => resolve(null);
  716. fileInput.onerror = reject;
  717. fileInput.click();
  718. });
  719. }
  720. return openFile;
  721. }
  722. async function actionGlobalOpenStateFile(pinia2) {
  723. try {
  724. const open2 = await getFileOpener();
  725. const result = await open2();
  726. if (!result)
  727. return;
  728. const { text, file } = result;
  729. pinia2.state.value = JSON.parse(text);
  730. toastMessage(`Global state imported from "${file.name}".`);
  731. } catch (error) {
  732. toastMessage(`Failed to export the state as JSON. Check the console for more details.`, "error");
  733. console.error(error);
  734. }
  735. }
  736. function formatDisplay(display) {
  737. return {
  738. _custom: {
  739. display
  740. }
  741. };
  742. }
  743. const PINIA_ROOT_LABEL = "🍍 Pinia (root)";
  744. const PINIA_ROOT_ID = "_root";
  745. function formatStoreForInspectorTree(store) {
  746. return isPinia(store) ? {
  747. id: PINIA_ROOT_ID,
  748. label: PINIA_ROOT_LABEL
  749. } : {
  750. id: store.$id,
  751. label: store.$id
  752. };
  753. }
  754. function formatStoreForInspectorState(store) {
  755. if (isPinia(store)) {
  756. const storeNames = Array.from(store._s.keys());
  757. const storeMap = store._s;
  758. const state2 = {
  759. state: storeNames.map((storeId) => ({
  760. editable: true,
  761. key: storeId,
  762. value: store.state.value[storeId]
  763. })),
  764. getters: storeNames.filter((id) => storeMap.get(id)._getters).map((id) => {
  765. const store2 = storeMap.get(id);
  766. return {
  767. editable: false,
  768. key: id,
  769. value: store2._getters.reduce((getters, key) => {
  770. getters[key] = store2[key];
  771. return getters;
  772. }, {})
  773. };
  774. })
  775. };
  776. return state2;
  777. }
  778. const state = {
  779. state: Object.keys(store.$state).map((key) => ({
  780. editable: true,
  781. key,
  782. value: store.$state[key]
  783. }))
  784. };
  785. if (store._getters && store._getters.length) {
  786. state.getters = store._getters.map((getterName) => ({
  787. editable: false,
  788. key: getterName,
  789. value: store[getterName]
  790. }));
  791. }
  792. if (store._customProperties.size) {
  793. state.customProperties = Array.from(store._customProperties).map((key) => ({
  794. editable: true,
  795. key,
  796. value: store[key]
  797. }));
  798. }
  799. return state;
  800. }
  801. function formatEventData(events) {
  802. if (!events)
  803. return {};
  804. if (Array.isArray(events)) {
  805. return events.reduce((data, event) => {
  806. data.keys.push(event.key);
  807. data.operations.push(event.type);
  808. data.oldValue[event.key] = event.oldValue;
  809. data.newValue[event.key] = event.newValue;
  810. return data;
  811. }, {
  812. oldValue: {},
  813. keys: [],
  814. operations: [],
  815. newValue: {}
  816. });
  817. } else {
  818. return {
  819. operation: formatDisplay(events.type),
  820. key: formatDisplay(events.key),
  821. oldValue: events.oldValue,
  822. newValue: events.newValue
  823. };
  824. }
  825. }
  826. function formatMutationType(type) {
  827. switch (type) {
  828. case MutationType.direct:
  829. return "mutation";
  830. case MutationType.patchFunction:
  831. return "$patch";
  832. case MutationType.patchObject:
  833. return "$patch";
  834. default:
  835. return "unknown";
  836. }
  837. }
  838. let isTimelineActive = true;
  839. const componentStateTypes = [];
  840. const MUTATIONS_LAYER_ID = "pinia:mutations";
  841. const INSPECTOR_ID = "pinia";
  842. const getStoreType = (id) => "🍍 " + id;
  843. function registerPiniaDevtools(app, pinia2) {
  844. setupDevtoolsPlugin({
  845. id: "dev.esm.pinia",
  846. label: "Pinia 🍍",
  847. logo: "https://pinia.vuejs.org/logo.svg",
  848. packageName: "pinia",
  849. homepage: "https://pinia.vuejs.org",
  850. componentStateTypes,
  851. app
  852. }, (api) => {
  853. if (typeof api.now !== "function") {
  854. toastMessage("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.");
  855. }
  856. api.addTimelineLayer({
  857. id: MUTATIONS_LAYER_ID,
  858. label: `Pinia 🍍`,
  859. color: 15064968
  860. });
  861. api.addInspector({
  862. id: INSPECTOR_ID,
  863. label: "Pinia 🍍",
  864. icon: "storage",
  865. treeFilterPlaceholder: "Search stores",
  866. actions: [
  867. {
  868. icon: "content_copy",
  869. action: () => {
  870. actionGlobalCopyState(pinia2);
  871. },
  872. tooltip: "Serialize and copy the state"
  873. },
  874. {
  875. icon: "content_paste",
  876. action: async () => {
  877. await actionGlobalPasteState(pinia2);
  878. api.sendInspectorTree(INSPECTOR_ID);
  879. api.sendInspectorState(INSPECTOR_ID);
  880. },
  881. tooltip: "Replace the state with the content of your clipboard"
  882. },
  883. {
  884. icon: "save",
  885. action: () => {
  886. actionGlobalSaveState(pinia2);
  887. },
  888. tooltip: "Save the state as a JSON file"
  889. },
  890. {
  891. icon: "folder_open",
  892. action: async () => {
  893. await actionGlobalOpenStateFile(pinia2);
  894. api.sendInspectorTree(INSPECTOR_ID);
  895. api.sendInspectorState(INSPECTOR_ID);
  896. },
  897. tooltip: "Import the state from a JSON file"
  898. }
  899. ],
  900. nodeActions: [
  901. {
  902. icon: "restore",
  903. tooltip: "Reset the state (option store only)",
  904. action: (nodeId) => {
  905. const store = pinia2._s.get(nodeId);
  906. if (!store) {
  907. toastMessage(`Cannot reset "${nodeId}" store because it wasn't found.`, "warn");
  908. } else if (!store._isOptionsAPI) {
  909. toastMessage(`Cannot reset "${nodeId}" store because it's a setup store.`, "warn");
  910. } else {
  911. store.$reset();
  912. toastMessage(`Store "${nodeId}" reset.`);
  913. }
  914. }
  915. }
  916. ]
  917. });
  918. api.on.inspectComponent((payload, ctx) => {
  919. const proxy = payload.componentInstance && payload.componentInstance.proxy;
  920. if (proxy && proxy._pStores) {
  921. const piniaStores = payload.componentInstance.proxy._pStores;
  922. Object.values(piniaStores).forEach((store) => {
  923. payload.instanceData.state.push({
  924. type: getStoreType(store.$id),
  925. key: "state",
  926. editable: true,
  927. value: store._isOptionsAPI ? {
  928. _custom: {
  929. value: vue.toRaw(store.$state),
  930. actions: [
  931. {
  932. icon: "restore",
  933. tooltip: "Reset the state of this store",
  934. action: () => store.$reset()
  935. }
  936. ]
  937. }
  938. } : (
  939. // NOTE: workaround to unwrap transferred refs
  940. Object.keys(store.$state).reduce((state, key) => {
  941. state[key] = store.$state[key];
  942. return state;
  943. }, {})
  944. )
  945. });
  946. if (store._getters && store._getters.length) {
  947. payload.instanceData.state.push({
  948. type: getStoreType(store.$id),
  949. key: "getters",
  950. editable: false,
  951. value: store._getters.reduce((getters, key) => {
  952. try {
  953. getters[key] = store[key];
  954. } catch (error) {
  955. getters[key] = error;
  956. }
  957. return getters;
  958. }, {})
  959. });
  960. }
  961. });
  962. }
  963. });
  964. api.on.getInspectorTree((payload) => {
  965. if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
  966. let stores = [pinia2];
  967. stores = stores.concat(Array.from(pinia2._s.values()));
  968. payload.rootNodes = (payload.filter ? stores.filter((store) => "$id" in store ? store.$id.toLowerCase().includes(payload.filter.toLowerCase()) : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase())) : stores).map(formatStoreForInspectorTree);
  969. }
  970. });
  971. api.on.getInspectorState((payload) => {
  972. if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
  973. const inspectedStore = payload.nodeId === PINIA_ROOT_ID ? pinia2 : pinia2._s.get(payload.nodeId);
  974. if (!inspectedStore) {
  975. return;
  976. }
  977. if (inspectedStore) {
  978. payload.state = formatStoreForInspectorState(inspectedStore);
  979. }
  980. }
  981. });
  982. api.on.editInspectorState((payload, ctx) => {
  983. if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
  984. const inspectedStore = payload.nodeId === PINIA_ROOT_ID ? pinia2 : pinia2._s.get(payload.nodeId);
  985. if (!inspectedStore) {
  986. return toastMessage(`store "${payload.nodeId}" not found`, "error");
  987. }
  988. const { path } = payload;
  989. if (!isPinia(inspectedStore)) {
  990. if (path.length !== 1 || !inspectedStore._customProperties.has(path[0]) || path[0] in inspectedStore.$state) {
  991. path.unshift("$state");
  992. }
  993. } else {
  994. path.unshift("state");
  995. }
  996. isTimelineActive = false;
  997. payload.set(inspectedStore, path, payload.state.value);
  998. isTimelineActive = true;
  999. }
  1000. });
  1001. api.on.editComponentState((payload) => {
  1002. if (payload.type.startsWith("🍍")) {
  1003. const storeId = payload.type.replace(/^🍍\s*/, "");
  1004. const store = pinia2._s.get(storeId);
  1005. if (!store) {
  1006. return toastMessage(`store "${storeId}" not found`, "error");
  1007. }
  1008. const { path } = payload;
  1009. if (path[0] !== "state") {
  1010. return toastMessage(`Invalid path for store "${storeId}":
  1011. ${path}
  1012. Only state can be modified.`);
  1013. }
  1014. path[0] = "$state";
  1015. isTimelineActive = false;
  1016. payload.set(store, path, payload.state.value);
  1017. isTimelineActive = true;
  1018. }
  1019. });
  1020. });
  1021. }
  1022. function addStoreToDevtools(app, store) {
  1023. if (!componentStateTypes.includes(getStoreType(store.$id))) {
  1024. componentStateTypes.push(getStoreType(store.$id));
  1025. }
  1026. setupDevtoolsPlugin({
  1027. id: "dev.esm.pinia",
  1028. label: "Pinia 🍍",
  1029. logo: "https://pinia.vuejs.org/logo.svg",
  1030. packageName: "pinia",
  1031. homepage: "https://pinia.vuejs.org",
  1032. componentStateTypes,
  1033. app,
  1034. settings: {
  1035. logStoreChanges: {
  1036. label: "Notify about new/deleted stores",
  1037. type: "boolean",
  1038. defaultValue: true
  1039. }
  1040. // useEmojis: {
  1041. // label: 'Use emojis in messages ⚡️',
  1042. // type: 'boolean',
  1043. // defaultValue: true,
  1044. // },
  1045. }
  1046. }, (api) => {
  1047. const now2 = typeof api.now === "function" ? api.now.bind(api) : Date.now;
  1048. store.$onAction(({ after, onError, name, args }) => {
  1049. const groupId = runningActionId++;
  1050. api.addTimelineEvent({
  1051. layerId: MUTATIONS_LAYER_ID,
  1052. event: {
  1053. time: now2(),
  1054. title: "🛫 " + name,
  1055. subtitle: "start",
  1056. data: {
  1057. store: formatDisplay(store.$id),
  1058. action: formatDisplay(name),
  1059. args
  1060. },
  1061. groupId
  1062. }
  1063. });
  1064. after((result) => {
  1065. activeAction = void 0;
  1066. api.addTimelineEvent({
  1067. layerId: MUTATIONS_LAYER_ID,
  1068. event: {
  1069. time: now2(),
  1070. title: "🛬 " + name,
  1071. subtitle: "end",
  1072. data: {
  1073. store: formatDisplay(store.$id),
  1074. action: formatDisplay(name),
  1075. args,
  1076. result
  1077. },
  1078. groupId
  1079. }
  1080. });
  1081. });
  1082. onError((error) => {
  1083. activeAction = void 0;
  1084. api.addTimelineEvent({
  1085. layerId: MUTATIONS_LAYER_ID,
  1086. event: {
  1087. time: now2(),
  1088. logType: "error",
  1089. title: "💥 " + name,
  1090. subtitle: "end",
  1091. data: {
  1092. store: formatDisplay(store.$id),
  1093. action: formatDisplay(name),
  1094. args,
  1095. error
  1096. },
  1097. groupId
  1098. }
  1099. });
  1100. });
  1101. }, true);
  1102. store._customProperties.forEach((name) => {
  1103. vue.watch(() => vue.unref(store[name]), (newValue, oldValue) => {
  1104. api.notifyComponentUpdate();
  1105. api.sendInspectorState(INSPECTOR_ID);
  1106. if (isTimelineActive) {
  1107. api.addTimelineEvent({
  1108. layerId: MUTATIONS_LAYER_ID,
  1109. event: {
  1110. time: now2(),
  1111. title: "Change",
  1112. subtitle: name,
  1113. data: {
  1114. newValue,
  1115. oldValue
  1116. },
  1117. groupId: activeAction
  1118. }
  1119. });
  1120. }
  1121. }, { deep: true });
  1122. });
  1123. store.$subscribe(({ events, type }, state) => {
  1124. api.notifyComponentUpdate();
  1125. api.sendInspectorState(INSPECTOR_ID);
  1126. if (!isTimelineActive)
  1127. return;
  1128. const eventData = {
  1129. time: now2(),
  1130. title: formatMutationType(type),
  1131. data: {
  1132. store: formatDisplay(store.$id),
  1133. ...formatEventData(events)
  1134. },
  1135. groupId: activeAction
  1136. };
  1137. activeAction = void 0;
  1138. if (type === MutationType.patchFunction) {
  1139. eventData.subtitle = "⤵️";
  1140. } else if (type === MutationType.patchObject) {
  1141. eventData.subtitle = "🧩";
  1142. } else if (events && !Array.isArray(events)) {
  1143. eventData.subtitle = events.type;
  1144. }
  1145. if (events) {
  1146. eventData.data["rawEvent(s)"] = {
  1147. _custom: {
  1148. display: "DebuggerEvent",
  1149. type: "object",
  1150. tooltip: "raw DebuggerEvent[]",
  1151. value: events
  1152. }
  1153. };
  1154. }
  1155. api.addTimelineEvent({
  1156. layerId: MUTATIONS_LAYER_ID,
  1157. event: eventData
  1158. });
  1159. }, { detached: true, flush: "sync" });
  1160. const hotUpdate = store._hotUpdate;
  1161. store._hotUpdate = vue.markRaw((newStore) => {
  1162. hotUpdate(newStore);
  1163. api.addTimelineEvent({
  1164. layerId: MUTATIONS_LAYER_ID,
  1165. event: {
  1166. time: now2(),
  1167. title: "🔥 " + store.$id,
  1168. subtitle: "HMR update",
  1169. data: {
  1170. store: formatDisplay(store.$id),
  1171. info: formatDisplay(`HMR update`)
  1172. }
  1173. }
  1174. });
  1175. api.notifyComponentUpdate();
  1176. api.sendInspectorTree(INSPECTOR_ID);
  1177. api.sendInspectorState(INSPECTOR_ID);
  1178. });
  1179. const { $dispose } = store;
  1180. store.$dispose = () => {
  1181. $dispose();
  1182. api.notifyComponentUpdate();
  1183. api.sendInspectorTree(INSPECTOR_ID);
  1184. api.sendInspectorState(INSPECTOR_ID);
  1185. api.getSettings().logStoreChanges && toastMessage(`Disposed "${store.$id}" store 🗑`);
  1186. };
  1187. api.notifyComponentUpdate();
  1188. api.sendInspectorTree(INSPECTOR_ID);
  1189. api.sendInspectorState(INSPECTOR_ID);
  1190. api.getSettings().logStoreChanges && toastMessage(`"${store.$id}" store installed 🆕`);
  1191. });
  1192. }
  1193. let runningActionId = 0;
  1194. let activeAction;
  1195. function patchActionForGrouping(store, actionNames) {
  1196. const actions = actionNames.reduce((storeActions, actionName) => {
  1197. storeActions[actionName] = vue.toRaw(store)[actionName];
  1198. return storeActions;
  1199. }, {});
  1200. for (const actionName in actions) {
  1201. store[actionName] = function() {
  1202. const _actionId = runningActionId;
  1203. const trackedStore = new Proxy(store, {
  1204. get(...args) {
  1205. activeAction = _actionId;
  1206. return Reflect.get(...args);
  1207. },
  1208. set(...args) {
  1209. activeAction = _actionId;
  1210. return Reflect.set(...args);
  1211. }
  1212. });
  1213. return actions[actionName].apply(trackedStore, arguments);
  1214. };
  1215. }
  1216. }
  1217. function devtoolsPlugin({ app, store, options }) {
  1218. if (store.$id.startsWith("__hot:")) {
  1219. return;
  1220. }
  1221. if (options.state) {
  1222. store._isOptionsAPI = true;
  1223. }
  1224. if (typeof options.state === "function") {
  1225. patchActionForGrouping(
  1226. // @ts-expect-error: can cast the store...
  1227. store,
  1228. Object.keys(options.actions)
  1229. );
  1230. const originalHotUpdate = store._hotUpdate;
  1231. vue.toRaw(store)._hotUpdate = function(newStore) {
  1232. originalHotUpdate.apply(this, arguments);
  1233. patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions));
  1234. };
  1235. }
  1236. addStoreToDevtools(
  1237. app,
  1238. // FIXME: is there a way to allow the assignment from Store<Id, S, G, A> to StoreGeneric?
  1239. store
  1240. );
  1241. }
  1242. function createPinia() {
  1243. const scope = vue.effectScope(true);
  1244. const state = scope.run(() => vue.ref({}));
  1245. let _p = [];
  1246. let toBeInstalled = [];
  1247. const pinia2 = vue.markRaw({
  1248. install(app) {
  1249. setActivePinia(pinia2);
  1250. {
  1251. pinia2._a = app;
  1252. app.provide(piniaSymbol, pinia2);
  1253. app.config.globalProperties.$pinia = pinia2;
  1254. if (USE_DEVTOOLS) {
  1255. registerPiniaDevtools(app, pinia2);
  1256. }
  1257. toBeInstalled.forEach((plugin) => _p.push(plugin));
  1258. toBeInstalled = [];
  1259. }
  1260. },
  1261. use(plugin) {
  1262. if (!this._a && !isVue2) {
  1263. toBeInstalled.push(plugin);
  1264. } else {
  1265. _p.push(plugin);
  1266. }
  1267. return this;
  1268. },
  1269. _p,
  1270. // it's actually undefined here
  1271. // @ts-expect-error
  1272. _a: null,
  1273. _e: scope,
  1274. _s: /* @__PURE__ */ new Map(),
  1275. state
  1276. });
  1277. if (USE_DEVTOOLS && typeof Proxy !== "undefined") {
  1278. pinia2.use(devtoolsPlugin);
  1279. }
  1280. return pinia2;
  1281. }
  1282. function patchObject(newState, oldState) {
  1283. for (const key in oldState) {
  1284. const subPatch = oldState[key];
  1285. if (!(key in newState)) {
  1286. continue;
  1287. }
  1288. const targetValue = newState[key];
  1289. if (isPlainObject(targetValue) && isPlainObject(subPatch) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) {
  1290. newState[key] = patchObject(targetValue, subPatch);
  1291. } else {
  1292. {
  1293. newState[key] = subPatch;
  1294. }
  1295. }
  1296. }
  1297. return newState;
  1298. }
  1299. const noop = () => {
  1300. };
  1301. function addSubscription(subscriptions, callback, detached, onCleanup = noop) {
  1302. subscriptions.push(callback);
  1303. const removeSubscription = () => {
  1304. const idx = subscriptions.indexOf(callback);
  1305. if (idx > -1) {
  1306. subscriptions.splice(idx, 1);
  1307. onCleanup();
  1308. }
  1309. };
  1310. if (!detached && vue.getCurrentScope()) {
  1311. vue.onScopeDispose(removeSubscription);
  1312. }
  1313. return removeSubscription;
  1314. }
  1315. function triggerSubscriptions(subscriptions, ...args) {
  1316. subscriptions.slice().forEach((callback) => {
  1317. callback(...args);
  1318. });
  1319. }
  1320. function mergeReactiveObjects(target, patchToApply) {
  1321. if (target instanceof Map && patchToApply instanceof Map) {
  1322. patchToApply.forEach((value, key) => target.set(key, value));
  1323. }
  1324. if (target instanceof Set && patchToApply instanceof Set) {
  1325. patchToApply.forEach(target.add, target);
  1326. }
  1327. for (const key in patchToApply) {
  1328. if (!patchToApply.hasOwnProperty(key))
  1329. continue;
  1330. const subPatch = patchToApply[key];
  1331. const targetValue = target[key];
  1332. if (isPlainObject(targetValue) && isPlainObject(subPatch) && target.hasOwnProperty(key) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) {
  1333. target[key] = mergeReactiveObjects(targetValue, subPatch);
  1334. } else {
  1335. target[key] = subPatch;
  1336. }
  1337. }
  1338. return target;
  1339. }
  1340. const skipHydrateSymbol = Symbol("pinia:skipHydration");
  1341. function shouldHydrate(obj) {
  1342. return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);
  1343. }
  1344. const { assign } = Object;
  1345. function isComputed(o2) {
  1346. return !!(vue.isRef(o2) && o2.effect);
  1347. }
  1348. function createOptionsStore(id, options, pinia2, hot) {
  1349. const { state, actions, getters } = options;
  1350. const initialState = pinia2.state.value[id];
  1351. let store;
  1352. function setup() {
  1353. if (!initialState && !hot) {
  1354. {
  1355. pinia2.state.value[id] = state ? state() : {};
  1356. }
  1357. }
  1358. const localState = hot ? (
  1359. // use ref() to unwrap refs inside state TODO: check if this is still necessary
  1360. vue.toRefs(vue.ref(state ? state() : {}).value)
  1361. ) : vue.toRefs(pinia2.state.value[id]);
  1362. return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
  1363. if (name in localState) {
  1364. console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with "${name}" in store "${id}".`);
  1365. }
  1366. computedGetters[name] = vue.markRaw(vue.computed(() => {
  1367. setActivePinia(pinia2);
  1368. const store2 = pinia2._s.get(id);
  1369. return getters[name].call(store2, store2);
  1370. }));
  1371. return computedGetters;
  1372. }, {}));
  1373. }
  1374. store = createSetupStore(id, setup, options, pinia2, hot, true);
  1375. store.$reset = function $reset() {
  1376. const newState = state ? state() : {};
  1377. this.$patch(($state) => {
  1378. assign($state, newState);
  1379. });
  1380. };
  1381. return store;
  1382. }
  1383. function createSetupStore($id, setup, options = {}, pinia2, hot, isOptionsStore) {
  1384. let scope;
  1385. const optionsForPlugin = assign({ actions: {} }, options);
  1386. if (!pinia2._e.active) {
  1387. throw new Error("Pinia destroyed");
  1388. }
  1389. const $subscribeOptions = {
  1390. deep: true
  1391. // flush: 'post',
  1392. };
  1393. {
  1394. $subscribeOptions.onTrigger = (event) => {
  1395. if (isListening) {
  1396. debuggerEvents = event;
  1397. } else if (isListening == false && !store._hotUpdating) {
  1398. if (Array.isArray(debuggerEvents)) {
  1399. debuggerEvents.push(event);
  1400. } else {
  1401. console.error("🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.");
  1402. }
  1403. }
  1404. };
  1405. }
  1406. let isListening;
  1407. let isSyncListening;
  1408. let subscriptions = vue.markRaw([]);
  1409. let actionSubscriptions = vue.markRaw([]);
  1410. let debuggerEvents;
  1411. const initialState = pinia2.state.value[$id];
  1412. if (!isOptionsStore && !initialState && !hot) {
  1413. {
  1414. pinia2.state.value[$id] = {};
  1415. }
  1416. }
  1417. const hotState = vue.ref({});
  1418. let activeListener;
  1419. function $patch(partialStateOrMutator) {
  1420. let subscriptionMutation;
  1421. isListening = isSyncListening = false;
  1422. {
  1423. debuggerEvents = [];
  1424. }
  1425. if (typeof partialStateOrMutator === "function") {
  1426. partialStateOrMutator(pinia2.state.value[$id]);
  1427. subscriptionMutation = {
  1428. type: MutationType.patchFunction,
  1429. storeId: $id,
  1430. events: debuggerEvents
  1431. };
  1432. } else {
  1433. mergeReactiveObjects(pinia2.state.value[$id], partialStateOrMutator);
  1434. subscriptionMutation = {
  1435. type: MutationType.patchObject,
  1436. payload: partialStateOrMutator,
  1437. storeId: $id,
  1438. events: debuggerEvents
  1439. };
  1440. }
  1441. const myListenerId = activeListener = Symbol();
  1442. vue.nextTick().then(() => {
  1443. if (activeListener === myListenerId) {
  1444. isListening = true;
  1445. }
  1446. });
  1447. isSyncListening = true;
  1448. triggerSubscriptions(subscriptions, subscriptionMutation, pinia2.state.value[$id]);
  1449. }
  1450. const $reset = () => {
  1451. throw new Error(`🍍: Store "${$id}" is built using the setup syntax and does not implement $reset().`);
  1452. };
  1453. function $dispose() {
  1454. scope.stop();
  1455. subscriptions = [];
  1456. actionSubscriptions = [];
  1457. pinia2._s.delete($id);
  1458. }
  1459. function wrapAction(name, action) {
  1460. return function() {
  1461. setActivePinia(pinia2);
  1462. const args = Array.from(arguments);
  1463. const afterCallbackList = [];
  1464. const onErrorCallbackList = [];
  1465. function after(callback) {
  1466. afterCallbackList.push(callback);
  1467. }
  1468. function onError(callback) {
  1469. onErrorCallbackList.push(callback);
  1470. }
  1471. triggerSubscriptions(actionSubscriptions, {
  1472. args,
  1473. name,
  1474. store,
  1475. after,
  1476. onError
  1477. });
  1478. let ret;
  1479. try {
  1480. ret = action.apply(this && this.$id === $id ? this : store, args);
  1481. } catch (error) {
  1482. triggerSubscriptions(onErrorCallbackList, error);
  1483. throw error;
  1484. }
  1485. if (ret instanceof Promise) {
  1486. return ret.then((value) => {
  1487. triggerSubscriptions(afterCallbackList, value);
  1488. return value;
  1489. }).catch((error) => {
  1490. triggerSubscriptions(onErrorCallbackList, error);
  1491. return Promise.reject(error);
  1492. });
  1493. }
  1494. triggerSubscriptions(afterCallbackList, ret);
  1495. return ret;
  1496. };
  1497. }
  1498. const _hmrPayload = /* @__PURE__ */ vue.markRaw({
  1499. actions: {},
  1500. getters: {},
  1501. state: [],
  1502. hotState
  1503. });
  1504. const partialStore = {
  1505. _p: pinia2,
  1506. // _s: scope,
  1507. $id,
  1508. $onAction: addSubscription.bind(null, actionSubscriptions),
  1509. $patch,
  1510. $reset,
  1511. $subscribe(callback, options2 = {}) {
  1512. const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher());
  1513. const stopWatcher = scope.run(() => vue.watch(() => pinia2.state.value[$id], (state) => {
  1514. if (options2.flush === "sync" ? isSyncListening : isListening) {
  1515. callback({
  1516. storeId: $id,
  1517. type: MutationType.direct,
  1518. events: debuggerEvents
  1519. }, state);
  1520. }
  1521. }, assign({}, $subscribeOptions, options2)));
  1522. return removeSubscription;
  1523. },
  1524. $dispose
  1525. };
  1526. const store = vue.reactive(assign(
  1527. {
  1528. _hmrPayload,
  1529. _customProperties: vue.markRaw(/* @__PURE__ */ new Set())
  1530. // devtools custom properties
  1531. },
  1532. partialStore
  1533. // must be added later
  1534. // setupStore
  1535. ));
  1536. pinia2._s.set($id, store);
  1537. const setupStore = pinia2._e.run(() => {
  1538. scope = vue.effectScope();
  1539. return scope.run(() => setup());
  1540. });
  1541. for (const key in setupStore) {
  1542. const prop = setupStore[key];
  1543. if (vue.isRef(prop) && !isComputed(prop) || vue.isReactive(prop)) {
  1544. if (hot) {
  1545. set$1(hotState.value, key, vue.toRef(setupStore, key));
  1546. } else if (!isOptionsStore) {
  1547. if (initialState && shouldHydrate(prop)) {
  1548. if (vue.isRef(prop)) {
  1549. prop.value = initialState[key];
  1550. } else {
  1551. mergeReactiveObjects(prop, initialState[key]);
  1552. }
  1553. }
  1554. {
  1555. pinia2.state.value[$id][key] = prop;
  1556. }
  1557. }
  1558. {
  1559. _hmrPayload.state.push(key);
  1560. }
  1561. } else if (typeof prop === "function") {
  1562. const actionValue = hot ? prop : wrapAction(key, prop);
  1563. {
  1564. setupStore[key] = actionValue;
  1565. }
  1566. {
  1567. _hmrPayload.actions[key] = prop;
  1568. }
  1569. optionsForPlugin.actions[key] = prop;
  1570. } else {
  1571. if (isComputed(prop)) {
  1572. _hmrPayload.getters[key] = isOptionsStore ? (
  1573. // @ts-expect-error
  1574. options.getters[key]
  1575. ) : prop;
  1576. if (IS_CLIENT) {
  1577. const getters = setupStore._getters || // @ts-expect-error: same
  1578. (setupStore._getters = vue.markRaw([]));
  1579. getters.push(key);
  1580. }
  1581. }
  1582. }
  1583. }
  1584. {
  1585. assign(store, setupStore);
  1586. assign(vue.toRaw(store), setupStore);
  1587. }
  1588. Object.defineProperty(store, "$state", {
  1589. get: () => hot ? hotState.value : pinia2.state.value[$id],
  1590. set: (state) => {
  1591. if (hot) {
  1592. throw new Error("cannot set hotState");
  1593. }
  1594. $patch(($state) => {
  1595. assign($state, state);
  1596. });
  1597. }
  1598. });
  1599. {
  1600. store._hotUpdate = vue.markRaw((newStore) => {
  1601. store._hotUpdating = true;
  1602. newStore._hmrPayload.state.forEach((stateKey) => {
  1603. if (stateKey in store.$state) {
  1604. const newStateTarget = newStore.$state[stateKey];
  1605. const oldStateSource = store.$state[stateKey];
  1606. if (typeof newStateTarget === "object" && isPlainObject(newStateTarget) && isPlainObject(oldStateSource)) {
  1607. patchObject(newStateTarget, oldStateSource);
  1608. } else {
  1609. newStore.$state[stateKey] = oldStateSource;
  1610. }
  1611. }
  1612. set$1(store, stateKey, vue.toRef(newStore.$state, stateKey));
  1613. });
  1614. Object.keys(store.$state).forEach((stateKey) => {
  1615. if (!(stateKey in newStore.$state)) {
  1616. del(store, stateKey);
  1617. }
  1618. });
  1619. isListening = false;
  1620. isSyncListening = false;
  1621. pinia2.state.value[$id] = vue.toRef(newStore._hmrPayload, "hotState");
  1622. isSyncListening = true;
  1623. vue.nextTick().then(() => {
  1624. isListening = true;
  1625. });
  1626. for (const actionName in newStore._hmrPayload.actions) {
  1627. const action = newStore[actionName];
  1628. set$1(store, actionName, wrapAction(actionName, action));
  1629. }
  1630. for (const getterName in newStore._hmrPayload.getters) {
  1631. const getter = newStore._hmrPayload.getters[getterName];
  1632. const getterValue = isOptionsStore ? (
  1633. // special handling of options api
  1634. vue.computed(() => {
  1635. setActivePinia(pinia2);
  1636. return getter.call(store, store);
  1637. })
  1638. ) : getter;
  1639. set$1(store, getterName, getterValue);
  1640. }
  1641. Object.keys(store._hmrPayload.getters).forEach((key) => {
  1642. if (!(key in newStore._hmrPayload.getters)) {
  1643. del(store, key);
  1644. }
  1645. });
  1646. Object.keys(store._hmrPayload.actions).forEach((key) => {
  1647. if (!(key in newStore._hmrPayload.actions)) {
  1648. del(store, key);
  1649. }
  1650. });
  1651. store._hmrPayload = newStore._hmrPayload;
  1652. store._getters = newStore._getters;
  1653. store._hotUpdating = false;
  1654. });
  1655. }
  1656. if (USE_DEVTOOLS) {
  1657. const nonEnumerable = {
  1658. writable: true,
  1659. configurable: true,
  1660. // avoid warning on devtools trying to display this property
  1661. enumerable: false
  1662. };
  1663. ["_p", "_hmrPayload", "_getters", "_customProperties"].forEach((p2) => {
  1664. Object.defineProperty(store, p2, {
  1665. value: store[p2],
  1666. ...nonEnumerable
  1667. });
  1668. });
  1669. }
  1670. pinia2._p.forEach((extender) => {
  1671. if (USE_DEVTOOLS) {
  1672. const extensions = scope.run(() => extender({
  1673. store,
  1674. app: pinia2._a,
  1675. pinia: pinia2,
  1676. options: optionsForPlugin
  1677. }));
  1678. Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));
  1679. assign(store, extensions);
  1680. } else {
  1681. assign(store, scope.run(() => extender({
  1682. store,
  1683. app: pinia2._a,
  1684. pinia: pinia2,
  1685. options: optionsForPlugin
  1686. })));
  1687. }
  1688. });
  1689. if (store.$state && typeof store.$state === "object" && typeof store.$state.constructor === "function" && !store.$state.constructor.toString().includes("[native code]")) {
  1690. console.warn(`[🍍]: The "state" must be a plain object. It cannot be
  1691. state: () => new MyClass()
  1692. Found in store "${store.$id}".`);
  1693. }
  1694. if (initialState && isOptionsStore && options.hydrate) {
  1695. options.hydrate(store.$state, initialState);
  1696. }
  1697. isListening = true;
  1698. isSyncListening = true;
  1699. return store;
  1700. }
  1701. function defineStore(idOrOptions, setup, setupOptions) {
  1702. let id;
  1703. let options;
  1704. const isSetupStore = typeof setup === "function";
  1705. if (typeof idOrOptions === "string") {
  1706. id = idOrOptions;
  1707. options = isSetupStore ? setupOptions : setup;
  1708. } else {
  1709. options = idOrOptions;
  1710. id = idOrOptions.id;
  1711. }
  1712. function useStore(pinia2, hot) {
  1713. const currentInstance = vue.getCurrentInstance();
  1714. pinia2 = // in test mode, ignore the argument provided as we can always retrieve a
  1715. // pinia instance with getActivePinia()
  1716. pinia2 || currentInstance && vue.inject(piniaSymbol);
  1717. if (pinia2)
  1718. setActivePinia(pinia2);
  1719. if (!activePinia) {
  1720. throw new Error(`[🍍]: getActivePinia was called with no active Pinia. Did you forget to install pinia?
  1721. const pinia = createPinia()
  1722. app.use(pinia)
  1723. This will fail in production.`);
  1724. }
  1725. pinia2 = activePinia;
  1726. if (!pinia2._s.has(id)) {
  1727. if (isSetupStore) {
  1728. createSetupStore(id, setup, options, pinia2);
  1729. } else {
  1730. createOptionsStore(id, options, pinia2);
  1731. }
  1732. {
  1733. useStore._pinia = pinia2;
  1734. }
  1735. }
  1736. const store = pinia2._s.get(id);
  1737. if (hot) {
  1738. const hotId = "__hot:" + id;
  1739. const newStore = isSetupStore ? createSetupStore(hotId, setup, options, pinia2, true) : createOptionsStore(hotId, assign({}, options), pinia2, true);
  1740. hot._hotUpdate(newStore);
  1741. delete pinia2.state.value[hotId];
  1742. pinia2._s.delete(hotId);
  1743. }
  1744. if (IS_CLIENT && currentInstance && currentInstance.proxy && // avoid adding stores that are just built for hot module replacement
  1745. !hot) {
  1746. const vm = currentInstance.proxy;
  1747. const cache = "_pStores" in vm ? vm._pStores : vm._pStores = {};
  1748. cache[id] = store;
  1749. }
  1750. return store;
  1751. }
  1752. useStore.$id = id;
  1753. return useStore;
  1754. }
  1755. function isObject$1(v2) {
  1756. return typeof v2 === "object" && v2 !== null;
  1757. }
  1758. function normalizeOptions(options, factoryOptions) {
  1759. options = isObject$1(options) ? options : /* @__PURE__ */ Object.create(null);
  1760. return new Proxy(options, {
  1761. get(target, key, receiver) {
  1762. if (key === "key")
  1763. return Reflect.get(target, key, receiver);
  1764. return Reflect.get(target, key, receiver) || Reflect.get(factoryOptions, key, receiver);
  1765. }
  1766. });
  1767. }
  1768. function get(state, path) {
  1769. return path.reduce((obj, p2) => {
  1770. return obj == null ? void 0 : obj[p2];
  1771. }, state);
  1772. }
  1773. function set(state, path, val) {
  1774. return path.slice(0, -1).reduce((obj, p2) => {
  1775. if (/^(__proto__)$/.test(p2))
  1776. return {};
  1777. else
  1778. return obj[p2] = obj[p2] || {};
  1779. }, state)[path[path.length - 1]] = val, state;
  1780. }
  1781. function pick(baseState, paths) {
  1782. return paths.reduce((substate, path) => {
  1783. const pathArray = path.split(".");
  1784. return set(substate, pathArray, get(baseState, pathArray));
  1785. }, {});
  1786. }
  1787. function hydrateStore(store, { storage, serializer, key, debug }) {
  1788. try {
  1789. const fromStorage = storage == null ? void 0 : storage.getItem(key);
  1790. if (fromStorage)
  1791. store.$patch(serializer == null ? void 0 : serializer.deserialize(fromStorage));
  1792. } catch (error) {
  1793. if (debug)
  1794. console.error(error);
  1795. }
  1796. }
  1797. function persistState(state, { storage, serializer, key, paths, debug }) {
  1798. try {
  1799. const toStore = Array.isArray(paths) ? pick(state, paths) : state;
  1800. storage.setItem(key, serializer.serialize(toStore));
  1801. } catch (error) {
  1802. if (debug)
  1803. console.error(error);
  1804. }
  1805. }
  1806. function createPersistedState(factoryOptions = {}) {
  1807. return (context) => {
  1808. const { auto = false } = factoryOptions;
  1809. const {
  1810. options: { persist = auto },
  1811. store,
  1812. pinia: pinia2
  1813. } = context;
  1814. if (!persist)
  1815. return;
  1816. if (!(store.$id in pinia2.state.value)) {
  1817. const original_store = pinia2._s.get(store.$id.replace("__hot:", ""));
  1818. if (original_store)
  1819. Promise.resolve().then(() => original_store.$persist());
  1820. return;
  1821. }
  1822. const persistences = (Array.isArray(persist) ? persist.map((p2) => normalizeOptions(p2, factoryOptions)) : [normalizeOptions(persist, factoryOptions)]).map(
  1823. ({
  1824. storage = localStorage,
  1825. beforeRestore = null,
  1826. afterRestore = null,
  1827. serializer = {
  1828. serialize: JSON.stringify,
  1829. deserialize: JSON.parse
  1830. },
  1831. key = store.$id,
  1832. paths = null,
  1833. debug = false
  1834. }) => {
  1835. var _a;
  1836. return {
  1837. storage,
  1838. beforeRestore,
  1839. afterRestore,
  1840. serializer,
  1841. key: ((_a = factoryOptions.key) != null ? _a : (k) => k)(typeof key == "string" ? key : key(store.$id)),
  1842. paths,
  1843. debug
  1844. };
  1845. }
  1846. );
  1847. store.$persist = () => {
  1848. persistences.forEach((persistence) => {
  1849. persistState(store.$state, persistence);
  1850. });
  1851. };
  1852. store.$hydrate = ({ runHooks = true } = {}) => {
  1853. persistences.forEach((persistence) => {
  1854. const { beforeRestore, afterRestore } = persistence;
  1855. if (runHooks)
  1856. beforeRestore == null ? void 0 : beforeRestore(context);
  1857. hydrateStore(store, persistence);
  1858. if (runHooks)
  1859. afterRestore == null ? void 0 : afterRestore(context);
  1860. });
  1861. };
  1862. persistences.forEach((persistence) => {
  1863. const { beforeRestore, afterRestore } = persistence;
  1864. beforeRestore == null ? void 0 : beforeRestore(context);
  1865. hydrateStore(store, persistence);
  1866. afterRestore == null ? void 0 : afterRestore(context);
  1867. store.$subscribe(
  1868. (_mutation, state) => {
  1869. persistState(state, persistence);
  1870. },
  1871. {
  1872. detached: true
  1873. }
  1874. );
  1875. });
  1876. };
  1877. }
  1878. var src_default = createPersistedState();
  1879. const useMemberStore = defineStore(
  1880. "member",
  1881. () => {
  1882. const profile = vue.ref();
  1883. const setProfile = (val) => {
  1884. profile.value = val;
  1885. };
  1886. const clearProfile = () => {
  1887. profile.value = void 0;
  1888. };
  1889. return {
  1890. profile,
  1891. setProfile,
  1892. clearProfile
  1893. };
  1894. },
  1895. {
  1896. // 网页端配置
  1897. // persist: true,
  1898. // 小程序端配置
  1899. persist: {
  1900. storage: {
  1901. getItem(key) {
  1902. return uni.getStorageSync(key);
  1903. },
  1904. setItem(key, value) {
  1905. uni.setStorageSync(key, value);
  1906. }
  1907. }
  1908. }
  1909. }
  1910. );
  1911. const pinia = createPinia();
  1912. pinia.use(src_default);
  1913. var define_import_meta_env_default = { VITE_AXIOS_BASE_URL: "http://dsg.tms.api.aibasil.cn", VITE_CJS_IGNORE_WARNING: "true", VITE_ROOT_DIR: "E:\\demo\\hmrabbit", VITE_USER_NODE_ENV: "development", BASE_URL: "/", MODE: "development", DEV: true, PROD: false, SSR: false };
  1914. const baseURL = "http://dsg.tms.api.aibasil.cn";
  1915. formatAppLog("log", "at utils/http.ts:17", "***", define_import_meta_env_default);
  1916. formatAppLog("log", "at utils/http.ts:18", "**2*", baseURL);
  1917. const httpInterceptor = {
  1918. // 拦截前触发
  1919. invoke(options) {
  1920. var _a;
  1921. if (!options.url.startsWith("http")) {
  1922. options.url = baseURL + options.url;
  1923. }
  1924. options.timeout = 1e4;
  1925. options.header = {
  1926. ...options.header,
  1927. "source-client": "miniapp"
  1928. };
  1929. const memberStore = useMemberStore();
  1930. const token = (_a = memberStore.profile) == null ? void 0 : _a.token;
  1931. if (token) {
  1932. options.header.batoken = token;
  1933. }
  1934. }
  1935. };
  1936. uni.addInterceptor("request", httpInterceptor);
  1937. uni.addInterceptor("uploadFile", httpInterceptor);
  1938. const http = (options) => {
  1939. return new Promise((resolve, reject) => {
  1940. uni.request({
  1941. ...options,
  1942. // 响应成功
  1943. success(res) {
  1944. if (res.statusCode >= 200 && res.statusCode < 300) {
  1945. const data = res.data;
  1946. if (data.code === 302) {
  1947. formatAppLog("log", "at utils/http.ts:77", "未登录 -> 清理用户信息,跳转到登录页---");
  1948. const memberStore = useMemberStore();
  1949. memberStore.clearProfile();
  1950. uni.navigateTo({ url: "/pages/login/login" });
  1951. reject(res);
  1952. } else if (data.code === 409) {
  1953. formatAppLog("log", "at utils/http.ts:84", "登录态过期,请重新登录!---");
  1954. const memberStore = useMemberStore();
  1955. memberStore.clearProfile();
  1956. uni.navigateTo({ url: "/pages/login/login" });
  1957. reject(res);
  1958. } else {
  1959. resolve(res.data);
  1960. }
  1961. } else if (res.statusCode === 401) {
  1962. const memberStore = useMemberStore();
  1963. memberStore.clearProfile();
  1964. uni.navigateTo({ url: "/pages/login/login" });
  1965. reject(res);
  1966. } else {
  1967. uni.showToast({
  1968. icon: "none",
  1969. title: res.data.msg || "请求错误"
  1970. });
  1971. reject(res);
  1972. }
  1973. },
  1974. // 响应失败
  1975. fail(err) {
  1976. uni.showToast({
  1977. icon: "none",
  1978. title: "网络错误,换个网络试试"
  1979. });
  1980. reject(err);
  1981. }
  1982. });
  1983. });
  1984. };
  1985. const getCategoryTopAPI = () => {
  1986. return http({
  1987. method: "GET",
  1988. url: "/category/top"
  1989. });
  1990. };
  1991. const getHomeBannerAPI = (distributionSite = 1) => {
  1992. return http({
  1993. method: "GET",
  1994. url: "/home/banner",
  1995. data: {
  1996. distributionSite
  1997. }
  1998. });
  1999. };
  2000. const getHomeGoodsGuessLikeAPI = (data) => {
  2001. return http({
  2002. method: "GET",
  2003. url: "/home/goods/guessLike",
  2004. data
  2005. });
  2006. };
  2007. const _sfc_main$Y = {};
  2008. function _sfc_render$X(_ctx, _cache) {
  2009. return vue.openBlock(), vue.createElementBlock("view", { class: "sk-container" }, [
  2010. vue.createElementVNode("view", { class: "viewport" }, [
  2011. vue.createElementVNode("view", { class: "search" }, [
  2012. vue.createElementVNode("view", { class: "input" }, [
  2013. vue.createElementVNode("text", { class: "icon-search sk-transparent sk-text-14-2857-225 sk-text sk-pseudo sk-pseudo-circle" }, "女靴")
  2014. ])
  2015. ]),
  2016. vue.createElementVNode("view", { class: "categories" }, [
  2017. vue.createElementVNode("scroll-view", {
  2018. "scroll-y": true,
  2019. class: "primary"
  2020. }, [
  2021. vue.createElementVNode("view", { class: "item active sk-pseudo sk-pseudo-circle" }, [
  2022. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-218 sk-text" }, "居家")
  2023. ]),
  2024. vue.createElementVNode("view", { class: "item sk-pseudo sk-pseudo-circle" }, [
  2025. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-495 sk-text" }, "美食")
  2026. ]),
  2027. vue.createElementVNode("view", { class: "item sk-pseudo sk-pseudo-circle" }, [
  2028. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-628 sk-text" }, "服饰")
  2029. ]),
  2030. vue.createElementVNode("view", { class: "item sk-pseudo sk-pseudo-circle" }, [
  2031. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-163 sk-text" }, "母婴")
  2032. ]),
  2033. vue.createElementVNode("view", { class: "item sk-pseudo sk-pseudo-circle" }, [
  2034. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-690 sk-text" }, "个护")
  2035. ]),
  2036. vue.createElementVNode("view", { class: "item sk-pseudo sk-pseudo-circle" }, [
  2037. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-302 sk-text" }, "严选")
  2038. ]),
  2039. vue.createElementVNode("view", { class: "item sk-pseudo sk-pseudo-circle" }, [
  2040. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-730 sk-text" }, "数码")
  2041. ]),
  2042. vue.createElementVNode("view", { class: "item sk-pseudo sk-pseudo-circle" }, [
  2043. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-584 sk-text" }, "运动")
  2044. ]),
  2045. vue.createElementVNode("view", { class: "item sk-pseudo sk-pseudo-circle" }, [
  2046. vue.createElementVNode("text", { class: "name sk-transparent sk-text-14-2857-895 sk-text" }, "杂项")
  2047. ])
  2048. ]),
  2049. vue.createElementVNode("scroll-view", {
  2050. "scroll-y": true,
  2051. class: "secondary"
  2052. }, [
  2053. vue.createElementVNode("view", {
  2054. is: "components/XtxSwiper",
  2055. class: "banner"
  2056. }, [
  2057. vue.createElementVNode("view", { class: "carousel XtxSwiper--carousel" }, [
  2058. vue.createElementVNode("view", { class: "indicator XtxSwiper--indicator" }, [
  2059. vue.createElementVNode("text", { class: "dot XtxSwiper--dot active XtxSwiper--active" }),
  2060. vue.createElementVNode("text", { class: "dot XtxSwiper--dot" }),
  2061. vue.createElementVNode("text", { class: "dot XtxSwiper--dot" }),
  2062. vue.createElementVNode("text", { class: "dot XtxSwiper--dot" }),
  2063. vue.createElementVNode("text", { class: "dot XtxSwiper--dot" })
  2064. ])
  2065. ])
  2066. ]),
  2067. vue.createElementVNode("view", { class: "panel" }, [
  2068. vue.createElementVNode("view", { class: "title" }, [
  2069. vue.createElementVNode("text", { class: "name sk-transparent sk-text-26-6667-885 sk-text" }, "居家生活用品"),
  2070. vue.createElementVNode("navigator", {
  2071. class: "more sk-transparent sk-text-30-0000-892 sk-text sk-pseudo sk-pseudo-circle",
  2072. "hover-class": "none"
  2073. }, "全部")
  2074. ]),
  2075. vue.createElementVNode("view", { class: "section" }, [
  2076. vue.createElementVNode("navigator", {
  2077. class: "goods",
  2078. "hover-class": "none"
  2079. }, [
  2080. vue.createElementVNode("image", { class: "image sk-image" }),
  2081. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-648 sk-text" }, "极光限定 珠光蓝珐琅锅"),
  2082. vue.createElementVNode("view", { class: "price" }, [
  2083. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  2084. vue.createElementVNode("text", { class: "number sk-transparent sk-text-14-2857-708 sk-text" }, "199.00")
  2085. ])
  2086. ]),
  2087. vue.createElementVNode("navigator", {
  2088. class: "goods",
  2089. "hover-class": "none"
  2090. }, [
  2091. vue.createElementVNode("image", { class: "image sk-image" }),
  2092. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-832 sk-text" }, "钻石陶瓷涂层多用锅18cm 小奶锅"),
  2093. vue.createElementVNode("view", { class: "price" }, [
  2094. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  2095. vue.createElementVNode("text", { class: "number sk-transparent sk-text-14-2857-349 sk-text" }, "149.00")
  2096. ])
  2097. ])
  2098. ])
  2099. ]),
  2100. vue.createElementVNode("view", { class: "panel" }, [
  2101. vue.createElementVNode("view", { class: "title" }, [
  2102. vue.createElementVNode("text", { class: "name sk-transparent sk-text-26-6667-486 sk-text" }, "收纳"),
  2103. vue.createElementVNode("navigator", {
  2104. class: "more sk-transparent sk-text-30-0000-520 sk-text sk-pseudo sk-pseudo-circle",
  2105. "hover-class": "none"
  2106. }, "全部")
  2107. ]),
  2108. vue.createElementVNode("view", { class: "section" }, [
  2109. vue.createElementVNode("navigator", {
  2110. class: "goods",
  2111. "hover-class": "none"
  2112. }, [
  2113. vue.createElementVNode("image", { class: "image sk-image" }),
  2114. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-582 sk-text" }, "开发员自留款,带滚轮双层脏衣篓"),
  2115. vue.createElementVNode("view", { class: "price" }, [
  2116. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  2117. vue.createElementVNode("text", { class: "number sk-transparent sk-text-14-2857-938 sk-text" }, "125.00")
  2118. ])
  2119. ]),
  2120. vue.createElementVNode("navigator", {
  2121. class: "goods",
  2122. "hover-class": "none"
  2123. }, [
  2124. vue.createElementVNode("image", { class: "image sk-image" }),
  2125. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-108 sk-text" }, "换季好帮手,大容量防尘衣物收纳袋"),
  2126. vue.createElementVNode("view", { class: "price" }, [
  2127. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  2128. vue.createElementVNode("text", { class: "number sk-transparent sk-text-14-2857-564 sk-text" }, "69.00")
  2129. ])
  2130. ]),
  2131. vue.createElementVNode("navigator", {
  2132. class: "goods",
  2133. "hover-class": "none"
  2134. }, [
  2135. vue.createElementVNode("image", { class: "image sk-image" }),
  2136. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-507 sk-text" }, "可水洗的布艺收纳盒"),
  2137. vue.createElementVNode("view", { class: "price" }, [
  2138. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  2139. vue.createElementVNode("text", { class: "number sk-transparent sk-text-14-2857-503 sk-text" }, "29.90")
  2140. ])
  2141. ]),
  2142. vue.createElementVNode("navigator", {
  2143. class: "goods",
  2144. "hover-class": "none"
  2145. }, [
  2146. vue.createElementVNode("image", { class: "image sk-image" }),
  2147. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-75 sk-text" }, "爆款明星好物,抽屉式透明储物柜"),
  2148. vue.createElementVNode("view", { class: "price" }, [
  2149. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  2150. vue.createElementVNode("text", { class: "number sk-transparent sk-text-14-2857-965 sk-text" }, "129.00")
  2151. ])
  2152. ]),
  2153. vue.createElementVNode("navigator", {
  2154. class: "goods",
  2155. "hover-class": "none"
  2156. }, [
  2157. vue.createElementVNode("image", { class: "image sk-image" }),
  2158. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-71 sk-text" }, "给衣柜减减肥,真空防潮压缩袋"),
  2159. vue.createElementVNode("view", { class: "price" }, [
  2160. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  2161. vue.createElementVNode("text", { class: "number sk-transparent sk-text-14-2857-530 sk-text" }, "79.00")
  2162. ])
  2163. ]),
  2164. vue.createElementVNode("navigator", {
  2165. class: "goods",
  2166. "hover-class": "none"
  2167. }, [
  2168. vue.createElementVNode("image", { class: "image sk-image" }),
  2169. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-151 sk-text" }, "拉开抽屉不凌乱,磨砂抽屉整理盒套装"),
  2170. vue.createElementVNode("view", { class: "price" }, [
  2171. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  2172. vue.createElementVNode("text", { class: "number sk-transparent sk-text-14-2857-641 sk-text" }, "49.00")
  2173. ])
  2174. ])
  2175. ])
  2176. ])
  2177. ])
  2178. ])
  2179. ])
  2180. ]);
  2181. }
  2182. const PageSkeleton$1 = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$X], ["__scopeId", "data-v-177b00bb"], ["__file", "E:/demo/hmrabbit/src/pages/category/components/PageSkeleton.vue"]]);
  2183. const _sfc_main$X = /* @__PURE__ */ vue.defineComponent({
  2184. __name: "category",
  2185. setup(__props, { expose: __expose }) {
  2186. __expose();
  2187. const bannerList = vue.ref([]);
  2188. const getBannerData = async () => {
  2189. const res = await getHomeBannerAPI(2);
  2190. bannerList.value = res.result;
  2191. };
  2192. const categoryList = vue.ref([]);
  2193. const activeIndex = vue.ref(0);
  2194. const getCategoryTopData = async () => {
  2195. const res = await getCategoryTopAPI();
  2196. categoryList.value = res.result;
  2197. };
  2198. const isFinish = vue.ref(false);
  2199. onLoad(async () => {
  2200. await Promise.all([getBannerData(), getCategoryTopData()]);
  2201. isFinish.value = true;
  2202. });
  2203. const subCategoryList = vue.computed(() => {
  2204. var _a;
  2205. return ((_a = categoryList.value[activeIndex.value]) == null ? void 0 : _a.children) || [];
  2206. });
  2207. const __returned__ = { bannerList, getBannerData, categoryList, activeIndex, getCategoryTopData, isFinish, subCategoryList, PageSkeleton: PageSkeleton$1 };
  2208. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  2209. return __returned__;
  2210. }
  2211. });
  2212. function _sfc_render$W(_ctx, _cache, $props, $setup, $data, $options) {
  2213. const _component_XtxSwiper = resolveEasycom(vue.resolveDynamicComponent("XtxSwiper"), __easycom_0$c);
  2214. return $setup.isFinish ? (vue.openBlock(), vue.createElementBlock("view", {
  2215. key: 0,
  2216. class: "viewport"
  2217. }, [
  2218. vue.createCommentVNode(" 搜索框 "),
  2219. vue.createElementVNode("view", { class: "search" }, [
  2220. vue.createElementVNode("view", { class: "input" }, [
  2221. vue.createElementVNode("text", { class: "icon-search" }, "女靴")
  2222. ])
  2223. ]),
  2224. vue.createCommentVNode(" 分类 "),
  2225. vue.createElementVNode("view", { class: "categories" }, [
  2226. vue.createCommentVNode(" 左侧:一级分类 "),
  2227. vue.createElementVNode("scroll-view", {
  2228. class: "primary",
  2229. "scroll-y": ""
  2230. }, [
  2231. (vue.openBlock(true), vue.createElementBlock(
  2232. vue.Fragment,
  2233. null,
  2234. vue.renderList($setup.categoryList, (item, index) => {
  2235. return vue.openBlock(), vue.createElementBlock("view", {
  2236. key: item.id,
  2237. class: vue.normalizeClass(["item", { active: index === $setup.activeIndex }]),
  2238. onClick: ($event) => $setup.activeIndex = index
  2239. }, [
  2240. vue.createElementVNode(
  2241. "text",
  2242. { class: "name" },
  2243. vue.toDisplayString(item.name),
  2244. 1
  2245. /* TEXT */
  2246. )
  2247. ], 10, ["onClick"]);
  2248. }),
  2249. 128
  2250. /* KEYED_FRAGMENT */
  2251. ))
  2252. ]),
  2253. vue.createCommentVNode(" 右侧:二级分类 "),
  2254. vue.createElementVNode("scroll-view", {
  2255. "enable-back-to-top": "",
  2256. class: "secondary",
  2257. "scroll-y": ""
  2258. }, [
  2259. vue.createCommentVNode(" 焦点图 "),
  2260. vue.createVNode(_component_XtxSwiper, {
  2261. class: "banner",
  2262. list: $setup.bannerList
  2263. }, null, 8, ["list"]),
  2264. vue.createCommentVNode(" 内容区域 "),
  2265. (vue.openBlock(true), vue.createElementBlock(
  2266. vue.Fragment,
  2267. null,
  2268. vue.renderList($setup.subCategoryList, (item) => {
  2269. return vue.openBlock(), vue.createElementBlock("view", {
  2270. class: "panel",
  2271. key: item.id
  2272. }, [
  2273. vue.createElementVNode("view", { class: "title" }, [
  2274. vue.createElementVNode(
  2275. "text",
  2276. { class: "name" },
  2277. vue.toDisplayString(item.name),
  2278. 1
  2279. /* TEXT */
  2280. ),
  2281. vue.createElementVNode("navigator", {
  2282. class: "more",
  2283. "hover-class": "none"
  2284. }, "全部")
  2285. ]),
  2286. vue.createElementVNode("view", { class: "section" }, [
  2287. (vue.openBlock(true), vue.createElementBlock(
  2288. vue.Fragment,
  2289. null,
  2290. vue.renderList(item.goods, (goods2) => {
  2291. return vue.openBlock(), vue.createElementBlock("navigator", {
  2292. key: goods2.id,
  2293. class: "goods",
  2294. "hover-class": "none",
  2295. url: `/pages/goods/goods?id=${goods2.id}`
  2296. }, [
  2297. vue.createElementVNode("image", {
  2298. class: "image",
  2299. src: goods2.picture
  2300. }, null, 8, ["src"]),
  2301. vue.createElementVNode(
  2302. "view",
  2303. { class: "name ellipsis" },
  2304. vue.toDisplayString(goods2.name),
  2305. 1
  2306. /* TEXT */
  2307. ),
  2308. vue.createElementVNode("view", { class: "price" }, [
  2309. vue.createElementVNode("text", { class: "symbol" }, "¥"),
  2310. vue.createElementVNode(
  2311. "text",
  2312. { class: "number" },
  2313. vue.toDisplayString(goods2.price),
  2314. 1
  2315. /* TEXT */
  2316. )
  2317. ])
  2318. ], 8, ["url"]);
  2319. }),
  2320. 128
  2321. /* KEYED_FRAGMENT */
  2322. ))
  2323. ])
  2324. ]);
  2325. }),
  2326. 128
  2327. /* KEYED_FRAGMENT */
  2328. ))
  2329. ])
  2330. ])
  2331. ])) : (vue.openBlock(), vue.createBlock($setup["PageSkeleton"], { key: 1 }));
  2332. }
  2333. const PagesCategoryCategory = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["render", _sfc_render$W], ["__file", "E:/demo/hmrabbit/src/pages/category/category.vue"]]);
  2334. const _sfc_main$W = {
  2335. name: "vk-data-input-number-box",
  2336. emits: ["update:modelValue", "input", "change", "blur", "plus", "minus"],
  2337. props: {
  2338. // 预显示的数字
  2339. value: {
  2340. type: Number,
  2341. default: 1
  2342. },
  2343. modelValue: {
  2344. type: Number,
  2345. default: 1
  2346. },
  2347. // 背景颜色
  2348. bgColor: {
  2349. type: String,
  2350. default: "#F2F3F5"
  2351. },
  2352. // 最小值
  2353. min: {
  2354. type: Number,
  2355. default: 0
  2356. },
  2357. // 最大值
  2358. max: {
  2359. type: Number,
  2360. default: 99999
  2361. },
  2362. // 步进值,每次加或减的值
  2363. step: {
  2364. type: Number,
  2365. default: 1
  2366. },
  2367. // 步进值,首次增加或最后减的值
  2368. stepFirst: {
  2369. type: Number,
  2370. default: 0
  2371. },
  2372. // 是否只能输入 step 的倍数
  2373. stepStrictly: {
  2374. type: Boolean,
  2375. default: false
  2376. },
  2377. // 是否禁用加减操作
  2378. disabled: {
  2379. type: Boolean,
  2380. default: false
  2381. },
  2382. // input的字体大小,单位rpx
  2383. size: {
  2384. type: [Number, String],
  2385. default: 26
  2386. },
  2387. // 加减图标的颜色
  2388. color: {
  2389. type: String,
  2390. default: "#323233"
  2391. },
  2392. // input宽度,单位rpx
  2393. inputWidth: {
  2394. type: [Number, String],
  2395. default: 80
  2396. },
  2397. // input高度,单位rpx
  2398. inputHeight: {
  2399. type: [Number, String],
  2400. default: 50
  2401. },
  2402. // index索引,用于列表中使用,让用户知道是哪个numberbox发生了变化,一般使用for循环出来的index值即可
  2403. index: {
  2404. type: [Number, String],
  2405. default: ""
  2406. },
  2407. // 是否禁用输入框,与disabled作用于输入框时,为OR的关系,即想要禁用输入框,又可以加减的话
  2408. // 设置disabled为false,disabledInput为true即可
  2409. disabledInput: {
  2410. type: Boolean,
  2411. default: false
  2412. },
  2413. // 输入框于键盘之间的距离
  2414. cursorSpacing: {
  2415. type: [Number, String],
  2416. default: 100
  2417. },
  2418. // 是否开启长按连续递增或递减
  2419. longPress: {
  2420. type: Boolean,
  2421. default: true
  2422. },
  2423. // 开启长按触发后,每触发一次需要多久
  2424. pressTime: {
  2425. type: [Number, String],
  2426. default: 250
  2427. },
  2428. // 是否只能输入大于或等于0的整数(正整数)
  2429. positiveInteger: {
  2430. type: Boolean,
  2431. default: true
  2432. }
  2433. },
  2434. watch: {
  2435. valueCom(v1, v2) {
  2436. if (!this.changeFromInner) {
  2437. this.inputVal = v1;
  2438. this.$nextTick(function() {
  2439. this.changeFromInner = false;
  2440. });
  2441. }
  2442. },
  2443. inputVal(v1, v2) {
  2444. if (v1 == "")
  2445. return;
  2446. let value = 0;
  2447. let tmp = this.isNumber(v1);
  2448. if (tmp && v1 >= this.min && v1 <= this.max)
  2449. value = v1;
  2450. else
  2451. value = v2;
  2452. if (this.positiveInteger) {
  2453. if (v1 < 0 || String(v1).indexOf(".") !== -1) {
  2454. value = v2;
  2455. this.$nextTick(() => {
  2456. this.inputVal = v2;
  2457. });
  2458. }
  2459. }
  2460. this.handleChange(value, "change");
  2461. },
  2462. min(v1) {
  2463. if (v1 !== void 0 && v1 != "" && this.valueCom < v1) {
  2464. this.$emit("input", v1);
  2465. this.$emit("update:modelValue", v1);
  2466. }
  2467. },
  2468. max(v1) {
  2469. if (v1 !== void 0 && v1 != "" && this.valueCom > v1) {
  2470. this.$emit("input", v1);
  2471. this.$emit("update:modelValue", v1);
  2472. }
  2473. }
  2474. },
  2475. data() {
  2476. return {
  2477. inputVal: 1,
  2478. // 输入框中的值,不能直接使用props中的value,因为应该改变props的状态
  2479. timer: null,
  2480. // 用作长按的定时器
  2481. changeFromInner: false,
  2482. // 值发生变化,是来自内部还是外部
  2483. innerChangeTimer: null
  2484. // 内部定时器
  2485. };
  2486. },
  2487. created() {
  2488. this.inputVal = Number(this.valueCom);
  2489. },
  2490. computed: {
  2491. valueCom() {
  2492. return this.modelValue;
  2493. },
  2494. getCursorSpacing() {
  2495. return Number(uni.upx2px(this.cursorSpacing));
  2496. }
  2497. },
  2498. methods: {
  2499. // 点击退格键
  2500. btnTouchStart(callback) {
  2501. this[callback]();
  2502. if (!this.longPress)
  2503. return;
  2504. clearInterval(this.timer);
  2505. this.timer = null;
  2506. this.timer = setInterval(() => {
  2507. this[callback]();
  2508. }, this.pressTime);
  2509. },
  2510. clearTimer() {
  2511. this.$nextTick(() => {
  2512. clearInterval(this.timer);
  2513. this.timer = null;
  2514. });
  2515. },
  2516. minus() {
  2517. this.computeVal("minus");
  2518. },
  2519. plus() {
  2520. this.computeVal("plus");
  2521. },
  2522. // 为了保证小数相加减出现精度溢出的问题
  2523. calcPlus(num1, num2) {
  2524. let baseNum, baseNum1, baseNum2;
  2525. try {
  2526. baseNum1 = num1.toString().split(".")[1].length;
  2527. } catch (e2) {
  2528. baseNum1 = 0;
  2529. }
  2530. try {
  2531. baseNum2 = num2.toString().split(".")[1].length;
  2532. } catch (e2) {
  2533. baseNum2 = 0;
  2534. }
  2535. baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  2536. let precision = baseNum1 >= baseNum2 ? baseNum1 : baseNum2;
  2537. return ((num1 * baseNum + num2 * baseNum) / baseNum).toFixed(precision);
  2538. },
  2539. // 为了保证小数相加减出现精度溢出的问题
  2540. calcMinus(num1, num2) {
  2541. let baseNum, baseNum1, baseNum2;
  2542. try {
  2543. baseNum1 = num1.toString().split(".")[1].length;
  2544. } catch (e2) {
  2545. baseNum1 = 0;
  2546. }
  2547. try {
  2548. baseNum2 = num2.toString().split(".")[1].length;
  2549. } catch (e2) {
  2550. baseNum2 = 0;
  2551. }
  2552. baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  2553. let precision = baseNum1 >= baseNum2 ? baseNum1 : baseNum2;
  2554. return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
  2555. },
  2556. computeVal(type) {
  2557. uni.hideKeyboard();
  2558. if (this.disabled)
  2559. return;
  2560. let value = 0;
  2561. if (type === "minus") {
  2562. if (this.stepFirst > 0 && this.inputVal == this.stepFirst) {
  2563. value = this.min;
  2564. } else {
  2565. value = this.calcMinus(this.inputVal, this.step);
  2566. }
  2567. } else if (type === "plus") {
  2568. if (this.stepFirst > 0 && this.inputVal < this.stepFirst) {
  2569. value = this.stepFirst;
  2570. } else {
  2571. value = this.calcPlus(this.inputVal, this.step);
  2572. }
  2573. }
  2574. if (this.stepStrictly) {
  2575. let strictly = value % this.step;
  2576. if (strictly > 0) {
  2577. value -= strictly;
  2578. }
  2579. }
  2580. if (value > this.max) {
  2581. value = this.max;
  2582. } else if (value < this.min) {
  2583. value = this.min;
  2584. }
  2585. this.inputVal = value;
  2586. this.handleChange(value, type);
  2587. },
  2588. // 处理用户手动输入的情况
  2589. onBlur(event) {
  2590. let val = 0;
  2591. let value = event.detail.value;
  2592. if (!/(^\d+$)/.test(value) || value[0] == 0)
  2593. val = this.min;
  2594. val = +value;
  2595. if (this.stepFirst > 0 && this.inputVal < this.stepFirst && this.inputVal > 0) {
  2596. val = this.stepFirst;
  2597. }
  2598. if (this.stepStrictly) {
  2599. let strictly = val % this.step;
  2600. if (strictly > 0) {
  2601. val -= strictly;
  2602. }
  2603. }
  2604. if (val > this.max) {
  2605. val = this.max;
  2606. } else if (val < this.min) {
  2607. val = this.min;
  2608. }
  2609. this.$nextTick(() => {
  2610. this.inputVal = val;
  2611. });
  2612. this.handleChange(val, "blur");
  2613. },
  2614. handleChange(value, type) {
  2615. if (this.disabled)
  2616. return;
  2617. if (this.innerChangeTimer) {
  2618. clearTimeout(this.innerChangeTimer);
  2619. this.innerChangeTimer = null;
  2620. }
  2621. this.changeFromInner = true;
  2622. this.innerChangeTimer = setTimeout(() => {
  2623. this.changeFromInner = false;
  2624. }, 150);
  2625. this.$emit("input", Number(value));
  2626. this.$emit("update:modelValue", Number(value));
  2627. this.$emit(type, {
  2628. // 转为Number类型
  2629. value: Number(value),
  2630. index: this.index
  2631. });
  2632. },
  2633. /**
  2634. * 验证十进制数字
  2635. */
  2636. isNumber(value) {
  2637. return /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
  2638. }
  2639. }
  2640. };
  2641. function _sfc_render$V(_ctx, _cache, $props, $setup, $data, $options) {
  2642. return vue.openBlock(), vue.createElementBlock("view", { class: "vk-data-input-number-box" }, [
  2643. vue.createElementVNode(
  2644. "view",
  2645. {
  2646. class: vue.normalizeClass(["u-icon-minus", { "u-icon-disabled": $props.disabled || $data.inputVal <= $props.min }]),
  2647. style: vue.normalizeStyle({
  2648. background: $props.bgColor,
  2649. height: $props.inputHeight + "rpx",
  2650. color: $props.color,
  2651. fontSize: $props.size + "rpx",
  2652. minHeight: "1.4em"
  2653. }),
  2654. onTouchstart: _cache[0] || (_cache[0] = vue.withModifiers(($event) => $options.btnTouchStart("minus"), ["prevent"])),
  2655. onTouchend: _cache[1] || (_cache[1] = vue.withModifiers((...args) => $options.clearTimer && $options.clearTimer(...args), ["stop", "prevent"]))
  2656. },
  2657. [
  2658. vue.createElementVNode(
  2659. "view",
  2660. {
  2661. style: vue.normalizeStyle("font-size:" + (Number($props.size) + 10) + "rpx"),
  2662. class: "num-btn"
  2663. },
  2664. "-",
  2665. 4
  2666. /* STYLE */
  2667. )
  2668. ],
  2669. 38
  2670. /* CLASS, STYLE, NEED_HYDRATION */
  2671. ),
  2672. vue.withDirectives(vue.createElementVNode("input", {
  2673. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $data.inputVal = $event),
  2674. disabled: $props.disabledInput || $props.disabled,
  2675. "cursor-spacing": $options.getCursorSpacing,
  2676. class: vue.normalizeClass([{ "u-input-disabled": $props.disabled }, "u-number-input"]),
  2677. type: "number",
  2678. style: vue.normalizeStyle({
  2679. color: $props.color,
  2680. fontSize: $props.size + "rpx",
  2681. background: $props.bgColor,
  2682. height: $props.inputHeight + "rpx",
  2683. width: $props.inputWidth + "rpx"
  2684. }),
  2685. onBlur: _cache[3] || (_cache[3] = (...args) => $options.onBlur && $options.onBlur(...args))
  2686. }, null, 46, ["disabled", "cursor-spacing"]), [
  2687. [vue.vModelText, $data.inputVal]
  2688. ]),
  2689. vue.createElementVNode(
  2690. "view",
  2691. {
  2692. class: vue.normalizeClass(["u-icon-plus", { "u-icon-disabled": $props.disabled || $data.inputVal >= $props.max }]),
  2693. style: vue.normalizeStyle({
  2694. background: $props.bgColor,
  2695. height: $props.inputHeight + "rpx",
  2696. color: $props.color,
  2697. fontSize: $props.size + "rpx",
  2698. minHeight: "1.4em"
  2699. }),
  2700. onTouchstart: _cache[4] || (_cache[4] = vue.withModifiers(($event) => $options.btnTouchStart("plus"), ["prevent"])),
  2701. onTouchend: _cache[5] || (_cache[5] = vue.withModifiers((...args) => $options.clearTimer && $options.clearTimer(...args), ["stop", "prevent"]))
  2702. },
  2703. [
  2704. vue.createElementVNode(
  2705. "view",
  2706. {
  2707. style: vue.normalizeStyle("font-size:" + (Number($props.size) + 10) + "rpx"),
  2708. class: "num-btn"
  2709. },
  2710. "+",
  2711. 4
  2712. /* STYLE */
  2713. )
  2714. ],
  2715. 38
  2716. /* CLASS, STYLE, NEED_HYDRATION */
  2717. )
  2718. ]);
  2719. }
  2720. const __easycom_0$b = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["render", _sfc_render$V], ["__scopeId", "data-v-3517706a"], ["__file", "E:/demo/hmrabbit/src/components/vk-data-input-number-box/vk-data-input-number-box.vue"]]);
  2721. let mpMixins = {};
  2722. mpMixins = {
  2723. data() {
  2724. return {
  2725. is_show: "none"
  2726. };
  2727. },
  2728. watch: {
  2729. show(newVal) {
  2730. this.is_show = this.show;
  2731. }
  2732. },
  2733. created() {
  2734. this.swipeaction = this.getSwipeAction();
  2735. if (this.swipeaction.children !== void 0) {
  2736. this.swipeaction.children.push(this);
  2737. }
  2738. },
  2739. mounted() {
  2740. this.is_show = this.show;
  2741. },
  2742. methods: {
  2743. // wxs 中调用
  2744. closeSwipe(e2) {
  2745. if (!this.autoClose)
  2746. return;
  2747. this.swipeaction.closeOther(this);
  2748. },
  2749. change(e2) {
  2750. this.$emit("change", e2.open);
  2751. if (this.is_show !== e2.open) {
  2752. this.is_show = e2.open;
  2753. }
  2754. },
  2755. appTouchStart(e2) {
  2756. const {
  2757. clientX
  2758. } = e2.changedTouches[0];
  2759. this.clientX = clientX;
  2760. this.timestamp = (/* @__PURE__ */ new Date()).getTime();
  2761. },
  2762. appTouchEnd(e2, index, item, position) {
  2763. const {
  2764. clientX
  2765. } = e2.changedTouches[0];
  2766. let diff = Math.abs(this.clientX - clientX);
  2767. let time = (/* @__PURE__ */ new Date()).getTime() - this.timestamp;
  2768. if (diff < 40 && time < 300) {
  2769. this.$emit("click", {
  2770. content: item,
  2771. index,
  2772. position
  2773. });
  2774. }
  2775. },
  2776. onClickForPC(index, item, position) {
  2777. return;
  2778. }
  2779. }
  2780. };
  2781. const mpwxs = mpMixins;
  2782. let bindIngXMixins = {};
  2783. let otherMixins = {};
  2784. const block0 = (Comp) => {
  2785. (Comp.$wxs || (Comp.$wxs = [])).push("wxsswipe");
  2786. (Comp.$wxsModules || (Comp.$wxsModules = {}))["wxsswipe"] = "105aa6f4";
  2787. };
  2788. const block1 = (Comp) => {
  2789. (Comp.$renderjs || (Comp.$renderjs = [])).push("renderswipe");
  2790. (Comp.$renderjsModules || (Comp.$renderjsModules = {}))["renderswipe"] = "0db65775";
  2791. };
  2792. const _sfc_main$V = {
  2793. mixins: [mpwxs, bindIngXMixins, otherMixins],
  2794. emits: ["click", "change"],
  2795. props: {
  2796. // 控制开关
  2797. show: {
  2798. type: String,
  2799. default: "none"
  2800. },
  2801. // 禁用
  2802. disabled: {
  2803. type: Boolean,
  2804. default: false
  2805. },
  2806. // 是否自动关闭
  2807. autoClose: {
  2808. type: Boolean,
  2809. default: true
  2810. },
  2811. // 滑动缺省距离
  2812. threshold: {
  2813. type: Number,
  2814. default: 20
  2815. },
  2816. // 左侧按钮内容
  2817. leftOptions: {
  2818. type: Array,
  2819. default() {
  2820. return [];
  2821. }
  2822. },
  2823. // 右侧按钮内容
  2824. rightOptions: {
  2825. type: Array,
  2826. default() {
  2827. return [];
  2828. }
  2829. }
  2830. },
  2831. // TODO vue3
  2832. unmounted() {
  2833. this.__isUnmounted = true;
  2834. this.uninstall();
  2835. },
  2836. methods: {
  2837. uninstall() {
  2838. if (this.swipeaction) {
  2839. this.swipeaction.children.forEach((item, index) => {
  2840. if (item === this) {
  2841. this.swipeaction.children.splice(index, 1);
  2842. }
  2843. });
  2844. }
  2845. },
  2846. /**
  2847. * 获取父元素实例
  2848. */
  2849. getSwipeAction(name = "uniSwipeAction") {
  2850. let parent = this.$parent;
  2851. let parentName = parent.$options.name;
  2852. while (parentName !== name) {
  2853. parent = parent.$parent;
  2854. if (!parent)
  2855. return false;
  2856. parentName = parent.$options.name;
  2857. }
  2858. return parent;
  2859. }
  2860. }
  2861. };
  2862. function _sfc_render$U(_ctx, _cache, $props, $setup, $data, $options) {
  2863. return vue.openBlock(), vue.createElementBlock(
  2864. vue.Fragment,
  2865. null,
  2866. [
  2867. vue.createCommentVNode(" 在微信小程序 app vue端 h5 使用wxs 实现"),
  2868. vue.createElementVNode("view", { class: "uni-swipe" }, [
  2869. vue.createElementVNode("view", {
  2870. class: "uni-swipe_box",
  2871. "change:prop": _ctx.wxsswipe.showWatch,
  2872. prop: vue.wp(_ctx.is_show),
  2873. "data-threshold": $props.threshold,
  2874. "data-disabled": $props.disabled,
  2875. onTouchstart: _cache[2] || (_cache[2] = (...args) => _ctx.wxsswipe.touchstart && _ctx.wxsswipe.touchstart(...args)),
  2876. onTouchmove: _cache[3] || (_cache[3] = (...args) => _ctx.wxsswipe.touchmove && _ctx.wxsswipe.touchmove(...args)),
  2877. onTouchend: _cache[4] || (_cache[4] = (...args) => _ctx.wxsswipe.touchend && _ctx.wxsswipe.touchend(...args))
  2878. }, [
  2879. vue.createCommentVNode(" 在微信小程序 app vue端 h5 使用wxs 实现"),
  2880. vue.createElementVNode("view", { class: "uni-swipe_button-group button-group--left" }, [
  2881. vue.renderSlot(_ctx.$slots, "left", {}, () => [
  2882. (vue.openBlock(true), vue.createElementBlock(
  2883. vue.Fragment,
  2884. null,
  2885. vue.renderList($props.leftOptions, (item, index) => {
  2886. return vue.openBlock(), vue.createElementBlock("view", {
  2887. key: index,
  2888. style: vue.normalizeStyle({
  2889. backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : "#C7C6CD"
  2890. }),
  2891. class: "uni-swipe_button button-hock",
  2892. onTouchstart: _cache[0] || (_cache[0] = (...args) => _ctx.appTouchStart && _ctx.appTouchStart(...args)),
  2893. onTouchend: ($event) => _ctx.appTouchEnd($event, index, item, "left"),
  2894. onClick: vue.withModifiers(($event) => _ctx.onClickForPC(index, item, "left"), ["stop"])
  2895. }, [
  2896. vue.createElementVNode(
  2897. "text",
  2898. {
  2899. class: "uni-swipe_button-text",
  2900. style: vue.normalizeStyle({ color: item.style && item.style.color ? item.style.color : "#FFFFFF", fontSize: item.style && item.style.fontSize ? item.style.fontSize : "16px" })
  2901. },
  2902. vue.toDisplayString(item.text),
  2903. 5
  2904. /* TEXT, STYLE */
  2905. )
  2906. ], 44, ["onTouchend", "onClick"]);
  2907. }),
  2908. 128
  2909. /* KEYED_FRAGMENT */
  2910. ))
  2911. ], true)
  2912. ]),
  2913. vue.createElementVNode("view", { class: "uni-swipe_text--center" }, [
  2914. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  2915. ]),
  2916. vue.createElementVNode("view", { class: "uni-swipe_button-group button-group--right" }, [
  2917. vue.renderSlot(_ctx.$slots, "right", {}, () => [
  2918. (vue.openBlock(true), vue.createElementBlock(
  2919. vue.Fragment,
  2920. null,
  2921. vue.renderList($props.rightOptions, (item, index) => {
  2922. return vue.openBlock(), vue.createElementBlock("view", {
  2923. key: index,
  2924. style: vue.normalizeStyle({
  2925. backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : "#C7C6CD"
  2926. }),
  2927. class: "uni-swipe_button button-hock",
  2928. onTouchstart: _cache[1] || (_cache[1] = (...args) => _ctx.appTouchStart && _ctx.appTouchStart(...args)),
  2929. onTouchend: ($event) => _ctx.appTouchEnd($event, index, item, "right"),
  2930. onClick: vue.withModifiers(($event) => _ctx.onClickForPC(index, item, "right"), ["stop"])
  2931. }, [
  2932. vue.createElementVNode(
  2933. "text",
  2934. {
  2935. class: "uni-swipe_button-text",
  2936. style: vue.normalizeStyle({ color: item.style && item.style.color ? item.style.color : "#FFFFFF", fontSize: item.style && item.style.fontSize ? item.style.fontSize : "16px" })
  2937. },
  2938. vue.toDisplayString(item.text),
  2939. 5
  2940. /* TEXT, STYLE */
  2941. )
  2942. ], 44, ["onTouchend", "onClick"]);
  2943. }),
  2944. 128
  2945. /* KEYED_FRAGMENT */
  2946. ))
  2947. ], true)
  2948. ])
  2949. ], 40, ["change:prop", "prop", "data-threshold", "data-disabled"])
  2950. ]),
  2951. vue.createCommentVNode(" app nvue端 使用 bindingx "),
  2952. vue.createCommentVNode(" 其他平台使用 js ,长列表性能可能会有影响")
  2953. ],
  2954. 2112
  2955. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  2956. );
  2957. }
  2958. if (typeof block0 === "function")
  2959. block0(_sfc_main$V);
  2960. if (typeof block1 === "function")
  2961. block1(_sfc_main$V);
  2962. const __easycom_0$a = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["render", _sfc_render$U], ["__scopeId", "data-v-82a5303b"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-swipe-action-item/uni-swipe-action-item.vue"]]);
  2963. const _sfc_main$U = {
  2964. name: "uniSwipeAction",
  2965. data() {
  2966. return {};
  2967. },
  2968. created() {
  2969. this.children = [];
  2970. },
  2971. methods: {
  2972. // 公开给用户使用,重制组件样式
  2973. resize() {
  2974. },
  2975. // 公开给用户使用,关闭全部 已经打开的组件
  2976. closeAll() {
  2977. this.children.forEach((vm) => {
  2978. vm.is_show = "none";
  2979. });
  2980. },
  2981. closeOther(vm) {
  2982. if (this.openItem && this.openItem !== vm) {
  2983. this.openItem.is_show = "none";
  2984. }
  2985. this.openItem = vm;
  2986. }
  2987. }
  2988. };
  2989. function _sfc_render$T(_ctx, _cache, $props, $setup, $data, $options) {
  2990. return vue.openBlock(), vue.createElementBlock("view", null, [
  2991. vue.renderSlot(_ctx.$slots, "default")
  2992. ]);
  2993. }
  2994. const __easycom_1$2 = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["render", _sfc_render$T], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-swipe-action/uni-swipe-action.vue"]]);
  2995. const _sfc_main$T = /* @__PURE__ */ vue.defineComponent({
  2996. __name: "XtxGuess",
  2997. setup(__props, { expose: __expose }) {
  2998. const pageParams = {
  2999. page: 1,
  3000. pageSize: 10
  3001. };
  3002. const guessList = vue.ref([]);
  3003. const finish = vue.ref(false);
  3004. const getHomeGoodsGuessLikeData = async () => {
  3005. if (finish.value === true) {
  3006. return uni.showToast({ icon: "none", title: "没有更多数据~" });
  3007. }
  3008. const res = await getHomeGoodsGuessLikeAPI(pageParams);
  3009. guessList.value.push(...res.result.items);
  3010. if (pageParams.page < res.result.pages) {
  3011. pageParams.page++;
  3012. } else {
  3013. finish.value = true;
  3014. }
  3015. };
  3016. const resetData = () => {
  3017. pageParams.page = 1;
  3018. guessList.value = [];
  3019. finish.value = false;
  3020. };
  3021. vue.onMounted(() => {
  3022. getHomeGoodsGuessLikeData();
  3023. });
  3024. __expose({
  3025. resetData,
  3026. getMore: getHomeGoodsGuessLikeData
  3027. });
  3028. const __returned__ = { pageParams, guessList, finish, getHomeGoodsGuessLikeData, resetData };
  3029. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3030. return __returned__;
  3031. }
  3032. });
  3033. function _sfc_render$S(_ctx, _cache, $props, $setup, $data, $options) {
  3034. return vue.openBlock(), vue.createElementBlock(
  3035. vue.Fragment,
  3036. null,
  3037. [
  3038. vue.createCommentVNode(" 猜你喜欢 "),
  3039. vue.createElementVNode("view", { class: "caption" }, [
  3040. vue.createElementVNode("text", { class: "text" }, "猜你喜欢")
  3041. ]),
  3042. vue.createElementVNode("view", { class: "guess" }, [
  3043. (vue.openBlock(true), vue.createElementBlock(
  3044. vue.Fragment,
  3045. null,
  3046. vue.renderList($setup.guessList, (item) => {
  3047. return vue.openBlock(), vue.createElementBlock("navigator", {
  3048. class: "guess-item",
  3049. key: item.id,
  3050. url: `/pages/goods/goods?id=${item.id}`
  3051. }, [
  3052. vue.createElementVNode("image", {
  3053. class: "image",
  3054. mode: "aspectFill",
  3055. src: item.picture
  3056. }, null, 8, ["src"]),
  3057. vue.createElementVNode(
  3058. "view",
  3059. { class: "name" },
  3060. vue.toDisplayString(item.name),
  3061. 1
  3062. /* TEXT */
  3063. ),
  3064. vue.createElementVNode("view", { class: "price" }, [
  3065. vue.createElementVNode("text", { class: "small" }, "¥"),
  3066. vue.createElementVNode(
  3067. "text",
  3068. null,
  3069. vue.toDisplayString(item.price),
  3070. 1
  3071. /* TEXT */
  3072. )
  3073. ])
  3074. ], 8, ["url"]);
  3075. }),
  3076. 128
  3077. /* KEYED_FRAGMENT */
  3078. ))
  3079. ]),
  3080. vue.createElementVNode(
  3081. "view",
  3082. { class: "loading-text" },
  3083. vue.toDisplayString($setup.finish ? "没有更多数据~" : "正在加载..."),
  3084. 1
  3085. /* TEXT */
  3086. )
  3087. ],
  3088. 64
  3089. /* STABLE_FRAGMENT */
  3090. );
  3091. }
  3092. const __easycom_0$9 = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$S], ["__scopeId", "data-v-e94a02da"], ["__file", "E:/demo/hmrabbit/src/components/XtxGuess.vue"]]);
  3093. const useGuessList = () => {
  3094. const guessRef = vue.ref();
  3095. const onScrolltolower = () => {
  3096. var _a;
  3097. (_a = guessRef.value) == null ? void 0 : _a.getMore();
  3098. };
  3099. return {
  3100. guessRef,
  3101. onScrolltolower
  3102. };
  3103. };
  3104. const postMemberCartAPI = (data) => {
  3105. return http({
  3106. method: "POST",
  3107. url: "/member/cart",
  3108. data
  3109. });
  3110. };
  3111. const getMemberCartAPI = () => {
  3112. return http({
  3113. method: "GET",
  3114. url: "/member/cart"
  3115. });
  3116. };
  3117. const deleteMemberCartAPI = (data) => {
  3118. return http({
  3119. method: "DELETE",
  3120. url: "/member/cart",
  3121. data
  3122. });
  3123. };
  3124. const putMemberCartBySkuIdAPI = (skuId, data) => {
  3125. return http({
  3126. method: "PUT",
  3127. url: `/member/cart/${skuId}`,
  3128. data
  3129. });
  3130. };
  3131. const putMemberCartSelectedAPI = (data) => {
  3132. return http({
  3133. method: "PUT",
  3134. url: "/member/cart/selected",
  3135. data
  3136. });
  3137. };
  3138. const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
  3139. __name: "CartMain",
  3140. props: {
  3141. safeAreaInsetBottom: { type: Boolean, required: false }
  3142. },
  3143. setup(__props, { expose: __expose }) {
  3144. __expose();
  3145. const { safeAreaInsets } = uni.getSystemInfoSync();
  3146. const memberStore = useMemberStore();
  3147. const cartList = vue.ref([]);
  3148. const showCartList = vue.ref(true);
  3149. const getMemberCartData = async () => {
  3150. const res = await getMemberCartAPI();
  3151. cartList.value = res.result;
  3152. showCartList.value = res.result.length > 0;
  3153. };
  3154. onShow(() => {
  3155. if (memberStore.profile) {
  3156. getMemberCartData();
  3157. }
  3158. });
  3159. const onDeleteCart = (skuId) => {
  3160. uni.showModal({
  3161. content: "是否删除",
  3162. confirmColor: "#27BA9B",
  3163. success: async (res) => {
  3164. if (res.confirm) {
  3165. await deleteMemberCartAPI({ ids: [skuId] });
  3166. getMemberCartData();
  3167. }
  3168. }
  3169. });
  3170. };
  3171. const onChangeCount = (ev) => {
  3172. putMemberCartBySkuIdAPI(ev.index, { count: ev.value });
  3173. };
  3174. const onChangeSelected = (item) => {
  3175. item.selected = !item.selected;
  3176. putMemberCartBySkuIdAPI(item.skuId, { selected: item.selected });
  3177. };
  3178. const isSelectedAll = vue.computed(() => {
  3179. return cartList.value.length && cartList.value.every((v2) => v2.selected);
  3180. });
  3181. const onChangeSelectedAll = () => {
  3182. const _isSelectedAll = !isSelectedAll.value;
  3183. cartList.value.forEach((item) => {
  3184. item.selected = _isSelectedAll;
  3185. });
  3186. putMemberCartSelectedAPI({ selected: _isSelectedAll });
  3187. };
  3188. const selectedCartList = vue.computed(() => {
  3189. return cartList.value.filter((v2) => v2.selected);
  3190. });
  3191. const selectedCartListCount = vue.computed(() => {
  3192. return selectedCartList.value.reduce((sum, item) => sum + item.count, 0);
  3193. });
  3194. const selectedCartListMoney = vue.computed(() => {
  3195. return selectedCartList.value.reduce((sum, item) => sum + item.count * item.nowPrice, 0).toFixed(2);
  3196. });
  3197. const gotoPayment = () => {
  3198. if (selectedCartListCount.value === 0) {
  3199. return uni.showToast({
  3200. icon: "none",
  3201. title: "请选择商品"
  3202. });
  3203. }
  3204. uni.navigateTo({ url: "/pagesOrder/create/create" });
  3205. };
  3206. const { guessRef, onScrolltolower } = useGuessList();
  3207. const __returned__ = { safeAreaInsets, memberStore, cartList, showCartList, getMemberCartData, onDeleteCart, onChangeCount, onChangeSelected, isSelectedAll, onChangeSelectedAll, selectedCartList, selectedCartListCount, selectedCartListMoney, gotoPayment, guessRef, onScrolltolower };
  3208. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3209. return __returned__;
  3210. }
  3211. });
  3212. const _imports_0$1 = "/static/images/blank_cart.png";
  3213. function _sfc_render$R(_ctx, _cache, $props, $setup, $data, $options) {
  3214. var _a;
  3215. const _component_vk_data_input_number_box = resolveEasycom(vue.resolveDynamicComponent("vk-data-input-number-box"), __easycom_0$b);
  3216. const _component_uni_swipe_action_item = resolveEasycom(vue.resolveDynamicComponent("uni-swipe-action-item"), __easycom_0$a);
  3217. const _component_uni_swipe_action = resolveEasycom(vue.resolveDynamicComponent("uni-swipe-action"), __easycom_1$2);
  3218. const _component_XtxGuess = resolveEasycom(vue.resolveDynamicComponent("XtxGuess"), __easycom_0$9);
  3219. return vue.openBlock(), vue.createElementBlock(
  3220. "scroll-view",
  3221. {
  3222. "enable-back-to-top": "",
  3223. "scroll-y": "",
  3224. class: "scroll-view",
  3225. onScrolltolower: _cache[0] || (_cache[0] = (...args) => $setup.onScrolltolower && $setup.onScrolltolower(...args))
  3226. },
  3227. [
  3228. vue.createCommentVNode(" 已登录: 显示购物车 "),
  3229. $setup.memberStore.profile ? (vue.openBlock(), vue.createElementBlock(
  3230. vue.Fragment,
  3231. { key: 0 },
  3232. [
  3233. vue.createCommentVNode(" 购物车列表 "),
  3234. $setup.showCartList ? (vue.openBlock(), vue.createElementBlock("view", {
  3235. key: 0,
  3236. class: "cart-list"
  3237. }, [
  3238. vue.createCommentVNode(" 优惠提示 "),
  3239. vue.createElementVNode("view", { class: "tips" }, [
  3240. vue.createElementVNode("text", { class: "label" }, "满减"),
  3241. vue.createElementVNode("text", { class: "desc" }, "满1件, 即可享受9折优惠")
  3242. ]),
  3243. vue.createCommentVNode(" 滑动操作分区 "),
  3244. vue.createVNode(_component_uni_swipe_action, null, {
  3245. default: vue.withCtx(() => [
  3246. vue.createCommentVNode(" 滑动操作项 "),
  3247. (vue.openBlock(true), vue.createElementBlock(
  3248. vue.Fragment,
  3249. null,
  3250. vue.renderList($setup.cartList, (item) => {
  3251. return vue.openBlock(), vue.createBlock(
  3252. _component_uni_swipe_action_item,
  3253. {
  3254. key: item.skuId,
  3255. class: "cart-swipe"
  3256. },
  3257. {
  3258. right: vue.withCtx(() => [
  3259. vue.createElementVNode("view", { class: "cart-swipe-right" }, [
  3260. vue.createElementVNode("button", {
  3261. onClick: ($event) => $setup.onDeleteCart(item.skuId),
  3262. class: "button delete-button"
  3263. }, "删除", 8, ["onClick"])
  3264. ])
  3265. ]),
  3266. default: vue.withCtx(() => [
  3267. vue.createElementVNode("view", { class: "goods" }, [
  3268. vue.createCommentVNode(" 选中状态 "),
  3269. vue.createElementVNode("text", {
  3270. onClick: ($event) => $setup.onChangeSelected(item),
  3271. class: vue.normalizeClass(["checkbox", { checked: item.selected }])
  3272. }, null, 10, ["onClick"]),
  3273. vue.createElementVNode("navigator", {
  3274. url: `/pages/goods/goods?id=${item.id}`,
  3275. "hover-class": "none",
  3276. class: "navigator"
  3277. }, [
  3278. vue.createElementVNode("image", {
  3279. mode: "aspectFill",
  3280. class: "picture",
  3281. src: item.picture
  3282. }, null, 8, ["src"]),
  3283. vue.createElementVNode("view", { class: "meta" }, [
  3284. vue.createElementVNode(
  3285. "view",
  3286. { class: "name ellipsis" },
  3287. vue.toDisplayString(item.name),
  3288. 1
  3289. /* TEXT */
  3290. ),
  3291. vue.createElementVNode(
  3292. "view",
  3293. { class: "attrsText ellipsis" },
  3294. vue.toDisplayString(item.attrsText),
  3295. 1
  3296. /* TEXT */
  3297. ),
  3298. vue.createElementVNode(
  3299. "view",
  3300. { class: "price" },
  3301. vue.toDisplayString(item.nowPrice),
  3302. 1
  3303. /* TEXT */
  3304. )
  3305. ])
  3306. ], 8, ["url"]),
  3307. vue.createCommentVNode(" 商品数量 "),
  3308. vue.createElementVNode("view", { class: "count" }, [
  3309. vue.createVNode(_component_vk_data_input_number_box, {
  3310. modelValue: item.count,
  3311. "onUpdate:modelValue": ($event) => item.count = $event,
  3312. min: 1,
  3313. max: item.stock,
  3314. index: item.skuId,
  3315. onChange: $setup.onChangeCount
  3316. }, null, 8, ["modelValue", "onUpdate:modelValue", "max", "index"])
  3317. ])
  3318. ])
  3319. ]),
  3320. _: 2
  3321. /* DYNAMIC */
  3322. },
  3323. 1024
  3324. /* DYNAMIC_SLOTS */
  3325. );
  3326. }),
  3327. 128
  3328. /* KEYED_FRAGMENT */
  3329. ))
  3330. ]),
  3331. _: 1
  3332. /* STABLE */
  3333. })
  3334. ])) : (vue.openBlock(), vue.createElementBlock(
  3335. vue.Fragment,
  3336. { key: 1 },
  3337. [
  3338. vue.createCommentVNode(" 购物车空状态 "),
  3339. vue.createElementVNode("view", { class: "cart-blank" }, [
  3340. vue.createElementVNode("image", {
  3341. src: _imports_0$1,
  3342. class: "image"
  3343. }),
  3344. vue.createElementVNode("text", { class: "text" }, "购物车还是空的,快来挑选好货吧"),
  3345. vue.createElementVNode("navigator", {
  3346. url: "/pages/index/index",
  3347. "hover-class": "none"
  3348. }, [
  3349. vue.createElementVNode("button", { class: "button" }, "去首页看看")
  3350. ])
  3351. ])
  3352. ],
  3353. 2112
  3354. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  3355. )),
  3356. vue.createCommentVNode(" 吸底工具栏 "),
  3357. $setup.showCartList ? (vue.openBlock(), vue.createElementBlock(
  3358. "view",
  3359. {
  3360. key: 2,
  3361. class: "toolbar",
  3362. style: vue.normalizeStyle({ paddingBottom: $props.safeAreaInsetBottom ? ((_a = $setup.safeAreaInsets) == null ? void 0 : _a.bottom) + "px" : 0 })
  3363. },
  3364. [
  3365. vue.createElementVNode(
  3366. "text",
  3367. {
  3368. onClick: $setup.onChangeSelectedAll,
  3369. class: vue.normalizeClass(["all", { checked: $setup.isSelectedAll }])
  3370. },
  3371. "全选",
  3372. 2
  3373. /* CLASS */
  3374. ),
  3375. vue.createElementVNode("text", { class: "text" }, "合计:"),
  3376. vue.createElementVNode(
  3377. "text",
  3378. { class: "amount" },
  3379. vue.toDisplayString($setup.selectedCartListMoney),
  3380. 1
  3381. /* TEXT */
  3382. ),
  3383. vue.createElementVNode("view", { class: "button-grounp" }, [
  3384. vue.createElementVNode(
  3385. "view",
  3386. {
  3387. onClick: $setup.gotoPayment,
  3388. class: vue.normalizeClass(["button payment-button", { disabled: $setup.selectedCartListCount === 0 }])
  3389. },
  3390. " 去结算(" + vue.toDisplayString($setup.selectedCartListCount) + ") ",
  3391. 3
  3392. /* TEXT, CLASS */
  3393. )
  3394. ])
  3395. ],
  3396. 4
  3397. /* STYLE */
  3398. )) : vue.createCommentVNode("v-if", true)
  3399. ],
  3400. 64
  3401. /* STABLE_FRAGMENT */
  3402. )) : (vue.openBlock(), vue.createElementBlock(
  3403. vue.Fragment,
  3404. { key: 1 },
  3405. [
  3406. vue.createCommentVNode(" 未登录: 提示登录 "),
  3407. vue.createElementVNode("view", { class: "login-blank" }, [
  3408. vue.createElementVNode("text", { class: "text" }, "登录后可查看购物车中的商品"),
  3409. vue.createElementVNode("navigator", {
  3410. url: "/pages/login/login",
  3411. "hover-class": "none"
  3412. }, [
  3413. vue.createElementVNode("button", { class: "button" }, "去登录")
  3414. ])
  3415. ])
  3416. ],
  3417. 2112
  3418. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  3419. )),
  3420. vue.createCommentVNode(" 猜你喜欢 "),
  3421. vue.createVNode(
  3422. _component_XtxGuess,
  3423. { ref: "guessRef" },
  3424. null,
  3425. 512
  3426. /* NEED_PATCH */
  3427. ),
  3428. vue.createCommentVNode(" 底部占位空盒子 "),
  3429. vue.createElementVNode("view", { class: "toolbar-height" })
  3430. ],
  3431. 32
  3432. /* NEED_HYDRATION */
  3433. );
  3434. }
  3435. const CartMain = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$R], ["__scopeId", "data-v-1830a74b"], ["__file", "E:/demo/hmrabbit/src/pages/cart/components/CartMain.vue"]]);
  3436. const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
  3437. __name: "cart",
  3438. setup(__props, { expose: __expose }) {
  3439. __expose();
  3440. const __returned__ = { CartMain };
  3441. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3442. return __returned__;
  3443. }
  3444. });
  3445. function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
  3446. return vue.openBlock(), vue.createBlock($setup["CartMain"]);
  3447. }
  3448. const PagesCartCart = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["render", _sfc_render$Q], ["__file", "E:/demo/hmrabbit/src/pages/cart/cart.vue"]]);
  3449. const _sfc_main$Q = /* @__PURE__ */ vue.defineComponent({
  3450. __name: "cart2",
  3451. setup(__props, { expose: __expose }) {
  3452. __expose();
  3453. const __returned__ = { CartMain };
  3454. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3455. return __returned__;
  3456. }
  3457. });
  3458. function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) {
  3459. return vue.openBlock(), vue.createElementBlock(
  3460. vue.Fragment,
  3461. null,
  3462. [
  3463. vue.createCommentVNode(" 适配底部安全区 "),
  3464. vue.createVNode($setup["CartMain"], { "safe-area-inset-bottom": "" })
  3465. ],
  3466. 2112
  3467. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  3468. );
  3469. }
  3470. const PagesCartCart2 = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["render", _sfc_render$P], ["__file", "E:/demo/hmrabbit/src/pages/cart/cart2.vue"]]);
  3471. const _sfc_main$P = /* @__PURE__ */ vue.defineComponent({
  3472. __name: "my",
  3473. setup(__props, { expose: __expose }) {
  3474. __expose();
  3475. const { safeAreaInsets } = uni.getSystemInfoSync();
  3476. const orderTypes = [
  3477. { type: "1", text: "待付款", icon: "icon-currency" },
  3478. { type: "2", text: "待发货", icon: "icon-gift" },
  3479. { type: "3", text: "待收货", icon: "icon-check" },
  3480. { type: "4", text: "待评价", icon: "icon-comment" }
  3481. ];
  3482. const memberStore = useMemberStore();
  3483. const { guessRef, onScrolltolower } = useGuessList();
  3484. const __returned__ = { safeAreaInsets, orderTypes, memberStore, guessRef, onScrolltolower };
  3485. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3486. return __returned__;
  3487. }
  3488. });
  3489. function _sfc_render$O(_ctx, _cache, $props, $setup, $data, $options) {
  3490. return vue.openBlock(), vue.createElementBlock(
  3491. "scroll-view",
  3492. {
  3493. "enable-back-to-top": "",
  3494. onScrolltolower: _cache[0] || (_cache[0] = (...args) => $setup.onScrolltolower && $setup.onScrolltolower(...args)),
  3495. class: "viewport",
  3496. "scroll-y": ""
  3497. },
  3498. [
  3499. vue.createCommentVNode(" 个人资料 "),
  3500. vue.createElementVNode(
  3501. "view",
  3502. {
  3503. class: "profile",
  3504. style: vue.normalizeStyle({ paddingTop: $setup.safeAreaInsets.top + "px" })
  3505. },
  3506. [
  3507. vue.createCommentVNode(" 情况1:已登录 "),
  3508. $setup.memberStore.profile ? (vue.openBlock(), vue.createElementBlock("view", {
  3509. key: 0,
  3510. class: "overview"
  3511. }, [
  3512. vue.createElementVNode("navigator", {
  3513. url: "/pagesMember/profile/profile",
  3514. "hover-class": "none"
  3515. }, [
  3516. vue.createElementVNode("image", {
  3517. class: "avatar",
  3518. src: $setup.memberStore.profile.avatar,
  3519. mode: "aspectFill"
  3520. }, null, 8, ["src"])
  3521. ]),
  3522. vue.createElementVNode("view", { class: "meta" }, [
  3523. vue.createElementVNode(
  3524. "view",
  3525. { class: "nickname" },
  3526. vue.toDisplayString($setup.memberStore.profile.nickname || $setup.memberStore.profile.username),
  3527. 1
  3528. /* TEXT */
  3529. ),
  3530. vue.createElementVNode("navigator", {
  3531. class: "extra",
  3532. url: "/pagesMember/profile/profile",
  3533. "hover-class": "none"
  3534. }, [
  3535. vue.createElementVNode("text", { class: "update" }, "更新头像昵称")
  3536. ])
  3537. ])
  3538. ])) : (vue.openBlock(), vue.createElementBlock(
  3539. vue.Fragment,
  3540. { key: 1 },
  3541. [
  3542. vue.createCommentVNode(" 情况2:未登录 "),
  3543. vue.createElementVNode("view", { class: "overview" }, [
  3544. vue.createElementVNode("navigator", {
  3545. url: "/pages/login/login",
  3546. "hover-class": "none"
  3547. }, [
  3548. vue.createElementVNode("image", {
  3549. class: "avatar gray",
  3550. mode: "aspectFill",
  3551. src: "https://yjy-xiaotuxian-dev.oss-cn-beijing.aliyuncs.com/picture/2021-04-06/db628d42-88a7-46e7-abb8-659448c33081.png"
  3552. })
  3553. ]),
  3554. vue.createElementVNode("view", { class: "meta" }, [
  3555. vue.createElementVNode("navigator", {
  3556. url: "/pages/login/login",
  3557. "hover-class": "none",
  3558. class: "nickname"
  3559. }, " 未登录 "),
  3560. vue.createElementVNode("view", { class: "extra" }, [
  3561. vue.createElementVNode("text", { class: "tips" }, "点击登录账号")
  3562. ])
  3563. ])
  3564. ])
  3565. ],
  3566. 2112
  3567. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  3568. )),
  3569. vue.createElementVNode("navigator", {
  3570. class: "settings",
  3571. url: "/pagesMember/settings/settings",
  3572. "hover-class": "none"
  3573. }, " 设置 ")
  3574. ],
  3575. 4
  3576. /* STYLE */
  3577. ),
  3578. vue.createCommentVNode(" 我的订单 "),
  3579. vue.createElementVNode("view", { class: "orders" }, [
  3580. vue.createElementVNode("view", { class: "title" }, [
  3581. vue.createTextVNode(" 我的订单 "),
  3582. vue.createElementVNode("navigator", {
  3583. class: "navigator",
  3584. url: "/pagesOrder/list/list?type=0",
  3585. "hover-class": "none"
  3586. }, [
  3587. vue.createTextVNode(" 查看全部订单"),
  3588. vue.createElementVNode("text", { class: "icon-right" })
  3589. ])
  3590. ]),
  3591. vue.createElementVNode("view", { class: "section" }, [
  3592. vue.createCommentVNode(" 订单 "),
  3593. (vue.openBlock(), vue.createElementBlock(
  3594. vue.Fragment,
  3595. null,
  3596. vue.renderList($setup.orderTypes, (item) => {
  3597. return vue.createElementVNode("navigator", {
  3598. key: item.type,
  3599. class: vue.normalizeClass([item.icon, "navigator"]),
  3600. url: `/pagesOrder/list/list?type=${item.type}`,
  3601. "hover-class": "none"
  3602. }, vue.toDisplayString(item.text), 11, ["url"]);
  3603. }),
  3604. 64
  3605. /* STABLE_FRAGMENT */
  3606. )),
  3607. vue.createCommentVNode(" 客服 ")
  3608. ])
  3609. ])
  3610. ],
  3611. 32
  3612. /* NEED_HYDRATION */
  3613. );
  3614. }
  3615. const PagesMyMy = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["render", _sfc_render$O], ["__file", "E:/demo/hmrabbit/src/pages/my/my.vue"]]);
  3616. const icons = {
  3617. "id": "2852637",
  3618. "name": "uniui图标库",
  3619. "font_family": "uniicons",
  3620. "css_prefix_text": "uniui-",
  3621. "description": "",
  3622. "glyphs": [
  3623. {
  3624. "icon_id": "25027049",
  3625. "name": "yanse",
  3626. "font_class": "color",
  3627. "unicode": "e6cf",
  3628. "unicode_decimal": 59087
  3629. },
  3630. {
  3631. "icon_id": "25027048",
  3632. "name": "wallet",
  3633. "font_class": "wallet",
  3634. "unicode": "e6b1",
  3635. "unicode_decimal": 59057
  3636. },
  3637. {
  3638. "icon_id": "25015720",
  3639. "name": "settings-filled",
  3640. "font_class": "settings-filled",
  3641. "unicode": "e6ce",
  3642. "unicode_decimal": 59086
  3643. },
  3644. {
  3645. "icon_id": "25015434",
  3646. "name": "shimingrenzheng-filled",
  3647. "font_class": "auth-filled",
  3648. "unicode": "e6cc",
  3649. "unicode_decimal": 59084
  3650. },
  3651. {
  3652. "icon_id": "24934246",
  3653. "name": "shop-filled",
  3654. "font_class": "shop-filled",
  3655. "unicode": "e6cd",
  3656. "unicode_decimal": 59085
  3657. },
  3658. {
  3659. "icon_id": "24934159",
  3660. "name": "staff-filled-01",
  3661. "font_class": "staff-filled",
  3662. "unicode": "e6cb",
  3663. "unicode_decimal": 59083
  3664. },
  3665. {
  3666. "icon_id": "24932461",
  3667. "name": "VIP-filled",
  3668. "font_class": "vip-filled",
  3669. "unicode": "e6c6",
  3670. "unicode_decimal": 59078
  3671. },
  3672. {
  3673. "icon_id": "24932462",
  3674. "name": "plus_circle_fill",
  3675. "font_class": "plus-filled",
  3676. "unicode": "e6c7",
  3677. "unicode_decimal": 59079
  3678. },
  3679. {
  3680. "icon_id": "24932463",
  3681. "name": "folder_add-filled",
  3682. "font_class": "folder-add-filled",
  3683. "unicode": "e6c8",
  3684. "unicode_decimal": 59080
  3685. },
  3686. {
  3687. "icon_id": "24932464",
  3688. "name": "yanse-filled",
  3689. "font_class": "color-filled",
  3690. "unicode": "e6c9",
  3691. "unicode_decimal": 59081
  3692. },
  3693. {
  3694. "icon_id": "24932465",
  3695. "name": "tune-filled",
  3696. "font_class": "tune-filled",
  3697. "unicode": "e6ca",
  3698. "unicode_decimal": 59082
  3699. },
  3700. {
  3701. "icon_id": "24932455",
  3702. "name": "a-rilidaka-filled",
  3703. "font_class": "calendar-filled",
  3704. "unicode": "e6c0",
  3705. "unicode_decimal": 59072
  3706. },
  3707. {
  3708. "icon_id": "24932456",
  3709. "name": "notification-filled",
  3710. "font_class": "notification-filled",
  3711. "unicode": "e6c1",
  3712. "unicode_decimal": 59073
  3713. },
  3714. {
  3715. "icon_id": "24932457",
  3716. "name": "wallet-filled",
  3717. "font_class": "wallet-filled",
  3718. "unicode": "e6c2",
  3719. "unicode_decimal": 59074
  3720. },
  3721. {
  3722. "icon_id": "24932458",
  3723. "name": "paihangbang-filled",
  3724. "font_class": "medal-filled",
  3725. "unicode": "e6c3",
  3726. "unicode_decimal": 59075
  3727. },
  3728. {
  3729. "icon_id": "24932459",
  3730. "name": "gift-filled",
  3731. "font_class": "gift-filled",
  3732. "unicode": "e6c4",
  3733. "unicode_decimal": 59076
  3734. },
  3735. {
  3736. "icon_id": "24932460",
  3737. "name": "fire-filled",
  3738. "font_class": "fire-filled",
  3739. "unicode": "e6c5",
  3740. "unicode_decimal": 59077
  3741. },
  3742. {
  3743. "icon_id": "24928001",
  3744. "name": "refreshempty",
  3745. "font_class": "refreshempty",
  3746. "unicode": "e6bf",
  3747. "unicode_decimal": 59071
  3748. },
  3749. {
  3750. "icon_id": "24926853",
  3751. "name": "location-ellipse",
  3752. "font_class": "location-filled",
  3753. "unicode": "e6af",
  3754. "unicode_decimal": 59055
  3755. },
  3756. {
  3757. "icon_id": "24926735",
  3758. "name": "person-filled",
  3759. "font_class": "person-filled",
  3760. "unicode": "e69d",
  3761. "unicode_decimal": 59037
  3762. },
  3763. {
  3764. "icon_id": "24926703",
  3765. "name": "personadd-filled",
  3766. "font_class": "personadd-filled",
  3767. "unicode": "e698",
  3768. "unicode_decimal": 59032
  3769. },
  3770. {
  3771. "icon_id": "24923351",
  3772. "name": "back",
  3773. "font_class": "back",
  3774. "unicode": "e6b9",
  3775. "unicode_decimal": 59065
  3776. },
  3777. {
  3778. "icon_id": "24923352",
  3779. "name": "forward",
  3780. "font_class": "forward",
  3781. "unicode": "e6ba",
  3782. "unicode_decimal": 59066
  3783. },
  3784. {
  3785. "icon_id": "24923353",
  3786. "name": "arrowthinright",
  3787. "font_class": "arrow-right",
  3788. "unicode": "e6bb",
  3789. "unicode_decimal": 59067
  3790. },
  3791. {
  3792. "icon_id": "24923353",
  3793. "name": "arrowthinright",
  3794. "font_class": "arrowthinright",
  3795. "unicode": "e6bb",
  3796. "unicode_decimal": 59067
  3797. },
  3798. {
  3799. "icon_id": "24923354",
  3800. "name": "arrowthinleft",
  3801. "font_class": "arrow-left",
  3802. "unicode": "e6bc",
  3803. "unicode_decimal": 59068
  3804. },
  3805. {
  3806. "icon_id": "24923354",
  3807. "name": "arrowthinleft",
  3808. "font_class": "arrowthinleft",
  3809. "unicode": "e6bc",
  3810. "unicode_decimal": 59068
  3811. },
  3812. {
  3813. "icon_id": "24923355",
  3814. "name": "arrowthinup",
  3815. "font_class": "arrow-up",
  3816. "unicode": "e6bd",
  3817. "unicode_decimal": 59069
  3818. },
  3819. {
  3820. "icon_id": "24923355",
  3821. "name": "arrowthinup",
  3822. "font_class": "arrowthinup",
  3823. "unicode": "e6bd",
  3824. "unicode_decimal": 59069
  3825. },
  3826. {
  3827. "icon_id": "24923356",
  3828. "name": "arrowthindown",
  3829. "font_class": "arrow-down",
  3830. "unicode": "e6be",
  3831. "unicode_decimal": 59070
  3832. },
  3833. {
  3834. "icon_id": "24923356",
  3835. "name": "arrowthindown",
  3836. "font_class": "arrowthindown",
  3837. "unicode": "e6be",
  3838. "unicode_decimal": 59070
  3839. },
  3840. {
  3841. "icon_id": "24923349",
  3842. "name": "arrowdown",
  3843. "font_class": "bottom",
  3844. "unicode": "e6b8",
  3845. "unicode_decimal": 59064
  3846. },
  3847. {
  3848. "icon_id": "24923349",
  3849. "name": "arrowdown",
  3850. "font_class": "arrowdown",
  3851. "unicode": "e6b8",
  3852. "unicode_decimal": 59064
  3853. },
  3854. {
  3855. "icon_id": "24923346",
  3856. "name": "arrowright",
  3857. "font_class": "right",
  3858. "unicode": "e6b5",
  3859. "unicode_decimal": 59061
  3860. },
  3861. {
  3862. "icon_id": "24923346",
  3863. "name": "arrowright",
  3864. "font_class": "arrowright",
  3865. "unicode": "e6b5",
  3866. "unicode_decimal": 59061
  3867. },
  3868. {
  3869. "icon_id": "24923347",
  3870. "name": "arrowup",
  3871. "font_class": "top",
  3872. "unicode": "e6b6",
  3873. "unicode_decimal": 59062
  3874. },
  3875. {
  3876. "icon_id": "24923347",
  3877. "name": "arrowup",
  3878. "font_class": "arrowup",
  3879. "unicode": "e6b6",
  3880. "unicode_decimal": 59062
  3881. },
  3882. {
  3883. "icon_id": "24923348",
  3884. "name": "arrowleft",
  3885. "font_class": "left",
  3886. "unicode": "e6b7",
  3887. "unicode_decimal": 59063
  3888. },
  3889. {
  3890. "icon_id": "24923348",
  3891. "name": "arrowleft",
  3892. "font_class": "arrowleft",
  3893. "unicode": "e6b7",
  3894. "unicode_decimal": 59063
  3895. },
  3896. {
  3897. "icon_id": "24923334",
  3898. "name": "eye",
  3899. "font_class": "eye",
  3900. "unicode": "e651",
  3901. "unicode_decimal": 58961
  3902. },
  3903. {
  3904. "icon_id": "24923335",
  3905. "name": "eye-filled",
  3906. "font_class": "eye-filled",
  3907. "unicode": "e66a",
  3908. "unicode_decimal": 58986
  3909. },
  3910. {
  3911. "icon_id": "24923336",
  3912. "name": "eye-slash",
  3913. "font_class": "eye-slash",
  3914. "unicode": "e6b3",
  3915. "unicode_decimal": 59059
  3916. },
  3917. {
  3918. "icon_id": "24923337",
  3919. "name": "eye-slash-filled",
  3920. "font_class": "eye-slash-filled",
  3921. "unicode": "e6b4",
  3922. "unicode_decimal": 59060
  3923. },
  3924. {
  3925. "icon_id": "24923305",
  3926. "name": "info-filled",
  3927. "font_class": "info-filled",
  3928. "unicode": "e649",
  3929. "unicode_decimal": 58953
  3930. },
  3931. {
  3932. "icon_id": "24923299",
  3933. "name": "reload-01",
  3934. "font_class": "reload",
  3935. "unicode": "e6b2",
  3936. "unicode_decimal": 59058
  3937. },
  3938. {
  3939. "icon_id": "24923195",
  3940. "name": "mic_slash_fill",
  3941. "font_class": "micoff-filled",
  3942. "unicode": "e6b0",
  3943. "unicode_decimal": 59056
  3944. },
  3945. {
  3946. "icon_id": "24923165",
  3947. "name": "map-pin-ellipse",
  3948. "font_class": "map-pin-ellipse",
  3949. "unicode": "e6ac",
  3950. "unicode_decimal": 59052
  3951. },
  3952. {
  3953. "icon_id": "24923166",
  3954. "name": "map-pin",
  3955. "font_class": "map-pin",
  3956. "unicode": "e6ad",
  3957. "unicode_decimal": 59053
  3958. },
  3959. {
  3960. "icon_id": "24923167",
  3961. "name": "location",
  3962. "font_class": "location",
  3963. "unicode": "e6ae",
  3964. "unicode_decimal": 59054
  3965. },
  3966. {
  3967. "icon_id": "24923064",
  3968. "name": "starhalf",
  3969. "font_class": "starhalf",
  3970. "unicode": "e683",
  3971. "unicode_decimal": 59011
  3972. },
  3973. {
  3974. "icon_id": "24923065",
  3975. "name": "star",
  3976. "font_class": "star",
  3977. "unicode": "e688",
  3978. "unicode_decimal": 59016
  3979. },
  3980. {
  3981. "icon_id": "24923066",
  3982. "name": "star-filled",
  3983. "font_class": "star-filled",
  3984. "unicode": "e68f",
  3985. "unicode_decimal": 59023
  3986. },
  3987. {
  3988. "icon_id": "24899646",
  3989. "name": "a-rilidaka",
  3990. "font_class": "calendar",
  3991. "unicode": "e6a0",
  3992. "unicode_decimal": 59040
  3993. },
  3994. {
  3995. "icon_id": "24899647",
  3996. "name": "fire",
  3997. "font_class": "fire",
  3998. "unicode": "e6a1",
  3999. "unicode_decimal": 59041
  4000. },
  4001. {
  4002. "icon_id": "24899648",
  4003. "name": "paihangbang",
  4004. "font_class": "medal",
  4005. "unicode": "e6a2",
  4006. "unicode_decimal": 59042
  4007. },
  4008. {
  4009. "icon_id": "24899649",
  4010. "name": "font",
  4011. "font_class": "font",
  4012. "unicode": "e6a3",
  4013. "unicode_decimal": 59043
  4014. },
  4015. {
  4016. "icon_id": "24899650",
  4017. "name": "gift",
  4018. "font_class": "gift",
  4019. "unicode": "e6a4",
  4020. "unicode_decimal": 59044
  4021. },
  4022. {
  4023. "icon_id": "24899651",
  4024. "name": "link",
  4025. "font_class": "link",
  4026. "unicode": "e6a5",
  4027. "unicode_decimal": 59045
  4028. },
  4029. {
  4030. "icon_id": "24899652",
  4031. "name": "notification",
  4032. "font_class": "notification",
  4033. "unicode": "e6a6",
  4034. "unicode_decimal": 59046
  4035. },
  4036. {
  4037. "icon_id": "24899653",
  4038. "name": "staff",
  4039. "font_class": "staff",
  4040. "unicode": "e6a7",
  4041. "unicode_decimal": 59047
  4042. },
  4043. {
  4044. "icon_id": "24899654",
  4045. "name": "VIP",
  4046. "font_class": "vip",
  4047. "unicode": "e6a8",
  4048. "unicode_decimal": 59048
  4049. },
  4050. {
  4051. "icon_id": "24899655",
  4052. "name": "folder_add",
  4053. "font_class": "folder-add",
  4054. "unicode": "e6a9",
  4055. "unicode_decimal": 59049
  4056. },
  4057. {
  4058. "icon_id": "24899656",
  4059. "name": "tune",
  4060. "font_class": "tune",
  4061. "unicode": "e6aa",
  4062. "unicode_decimal": 59050
  4063. },
  4064. {
  4065. "icon_id": "24899657",
  4066. "name": "shimingrenzheng",
  4067. "font_class": "auth",
  4068. "unicode": "e6ab",
  4069. "unicode_decimal": 59051
  4070. },
  4071. {
  4072. "icon_id": "24899565",
  4073. "name": "person",
  4074. "font_class": "person",
  4075. "unicode": "e699",
  4076. "unicode_decimal": 59033
  4077. },
  4078. {
  4079. "icon_id": "24899566",
  4080. "name": "email-filled",
  4081. "font_class": "email-filled",
  4082. "unicode": "e69a",
  4083. "unicode_decimal": 59034
  4084. },
  4085. {
  4086. "icon_id": "24899567",
  4087. "name": "phone-filled",
  4088. "font_class": "phone-filled",
  4089. "unicode": "e69b",
  4090. "unicode_decimal": 59035
  4091. },
  4092. {
  4093. "icon_id": "24899568",
  4094. "name": "phone",
  4095. "font_class": "phone",
  4096. "unicode": "e69c",
  4097. "unicode_decimal": 59036
  4098. },
  4099. {
  4100. "icon_id": "24899570",
  4101. "name": "email",
  4102. "font_class": "email",
  4103. "unicode": "e69e",
  4104. "unicode_decimal": 59038
  4105. },
  4106. {
  4107. "icon_id": "24899571",
  4108. "name": "personadd",
  4109. "font_class": "personadd",
  4110. "unicode": "e69f",
  4111. "unicode_decimal": 59039
  4112. },
  4113. {
  4114. "icon_id": "24899558",
  4115. "name": "chatboxes-filled",
  4116. "font_class": "chatboxes-filled",
  4117. "unicode": "e692",
  4118. "unicode_decimal": 59026
  4119. },
  4120. {
  4121. "icon_id": "24899559",
  4122. "name": "contact",
  4123. "font_class": "contact",
  4124. "unicode": "e693",
  4125. "unicode_decimal": 59027
  4126. },
  4127. {
  4128. "icon_id": "24899560",
  4129. "name": "chatbubble-filled",
  4130. "font_class": "chatbubble-filled",
  4131. "unicode": "e694",
  4132. "unicode_decimal": 59028
  4133. },
  4134. {
  4135. "icon_id": "24899561",
  4136. "name": "contact-filled",
  4137. "font_class": "contact-filled",
  4138. "unicode": "e695",
  4139. "unicode_decimal": 59029
  4140. },
  4141. {
  4142. "icon_id": "24899562",
  4143. "name": "chatboxes",
  4144. "font_class": "chatboxes",
  4145. "unicode": "e696",
  4146. "unicode_decimal": 59030
  4147. },
  4148. {
  4149. "icon_id": "24899563",
  4150. "name": "chatbubble",
  4151. "font_class": "chatbubble",
  4152. "unicode": "e697",
  4153. "unicode_decimal": 59031
  4154. },
  4155. {
  4156. "icon_id": "24881290",
  4157. "name": "upload-filled",
  4158. "font_class": "upload-filled",
  4159. "unicode": "e68e",
  4160. "unicode_decimal": 59022
  4161. },
  4162. {
  4163. "icon_id": "24881292",
  4164. "name": "upload",
  4165. "font_class": "upload",
  4166. "unicode": "e690",
  4167. "unicode_decimal": 59024
  4168. },
  4169. {
  4170. "icon_id": "24881293",
  4171. "name": "weixin",
  4172. "font_class": "weixin",
  4173. "unicode": "e691",
  4174. "unicode_decimal": 59025
  4175. },
  4176. {
  4177. "icon_id": "24881274",
  4178. "name": "compose",
  4179. "font_class": "compose",
  4180. "unicode": "e67f",
  4181. "unicode_decimal": 59007
  4182. },
  4183. {
  4184. "icon_id": "24881275",
  4185. "name": "qq",
  4186. "font_class": "qq",
  4187. "unicode": "e680",
  4188. "unicode_decimal": 59008
  4189. },
  4190. {
  4191. "icon_id": "24881276",
  4192. "name": "download-filled",
  4193. "font_class": "download-filled",
  4194. "unicode": "e681",
  4195. "unicode_decimal": 59009
  4196. },
  4197. {
  4198. "icon_id": "24881277",
  4199. "name": "pengyouquan",
  4200. "font_class": "pyq",
  4201. "unicode": "e682",
  4202. "unicode_decimal": 59010
  4203. },
  4204. {
  4205. "icon_id": "24881279",
  4206. "name": "sound",
  4207. "font_class": "sound",
  4208. "unicode": "e684",
  4209. "unicode_decimal": 59012
  4210. },
  4211. {
  4212. "icon_id": "24881280",
  4213. "name": "trash-filled",
  4214. "font_class": "trash-filled",
  4215. "unicode": "e685",
  4216. "unicode_decimal": 59013
  4217. },
  4218. {
  4219. "icon_id": "24881281",
  4220. "name": "sound-filled",
  4221. "font_class": "sound-filled",
  4222. "unicode": "e686",
  4223. "unicode_decimal": 59014
  4224. },
  4225. {
  4226. "icon_id": "24881282",
  4227. "name": "trash",
  4228. "font_class": "trash",
  4229. "unicode": "e687",
  4230. "unicode_decimal": 59015
  4231. },
  4232. {
  4233. "icon_id": "24881284",
  4234. "name": "videocam-filled",
  4235. "font_class": "videocam-filled",
  4236. "unicode": "e689",
  4237. "unicode_decimal": 59017
  4238. },
  4239. {
  4240. "icon_id": "24881285",
  4241. "name": "spinner-cycle",
  4242. "font_class": "spinner-cycle",
  4243. "unicode": "e68a",
  4244. "unicode_decimal": 59018
  4245. },
  4246. {
  4247. "icon_id": "24881286",
  4248. "name": "weibo",
  4249. "font_class": "weibo",
  4250. "unicode": "e68b",
  4251. "unicode_decimal": 59019
  4252. },
  4253. {
  4254. "icon_id": "24881288",
  4255. "name": "videocam",
  4256. "font_class": "videocam",
  4257. "unicode": "e68c",
  4258. "unicode_decimal": 59020
  4259. },
  4260. {
  4261. "icon_id": "24881289",
  4262. "name": "download",
  4263. "font_class": "download",
  4264. "unicode": "e68d",
  4265. "unicode_decimal": 59021
  4266. },
  4267. {
  4268. "icon_id": "24879601",
  4269. "name": "help",
  4270. "font_class": "help",
  4271. "unicode": "e679",
  4272. "unicode_decimal": 59001
  4273. },
  4274. {
  4275. "icon_id": "24879602",
  4276. "name": "navigate-filled",
  4277. "font_class": "navigate-filled",
  4278. "unicode": "e67a",
  4279. "unicode_decimal": 59002
  4280. },
  4281. {
  4282. "icon_id": "24879603",
  4283. "name": "plusempty",
  4284. "font_class": "plusempty",
  4285. "unicode": "e67b",
  4286. "unicode_decimal": 59003
  4287. },
  4288. {
  4289. "icon_id": "24879604",
  4290. "name": "smallcircle",
  4291. "font_class": "smallcircle",
  4292. "unicode": "e67c",
  4293. "unicode_decimal": 59004
  4294. },
  4295. {
  4296. "icon_id": "24879605",
  4297. "name": "minus-filled",
  4298. "font_class": "minus-filled",
  4299. "unicode": "e67d",
  4300. "unicode_decimal": 59005
  4301. },
  4302. {
  4303. "icon_id": "24879606",
  4304. "name": "micoff",
  4305. "font_class": "micoff",
  4306. "unicode": "e67e",
  4307. "unicode_decimal": 59006
  4308. },
  4309. {
  4310. "icon_id": "24879588",
  4311. "name": "closeempty",
  4312. "font_class": "closeempty",
  4313. "unicode": "e66c",
  4314. "unicode_decimal": 58988
  4315. },
  4316. {
  4317. "icon_id": "24879589",
  4318. "name": "clear",
  4319. "font_class": "clear",
  4320. "unicode": "e66d",
  4321. "unicode_decimal": 58989
  4322. },
  4323. {
  4324. "icon_id": "24879590",
  4325. "name": "navigate",
  4326. "font_class": "navigate",
  4327. "unicode": "e66e",
  4328. "unicode_decimal": 58990
  4329. },
  4330. {
  4331. "icon_id": "24879591",
  4332. "name": "minus",
  4333. "font_class": "minus",
  4334. "unicode": "e66f",
  4335. "unicode_decimal": 58991
  4336. },
  4337. {
  4338. "icon_id": "24879592",
  4339. "name": "image",
  4340. "font_class": "image",
  4341. "unicode": "e670",
  4342. "unicode_decimal": 58992
  4343. },
  4344. {
  4345. "icon_id": "24879593",
  4346. "name": "mic",
  4347. "font_class": "mic",
  4348. "unicode": "e671",
  4349. "unicode_decimal": 58993
  4350. },
  4351. {
  4352. "icon_id": "24879594",
  4353. "name": "paperplane",
  4354. "font_class": "paperplane",
  4355. "unicode": "e672",
  4356. "unicode_decimal": 58994
  4357. },
  4358. {
  4359. "icon_id": "24879595",
  4360. "name": "close",
  4361. "font_class": "close",
  4362. "unicode": "e673",
  4363. "unicode_decimal": 58995
  4364. },
  4365. {
  4366. "icon_id": "24879596",
  4367. "name": "help-filled",
  4368. "font_class": "help-filled",
  4369. "unicode": "e674",
  4370. "unicode_decimal": 58996
  4371. },
  4372. {
  4373. "icon_id": "24879597",
  4374. "name": "plus-filled",
  4375. "font_class": "paperplane-filled",
  4376. "unicode": "e675",
  4377. "unicode_decimal": 58997
  4378. },
  4379. {
  4380. "icon_id": "24879598",
  4381. "name": "plus",
  4382. "font_class": "plus",
  4383. "unicode": "e676",
  4384. "unicode_decimal": 58998
  4385. },
  4386. {
  4387. "icon_id": "24879599",
  4388. "name": "mic-filled",
  4389. "font_class": "mic-filled",
  4390. "unicode": "e677",
  4391. "unicode_decimal": 58999
  4392. },
  4393. {
  4394. "icon_id": "24879600",
  4395. "name": "image-filled",
  4396. "font_class": "image-filled",
  4397. "unicode": "e678",
  4398. "unicode_decimal": 59e3
  4399. },
  4400. {
  4401. "icon_id": "24855900",
  4402. "name": "locked-filled",
  4403. "font_class": "locked-filled",
  4404. "unicode": "e668",
  4405. "unicode_decimal": 58984
  4406. },
  4407. {
  4408. "icon_id": "24855901",
  4409. "name": "info",
  4410. "font_class": "info",
  4411. "unicode": "e669",
  4412. "unicode_decimal": 58985
  4413. },
  4414. {
  4415. "icon_id": "24855903",
  4416. "name": "locked",
  4417. "font_class": "locked",
  4418. "unicode": "e66b",
  4419. "unicode_decimal": 58987
  4420. },
  4421. {
  4422. "icon_id": "24855884",
  4423. "name": "camera-filled",
  4424. "font_class": "camera-filled",
  4425. "unicode": "e658",
  4426. "unicode_decimal": 58968
  4427. },
  4428. {
  4429. "icon_id": "24855885",
  4430. "name": "chat-filled",
  4431. "font_class": "chat-filled",
  4432. "unicode": "e659",
  4433. "unicode_decimal": 58969
  4434. },
  4435. {
  4436. "icon_id": "24855886",
  4437. "name": "camera",
  4438. "font_class": "camera",
  4439. "unicode": "e65a",
  4440. "unicode_decimal": 58970
  4441. },
  4442. {
  4443. "icon_id": "24855887",
  4444. "name": "circle",
  4445. "font_class": "circle",
  4446. "unicode": "e65b",
  4447. "unicode_decimal": 58971
  4448. },
  4449. {
  4450. "icon_id": "24855888",
  4451. "name": "checkmarkempty",
  4452. "font_class": "checkmarkempty",
  4453. "unicode": "e65c",
  4454. "unicode_decimal": 58972
  4455. },
  4456. {
  4457. "icon_id": "24855889",
  4458. "name": "chat",
  4459. "font_class": "chat",
  4460. "unicode": "e65d",
  4461. "unicode_decimal": 58973
  4462. },
  4463. {
  4464. "icon_id": "24855890",
  4465. "name": "circle-filled",
  4466. "font_class": "circle-filled",
  4467. "unicode": "e65e",
  4468. "unicode_decimal": 58974
  4469. },
  4470. {
  4471. "icon_id": "24855891",
  4472. "name": "flag",
  4473. "font_class": "flag",
  4474. "unicode": "e65f",
  4475. "unicode_decimal": 58975
  4476. },
  4477. {
  4478. "icon_id": "24855892",
  4479. "name": "flag-filled",
  4480. "font_class": "flag-filled",
  4481. "unicode": "e660",
  4482. "unicode_decimal": 58976
  4483. },
  4484. {
  4485. "icon_id": "24855893",
  4486. "name": "gear-filled",
  4487. "font_class": "gear-filled",
  4488. "unicode": "e661",
  4489. "unicode_decimal": 58977
  4490. },
  4491. {
  4492. "icon_id": "24855894",
  4493. "name": "home",
  4494. "font_class": "home",
  4495. "unicode": "e662",
  4496. "unicode_decimal": 58978
  4497. },
  4498. {
  4499. "icon_id": "24855895",
  4500. "name": "home-filled",
  4501. "font_class": "home-filled",
  4502. "unicode": "e663",
  4503. "unicode_decimal": 58979
  4504. },
  4505. {
  4506. "icon_id": "24855896",
  4507. "name": "gear",
  4508. "font_class": "gear",
  4509. "unicode": "e664",
  4510. "unicode_decimal": 58980
  4511. },
  4512. {
  4513. "icon_id": "24855897",
  4514. "name": "smallcircle-filled",
  4515. "font_class": "smallcircle-filled",
  4516. "unicode": "e665",
  4517. "unicode_decimal": 58981
  4518. },
  4519. {
  4520. "icon_id": "24855898",
  4521. "name": "map-filled",
  4522. "font_class": "map-filled",
  4523. "unicode": "e666",
  4524. "unicode_decimal": 58982
  4525. },
  4526. {
  4527. "icon_id": "24855899",
  4528. "name": "map",
  4529. "font_class": "map",
  4530. "unicode": "e667",
  4531. "unicode_decimal": 58983
  4532. },
  4533. {
  4534. "icon_id": "24855825",
  4535. "name": "refresh-filled",
  4536. "font_class": "refresh-filled",
  4537. "unicode": "e656",
  4538. "unicode_decimal": 58966
  4539. },
  4540. {
  4541. "icon_id": "24855826",
  4542. "name": "refresh",
  4543. "font_class": "refresh",
  4544. "unicode": "e657",
  4545. "unicode_decimal": 58967
  4546. },
  4547. {
  4548. "icon_id": "24855808",
  4549. "name": "cloud-upload",
  4550. "font_class": "cloud-upload",
  4551. "unicode": "e645",
  4552. "unicode_decimal": 58949
  4553. },
  4554. {
  4555. "icon_id": "24855809",
  4556. "name": "cloud-download-filled",
  4557. "font_class": "cloud-download-filled",
  4558. "unicode": "e646",
  4559. "unicode_decimal": 58950
  4560. },
  4561. {
  4562. "icon_id": "24855810",
  4563. "name": "cloud-download",
  4564. "font_class": "cloud-download",
  4565. "unicode": "e647",
  4566. "unicode_decimal": 58951
  4567. },
  4568. {
  4569. "icon_id": "24855811",
  4570. "name": "cloud-upload-filled",
  4571. "font_class": "cloud-upload-filled",
  4572. "unicode": "e648",
  4573. "unicode_decimal": 58952
  4574. },
  4575. {
  4576. "icon_id": "24855813",
  4577. "name": "redo",
  4578. "font_class": "redo",
  4579. "unicode": "e64a",
  4580. "unicode_decimal": 58954
  4581. },
  4582. {
  4583. "icon_id": "24855814",
  4584. "name": "images-filled",
  4585. "font_class": "images-filled",
  4586. "unicode": "e64b",
  4587. "unicode_decimal": 58955
  4588. },
  4589. {
  4590. "icon_id": "24855815",
  4591. "name": "undo-filled",
  4592. "font_class": "undo-filled",
  4593. "unicode": "e64c",
  4594. "unicode_decimal": 58956
  4595. },
  4596. {
  4597. "icon_id": "24855816",
  4598. "name": "more",
  4599. "font_class": "more",
  4600. "unicode": "e64d",
  4601. "unicode_decimal": 58957
  4602. },
  4603. {
  4604. "icon_id": "24855817",
  4605. "name": "more-filled",
  4606. "font_class": "more-filled",
  4607. "unicode": "e64e",
  4608. "unicode_decimal": 58958
  4609. },
  4610. {
  4611. "icon_id": "24855818",
  4612. "name": "undo",
  4613. "font_class": "undo",
  4614. "unicode": "e64f",
  4615. "unicode_decimal": 58959
  4616. },
  4617. {
  4618. "icon_id": "24855819",
  4619. "name": "images",
  4620. "font_class": "images",
  4621. "unicode": "e650",
  4622. "unicode_decimal": 58960
  4623. },
  4624. {
  4625. "icon_id": "24855821",
  4626. "name": "paperclip",
  4627. "font_class": "paperclip",
  4628. "unicode": "e652",
  4629. "unicode_decimal": 58962
  4630. },
  4631. {
  4632. "icon_id": "24855822",
  4633. "name": "settings",
  4634. "font_class": "settings",
  4635. "unicode": "e653",
  4636. "unicode_decimal": 58963
  4637. },
  4638. {
  4639. "icon_id": "24855823",
  4640. "name": "search",
  4641. "font_class": "search",
  4642. "unicode": "e654",
  4643. "unicode_decimal": 58964
  4644. },
  4645. {
  4646. "icon_id": "24855824",
  4647. "name": "redo-filled",
  4648. "font_class": "redo-filled",
  4649. "unicode": "e655",
  4650. "unicode_decimal": 58965
  4651. },
  4652. {
  4653. "icon_id": "24841702",
  4654. "name": "list",
  4655. "font_class": "list",
  4656. "unicode": "e644",
  4657. "unicode_decimal": 58948
  4658. },
  4659. {
  4660. "icon_id": "24841489",
  4661. "name": "mail-open-filled",
  4662. "font_class": "mail-open-filled",
  4663. "unicode": "e63a",
  4664. "unicode_decimal": 58938
  4665. },
  4666. {
  4667. "icon_id": "24841491",
  4668. "name": "hand-thumbsdown-filled",
  4669. "font_class": "hand-down-filled",
  4670. "unicode": "e63c",
  4671. "unicode_decimal": 58940
  4672. },
  4673. {
  4674. "icon_id": "24841492",
  4675. "name": "hand-thumbsdown",
  4676. "font_class": "hand-down",
  4677. "unicode": "e63d",
  4678. "unicode_decimal": 58941
  4679. },
  4680. {
  4681. "icon_id": "24841493",
  4682. "name": "hand-thumbsup-filled",
  4683. "font_class": "hand-up-filled",
  4684. "unicode": "e63e",
  4685. "unicode_decimal": 58942
  4686. },
  4687. {
  4688. "icon_id": "24841494",
  4689. "name": "hand-thumbsup",
  4690. "font_class": "hand-up",
  4691. "unicode": "e63f",
  4692. "unicode_decimal": 58943
  4693. },
  4694. {
  4695. "icon_id": "24841496",
  4696. "name": "heart-filled",
  4697. "font_class": "heart-filled",
  4698. "unicode": "e641",
  4699. "unicode_decimal": 58945
  4700. },
  4701. {
  4702. "icon_id": "24841498",
  4703. "name": "mail-open",
  4704. "font_class": "mail-open",
  4705. "unicode": "e643",
  4706. "unicode_decimal": 58947
  4707. },
  4708. {
  4709. "icon_id": "24841488",
  4710. "name": "heart",
  4711. "font_class": "heart",
  4712. "unicode": "e639",
  4713. "unicode_decimal": 58937
  4714. },
  4715. {
  4716. "icon_id": "24839963",
  4717. "name": "loop",
  4718. "font_class": "loop",
  4719. "unicode": "e633",
  4720. "unicode_decimal": 58931
  4721. },
  4722. {
  4723. "icon_id": "24839866",
  4724. "name": "pulldown",
  4725. "font_class": "pulldown",
  4726. "unicode": "e632",
  4727. "unicode_decimal": 58930
  4728. },
  4729. {
  4730. "icon_id": "24813798",
  4731. "name": "scan",
  4732. "font_class": "scan",
  4733. "unicode": "e62a",
  4734. "unicode_decimal": 58922
  4735. },
  4736. {
  4737. "icon_id": "24813786",
  4738. "name": "bars",
  4739. "font_class": "bars",
  4740. "unicode": "e627",
  4741. "unicode_decimal": 58919
  4742. },
  4743. {
  4744. "icon_id": "24813788",
  4745. "name": "cart-filled",
  4746. "font_class": "cart-filled",
  4747. "unicode": "e629",
  4748. "unicode_decimal": 58921
  4749. },
  4750. {
  4751. "icon_id": "24813790",
  4752. "name": "checkbox",
  4753. "font_class": "checkbox",
  4754. "unicode": "e62b",
  4755. "unicode_decimal": 58923
  4756. },
  4757. {
  4758. "icon_id": "24813791",
  4759. "name": "checkbox-filled",
  4760. "font_class": "checkbox-filled",
  4761. "unicode": "e62c",
  4762. "unicode_decimal": 58924
  4763. },
  4764. {
  4765. "icon_id": "24813794",
  4766. "name": "shop",
  4767. "font_class": "shop",
  4768. "unicode": "e62f",
  4769. "unicode_decimal": 58927
  4770. },
  4771. {
  4772. "icon_id": "24813795",
  4773. "name": "headphones",
  4774. "font_class": "headphones",
  4775. "unicode": "e630",
  4776. "unicode_decimal": 58928
  4777. },
  4778. {
  4779. "icon_id": "24813796",
  4780. "name": "cart",
  4781. "font_class": "cart",
  4782. "unicode": "e631",
  4783. "unicode_decimal": 58929
  4784. }
  4785. ]
  4786. };
  4787. const getVal = (val) => {
  4788. const reg = /^[0-9]*$/g;
  4789. return typeof val === "number" || reg.test(val) ? val + "px" : val;
  4790. };
  4791. const _sfc_main$O = {
  4792. name: "UniIcons",
  4793. emits: ["click"],
  4794. props: {
  4795. type: {
  4796. type: String,
  4797. default: ""
  4798. },
  4799. color: {
  4800. type: String,
  4801. default: "#333333"
  4802. },
  4803. size: {
  4804. type: [Number, String],
  4805. default: 16
  4806. },
  4807. customPrefix: {
  4808. type: String,
  4809. default: ""
  4810. }
  4811. },
  4812. data() {
  4813. return {
  4814. icons: icons.glyphs
  4815. };
  4816. },
  4817. computed: {
  4818. unicode() {
  4819. let code = this.icons.find((v2) => v2.font_class === this.type);
  4820. if (code) {
  4821. return unescape(`%u${code.unicode}`);
  4822. }
  4823. return "";
  4824. },
  4825. iconSize() {
  4826. return getVal(this.size);
  4827. }
  4828. },
  4829. methods: {
  4830. _onClick() {
  4831. this.$emit("click");
  4832. }
  4833. }
  4834. };
  4835. function _sfc_render$N(_ctx, _cache, $props, $setup, $data, $options) {
  4836. return vue.openBlock(), vue.createElementBlock(
  4837. "text",
  4838. {
  4839. style: vue.normalizeStyle({ color: $props.color, "font-size": $options.iconSize }),
  4840. class: vue.normalizeClass(["uni-icons", ["uniui-" + $props.type, $props.customPrefix, $props.customPrefix ? $props.type : ""]]),
  4841. onClick: _cache[0] || (_cache[0] = (...args) => $options._onClick && $options._onClick(...args))
  4842. },
  4843. null,
  4844. 6
  4845. /* CLASS, STYLE */
  4846. );
  4847. }
  4848. const __easycom_0$8 = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$N], ["__scopeId", "data-v-946bce22"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue"]]);
  4849. function obj2strClass(obj) {
  4850. let classess = "";
  4851. for (let key in obj) {
  4852. const val = obj[key];
  4853. if (val) {
  4854. classess += `${key} `;
  4855. }
  4856. }
  4857. return classess;
  4858. }
  4859. function obj2strStyle(obj) {
  4860. let style = "";
  4861. for (let key in obj) {
  4862. const val = obj[key];
  4863. style += `${key}:${val};`;
  4864. }
  4865. return style;
  4866. }
  4867. const _sfc_main$N = {
  4868. name: "uni-easyinput",
  4869. emits: [
  4870. "click",
  4871. "iconClick",
  4872. "update:modelValue",
  4873. "input",
  4874. "focus",
  4875. "blur",
  4876. "confirm",
  4877. "clear",
  4878. "eyes",
  4879. "change"
  4880. ],
  4881. model: {
  4882. prop: "modelValue",
  4883. event: "update:modelValue"
  4884. },
  4885. options: {
  4886. virtualHost: true
  4887. },
  4888. inject: {
  4889. form: {
  4890. from: "uniForm",
  4891. default: null
  4892. },
  4893. formItem: {
  4894. from: "uniFormItem",
  4895. default: null
  4896. }
  4897. },
  4898. props: {
  4899. name: String,
  4900. value: [Number, String],
  4901. modelValue: [Number, String],
  4902. type: {
  4903. type: String,
  4904. default: "text"
  4905. },
  4906. clearable: {
  4907. type: Boolean,
  4908. default: true
  4909. },
  4910. autoHeight: {
  4911. type: Boolean,
  4912. default: false
  4913. },
  4914. placeholder: {
  4915. type: String,
  4916. default: " "
  4917. },
  4918. placeholderStyle: String,
  4919. focus: {
  4920. type: Boolean,
  4921. default: false
  4922. },
  4923. disabled: {
  4924. type: Boolean,
  4925. default: false
  4926. },
  4927. maxlength: {
  4928. type: [Number, String],
  4929. default: 140
  4930. },
  4931. confirmType: {
  4932. type: String,
  4933. default: "done"
  4934. },
  4935. clearSize: {
  4936. type: [Number, String],
  4937. default: 24
  4938. },
  4939. inputBorder: {
  4940. type: Boolean,
  4941. default: true
  4942. },
  4943. prefixIcon: {
  4944. type: String,
  4945. default: ""
  4946. },
  4947. suffixIcon: {
  4948. type: String,
  4949. default: ""
  4950. },
  4951. trim: {
  4952. type: [Boolean, String],
  4953. default: true
  4954. },
  4955. passwordIcon: {
  4956. type: Boolean,
  4957. default: true
  4958. },
  4959. primaryColor: {
  4960. type: String,
  4961. default: "#2979ff"
  4962. },
  4963. styles: {
  4964. type: Object,
  4965. default() {
  4966. return {
  4967. color: "#333",
  4968. disableColor: "#F7F6F6",
  4969. borderColor: "#e5e5e5"
  4970. };
  4971. }
  4972. },
  4973. errorMessage: {
  4974. type: [String, Boolean],
  4975. default: ""
  4976. }
  4977. },
  4978. data() {
  4979. return {
  4980. focused: false,
  4981. val: "",
  4982. showMsg: "",
  4983. border: false,
  4984. isFirstBorder: false,
  4985. showClearIcon: false,
  4986. showPassword: false,
  4987. focusShow: false,
  4988. localMsg: ""
  4989. };
  4990. },
  4991. computed: {
  4992. // 输入框内是否有值
  4993. isVal() {
  4994. const val = this.val;
  4995. if (val || val === 0) {
  4996. return true;
  4997. }
  4998. return false;
  4999. },
  5000. msg() {
  5001. return this.localMsg || this.errorMessage;
  5002. },
  5003. // 因为uniapp的input组件的maxlength组件必须要数值,这里转为数值,用户可以传入字符串数值
  5004. inputMaxlength() {
  5005. return Number(this.maxlength);
  5006. },
  5007. // 处理外层样式的style
  5008. boxStyle() {
  5009. return `color:${this.inputBorder && this.msg ? "#e43d33" : this.styles.color};`;
  5010. },
  5011. // input 内容的类和样式处理
  5012. inputContentClass() {
  5013. return obj2strClass({
  5014. "is-input-border": this.inputBorder,
  5015. "is-input-error-border": this.inputBorder && this.msg,
  5016. "is-textarea": this.type === "textarea",
  5017. "is-disabled": this.disabled
  5018. });
  5019. },
  5020. inputContentStyle() {
  5021. const focusColor = this.focusShow ? this.primaryColor : this.styles.borderColor;
  5022. const borderColor = this.inputBorder && this.msg ? "#dd524d" : focusColor;
  5023. return obj2strStyle({
  5024. "border-color": borderColor || "#e5e5e5",
  5025. "background-color": this.disabled ? this.styles.disableColor : this.styles.backgroundColor
  5026. });
  5027. },
  5028. // input右侧样式
  5029. inputStyle() {
  5030. const paddingRight = this.type === "password" || this.clearable || this.prefixIcon ? "" : "10px";
  5031. return obj2strStyle({
  5032. "padding-right": paddingRight,
  5033. "padding-left": this.prefixIcon ? "" : "10px"
  5034. });
  5035. }
  5036. },
  5037. watch: {
  5038. value(newVal) {
  5039. this.val = newVal;
  5040. },
  5041. modelValue(newVal) {
  5042. this.val = newVal;
  5043. },
  5044. focus(newVal) {
  5045. this.$nextTick(() => {
  5046. this.focused = this.focus;
  5047. this.focusShow = this.focus;
  5048. });
  5049. }
  5050. },
  5051. created() {
  5052. this.init();
  5053. if (this.form && this.formItem) {
  5054. this.$watch("formItem.errMsg", (newVal) => {
  5055. this.localMsg = newVal;
  5056. });
  5057. }
  5058. },
  5059. mounted() {
  5060. this.$nextTick(() => {
  5061. this.focused = this.focus;
  5062. this.focusShow = this.focus;
  5063. });
  5064. },
  5065. methods: {
  5066. /**
  5067. * 初始化变量值
  5068. */
  5069. init() {
  5070. if (this.value || this.value === 0) {
  5071. this.val = this.value;
  5072. } else if (this.modelValue || this.modelValue === 0) {
  5073. this.val = this.modelValue;
  5074. } else {
  5075. this.val = null;
  5076. }
  5077. },
  5078. /**
  5079. * 点击图标时触发
  5080. * @param {Object} type
  5081. */
  5082. onClickIcon(type) {
  5083. this.$emit("iconClick", type);
  5084. },
  5085. /**
  5086. * 显示隐藏内容,密码框时生效
  5087. */
  5088. onEyes() {
  5089. this.showPassword = !this.showPassword;
  5090. this.$emit("eyes", this.showPassword);
  5091. },
  5092. /**
  5093. * 输入时触发
  5094. * @param {Object} event
  5095. */
  5096. onInput(event) {
  5097. let value = event.detail.value;
  5098. if (this.trim) {
  5099. if (typeof this.trim === "boolean" && this.trim) {
  5100. value = this.trimStr(value);
  5101. }
  5102. if (typeof this.trim === "string") {
  5103. value = this.trimStr(value, this.trim);
  5104. }
  5105. }
  5106. if (this.errMsg)
  5107. this.errMsg = "";
  5108. this.val = value;
  5109. this.$emit("input", value);
  5110. this.$emit("update:modelValue", value);
  5111. },
  5112. /**
  5113. * 外部调用方法
  5114. * 获取焦点时触发
  5115. * @param {Object} event
  5116. */
  5117. onFocus() {
  5118. this.$nextTick(() => {
  5119. this.focused = true;
  5120. });
  5121. this.$emit("focus", null);
  5122. },
  5123. _Focus(event) {
  5124. this.focusShow = true;
  5125. this.$emit("focus", event);
  5126. },
  5127. /**
  5128. * 外部调用方法
  5129. * 失去焦点时触发
  5130. * @param {Object} event
  5131. */
  5132. onBlur() {
  5133. this.focused = false;
  5134. this.$emit("focus", null);
  5135. },
  5136. _Blur(event) {
  5137. event.detail.value;
  5138. this.focusShow = false;
  5139. this.$emit("blur", event);
  5140. this.$emit("change", this.val);
  5141. if (this.form && this.formItem) {
  5142. const { validateTrigger } = this.form;
  5143. if (validateTrigger === "blur") {
  5144. this.formItem.onFieldChange();
  5145. }
  5146. }
  5147. },
  5148. /**
  5149. * 按下键盘的发送键
  5150. * @param {Object} e
  5151. */
  5152. onConfirm(e2) {
  5153. this.$emit("confirm", this.val);
  5154. this.$emit("change", this.val);
  5155. },
  5156. /**
  5157. * 清理内容
  5158. * @param {Object} event
  5159. */
  5160. onClear(event) {
  5161. this.val = "";
  5162. this.$emit("input", "");
  5163. this.$emit("update:modelValue", "");
  5164. this.$emit("clear");
  5165. },
  5166. /**
  5167. * 去除空格
  5168. */
  5169. trimStr(str, pos = "both") {
  5170. if (pos === "both") {
  5171. return str.trim();
  5172. } else if (pos === "left") {
  5173. return str.trimLeft();
  5174. } else if (pos === "right") {
  5175. return str.trimRight();
  5176. } else if (pos === "start") {
  5177. return str.trimStart();
  5178. } else if (pos === "end") {
  5179. return str.trimEnd();
  5180. } else if (pos === "all") {
  5181. return str.replace(/\s+/g, "");
  5182. } else if (pos === "none") {
  5183. return str;
  5184. }
  5185. return str;
  5186. }
  5187. }
  5188. };
  5189. function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
  5190. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  5191. return vue.openBlock(), vue.createElementBlock(
  5192. "view",
  5193. {
  5194. class: vue.normalizeClass(["uni-easyinput", { "uni-easyinput-error": $options.msg }]),
  5195. style: vue.normalizeStyle($options.boxStyle)
  5196. },
  5197. [
  5198. vue.createElementVNode(
  5199. "view",
  5200. {
  5201. class: vue.normalizeClass(["uni-easyinput__content", $options.inputContentClass]),
  5202. style: vue.normalizeStyle($options.inputContentStyle)
  5203. },
  5204. [
  5205. vue.renderSlot(_ctx.$slots, "prefixIcon", {}, () => [
  5206. $props.prefixIcon ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  5207. key: 0,
  5208. class: "content-clear-icon",
  5209. type: $props.prefixIcon,
  5210. color: "#c0c4cc",
  5211. onClick: _cache[0] || (_cache[0] = ($event) => $options.onClickIcon("prefix")),
  5212. size: "22"
  5213. }, null, 8, ["type"])) : vue.createCommentVNode("v-if", true)
  5214. ], true),
  5215. $props.type === "textarea" ? (vue.openBlock(), vue.createElementBlock("textarea", {
  5216. key: 0,
  5217. class: vue.normalizeClass(["uni-easyinput__content-textarea", { "input-padding": $props.inputBorder }]),
  5218. name: $props.name,
  5219. value: $data.val,
  5220. placeholder: $props.placeholder,
  5221. placeholderStyle: $props.placeholderStyle,
  5222. disabled: $props.disabled,
  5223. "placeholder-class": "uni-easyinput__placeholder-class",
  5224. maxlength: $options.inputMaxlength,
  5225. focus: $data.focused,
  5226. autoHeight: $props.autoHeight,
  5227. onInput: _cache[1] || (_cache[1] = (...args) => $options.onInput && $options.onInput(...args)),
  5228. onBlur: _cache[2] || (_cache[2] = (...args) => $options._Blur && $options._Blur(...args)),
  5229. onFocus: _cache[3] || (_cache[3] = (...args) => $options._Focus && $options._Focus(...args)),
  5230. onConfirm: _cache[4] || (_cache[4] = (...args) => $options.onConfirm && $options.onConfirm(...args))
  5231. }, null, 42, ["name", "value", "placeholder", "placeholderStyle", "disabled", "maxlength", "focus", "autoHeight"])) : (vue.openBlock(), vue.createElementBlock("input", {
  5232. key: 1,
  5233. type: $props.type === "password" ? "text" : $props.type,
  5234. class: "uni-easyinput__content-input",
  5235. style: vue.normalizeStyle($options.inputStyle),
  5236. name: $props.name,
  5237. value: $data.val,
  5238. password: !$data.showPassword && $props.type === "password",
  5239. placeholder: $props.placeholder,
  5240. placeholderStyle: $props.placeholderStyle,
  5241. "placeholder-class": "uni-easyinput__placeholder-class",
  5242. disabled: $props.disabled,
  5243. maxlength: $options.inputMaxlength,
  5244. focus: $data.focused,
  5245. confirmType: $props.confirmType,
  5246. onFocus: _cache[5] || (_cache[5] = (...args) => $options._Focus && $options._Focus(...args)),
  5247. onBlur: _cache[6] || (_cache[6] = (...args) => $options._Blur && $options._Blur(...args)),
  5248. onInput: _cache[7] || (_cache[7] = (...args) => $options.onInput && $options.onInput(...args)),
  5249. onConfirm: _cache[8] || (_cache[8] = (...args) => $options.onConfirm && $options.onConfirm(...args))
  5250. }, null, 44, ["type", "name", "value", "password", "placeholder", "placeholderStyle", "disabled", "maxlength", "focus", "confirmType"])),
  5251. $props.type === "password" && $props.passwordIcon ? (vue.openBlock(), vue.createElementBlock(
  5252. vue.Fragment,
  5253. { key: 2 },
  5254. [
  5255. vue.createCommentVNode(" 开启密码时显示小眼睛 "),
  5256. $options.isVal ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  5257. key: 0,
  5258. class: vue.normalizeClass(["content-clear-icon", { "is-textarea-icon": $props.type === "textarea" }]),
  5259. type: $data.showPassword ? "eye-slash-filled" : "eye-filled",
  5260. size: 22,
  5261. color: $data.focusShow ? $props.primaryColor : "#c0c4cc",
  5262. onClick: $options.onEyes
  5263. }, null, 8, ["class", "type", "color", "onClick"])) : vue.createCommentVNode("v-if", true)
  5264. ],
  5265. 64
  5266. /* STABLE_FRAGMENT */
  5267. )) : $props.suffixIcon || _ctx.$slots.suffixIcon ? vue.renderSlot(_ctx.$slots, "suffixIcon", { key: 3 }, () => [
  5268. $props.suffixIcon ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  5269. key: 0,
  5270. class: "content-clear-icon",
  5271. type: $props.suffixIcon,
  5272. color: "#c0c4cc",
  5273. onClick: _cache[9] || (_cache[9] = ($event) => $options.onClickIcon("suffix")),
  5274. size: "22"
  5275. }, null, 8, ["type"])) : vue.createCommentVNode("v-if", true)
  5276. ], true) : (vue.openBlock(), vue.createElementBlock(
  5277. vue.Fragment,
  5278. { key: 4 },
  5279. [
  5280. $props.clearable && $options.isVal && !$props.disabled && $props.type !== "textarea" ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  5281. key: 0,
  5282. class: vue.normalizeClass(["content-clear-icon", { "is-textarea-icon": $props.type === "textarea" }]),
  5283. type: "clear",
  5284. size: $props.clearSize,
  5285. color: $options.msg ? "#dd524d" : $data.focusShow ? $props.primaryColor : "#c0c4cc",
  5286. onClick: $options.onClear
  5287. }, null, 8, ["class", "size", "color", "onClick"])) : vue.createCommentVNode("v-if", true)
  5288. ],
  5289. 64
  5290. /* STABLE_FRAGMENT */
  5291. )),
  5292. vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
  5293. ],
  5294. 6
  5295. /* CLASS, STYLE */
  5296. )
  5297. ],
  5298. 6
  5299. /* CLASS, STYLE */
  5300. );
  5301. }
  5302. const __easycom_0$7 = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$M], ["__scopeId", "data-v-f7a14e66"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-easyinput/uni-easyinput.vue"]]);
  5303. var pattern = {
  5304. email: /^\S+?@\S+?\.\S+?$/,
  5305. idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
  5306. url: new RegExp(
  5307. "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$",
  5308. "i"
  5309. )
  5310. };
  5311. const FORMAT_MAPPING = {
  5312. "int": "integer",
  5313. "bool": "boolean",
  5314. "double": "number",
  5315. "long": "number",
  5316. "password": "string"
  5317. // "fileurls": 'array'
  5318. };
  5319. function formatMessage(args, resources = "") {
  5320. var defaultMessage = ["label"];
  5321. defaultMessage.forEach((item) => {
  5322. if (args[item] === void 0) {
  5323. args[item] = "";
  5324. }
  5325. });
  5326. let str = resources;
  5327. for (let key in args) {
  5328. let reg = new RegExp("{" + key + "}");
  5329. str = str.replace(reg, args[key]);
  5330. }
  5331. return str;
  5332. }
  5333. function isEmptyValue(value, type) {
  5334. if (value === void 0 || value === null) {
  5335. return true;
  5336. }
  5337. if (typeof value === "string" && !value) {
  5338. return true;
  5339. }
  5340. if (Array.isArray(value) && !value.length) {
  5341. return true;
  5342. }
  5343. if (type === "object" && !Object.keys(value).length) {
  5344. return true;
  5345. }
  5346. return false;
  5347. }
  5348. const types = {
  5349. integer(value) {
  5350. return types.number(value) && parseInt(value, 10) === value;
  5351. },
  5352. string(value) {
  5353. return typeof value === "string";
  5354. },
  5355. number(value) {
  5356. if (isNaN(value)) {
  5357. return false;
  5358. }
  5359. return typeof value === "number";
  5360. },
  5361. "boolean": function(value) {
  5362. return typeof value === "boolean";
  5363. },
  5364. "float": function(value) {
  5365. return types.number(value) && !types.integer(value);
  5366. },
  5367. array(value) {
  5368. return Array.isArray(value);
  5369. },
  5370. object(value) {
  5371. return typeof value === "object" && !types.array(value);
  5372. },
  5373. date(value) {
  5374. return value instanceof Date;
  5375. },
  5376. timestamp(value) {
  5377. if (!this.integer(value) || Math.abs(value).toString().length > 16) {
  5378. return false;
  5379. }
  5380. return true;
  5381. },
  5382. file(value) {
  5383. return typeof value.url === "string";
  5384. },
  5385. email(value) {
  5386. return typeof value === "string" && !!value.match(pattern.email) && value.length < 255;
  5387. },
  5388. url(value) {
  5389. return typeof value === "string" && !!value.match(pattern.url);
  5390. },
  5391. pattern(reg, value) {
  5392. try {
  5393. return new RegExp(reg).test(value);
  5394. } catch (e2) {
  5395. return false;
  5396. }
  5397. },
  5398. method(value) {
  5399. return typeof value === "function";
  5400. },
  5401. idcard(value) {
  5402. return typeof value === "string" && !!value.match(pattern.idcard);
  5403. },
  5404. "url-https"(value) {
  5405. return this.url(value) && value.startsWith("https://");
  5406. },
  5407. "url-scheme"(value) {
  5408. return value.startsWith("://");
  5409. },
  5410. "url-web"(value) {
  5411. return false;
  5412. }
  5413. };
  5414. class RuleValidator {
  5415. constructor(message) {
  5416. this._message = message;
  5417. }
  5418. async validateRule(fieldKey, fieldValue, value, data, allData) {
  5419. var result = null;
  5420. let rules = fieldValue.rules;
  5421. let hasRequired = rules.findIndex((item) => {
  5422. return item.required;
  5423. });
  5424. if (hasRequired < 0) {
  5425. if (value === null || value === void 0) {
  5426. return result;
  5427. }
  5428. if (typeof value === "string" && !value.length) {
  5429. return result;
  5430. }
  5431. }
  5432. var message = this._message;
  5433. if (rules === void 0) {
  5434. return message["default"];
  5435. }
  5436. for (var i2 = 0; i2 < rules.length; i2++) {
  5437. let rule = rules[i2];
  5438. let vt2 = this._getValidateType(rule);
  5439. Object.assign(rule, {
  5440. label: fieldValue.label || `["${fieldKey}"]`
  5441. });
  5442. if (RuleValidatorHelper[vt2]) {
  5443. result = RuleValidatorHelper[vt2](rule, value, message);
  5444. if (result != null) {
  5445. break;
  5446. }
  5447. }
  5448. if (rule.validateExpr) {
  5449. let now2 = Date.now();
  5450. let resultExpr = rule.validateExpr(value, allData, now2);
  5451. if (resultExpr === false) {
  5452. result = this._getMessage(rule, rule.errorMessage || this._message["default"]);
  5453. break;
  5454. }
  5455. }
  5456. if (rule.validateFunction) {
  5457. result = await this.validateFunction(rule, value, data, allData, vt2);
  5458. if (result !== null) {
  5459. break;
  5460. }
  5461. }
  5462. }
  5463. if (result !== null) {
  5464. result = message.TAG + result;
  5465. }
  5466. return result;
  5467. }
  5468. async validateFunction(rule, value, data, allData, vt2) {
  5469. let result = null;
  5470. try {
  5471. let callbackMessage = null;
  5472. const res = await rule.validateFunction(rule, value, allData || data, (message) => {
  5473. callbackMessage = message;
  5474. });
  5475. if (callbackMessage || typeof res === "string" && res || res === false) {
  5476. result = this._getMessage(rule, callbackMessage || res, vt2);
  5477. }
  5478. } catch (e2) {
  5479. result = this._getMessage(rule, e2.message, vt2);
  5480. }
  5481. return result;
  5482. }
  5483. _getMessage(rule, message, vt2) {
  5484. return formatMessage(rule, message || rule.errorMessage || this._message[vt2] || message["default"]);
  5485. }
  5486. _getValidateType(rule) {
  5487. var result = "";
  5488. if (rule.required) {
  5489. result = "required";
  5490. } else if (rule.format) {
  5491. result = "format";
  5492. } else if (rule.arrayType) {
  5493. result = "arrayTypeFormat";
  5494. } else if (rule.range) {
  5495. result = "range";
  5496. } else if (rule.maximum !== void 0 || rule.minimum !== void 0) {
  5497. result = "rangeNumber";
  5498. } else if (rule.maxLength !== void 0 || rule.minLength !== void 0) {
  5499. result = "rangeLength";
  5500. } else if (rule.pattern) {
  5501. result = "pattern";
  5502. } else if (rule.validateFunction) {
  5503. result = "validateFunction";
  5504. }
  5505. return result;
  5506. }
  5507. }
  5508. const RuleValidatorHelper = {
  5509. required(rule, value, message) {
  5510. if (rule.required && isEmptyValue(value, rule.format || typeof value)) {
  5511. return formatMessage(rule, rule.errorMessage || message.required);
  5512. }
  5513. return null;
  5514. },
  5515. range(rule, value, message) {
  5516. const {
  5517. range,
  5518. errorMessage
  5519. } = rule;
  5520. let list = new Array(range.length);
  5521. for (let i2 = 0; i2 < range.length; i2++) {
  5522. const item = range[i2];
  5523. if (types.object(item) && item.value !== void 0) {
  5524. list[i2] = item.value;
  5525. } else {
  5526. list[i2] = item;
  5527. }
  5528. }
  5529. let result = false;
  5530. if (Array.isArray(value)) {
  5531. result = new Set(value.concat(list)).size === list.length;
  5532. } else {
  5533. if (list.indexOf(value) > -1) {
  5534. result = true;
  5535. }
  5536. }
  5537. if (!result) {
  5538. return formatMessage(rule, errorMessage || message["enum"]);
  5539. }
  5540. return null;
  5541. },
  5542. rangeNumber(rule, value, message) {
  5543. if (!types.number(value)) {
  5544. return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
  5545. }
  5546. let {
  5547. minimum,
  5548. maximum,
  5549. exclusiveMinimum,
  5550. exclusiveMaximum
  5551. } = rule;
  5552. let min = exclusiveMinimum ? value <= minimum : value < minimum;
  5553. let max = exclusiveMaximum ? value >= maximum : value > maximum;
  5554. if (minimum !== void 0 && min) {
  5555. return formatMessage(rule, rule.errorMessage || message["number"][exclusiveMinimum ? "exclusiveMinimum" : "minimum"]);
  5556. } else if (maximum !== void 0 && max) {
  5557. return formatMessage(rule, rule.errorMessage || message["number"][exclusiveMaximum ? "exclusiveMaximum" : "maximum"]);
  5558. } else if (minimum !== void 0 && maximum !== void 0 && (min || max)) {
  5559. return formatMessage(rule, rule.errorMessage || message["number"].range);
  5560. }
  5561. return null;
  5562. },
  5563. rangeLength(rule, value, message) {
  5564. if (!types.string(value) && !types.array(value)) {
  5565. return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
  5566. }
  5567. let min = rule.minLength;
  5568. let max = rule.maxLength;
  5569. let val = value.length;
  5570. if (min !== void 0 && val < min) {
  5571. return formatMessage(rule, rule.errorMessage || message["length"].minLength);
  5572. } else if (max !== void 0 && val > max) {
  5573. return formatMessage(rule, rule.errorMessage || message["length"].maxLength);
  5574. } else if (min !== void 0 && max !== void 0 && (val < min || val > max)) {
  5575. return formatMessage(rule, rule.errorMessage || message["length"].range);
  5576. }
  5577. return null;
  5578. },
  5579. pattern(rule, value, message) {
  5580. if (!types["pattern"](rule.pattern, value)) {
  5581. return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
  5582. }
  5583. return null;
  5584. },
  5585. format(rule, value, message) {
  5586. var customTypes = Object.keys(types);
  5587. var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : rule.format || rule.arrayType;
  5588. if (customTypes.indexOf(format) > -1) {
  5589. if (!types[format](value)) {
  5590. return formatMessage(rule, rule.errorMessage || message.typeError);
  5591. }
  5592. }
  5593. return null;
  5594. },
  5595. arrayTypeFormat(rule, value, message) {
  5596. if (!Array.isArray(value)) {
  5597. return formatMessage(rule, rule.errorMessage || message.typeError);
  5598. }
  5599. for (let i2 = 0; i2 < value.length; i2++) {
  5600. const element = value[i2];
  5601. let formatResult = this.format(rule, element, message);
  5602. if (formatResult !== null) {
  5603. return formatResult;
  5604. }
  5605. }
  5606. return null;
  5607. }
  5608. };
  5609. class SchemaValidator extends RuleValidator {
  5610. constructor(schema, options) {
  5611. super(SchemaValidator.message);
  5612. this._schema = schema;
  5613. this._options = options || null;
  5614. }
  5615. updateSchema(schema) {
  5616. this._schema = schema;
  5617. }
  5618. async validate(data, allData) {
  5619. let result = this._checkFieldInSchema(data);
  5620. if (!result) {
  5621. result = await this.invokeValidate(data, false, allData);
  5622. }
  5623. return result.length ? result[0] : null;
  5624. }
  5625. async validateAll(data, allData) {
  5626. let result = this._checkFieldInSchema(data);
  5627. if (!result) {
  5628. result = await this.invokeValidate(data, true, allData);
  5629. }
  5630. return result;
  5631. }
  5632. async validateUpdate(data, allData) {
  5633. let result = this._checkFieldInSchema(data);
  5634. if (!result) {
  5635. result = await this.invokeValidateUpdate(data, false, allData);
  5636. }
  5637. return result.length ? result[0] : null;
  5638. }
  5639. async invokeValidate(data, all, allData) {
  5640. let result = [];
  5641. let schema = this._schema;
  5642. for (let key in schema) {
  5643. let value = schema[key];
  5644. let errorMessage = await this.validateRule(key, value, data[key], data, allData);
  5645. if (errorMessage != null) {
  5646. result.push({
  5647. key,
  5648. errorMessage
  5649. });
  5650. if (!all)
  5651. break;
  5652. }
  5653. }
  5654. return result;
  5655. }
  5656. async invokeValidateUpdate(data, all, allData) {
  5657. let result = [];
  5658. for (let key in data) {
  5659. let errorMessage = await this.validateRule(key, this._schema[key], data[key], data, allData);
  5660. if (errorMessage != null) {
  5661. result.push({
  5662. key,
  5663. errorMessage
  5664. });
  5665. if (!all)
  5666. break;
  5667. }
  5668. }
  5669. return result;
  5670. }
  5671. _checkFieldInSchema(data) {
  5672. var keys = Object.keys(data);
  5673. var keys2 = Object.keys(this._schema);
  5674. if (new Set(keys.concat(keys2)).size === keys2.length) {
  5675. return "";
  5676. }
  5677. var noExistFields = keys.filter((key) => {
  5678. return keys2.indexOf(key) < 0;
  5679. });
  5680. var errorMessage = formatMessage({
  5681. field: JSON.stringify(noExistFields)
  5682. }, SchemaValidator.message.TAG + SchemaValidator.message["defaultInvalid"]);
  5683. return [{
  5684. key: "invalid",
  5685. errorMessage
  5686. }];
  5687. }
  5688. }
  5689. function Message() {
  5690. return {
  5691. TAG: "",
  5692. default: "验证错误",
  5693. defaultInvalid: "提交的字段{field}在数据库中并不存在",
  5694. validateFunction: "验证无效",
  5695. required: "{label}必填",
  5696. "enum": "{label}超出范围",
  5697. timestamp: "{label}格式无效",
  5698. whitespace: "{label}不能为空",
  5699. typeError: "{label}类型无效",
  5700. date: {
  5701. format: "{label}日期{value}格式无效",
  5702. parse: "{label}日期无法解析,{value}无效",
  5703. invalid: "{label}日期{value}无效"
  5704. },
  5705. length: {
  5706. minLength: "{label}长度不能少于{minLength}",
  5707. maxLength: "{label}长度不能超过{maxLength}",
  5708. range: "{label}必须介于{minLength}和{maxLength}之间"
  5709. },
  5710. number: {
  5711. minimum: "{label}不能小于{minimum}",
  5712. maximum: "{label}不能大于{maximum}",
  5713. exclusiveMinimum: "{label}不能小于等于{minimum}",
  5714. exclusiveMaximum: "{label}不能大于等于{maximum}",
  5715. range: "{label}必须介于{minimum}and{maximum}之间"
  5716. },
  5717. pattern: {
  5718. mismatch: "{label}格式不匹配"
  5719. }
  5720. };
  5721. }
  5722. SchemaValidator.message = new Message();
  5723. const deepCopy = (val) => {
  5724. return JSON.parse(JSON.stringify(val));
  5725. };
  5726. const typeFilter = (format) => {
  5727. return format === "int" || format === "double" || format === "number" || format === "timestamp";
  5728. };
  5729. const getValue = (key, value, rules) => {
  5730. const isRuleNumType = rules.find((val) => val.format && typeFilter(val.format));
  5731. const isRuleBoolType = rules.find((val) => val.format && val.format === "boolean" || val.format === "bool");
  5732. if (!!isRuleNumType) {
  5733. if (!value && value !== 0) {
  5734. value = null;
  5735. } else {
  5736. value = isNumber(Number(value)) ? Number(value) : value;
  5737. }
  5738. }
  5739. if (!!isRuleBoolType) {
  5740. value = isBoolean(value) ? value : false;
  5741. }
  5742. return value;
  5743. };
  5744. const setDataValue = (field, formdata, value) => {
  5745. formdata[field] = value;
  5746. return value || "";
  5747. };
  5748. const getDataValue = (field, data) => {
  5749. return objGet(data, field);
  5750. };
  5751. const realName = (name, data = {}) => {
  5752. const base_name = _basePath(name);
  5753. if (typeof base_name === "object" && Array.isArray(base_name) && base_name.length > 1) {
  5754. const realname = base_name.reduce((a2, b2) => a2 += `#${b2}`, "_formdata_");
  5755. return realname;
  5756. }
  5757. return base_name[0] || name;
  5758. };
  5759. const isRealName = (name) => {
  5760. const reg = /^_formdata_#*/;
  5761. return reg.test(name);
  5762. };
  5763. const rawData = (object = {}, name) => {
  5764. let newData = JSON.parse(JSON.stringify(object));
  5765. let formData = {};
  5766. for (let i2 in newData) {
  5767. let path = name2arr(i2);
  5768. objSet(formData, path, newData[i2]);
  5769. }
  5770. return formData;
  5771. };
  5772. const name2arr = (name) => {
  5773. let field = name.replace("_formdata_#", "");
  5774. field = field.split("#").map((v2) => isNumber(v2) ? Number(v2) : v2);
  5775. return field;
  5776. };
  5777. const objSet = (object, path, value) => {
  5778. if (typeof object !== "object")
  5779. return object;
  5780. _basePath(path).reduce((o2, k, i2, _2) => {
  5781. if (i2 === _2.length - 1) {
  5782. o2[k] = value;
  5783. return null;
  5784. } else if (k in o2) {
  5785. return o2[k];
  5786. } else {
  5787. o2[k] = /^[0-9]{1,}$/.test(_2[i2 + 1]) ? [] : {};
  5788. return o2[k];
  5789. }
  5790. }, object);
  5791. return object;
  5792. };
  5793. function _basePath(path) {
  5794. if (Array.isArray(path))
  5795. return path;
  5796. return path.replace(/\[/g, ".").replace(/\]/g, "").split(".");
  5797. }
  5798. const objGet = (object, path, defaultVal = "undefined") => {
  5799. let newPath = _basePath(path);
  5800. let val = newPath.reduce((o2, k) => {
  5801. return (o2 || {})[k];
  5802. }, object);
  5803. return !val || val !== void 0 ? val : defaultVal;
  5804. };
  5805. const isNumber = (num) => {
  5806. return !isNaN(Number(num));
  5807. };
  5808. const isBoolean = (bool) => {
  5809. return typeof bool === "boolean";
  5810. };
  5811. const isRequiredField = (rules) => {
  5812. let isNoField = false;
  5813. for (let i2 = 0; i2 < rules.length; i2++) {
  5814. const ruleData = rules[i2];
  5815. if (ruleData.required) {
  5816. isNoField = true;
  5817. break;
  5818. }
  5819. }
  5820. return isNoField;
  5821. };
  5822. const isEqual = (a2, b2) => {
  5823. if (a2 === b2) {
  5824. return a2 !== 0 || 1 / a2 === 1 / b2;
  5825. }
  5826. if (a2 == null || b2 == null) {
  5827. return a2 === b2;
  5828. }
  5829. var classNameA = toString.call(a2), classNameB = toString.call(b2);
  5830. if (classNameA !== classNameB) {
  5831. return false;
  5832. }
  5833. switch (classNameA) {
  5834. case "[object RegExp]":
  5835. case "[object String]":
  5836. return "" + a2 === "" + b2;
  5837. case "[object Number]":
  5838. if (+a2 !== +a2) {
  5839. return +b2 !== +b2;
  5840. }
  5841. return +a2 === 0 ? 1 / +a2 === 1 / b2 : +a2 === +b2;
  5842. case "[object Date]":
  5843. case "[object Boolean]":
  5844. return +a2 === +b2;
  5845. }
  5846. if (classNameA == "[object Object]") {
  5847. var propsA = Object.getOwnPropertyNames(a2), propsB = Object.getOwnPropertyNames(b2);
  5848. if (propsA.length != propsB.length) {
  5849. return false;
  5850. }
  5851. for (var i2 = 0; i2 < propsA.length; i2++) {
  5852. var propName = propsA[i2];
  5853. if (a2[propName] !== b2[propName]) {
  5854. return false;
  5855. }
  5856. }
  5857. return true;
  5858. }
  5859. if (classNameA == "[object Array]") {
  5860. if (a2.toString() == b2.toString()) {
  5861. return true;
  5862. }
  5863. return false;
  5864. }
  5865. };
  5866. const _sfc_main$M = {
  5867. name: "uniForms",
  5868. emits: ["validate", "submit"],
  5869. options: {
  5870. virtualHost: true
  5871. },
  5872. props: {
  5873. // 即将弃用
  5874. value: {
  5875. type: Object,
  5876. default() {
  5877. return null;
  5878. }
  5879. },
  5880. // vue3 替换 value 属性
  5881. modelValue: {
  5882. type: Object,
  5883. default() {
  5884. return null;
  5885. }
  5886. },
  5887. // 1.4.0 开始将不支持 v-model ,且废弃 value 和 modelValue
  5888. model: {
  5889. type: Object,
  5890. default() {
  5891. return null;
  5892. }
  5893. },
  5894. // 表单校验规则
  5895. rules: {
  5896. type: Object,
  5897. default() {
  5898. return {};
  5899. }
  5900. },
  5901. //校验错误信息提示方式 默认 undertext 取值 [undertext|toast|modal]
  5902. errShowType: {
  5903. type: String,
  5904. default: "undertext"
  5905. },
  5906. // 校验触发器方式 默认 bind 取值 [bind|submit]
  5907. validateTrigger: {
  5908. type: String,
  5909. default: "submit"
  5910. },
  5911. // label 位置,默认 left 取值 top/left
  5912. labelPosition: {
  5913. type: String,
  5914. default: "left"
  5915. },
  5916. // label 宽度
  5917. labelWidth: {
  5918. type: [String, Number],
  5919. default: ""
  5920. },
  5921. // label 居中方式,默认 left 取值 left/center/right
  5922. labelAlign: {
  5923. type: String,
  5924. default: "left"
  5925. },
  5926. border: {
  5927. type: Boolean,
  5928. default: false
  5929. }
  5930. },
  5931. provide() {
  5932. return {
  5933. uniForm: this
  5934. };
  5935. },
  5936. data() {
  5937. return {
  5938. // 表单本地值的记录,不应该与传如的值进行关联
  5939. formData: {},
  5940. formRules: {}
  5941. };
  5942. },
  5943. computed: {
  5944. // 计算数据源变化的
  5945. localData() {
  5946. const localVal = this.model || this.modelValue || this.value;
  5947. if (localVal) {
  5948. return deepCopy(localVal);
  5949. }
  5950. return {};
  5951. }
  5952. },
  5953. watch: {
  5954. // 监听数据变化 ,暂时不使用,需要单独赋值
  5955. // localData: {},
  5956. // 监听规则变化
  5957. rules: {
  5958. handler: function(val, oldVal) {
  5959. this.setRules(val);
  5960. },
  5961. deep: true,
  5962. immediate: true
  5963. }
  5964. },
  5965. created() {
  5966. let getbinddata = getApp().$vm.$.appContext.config.globalProperties.binddata;
  5967. if (!getbinddata) {
  5968. getApp().$vm.$.appContext.config.globalProperties.binddata = function(name, value, formName) {
  5969. if (formName) {
  5970. this.$refs[formName].setValue(name, value);
  5971. } else {
  5972. let formVm;
  5973. for (let i2 in this.$refs) {
  5974. const vm = this.$refs[i2];
  5975. if (vm && vm.$options && vm.$options.name === "uniForms") {
  5976. formVm = vm;
  5977. break;
  5978. }
  5979. }
  5980. if (!formVm)
  5981. return console.error("当前 uni-froms 组件缺少 ref 属性");
  5982. formVm.setValue(name, value);
  5983. }
  5984. };
  5985. }
  5986. this.childrens = [];
  5987. this.inputChildrens = [];
  5988. this.setRules(this.rules);
  5989. },
  5990. methods: {
  5991. /**
  5992. * 外部调用方法
  5993. * 设置规则 ,主要用于小程序自定义检验规则
  5994. * @param {Array} rules 规则源数据
  5995. */
  5996. setRules(rules) {
  5997. this.formRules = Object.assign({}, this.formRules, rules);
  5998. this.validator = new SchemaValidator(rules);
  5999. },
  6000. /**
  6001. * 外部调用方法
  6002. * 设置数据,用于设置表单数据,公开给用户使用 , 不支持在动态表单中使用
  6003. * @param {Object} key
  6004. * @param {Object} value
  6005. */
  6006. setValue(key, value) {
  6007. let example = this.childrens.find((child) => child.name === key);
  6008. if (!example)
  6009. return null;
  6010. this.formData[key] = getValue(key, value, this.formRules[key] && this.formRules[key].rules || []);
  6011. return example.onFieldChange(this.formData[key]);
  6012. },
  6013. /**
  6014. * 外部调用方法
  6015. * 手动提交校验表单
  6016. * 对整个表单进行校验的方法,参数为一个回调函数。
  6017. * @param {Array} keepitem 保留不参与校验的字段
  6018. * @param {type} callback 方法回调
  6019. */
  6020. validate(keepitem, callback) {
  6021. return this.checkAll(this.formData, keepitem, callback);
  6022. },
  6023. /**
  6024. * 外部调用方法
  6025. * 部分表单校验
  6026. * @param {Array|String} props 需要校验的字段
  6027. * @param {Function} 回调函数
  6028. */
  6029. validateField(props = [], callback) {
  6030. props = [].concat(props);
  6031. let invalidFields = {};
  6032. this.childrens.forEach((item) => {
  6033. const name = realName(item.name);
  6034. if (props.indexOf(name) !== -1) {
  6035. invalidFields = Object.assign({}, invalidFields, {
  6036. [name]: this.formData[name]
  6037. });
  6038. }
  6039. });
  6040. return this.checkAll(invalidFields, [], callback);
  6041. },
  6042. /**
  6043. * 外部调用方法
  6044. * 移除表单项的校验结果。传入待移除的表单项的 prop 属性或者 prop 组成的数组,如不传则移除整个表单的校验结果
  6045. * @param {Array|String} props 需要移除校验的字段 ,不填为所有
  6046. */
  6047. clearValidate(props = []) {
  6048. props = [].concat(props);
  6049. this.childrens.forEach((item) => {
  6050. if (props.length === 0) {
  6051. item.errMsg = "";
  6052. } else {
  6053. const name = realName(item.name);
  6054. if (props.indexOf(name) !== -1) {
  6055. item.errMsg = "";
  6056. }
  6057. }
  6058. });
  6059. },
  6060. /**
  6061. * 外部调用方法 ,即将废弃
  6062. * 手动提交校验表单
  6063. * 对整个表单进行校验的方法,参数为一个回调函数。
  6064. * @param {Array} keepitem 保留不参与校验的字段
  6065. * @param {type} callback 方法回调
  6066. */
  6067. submit(keepitem, callback, type) {
  6068. for (let i2 in this.dataValue) {
  6069. const itemData = this.childrens.find((v2) => v2.name === i2);
  6070. if (itemData) {
  6071. if (this.formData[i2] === void 0) {
  6072. this.formData[i2] = this._getValue(i2, this.dataValue[i2]);
  6073. }
  6074. }
  6075. }
  6076. if (!type) {
  6077. console.warn("submit 方法即将废弃,请使用validate方法代替!");
  6078. }
  6079. return this.checkAll(this.formData, keepitem, callback, "submit");
  6080. },
  6081. // 校验所有
  6082. async checkAll(invalidFields, keepitem, callback, type) {
  6083. if (!this.validator)
  6084. return;
  6085. let childrens = [];
  6086. for (let i2 in invalidFields) {
  6087. const item = this.childrens.find((v2) => realName(v2.name) === i2);
  6088. if (item) {
  6089. childrens.push(item);
  6090. }
  6091. }
  6092. if (!callback && typeof keepitem === "function") {
  6093. callback = keepitem;
  6094. }
  6095. let promise;
  6096. if (!callback && typeof callback !== "function" && Promise) {
  6097. promise = new Promise((resolve, reject) => {
  6098. callback = function(valid, invalidFields2) {
  6099. !valid ? resolve(invalidFields2) : reject(valid);
  6100. };
  6101. });
  6102. }
  6103. let results = [];
  6104. let tempFormData = JSON.parse(JSON.stringify(invalidFields));
  6105. for (let i2 in childrens) {
  6106. const child = childrens[i2];
  6107. let name = realName(child.name);
  6108. const result = await child.onFieldChange(tempFormData[name]);
  6109. if (result) {
  6110. results.push(result);
  6111. if (this.errShowType === "toast" || this.errShowType === "modal")
  6112. break;
  6113. }
  6114. }
  6115. if (Array.isArray(results)) {
  6116. if (results.length === 0)
  6117. results = null;
  6118. }
  6119. if (Array.isArray(keepitem)) {
  6120. keepitem.forEach((v2) => {
  6121. let vName = realName(v2);
  6122. let value = getDataValue(v2, this.localData);
  6123. if (value !== void 0) {
  6124. tempFormData[vName] = value;
  6125. }
  6126. });
  6127. }
  6128. if (type === "submit") {
  6129. this.$emit("submit", {
  6130. detail: {
  6131. value: tempFormData,
  6132. errors: results
  6133. }
  6134. });
  6135. } else {
  6136. this.$emit("validate", results);
  6137. }
  6138. let resetFormData = {};
  6139. resetFormData = rawData(tempFormData, this.name);
  6140. callback && typeof callback === "function" && callback(results, resetFormData);
  6141. if (promise && callback) {
  6142. return promise;
  6143. } else {
  6144. return null;
  6145. }
  6146. },
  6147. /**
  6148. * 返回validate事件
  6149. * @param {Object} result
  6150. */
  6151. validateCheck(result) {
  6152. this.$emit("validate", result);
  6153. },
  6154. _getValue: getValue,
  6155. _isRequiredField: isRequiredField,
  6156. _setDataValue: setDataValue,
  6157. _getDataValue: getDataValue,
  6158. _realName: realName,
  6159. _isRealName: isRealName,
  6160. _isEqual: isEqual
  6161. }
  6162. };
  6163. function _sfc_render$L(_ctx, _cache, $props, $setup, $data, $options) {
  6164. return vue.openBlock(), vue.createElementBlock("view", { class: "uni-forms" }, [
  6165. vue.createElementVNode("form", null, [
  6166. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  6167. ])
  6168. ]);
  6169. }
  6170. const __easycom_2$1 = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$L], ["__scopeId", "data-v-13523fe0"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-forms/uni-forms.vue"]]);
  6171. const postLoginAPI = (data) => {
  6172. return http({
  6173. method: "POST",
  6174. url: "/admin/index/login",
  6175. data
  6176. });
  6177. };
  6178. const getVerifyCodeImg = (captcha_id) => {
  6179. return http({
  6180. method: "GET",
  6181. url: `/api/common/captcha?server=1&id=${captcha_id}&m=` + Math.random(),
  6182. responseType: "arraybuffer"
  6183. //设置响应类型
  6184. });
  6185. };
  6186. const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
  6187. __name: "login",
  6188. setup(__props, { expose: __expose }) {
  6189. __expose();
  6190. const loading = vue.ref(false);
  6191. const verifyCodeImg = vue.ref("");
  6192. const data = vue.reactive({ captcha_id: "f2dd39ce-0d3e-4c1e-916c-b50090a7590s" });
  6193. onLoad(() => {
  6194. _getVerifyCodeImg();
  6195. });
  6196. const _getVerifyCodeImg = async () => {
  6197. const res = await getVerifyCodeImg(data.captcha_id);
  6198. const arrayBuffer = new Uint8Array(res);
  6199. const base64 = "data:image/png;base64," + uni.arrayBufferToBase64(arrayBuffer);
  6200. verifyCodeImg.value = base64;
  6201. };
  6202. const loginSuccess = (profile) => {
  6203. const memberStore = useMemberStore();
  6204. memberStore.setProfile(profile);
  6205. uni.showToast({ icon: "success", title: "登录成功" });
  6206. formatAppLog("log", "at pages/login/login.vue:28", "登录成功", profile);
  6207. setTimeout(() => {
  6208. uni.navigateBack();
  6209. }, 500);
  6210. };
  6211. const form = vue.ref({
  6212. account: "admin",
  6213. password: "",
  6214. captcha: ""
  6215. });
  6216. const onSubmit = async () => {
  6217. if (loading.value) {
  6218. return false;
  6219. }
  6220. if (form.value.account == "") {
  6221. uni.showToast({
  6222. icon: "none",
  6223. position: "bottom",
  6224. title: "用户名不能为空"
  6225. });
  6226. return;
  6227. }
  6228. if (form.value.password == "") {
  6229. uni.showToast({
  6230. icon: "none",
  6231. position: "bottom",
  6232. title: "密码不能为空"
  6233. });
  6234. return;
  6235. }
  6236. if (form.value.password.length < 6) {
  6237. uni.showToast({
  6238. icon: "none",
  6239. position: "bottom",
  6240. title: "密码长度不能小于6位"
  6241. });
  6242. return;
  6243. }
  6244. loading.value = true;
  6245. const param = {
  6246. username: form.value.account,
  6247. password: form.value.password,
  6248. captcha: form.value.captcha,
  6249. keep: true,
  6250. loading: true,
  6251. captcha_id: data.captcha_id
  6252. };
  6253. const res = await postLoginAPI(param);
  6254. loading.value = false;
  6255. if (res.code === 1) {
  6256. loginSuccess(res.data.userInfo);
  6257. } else {
  6258. uni.showToast({
  6259. title: res.msg,
  6260. icon: "none"
  6261. });
  6262. _getVerifyCodeImg();
  6263. }
  6264. };
  6265. const __returned__ = { loading, verifyCodeImg, data, _getVerifyCodeImg, loginSuccess, form, onSubmit };
  6266. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  6267. return __returned__;
  6268. }
  6269. });
  6270. function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) {
  6271. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  6272. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  6273. const _component_uni_forms = resolveEasycom(vue.resolveDynamicComponent("uni-forms"), __easycom_2$1);
  6274. return vue.openBlock(), vue.createElementBlock("view", { class: "viewport" }, [
  6275. vue.createElementVNode("view", { class: "logo" }, [
  6276. vue.createElementVNode("image", { src: _imports_0$2 })
  6277. ]),
  6278. vue.createElementVNode("view", { class: "login" }, [
  6279. vue.createCommentVNode(" 网页端表单登录 "),
  6280. vue.createElementVNode("view", { class: "input-box padding-lr" }, [
  6281. vue.createVNode(_component_uni_forms, { modelValue: $setup.form }, {
  6282. default: vue.withCtx(() => [
  6283. vue.createElementVNode("view", { class: "cu-form-group margin-top" }, [
  6284. vue.createVNode(_component_uni_icons, {
  6285. class: "uni-icon",
  6286. type: "person",
  6287. size: "30",
  6288. color: "#999"
  6289. }),
  6290. vue.createVNode(_component_uni_easyinput, {
  6291. placeholder: "账号",
  6292. modelValue: $setup.form.account,
  6293. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.account = $event)
  6294. }, null, 8, ["modelValue"])
  6295. ]),
  6296. vue.createElementVNode("view", { class: "cu-form-group" }, [
  6297. vue.createVNode(_component_uni_icons, {
  6298. class: "uni-icon",
  6299. type: "locked",
  6300. size: "30",
  6301. color: "#999"
  6302. }),
  6303. vue.createVNode(_component_uni_easyinput, {
  6304. placeholder: "密码",
  6305. type: "password",
  6306. modelValue: $setup.form.password,
  6307. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.password = $event)
  6308. }, null, 8, ["modelValue"])
  6309. ]),
  6310. vue.createElementVNode("view", { class: "cu-form-group solid-bottom" }, [
  6311. vue.createVNode(_component_uni_icons, {
  6312. class: "uni-icon",
  6313. type: "more-filled",
  6314. size: "30",
  6315. color: "#999"
  6316. }),
  6317. vue.createVNode(_component_uni_easyinput, {
  6318. placeholder: "验证码",
  6319. modelValue: $setup.form.captcha,
  6320. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.form.captcha = $event)
  6321. }, null, 8, ["modelValue"]),
  6322. vue.createCommentVNode(" <button class='cu-btn bg-login-zl shadow'>验证码</button> "),
  6323. vue.createElementVNode("image", {
  6324. class: "cu-btn captchaImg",
  6325. src: $setup.verifyCodeImg,
  6326. onClick: $setup._getVerifyCodeImg
  6327. }, null, 8, ["src"])
  6328. ])
  6329. ]),
  6330. _: 1
  6331. /* STABLE */
  6332. }, 8, ["modelValue"])
  6333. ]),
  6334. vue.createCommentVNode(' <input v-model="form.account" class="input" type="text" placeholder="请输入用户名/手机号码" /> '),
  6335. vue.createCommentVNode(' <input v-model="form.password" class="input" type="text" password placeholder="请输入密码" /> '),
  6336. vue.createElementVNode("button", {
  6337. onClick: $setup.onSubmit,
  6338. class: "button phone",
  6339. loading: $setup.loading
  6340. }, "登录", 8, ["loading"]),
  6341. vue.createElementVNode("view", { class: "tips" }, "登录/注册即视为你同意《服务条款》和《英途仓库隐私协议》")
  6342. ])
  6343. ]);
  6344. }
  6345. const PagesLoginLogin = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["render", _sfc_render$K], ["__file", "E:/demo/hmrabbit/src/pages/login/login.vue"]]);
  6346. const getHotRecommendAPI = (url, data) => {
  6347. return http({
  6348. method: "GET",
  6349. url,
  6350. data
  6351. });
  6352. };
  6353. const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
  6354. __name: "hot",
  6355. props: {
  6356. type: { type: String, required: true }
  6357. },
  6358. setup(__props, { expose: __expose }) {
  6359. __expose();
  6360. const urlMap = [
  6361. { type: "1", title: "特惠推荐", url: "/hot/preference" },
  6362. { type: "2", title: "爆款推荐", url: "/hot/inVogue" },
  6363. { type: "3", title: "一站买全", url: "/hot/oneStop" },
  6364. { type: "4", title: "新鲜好物", url: "/hot/new" }
  6365. ];
  6366. const query = __props;
  6367. const currUrlMap = urlMap.find((v2) => v2.type === query.type);
  6368. uni.setNavigationBarTitle({ title: currUrlMap.title });
  6369. const bannerPicture = vue.ref("");
  6370. const subTypes = vue.ref([]);
  6371. const activeIndex = vue.ref(0);
  6372. const getHotRecommendData = async () => {
  6373. const res = await getHotRecommendAPI(currUrlMap.url, {
  6374. // 技巧:环境变量,开发环境,修改初始页面方便测试分页结束
  6375. page: 30,
  6376. pageSize: 10
  6377. });
  6378. bannerPicture.value = res.result.bannerPicture;
  6379. subTypes.value = res.result.subTypes;
  6380. };
  6381. onLoad(() => {
  6382. getHotRecommendData();
  6383. });
  6384. const onScrolltolower = async () => {
  6385. const currsubTypes = subTypes.value[activeIndex.value];
  6386. if (currsubTypes.goodsItems.page < currsubTypes.goodsItems.pages) {
  6387. currsubTypes.goodsItems.page++;
  6388. } else {
  6389. currsubTypes.finish = true;
  6390. return uni.showToast({ icon: "none", title: "没有更多数据了~" });
  6391. }
  6392. const res = await getHotRecommendAPI(currUrlMap.url, {
  6393. subType: currsubTypes.id,
  6394. page: currsubTypes.goodsItems.page,
  6395. pageSize: currsubTypes.goodsItems.pageSize
  6396. });
  6397. const newsubTypes = res.result.subTypes[activeIndex.value];
  6398. currsubTypes.goodsItems.items.push(...newsubTypes.goodsItems.items);
  6399. };
  6400. const __returned__ = { urlMap, query, currUrlMap, bannerPicture, subTypes, activeIndex, getHotRecommendData, onScrolltolower };
  6401. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  6402. return __returned__;
  6403. }
  6404. });
  6405. function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) {
  6406. return vue.openBlock(), vue.createElementBlock("view", { class: "viewport" }, [
  6407. vue.createCommentVNode(" 推荐封面图 "),
  6408. vue.createElementVNode("view", { class: "cover" }, [
  6409. vue.createElementVNode("image", {
  6410. class: "image",
  6411. mode: "widthFix",
  6412. src: $setup.bannerPicture
  6413. }, null, 8, ["src"])
  6414. ]),
  6415. vue.createCommentVNode(" 推荐选项 "),
  6416. vue.createElementVNode("view", { class: "tabs" }, [
  6417. (vue.openBlock(true), vue.createElementBlock(
  6418. vue.Fragment,
  6419. null,
  6420. vue.renderList($setup.subTypes, (item, index) => {
  6421. return vue.openBlock(), vue.createElementBlock("text", {
  6422. key: item.id,
  6423. class: vue.normalizeClass(["text", { active: index === $setup.activeIndex }]),
  6424. onClick: ($event) => $setup.activeIndex = index
  6425. }, vue.toDisplayString(item.title), 11, ["onClick"]);
  6426. }),
  6427. 128
  6428. /* KEYED_FRAGMENT */
  6429. ))
  6430. ]),
  6431. vue.createCommentVNode(" 推荐列表 "),
  6432. (vue.openBlock(true), vue.createElementBlock(
  6433. vue.Fragment,
  6434. null,
  6435. vue.renderList($setup.subTypes, (item, index) => {
  6436. return vue.withDirectives((vue.openBlock(), vue.createElementBlock(
  6437. "scroll-view",
  6438. {
  6439. "enable-back-to-top": "",
  6440. key: item.id,
  6441. "scroll-y": "",
  6442. class: "scroll-view",
  6443. onScrolltolower: $setup.onScrolltolower
  6444. },
  6445. [
  6446. vue.createElementVNode("view", { class: "goods" }, [
  6447. (vue.openBlock(true), vue.createElementBlock(
  6448. vue.Fragment,
  6449. null,
  6450. vue.renderList(item.goodsItems.items, (goods2) => {
  6451. return vue.openBlock(), vue.createElementBlock("navigator", {
  6452. "hover-class": "none",
  6453. class: "navigator",
  6454. key: goods2.id,
  6455. url: `/pages/goods/goods?id=${goods2.id}`
  6456. }, [
  6457. vue.createElementVNode("image", {
  6458. class: "thumb",
  6459. src: goods2.picture
  6460. }, null, 8, ["src"]),
  6461. vue.createElementVNode(
  6462. "view",
  6463. { class: "name ellipsis" },
  6464. vue.toDisplayString(goods2.name),
  6465. 1
  6466. /* TEXT */
  6467. ),
  6468. vue.createElementVNode("view", { class: "price" }, [
  6469. vue.createElementVNode("text", { class: "symbol" }, "¥"),
  6470. vue.createElementVNode(
  6471. "text",
  6472. { class: "number" },
  6473. vue.toDisplayString(goods2.price),
  6474. 1
  6475. /* TEXT */
  6476. )
  6477. ])
  6478. ], 8, ["url"]);
  6479. }),
  6480. 128
  6481. /* KEYED_FRAGMENT */
  6482. ))
  6483. ]),
  6484. vue.createElementVNode(
  6485. "view",
  6486. { class: "loading-text" },
  6487. vue.toDisplayString(item.finish ? "没有更多数据了~" : "正在加载..."),
  6488. 1
  6489. /* TEXT */
  6490. )
  6491. ],
  6492. 32
  6493. /* NEED_HYDRATION */
  6494. )), [
  6495. [vue.vShow, $setup.activeIndex === index]
  6496. ]);
  6497. }),
  6498. 128
  6499. /* KEYED_FRAGMENT */
  6500. ))
  6501. ]);
  6502. }
  6503. const PagesHotHot = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["render", _sfc_render$J], ["__file", "E:/demo/hmrabbit/src/pages/hot/hot.vue"]]);
  6504. var vk;
  6505. var goodsCache = {};
  6506. const _sfc_main$J = {
  6507. name: "vk-data-goods-sku-popup",
  6508. emits: [
  6509. "update:modelValue",
  6510. "input",
  6511. "update-goods",
  6512. "open",
  6513. "close",
  6514. "add-cart",
  6515. "buy-now",
  6516. "cart",
  6517. "buy",
  6518. "num-change"
  6519. ],
  6520. props: {
  6521. // true 组件显示 false 组件隐藏
  6522. value: {
  6523. Type: Boolean,
  6524. default: false
  6525. },
  6526. modelValue: {
  6527. Type: Boolean,
  6528. default: false
  6529. },
  6530. // vk云函数路由模式参数开始-----------------------------------------------------------
  6531. // 商品id
  6532. goodsId: {
  6533. Type: String,
  6534. default: ""
  6535. },
  6536. // vk路由模式框架下的云函数地址
  6537. action: {
  6538. Type: String,
  6539. default: ""
  6540. },
  6541. // vk云函数路由模式参数结束-----------------------------------------------------------
  6542. // 该商品已抢完时的按钮文字
  6543. noStockText: {
  6544. Type: String,
  6545. default: "该商品已抢完"
  6546. },
  6547. // 库存文字
  6548. stockText: {
  6549. Type: String,
  6550. default: "库存"
  6551. },
  6552. // 商品表id的字段名
  6553. goodsIdName: {
  6554. Type: String,
  6555. default: "_id"
  6556. },
  6557. // sku表id的字段名
  6558. skuIdName: {
  6559. Type: String,
  6560. default: "_id"
  6561. },
  6562. // sku_list的字段名
  6563. skuListName: {
  6564. Type: String,
  6565. default: "sku_list"
  6566. },
  6567. // spec_list的字段名
  6568. specListName: {
  6569. Type: String,
  6570. default: "spec_list"
  6571. },
  6572. // 库存的字段名 默认 stock
  6573. stockName: {
  6574. Type: String,
  6575. default: "stock"
  6576. },
  6577. // sku组合路径的字段名
  6578. skuArrName: {
  6579. Type: String,
  6580. default: "sku_name_arr"
  6581. },
  6582. // 默认单规格时的规格组名称
  6583. defaultSingleSkuName: {
  6584. Type: String,
  6585. default: "默认"
  6586. },
  6587. // 模式 1:都显示 2:只显示购物车 3:只显示立即购买 4:显示缺货按钮 默认 1
  6588. mode: {
  6589. Type: Number,
  6590. default: 1
  6591. },
  6592. // 点击遮罩是否关闭组件 true 关闭 false 不关闭 默认true
  6593. maskCloseAble: {
  6594. Type: Boolean,
  6595. default: true
  6596. },
  6597. // 顶部圆角值
  6598. borderRadius: {
  6599. Type: [String, Number],
  6600. default: 0
  6601. },
  6602. // 商品缩略图字段名(未选择sku时)
  6603. goodsThumbName: {
  6604. Type: [String],
  6605. default: "goods_thumb"
  6606. },
  6607. // 商品缩略图背景颜色,如#999999
  6608. goodsThumbBackgroundColor: {
  6609. Type: String,
  6610. default: "transparent"
  6611. },
  6612. // 最小购买数量 默认 1
  6613. minBuyNum: {
  6614. Type: [Number, String],
  6615. default: 1
  6616. },
  6617. // 最大购买数量 默认 100000
  6618. maxBuyNum: {
  6619. Type: [Number, String],
  6620. default: 1e5
  6621. },
  6622. // 步进器步长 默认 1
  6623. stepBuyNum: {
  6624. Type: [Number, String],
  6625. default: 1
  6626. },
  6627. // 是否只能输入 step 的倍数
  6628. stepStrictly: {
  6629. Type: Boolean,
  6630. default: false
  6631. },
  6632. // 自定义获取商品信息的函数,支付宝小程序不支持该属性,请使用localdata属性
  6633. customAction: {
  6634. Type: [Function],
  6635. default: null
  6636. },
  6637. // 本地数据源
  6638. localdata: {
  6639. type: Object
  6640. },
  6641. // 价格的字体颜色
  6642. priceColor: {
  6643. Type: String
  6644. },
  6645. // 立即购买按钮的文字
  6646. buyNowText: {
  6647. Type: String,
  6648. default: "立即购买"
  6649. },
  6650. // 立即购买按钮的字体颜色
  6651. buyNowColor: {
  6652. Type: String
  6653. },
  6654. // 立即购买按钮的背景颜色
  6655. buyNowBackgroundColor: {
  6656. Type: String
  6657. },
  6658. // 加入购物车按钮的文字
  6659. addCartText: {
  6660. Type: String,
  6661. default: "加入购物车"
  6662. },
  6663. // 加入购物车按钮的字体颜色
  6664. addCartColor: {
  6665. Type: String
  6666. },
  6667. // 加入购物车按钮的背景颜色
  6668. addCartBackgroundColor: {
  6669. Type: String
  6670. },
  6671. // 不可点击时,按钮的样式
  6672. disableStyle: {
  6673. Type: Object,
  6674. default: null
  6675. },
  6676. // 按钮点击时的样式
  6677. activedStyle: {
  6678. Type: Object,
  6679. default: null
  6680. },
  6681. // 按钮常态的样式
  6682. btnStyle: {
  6683. Type: Object,
  6684. default: null
  6685. },
  6686. // 是否显示右上角关闭按钮
  6687. showClose: {
  6688. Type: Boolean,
  6689. default: true
  6690. },
  6691. // 关闭按钮的图片地址 https://img.alicdn.com/imgextra/i1/121022687/O1CN01ImN0O11VigqwzpLiK_!!121022687.png
  6692. closeImage: {
  6693. Type: String,
  6694. default: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAEyUlEQVR42sSZeWwNURTGp4OqtBo7sSXELragdkpQsRRJ1Zr4hyJiJ9YgxNIg1qANiT+E1i5IY0kVVWtQEbuEKLFGUSH27/ANN5PXmTvzupzkl/tm8t6b7517lnvvC0lKSjJ8WmnQAUSDFqABqALKgl8gD7wE90E2SAeXwFf1SxISErQeVtKHwCgwFsSDSIf3hYFKoCkYDBaDdyAViHdueHmoF6FtwDLQ23b/E7gM7oIcejIERIDaoBFoC8qA8mA8SQNz6W1XC9GY+nCQCCYAk/c+gF0gBZwH312+IxR0BCPBUIaH2A+wHsxHCHxx+gLT5QGN6a2JfG8uvVCDws9oiDQYlxkMGfHyQvARlADTwcXk5OT6foV2kS8ATXidymlcyen1a/Jjl9IJh3hPkjELYqO8Cu0KjjNZvtETw5jFBWXPmGSTGQKSeOn5iQ0kVLL0CINfPNcPbDMKyRCbGzEMBJ+ZD8cChYFdqGTqfsWT8otPGoVsEHsMwxDFs3shNsxJ6BrQ0Po8OGUUkVHsNCVml+cntB1jUWwn2GEUsTEMrASbDK+2CCQ0kYX6nfLLisMmKqUr0S60M+jG10vAm+JSCa8+x7CKlzHwaktV6DiObzUzPJIxFO1BQ12wGtTReO9GetVgY/kjNJzZbcWmTjHfxw51AsRqvL8eOAtmsJuFu3g1l+1ZLB5eDTVZ3K0P7tL0TkWOpSg61kVkBtuuNRthGs+wtJST5aQI7cEbkkRXNYVKgX6kIdYuUhYzMQwxN8tiExCLFqHNeSF9/aem0BzGp5PYQCJ7c/Gsk1RfuSD6U1dNpcDf9ZigTmKbMRZ9iVTsHscGJluW2FMf1SSQWGnBmaB6kCJVTVVNJZE++Cx9drEllS1KMCINpURFmEbBWA63Fz9s95cGIdJgp/zXmT4pZcOvSUzuZttTbblmnc3PIjjmidDXvKgdhMh0JdbzuCjWrbNOVovjS5P7bkPJ/mBESkz2BO0166ybNeJ431S2q+01NntuIq3E0amzjiZtk9tssWyTDzO4525bACK9NAUn68TtkNhpEXpOSagRml+S6iLSSeweHv242Qhl13rRyvoDvDlKyTQny/ZQJ+1iH7vVbEx7OR5UiKVIO7VicgvHCtwrudloMIV7/0uadVYW57O4Wvvi8v4pymlKkrpwvsDeLLZAY2pkwbAB3PSQfC+4cH7l4k1ZH8zkZRq8ecO+Z5rN40JJqnXFuGfaxPCTLjcn0OZOpnArXw8HY4paIbw5CcMgXq6HN2/mt6+XGLrN15tBryIUGavMpCTrfKcDCKkAceA9S8nhAOehhSUyhXpkBxxnP4YM1InugP7cBkjBPcqVUWFYCEROxXiQz5JlXV+IfKh7mpfJac+lZ6V87QXVClBkTc7YWsWTPSDyitfzUTlJlj8TbvE6jluDOdwZ+jX57GLO3ADeuyZrDYi86vV81FD2UVGsmT+5Zl0BnkhoseOEaogL46pqO4v/IqUEyalIR4h85BgjHv6+aUWRMbb7EstX6O0cpT1Gco0ry8fWygLDMjmDnQeBt3Qe7uVfkeugDwVLcsVzGsuwLXbV+I63XNAkG5r/hvgRqgqWs6pJPKrsbvz/Q6yyun0w/h6lP+BnzrCpfPMT2L8FGAA7k1GZ/vnaqAAAAABJRU5ErkJggg=="
  6695. },
  6696. // 是否隐藏库存显示
  6697. hideStock: {
  6698. Type: Boolean,
  6699. default: false
  6700. },
  6701. // 颜色主题
  6702. theme: {
  6703. Type: String,
  6704. default: "default"
  6705. },
  6706. // 请求中的提示
  6707. actionTips: {
  6708. Type: String,
  6709. default: "请求中..."
  6710. },
  6711. // 默认选中的SKU
  6712. defaultSelect: {
  6713. Type: Object
  6714. },
  6715. // 是否使用缓存
  6716. useCache: {
  6717. Type: Boolean,
  6718. default: true
  6719. },
  6720. /**
  6721. * 默认商品,设置该值可快速展示商品
  6722. * 逻辑: 先展示 defaultGoods 信息,再取数据库,再更新页面(通常为更新库存)
  6723. */
  6724. defaultGoods: {
  6725. Type: Object
  6726. },
  6727. /**
  6728. * 金额是否需要除以100
  6729. * 1:金额会除以100
  6730. * 0:金额不会除以100
  6731. */
  6732. amountType: {
  6733. Type: Number,
  6734. default: 1
  6735. },
  6736. // 每次选择完SKU后,购买数量归1,如果有最小购买数量,则设置为最小购买数量
  6737. selectedInit: {
  6738. Type: Boolean,
  6739. default: false
  6740. },
  6741. // 是否开启底部安全区适配,默认true
  6742. safeAreaInsetBottom: {
  6743. Type: Boolean,
  6744. default: true
  6745. }
  6746. },
  6747. data() {
  6748. return {
  6749. safeBottom: 0,
  6750. // 留出底部安全距离
  6751. complete: false,
  6752. // 组件是否加载完成
  6753. goodsInfo: {},
  6754. // 商品信息
  6755. isShow: false,
  6756. // true 显示 false 隐藏
  6757. initKey: true,
  6758. // 是否需要初始化 true 是 false 否
  6759. shopItemInfo: {},
  6760. // 存放要和选中的值进行匹配的数据(因百度小程序setData不支持中文字段,故不编译shopItemInfo变量)
  6761. selectArr: [],
  6762. // 存放被选中的值
  6763. subIndex: [],
  6764. // 是否选中 因为不确定是多规格还是单规格,所以这里定义数组来判断
  6765. selectShop: {},
  6766. // 存放最后选中的商品
  6767. selectNum: this.minBuyNum || 1,
  6768. // 选中数量
  6769. outFoStock: false,
  6770. // 是否全部sku都缺货
  6771. openTime: 0,
  6772. themeColor: {
  6773. // 默认主题
  6774. default: {
  6775. priceColor: "rgb(254, 86, 10)",
  6776. buyNowColor: "#ffffff",
  6777. buyNowBackgroundColor: "rgb(254, 86, 10)",
  6778. addCartColor: "#ffffff",
  6779. addCartBackgroundColor: "rgb(255, 148, 2)",
  6780. btnStyle: {
  6781. color: "#333333",
  6782. borderColor: "#f4f4f4",
  6783. backgroundColor: "#ffffff"
  6784. },
  6785. activedStyle: {
  6786. color: "rgb(254, 86, 10)",
  6787. borderColor: "rgb(254, 86, 10)",
  6788. backgroundColor: "rgba(254,86,10,0.1)"
  6789. },
  6790. disableStyle: {
  6791. color: "#c3c3c3",
  6792. borderColor: "#f6f6f6",
  6793. backgroundColor: "#f6f6f6"
  6794. }
  6795. },
  6796. // 红黑主题
  6797. "red-black": {
  6798. priceColor: "rgb(255, 68, 68)",
  6799. buyNowColor: "#ffffff",
  6800. buyNowBackgroundColor: "rgb(255, 68, 68)",
  6801. addCartColor: "#ffffff",
  6802. addCartBackgroundColor: "rgb(85, 85, 85)",
  6803. activedStyle: {
  6804. color: "rgb(255, 68, 68)",
  6805. borderColor: "rgb(255, 68, 68)",
  6806. backgroundColor: "rgba(255,68,68,0.1)"
  6807. }
  6808. },
  6809. // 黑白主题
  6810. "black-white": {
  6811. priceColor: "rgb(47, 47, 52)",
  6812. buyNowColor: "#ffffff",
  6813. buyNowBackgroundColor: "rgb(47, 47, 52)",
  6814. addCartColor: "rgb(47, 47, 52)",
  6815. addCartBackgroundColor: "rgb(235, 236, 242)",
  6816. // btnStyle:{
  6817. // color:"rgb(47, 47, 52)",
  6818. // borderColor:"rgba(235,236,242,0.5)",
  6819. // backgroundColor:"rgba(235,236,242,0.5)",
  6820. // },
  6821. activedStyle: {
  6822. color: "rgb(47, 47, 52)",
  6823. borderColor: "rgba(47,47,52,0.12)",
  6824. backgroundColor: "rgba(47,47,52,0.12)"
  6825. }
  6826. },
  6827. // 咖啡色主题
  6828. coffee: {
  6829. priceColor: "rgb(195, 167, 105)",
  6830. buyNowColor: "#ffffff",
  6831. buyNowBackgroundColor: "rgb(195, 167, 105)",
  6832. addCartColor: "rgb(195, 167, 105)",
  6833. addCartBackgroundColor: "rgb(243, 238, 225)",
  6834. activedStyle: {
  6835. color: "rgb(195, 167, 105)",
  6836. borderColor: "rgb(195, 167, 105)",
  6837. backgroundColor: "rgba(195, 167, 105,0.1)"
  6838. }
  6839. },
  6840. // 浅绿色主题
  6841. green: {
  6842. priceColor: "rgb(99, 190, 114)",
  6843. buyNowColor: "#ffffff",
  6844. buyNowBackgroundColor: "rgb(99, 190, 114)",
  6845. addCartColor: "rgb(99, 190, 114)",
  6846. addCartBackgroundColor: "rgb(225, 244, 227)",
  6847. activedStyle: {
  6848. color: "rgb(99, 190, 114)",
  6849. borderColor: "rgb(99, 190, 114)",
  6850. backgroundColor: "rgba(99, 190, 114,0.1)"
  6851. }
  6852. }
  6853. }
  6854. };
  6855. },
  6856. created() {
  6857. let that = this;
  6858. vk = that.vk;
  6859. if (that.valueCom) {
  6860. that.open();
  6861. }
  6862. const { safeAreaInsets } = uni.getSystemInfoSync();
  6863. that.safeBottom = safeAreaInsets.bottom;
  6864. },
  6865. mounted() {
  6866. },
  6867. methods: {
  6868. // 初始化
  6869. init(notAutoClick) {
  6870. let that = this;
  6871. that.selectArr = [];
  6872. that.subIndex = [];
  6873. that.selectShop = {};
  6874. that.selectNum = that.minBuyNum || 1;
  6875. that.outFoStock = false;
  6876. that.shopItemInfo = {};
  6877. let specListName = that.specListName;
  6878. that.goodsInfo[specListName].map((item) => {
  6879. that.selectArr.push("");
  6880. that.subIndex.push(-1);
  6881. });
  6882. that.checkItem();
  6883. that.checkInpath(-1);
  6884. if (!notAutoClick)
  6885. that.autoClickSku();
  6886. },
  6887. // 使用vk路由模式框架获取商品信息
  6888. findGoodsInfo(obj = {}) {
  6889. let that = this;
  6890. let { useCache } = obj;
  6891. if (typeof vk == "undefined") {
  6892. that.toast("custom-action必须是function", "none");
  6893. return false;
  6894. }
  6895. let { actionTips } = that;
  6896. let actionTitle = "";
  6897. let actionAoading = false;
  6898. if (actionTips !== "custom") {
  6899. actionTitle = useCache ? "" : "请求中...";
  6900. } else {
  6901. actionAoading = useCache ? false : true;
  6902. }
  6903. vk.callFunction({
  6904. url: that.action,
  6905. title: actionTitle,
  6906. loading: actionAoading,
  6907. data: {
  6908. goods_id: that.goodsId
  6909. },
  6910. success(data) {
  6911. that.updateGoodsInfo(data.goodsInfo);
  6912. goodsCache[that.goodsId] = data.goodsInfo;
  6913. that.$emit("update-goods", data.goodsInfo);
  6914. },
  6915. fail() {
  6916. that.updateValue(false);
  6917. }
  6918. });
  6919. },
  6920. updateValue(value) {
  6921. let that = this;
  6922. if (value) {
  6923. that.$emit("open", true);
  6924. that.$emit("input", true);
  6925. that.$emit("update:modelValue", true);
  6926. } else {
  6927. that.$emit("input", false);
  6928. that.$emit("close", "close");
  6929. that.$emit("update:modelValue", false);
  6930. }
  6931. },
  6932. // 更新商品信息(库存、名称、图片)
  6933. updateGoodsInfo(goodsInfo) {
  6934. let that = this;
  6935. let { skuListName } = that;
  6936. if (JSON.stringify(that.goodsInfo) === "{}" || that.goodsInfo[that.goodsIdName] !== goodsInfo[that.goodsIdName]) {
  6937. that.goodsInfo = goodsInfo;
  6938. that.initKey = true;
  6939. } else {
  6940. that.goodsInfo[skuListName] = goodsInfo[skuListName];
  6941. }
  6942. if (that.initKey) {
  6943. that.initKey = false;
  6944. that.init();
  6945. }
  6946. let select_sku_info = that.getListItem(
  6947. that.goodsInfo[skuListName],
  6948. that.skuIdName,
  6949. that.selectShop[that.skuIdName]
  6950. );
  6951. Object.assign(that.selectShop, select_sku_info);
  6952. that.defaultSelectSku();
  6953. that.complete = true;
  6954. },
  6955. async open() {
  6956. let that = this;
  6957. that.openTime = (/* @__PURE__ */ new Date()).getTime();
  6958. let findGoodsInfoRun = true;
  6959. that.skuListName;
  6960. let useCache = false;
  6961. let goodsInfo = goodsCache[that.goodsId];
  6962. if (goodsInfo && that.useCache) {
  6963. useCache = true;
  6964. that.updateGoodsInfo(goodsInfo);
  6965. } else {
  6966. that.complete = false;
  6967. }
  6968. if (that.customAction && typeof that.customAction === "function") {
  6969. try {
  6970. goodsInfo = await that.customAction({
  6971. useCache,
  6972. goodsId: that.goodsId,
  6973. goodsInfo,
  6974. close: function() {
  6975. setTimeout(function() {
  6976. that.close();
  6977. }, 500);
  6978. }
  6979. }).catch((err) => {
  6980. setTimeout(function() {
  6981. that.close();
  6982. }, 500);
  6983. });
  6984. } catch (err) {
  6985. let { message = "" } = err;
  6986. if (message.indexOf(".catch is not a function") > -1) {
  6987. that.toast("custom-action必须返回一个Promise", "none");
  6988. setTimeout(function() {
  6989. that.close();
  6990. }, 500);
  6991. return false;
  6992. }
  6993. }
  6994. goodsCache[that.goodsId] = goodsInfo;
  6995. if (goodsInfo && typeof goodsInfo == "object" && JSON.stringify(goodsInfo) != "{}") {
  6996. findGoodsInfoRun = false;
  6997. that.updateGoodsInfo(goodsInfo);
  6998. that.updateValue(true);
  6999. } else {
  7000. that.toast("未获取到商品信息", "none");
  7001. that.$emit("input", false);
  7002. return false;
  7003. }
  7004. } else if (typeof that.localdata !== "undefined" && that.localdata !== null) {
  7005. goodsInfo = that.localdata;
  7006. if (goodsInfo && typeof goodsInfo == "object" && JSON.stringify(goodsInfo) != "{}") {
  7007. findGoodsInfoRun = false;
  7008. that.updateGoodsInfo(goodsInfo);
  7009. that.updateValue(true);
  7010. } else {
  7011. that.toast("未获取到商品信息", "none");
  7012. that.$emit("input", false);
  7013. return false;
  7014. }
  7015. } else {
  7016. if (findGoodsInfoRun)
  7017. that.findGoodsInfo({ useCache });
  7018. }
  7019. },
  7020. // 监听 - 弹出层收起
  7021. close(s2) {
  7022. let that = this;
  7023. if ((/* @__PURE__ */ new Date()).getTime() - that.openTime < 400) {
  7024. return false;
  7025. }
  7026. if (s2 == "mask") {
  7027. if (that.maskCloseAble !== false) {
  7028. that.$emit("input", false);
  7029. that.$emit("close", "mask");
  7030. that.$emit("update:modelValue", false);
  7031. }
  7032. } else {
  7033. that.$emit("input", false);
  7034. that.$emit("close", "close");
  7035. that.$emit("update:modelValue", false);
  7036. }
  7037. },
  7038. moveHandle() {
  7039. },
  7040. // sku按钮的点击事件
  7041. skuClick(value, index1, index2) {
  7042. let that = this;
  7043. if (value.ishow) {
  7044. if (that.selectArr[index1] != value.name) {
  7045. that.$set(that.selectArr, index1, value.name);
  7046. that.$set(that.subIndex, index1, index2);
  7047. } else {
  7048. that.$set(that.selectArr, index1, "");
  7049. that.$set(that.subIndex, index1, -1);
  7050. }
  7051. that.checkInpath(index1);
  7052. that.checkSelectShop();
  7053. }
  7054. },
  7055. // 检测是否已经选完sku
  7056. checkSelectShop() {
  7057. let that = this;
  7058. if (that.selectArr.every((item) => item != "")) {
  7059. that.selectShop = that.shopItemInfo[that.getArrayToSting(that.selectArr)];
  7060. let stock = that.selectShop[that.stockName];
  7061. if (typeof stock !== "undefined" && that.selectNum > stock) {
  7062. that.selectNum = stock;
  7063. }
  7064. if (that.selectNum > that.maxBuyNum) {
  7065. that.selectNum = that.maxBuyNum;
  7066. }
  7067. if (that.selectNum < that.minBuyNum) {
  7068. that.selectNum = that.minBuyNum;
  7069. }
  7070. if (that.selectedInit) {
  7071. that.selectNum = that.minBuyNum || 1;
  7072. }
  7073. } else {
  7074. that.selectShop = {};
  7075. }
  7076. },
  7077. // 检查路径
  7078. checkInpath(clickIndex) {
  7079. let that = this;
  7080. let specListName = that.specListName;
  7081. let specList = that.goodsInfo[specListName];
  7082. for (let i2 = 0, len = specList.length; i2 < len; i2++) {
  7083. if (i2 == clickIndex) {
  7084. continue;
  7085. }
  7086. let len2 = specList[i2].list.length;
  7087. for (let j2 = 0; j2 < len2; j2++) {
  7088. if (that.subIndex[i2] != -1 && j2 == that.subIndex[i2]) {
  7089. continue;
  7090. }
  7091. let choosed_copy = [...that.selectArr];
  7092. that.$set(choosed_copy, i2, specList[i2].list[j2].name);
  7093. let choosed_copy2 = choosed_copy.filter(
  7094. (item) => item !== "" && typeof item !== "undefined"
  7095. );
  7096. if (that.shopItemInfo.hasOwnProperty(that.getArrayToSting(choosed_copy2))) {
  7097. specList[i2].list[j2].ishow = true;
  7098. } else {
  7099. specList[i2].list[j2].ishow = false;
  7100. }
  7101. }
  7102. }
  7103. that.$set(that.goodsInfo, specListName, specList);
  7104. },
  7105. // 计算sku里面规格形成路径
  7106. checkItem() {
  7107. let that = this;
  7108. let { stockName } = that;
  7109. let skuListName = that.skuListName;
  7110. let originalSkuList = that.goodsInfo[skuListName];
  7111. let skuList = [];
  7112. let stockNum = 0;
  7113. originalSkuList.map((skuItem, index) => {
  7114. if (skuItem[stockName] > 0) {
  7115. skuList.push(skuItem);
  7116. stockNum += skuItem[stockName];
  7117. }
  7118. });
  7119. if (stockNum <= 0) {
  7120. that.outFoStock = true;
  7121. }
  7122. skuList.reduce(
  7123. (arrs, items) => {
  7124. return arrs.concat(
  7125. items[that.skuArrName].reduce(
  7126. (arr, item) => {
  7127. return arr.concat(
  7128. arr.map((item2) => {
  7129. if (!that.shopItemInfo.hasOwnProperty(that.getArrayToSting([...item2, item]))) {
  7130. that.shopItemInfo[that.getArrayToSting([...item2, item])] = items;
  7131. }
  7132. return [...item2, item];
  7133. })
  7134. );
  7135. },
  7136. [[]]
  7137. )
  7138. );
  7139. },
  7140. [[]]
  7141. );
  7142. },
  7143. getArrayToSting(arr) {
  7144. let str = "";
  7145. arr.map((item, index) => {
  7146. item = item.replace(/\./g, "。");
  7147. if (index == 0) {
  7148. str += item;
  7149. } else {
  7150. str += "," + item;
  7151. }
  7152. });
  7153. return str;
  7154. },
  7155. // 检测sku选项是否已全部选完,且有库存
  7156. checkSelectComplete(obj = {}) {
  7157. let that = this;
  7158. let clickTime = (/* @__PURE__ */ new Date()).getTime();
  7159. if (that.clickTime && clickTime - that.clickTime < 400) {
  7160. return false;
  7161. }
  7162. that.clickTime = clickTime;
  7163. let { selectShop, selectNum, stockText, stockName } = that;
  7164. if (!selectShop || !selectShop[that.skuIdName]) {
  7165. that.toast("请先选择对应规格", "none");
  7166. return false;
  7167. }
  7168. if (selectNum <= 0) {
  7169. that.toast("购买数量必须>0", "none");
  7170. return false;
  7171. }
  7172. if (selectNum > selectShop[stockName]) {
  7173. that.toast(stockText + "不足", "none");
  7174. return false;
  7175. }
  7176. if (typeof obj.success == "function")
  7177. obj.success(selectShop);
  7178. },
  7179. // 加入购物车
  7180. addCart() {
  7181. let that = this;
  7182. that.checkSelectComplete({
  7183. success: function(selectShop) {
  7184. selectShop.buy_num = that.selectNum;
  7185. that.$emit("add-cart", selectShop);
  7186. that.$emit("cart", selectShop);
  7187. }
  7188. });
  7189. },
  7190. // 立即购买
  7191. buyNow() {
  7192. let that = this;
  7193. that.checkSelectComplete({
  7194. success: function(selectShop) {
  7195. selectShop.buy_num = that.selectNum;
  7196. that.$emit("buy-now", selectShop);
  7197. that.$emit("buy", selectShop);
  7198. }
  7199. });
  7200. },
  7201. // 弹窗
  7202. toast(title, icon) {
  7203. uni.showToast({
  7204. title,
  7205. icon
  7206. });
  7207. },
  7208. // 获取对象数组中的某一个item,根据指定的键值
  7209. getListItem(list, key, value) {
  7210. let item;
  7211. for (let i2 in list) {
  7212. if (typeof value == "object") {
  7213. if (JSON.stringify(list[i2][key]) === JSON.stringify(value)) {
  7214. item = list[i2];
  7215. break;
  7216. }
  7217. } else {
  7218. if (list[i2][key] === value) {
  7219. item = list[i2];
  7220. break;
  7221. }
  7222. }
  7223. }
  7224. return item;
  7225. },
  7226. getListIndex(list, key, value) {
  7227. let index = -1;
  7228. for (let i2 = 0; i2 < list.length; i2++) {
  7229. if (list[i2][key] === value) {
  7230. index = i2;
  7231. break;
  7232. }
  7233. }
  7234. return index;
  7235. },
  7236. // 自动选择sku前提是只有一组sku,默认自动选择最前面的有库存的sku
  7237. autoClickSku() {
  7238. let that = this;
  7239. let { stockName } = that;
  7240. let skuList = that.goodsInfo[that.skuListName];
  7241. let specListArr = that.goodsInfo[that.specListName];
  7242. if (specListArr.length == 1) {
  7243. let specList = specListArr[0].list;
  7244. for (let i2 = 0; i2 < specList.length; i2++) {
  7245. let sku = that.getListItem(skuList, that.skuArrName, [specList[i2].name]);
  7246. if (sku && sku[stockName] > 0) {
  7247. that.skuClick(specList[i2], 0, i2);
  7248. break;
  7249. }
  7250. }
  7251. }
  7252. },
  7253. // 主题颜色
  7254. themeColorFn(name) {
  7255. let that = this;
  7256. let { theme, themeColor } = that;
  7257. let color = that[name] ? that[name] : themeColor[theme][name];
  7258. return color;
  7259. },
  7260. defaultSelectSku() {
  7261. let that = this;
  7262. let { defaultSelect } = that;
  7263. if (defaultSelect && defaultSelect.sku && defaultSelect.sku.length > 0) {
  7264. that.selectSku(defaultSelect);
  7265. }
  7266. },
  7267. /**
  7268. * 主动方法 - 设置sku
  7269. that.$refs.skuPopup.selectSku({
  7270. sku:["红色","256G","公开版"],
  7271. num:5
  7272. });
  7273. */
  7274. selectSku(obj = {}) {
  7275. let that = this;
  7276. let { sku: skuArr, num: selectNum } = obj;
  7277. let specListArr = that.goodsInfo[that.specListName];
  7278. if (skuArr && specListArr.length === skuArr.length) {
  7279. let skuClickArr = [];
  7280. let clickKey = true;
  7281. for (let index = 0; index < skuArr.length; index++) {
  7282. let skuName = skuArr[index];
  7283. let specList = specListArr[index].list;
  7284. let index1 = index;
  7285. let index2 = that.getListIndex(specList, "name", skuName);
  7286. if (index2 == -1) {
  7287. clickKey = false;
  7288. break;
  7289. }
  7290. skuClickArr.push({
  7291. spec: specList[index2],
  7292. index1,
  7293. index2
  7294. });
  7295. }
  7296. if (clickKey) {
  7297. that.init(true);
  7298. skuClickArr.map((item) => {
  7299. that.skuClick(item.spec, item.index1, item.index2);
  7300. });
  7301. }
  7302. }
  7303. if (selectNum > 0)
  7304. that.selectNum = selectNum;
  7305. },
  7306. priceFilter(n2 = 0) {
  7307. let that = this;
  7308. if (typeof n2 == "string") {
  7309. n2 = parseFloat(n2);
  7310. }
  7311. if (that.amountType === 0) {
  7312. return n2.toFixed(2);
  7313. } else {
  7314. return (n2 / 100).toFixed(2);
  7315. }
  7316. },
  7317. pushGoodsCache(goodsInfo) {
  7318. let that = this;
  7319. let { goodsIdName } = that;
  7320. goodsCache[goodsInfo[goodsIdName]] = goodsInfo;
  7321. },
  7322. // 用于阻止冒泡
  7323. stop() {
  7324. },
  7325. // 图片预览
  7326. previewImage() {
  7327. let that = this;
  7328. let { selectShop, goodsInfo, goodsThumbName } = that;
  7329. let src = selectShop.image ? selectShop.image : goodsInfo[goodsThumbName];
  7330. if (src) {
  7331. uni.previewImage({
  7332. urls: [src]
  7333. });
  7334. }
  7335. },
  7336. getMaxStock() {
  7337. let maxStock = 0;
  7338. let that = this;
  7339. let { selectShop = {}, goodsInfo = {}, skuListName, stockName } = that;
  7340. if (selectShop[stockName]) {
  7341. maxStock = selectShop[stockName];
  7342. } else {
  7343. let skuList = goodsInfo[skuListName];
  7344. if (skuList && skuList.length > 0) {
  7345. let valueArr = [];
  7346. skuList.map((skuItem, index) => {
  7347. valueArr.push(skuItem[stockName]);
  7348. });
  7349. let max = Math.max(...valueArr);
  7350. maxStock = max;
  7351. }
  7352. }
  7353. return maxStock;
  7354. },
  7355. numChange(e2) {
  7356. this.$emit("num-change", e2.value);
  7357. }
  7358. },
  7359. // 计算属性
  7360. computed: {
  7361. valueCom() {
  7362. return this.modelValue;
  7363. },
  7364. // 最大购买数量
  7365. maxBuyNumCom() {
  7366. let that = this;
  7367. let maxStock = that.getMaxStock();
  7368. let max = that.maxBuyNum || 1e5;
  7369. if (max > maxStock) {
  7370. max = maxStock;
  7371. }
  7372. return max;
  7373. },
  7374. // 是否是多规格
  7375. isManyCom() {
  7376. let that = this;
  7377. let { goodsInfo, defaultSingleSkuName, specListName } = that;
  7378. let isMany = true;
  7379. if (goodsInfo[specListName] && goodsInfo[specListName].length === 1 && goodsInfo[specListName][0].list.length === 1 && goodsInfo[specListName][0].name === defaultSingleSkuName) {
  7380. isMany = false;
  7381. }
  7382. return isMany;
  7383. },
  7384. // 默认价格区间计算
  7385. priceCom() {
  7386. let str = "";
  7387. let that = this;
  7388. let { selectShop = {}, goodsInfo = {}, skuListName, skuIdName } = that;
  7389. if (selectShop[skuIdName]) {
  7390. str = that.priceFilter(selectShop.price);
  7391. } else {
  7392. let skuList = goodsInfo[skuListName];
  7393. if (skuList && skuList.length > 0) {
  7394. let valueArr = [];
  7395. skuList.map((skuItem, index) => {
  7396. valueArr.push(skuItem.price);
  7397. });
  7398. let min = that.priceFilter(Math.min(...valueArr));
  7399. let max = that.priceFilter(Math.max(...valueArr));
  7400. if (min === max) {
  7401. str = min + "";
  7402. } else {
  7403. str = `${min} - ${max}`;
  7404. }
  7405. }
  7406. }
  7407. return str;
  7408. },
  7409. // 库存显示
  7410. stockCom() {
  7411. let str = "";
  7412. let that = this;
  7413. let { selectShop = {}, goodsInfo = {}, skuListName, stockName } = that;
  7414. if (selectShop[stockName]) {
  7415. str = selectShop[stockName];
  7416. } else {
  7417. let skuList = goodsInfo[skuListName];
  7418. if (skuList && skuList.length > 0) {
  7419. let valueArr = [];
  7420. skuList.map((skuItem, index) => {
  7421. valueArr.push(skuItem[stockName]);
  7422. });
  7423. let min = Math.min(...valueArr);
  7424. let max = Math.max(...valueArr);
  7425. if (min === max) {
  7426. str = min;
  7427. } else {
  7428. str = `${min} - ${max}`;
  7429. }
  7430. }
  7431. }
  7432. return str;
  7433. }
  7434. },
  7435. watch: {
  7436. valueCom(newVal, oldValue) {
  7437. let that = this;
  7438. if (newVal) {
  7439. that.open();
  7440. }
  7441. },
  7442. defaultGoods: {
  7443. immediate: true,
  7444. handler: function(newVal, oldValue) {
  7445. let that = this;
  7446. let { goodsIdName } = that;
  7447. if (typeof newVal === "object" && newVal && newVal[goodsIdName] && !goodsCache[newVal[goodsIdName]]) {
  7448. that.pushGoodsCache(newVal);
  7449. }
  7450. }
  7451. }
  7452. }
  7453. };
  7454. function _sfc_render$I(_ctx, _cache, $props, $setup, $data, $options) {
  7455. const _component_vk_data_input_number_box = resolveEasycom(vue.resolveDynamicComponent("vk-data-input-number-box"), __easycom_0$b);
  7456. return vue.openBlock(), vue.createElementBlock(
  7457. "view",
  7458. {
  7459. class: vue.normalizeClass(["vk-data-goods-sku-popup", $options.valueCom && $data.complete ? "show" : "none"]),
  7460. catchtouchmove: "true",
  7461. onTouchmove: _cache[8] || (_cache[8] = vue.withModifiers((...args) => $options.moveHandle && $options.moveHandle(...args), ["stop", "prevent"])),
  7462. onClick: _cache[9] || (_cache[9] = vue.withModifiers((...args) => $options.stop && $options.stop(...args), ["stop"]))
  7463. },
  7464. [
  7465. vue.createCommentVNode(" 页面内容开始 "),
  7466. vue.createElementVNode("view", {
  7467. class: "mask",
  7468. onClick: _cache[0] || (_cache[0] = ($event) => $options.close("mask"))
  7469. }),
  7470. vue.createElementVNode(
  7471. "view",
  7472. {
  7473. class: vue.normalizeClass(["layer attr-content", { "safe-area-inset-bottom": $props.safeAreaInsetBottom }]),
  7474. style: vue.normalizeStyle({
  7475. borderRadius: $props.borderRadius + "rpx " + $props.borderRadius + "rpx 0 0",
  7476. paddingBottom: $data.safeBottom + "px"
  7477. })
  7478. },
  7479. [
  7480. vue.createElementVNode("view", { class: "specification-wrapper" }, [
  7481. vue.createElementVNode("scroll-view", {
  7482. class: "specification-wrapper-content",
  7483. "scroll-y": "true"
  7484. }, [
  7485. vue.createElementVNode("view", { class: "specification-header" }, [
  7486. vue.createElementVNode("view", { class: "specification-left" }, [
  7487. vue.createElementVNode("image", {
  7488. class: "product-img",
  7489. src: $data.selectShop.image ? $data.selectShop.image : $data.goodsInfo[$props.goodsThumbName],
  7490. style: vue.normalizeStyle({ backgroundColor: $props.goodsThumbBackgroundColor }),
  7491. mode: "aspectFill",
  7492. onClick: _cache[1] || (_cache[1] = (...args) => $options.previewImage && $options.previewImage(...args))
  7493. }, null, 12, ["src"])
  7494. ]),
  7495. vue.createElementVNode("view", { class: "specification-right" }, [
  7496. vue.createElementVNode(
  7497. "view",
  7498. {
  7499. class: "price-content",
  7500. style: vue.normalizeStyle({ color: $options.themeColorFn("priceColor") })
  7501. },
  7502. [
  7503. vue.createElementVNode("text", { class: "sign" }, "¥"),
  7504. vue.createElementVNode(
  7505. "text",
  7506. {
  7507. class: vue.normalizeClass(["price", $options.priceCom.length > 16 ? "price2" : ""])
  7508. },
  7509. vue.toDisplayString($options.priceCom),
  7510. 3
  7511. /* TEXT, CLASS */
  7512. )
  7513. ],
  7514. 4
  7515. /* STYLE */
  7516. ),
  7517. !$props.hideStock ? (vue.openBlock(), vue.createElementBlock(
  7518. "view",
  7519. {
  7520. key: 0,
  7521. class: "inventory"
  7522. },
  7523. vue.toDisplayString($props.stockText) + ":" + vue.toDisplayString($options.stockCom),
  7524. 1
  7525. /* TEXT */
  7526. )) : (vue.openBlock(), vue.createElementBlock("view", {
  7527. key: 1,
  7528. class: "inventory"
  7529. })),
  7530. vue.withDirectives(vue.createElementVNode(
  7531. "view",
  7532. { class: "choose" },
  7533. "已选:" + vue.toDisplayString($data.selectArr.join(" ")),
  7534. 513
  7535. /* TEXT, NEED_PATCH */
  7536. ), [
  7537. [vue.vShow, $options.isManyCom]
  7538. ])
  7539. ])
  7540. ]),
  7541. vue.createElementVNode("view", { class: "specification-content" }, [
  7542. (vue.openBlock(true), vue.createElementBlock(
  7543. vue.Fragment,
  7544. null,
  7545. vue.renderList($data.goodsInfo[$props.specListName], (item, index1) => {
  7546. return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
  7547. class: "specification-item",
  7548. key: index1
  7549. }, [
  7550. vue.createElementVNode(
  7551. "view",
  7552. { class: "item-title" },
  7553. vue.toDisplayString(item.name),
  7554. 1
  7555. /* TEXT */
  7556. ),
  7557. vue.createElementVNode("view", { class: "item-wrapper" }, [
  7558. (vue.openBlock(true), vue.createElementBlock(
  7559. vue.Fragment,
  7560. null,
  7561. vue.renderList(item.list, (item_value, index2) => {
  7562. return vue.openBlock(), vue.createElementBlock("view", {
  7563. class: vue.normalizeClass(["item-content", [
  7564. item_value.ishow ? "" : "noactived",
  7565. $data.subIndex[index1] == index2 ? "actived" : ""
  7566. ]]),
  7567. key: index2,
  7568. style: vue.normalizeStyle([
  7569. item_value.ishow ? "" : $options.themeColorFn("disableStyle"),
  7570. item_value.ishow ? $options.themeColorFn("btnStyle") : "",
  7571. $data.subIndex[index1] == index2 ? $options.themeColorFn("activedStyle") : ""
  7572. ]),
  7573. onClick: ($event) => $options.skuClick(item_value, index1, index2)
  7574. }, vue.toDisplayString(item_value.name), 15, ["onClick"]);
  7575. }),
  7576. 128
  7577. /* KEYED_FRAGMENT */
  7578. ))
  7579. ])
  7580. ])), [
  7581. [vue.vShow, $options.isManyCom]
  7582. ]);
  7583. }),
  7584. 128
  7585. /* KEYED_FRAGMENT */
  7586. )),
  7587. vue.createElementVNode("view", { class: "number-box-view" }, [
  7588. vue.createElementVNode("view", { style: { "flex": "1" } }, "数量"),
  7589. vue.createElementVNode("view", { style: { "flex": "4", "text-align": "right" } }, [
  7590. vue.createVNode(_component_vk_data_input_number_box, {
  7591. modelValue: $data.selectNum,
  7592. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $data.selectNum = $event),
  7593. min: $props.minBuyNum || 1,
  7594. max: $options.maxBuyNumCom,
  7595. step: $props.stepBuyNum || 1,
  7596. "step-strictly": $props.stepStrictly,
  7597. "positive-integer": true,
  7598. onChange: $options.numChange
  7599. }, null, 8, ["modelValue", "min", "max", "step", "step-strictly", "onChange"])
  7600. ])
  7601. ])
  7602. ])
  7603. ]),
  7604. $props.showClose != false ? (vue.openBlock(), vue.createElementBlock("view", {
  7605. key: 0,
  7606. class: "close",
  7607. onClick: _cache[3] || (_cache[3] = ($event) => $options.close("close"))
  7608. }, [
  7609. vue.createElementVNode("image", {
  7610. class: "close-item",
  7611. src: $props.closeImage
  7612. }, null, 8, ["src"])
  7613. ])) : vue.createCommentVNode("v-if", true)
  7614. ]),
  7615. $data.outFoStock || $props.mode == 4 ? (vue.openBlock(), vue.createElementBlock("view", {
  7616. key: 0,
  7617. class: "btn-wrapper"
  7618. }, [
  7619. vue.createElementVNode(
  7620. "view",
  7621. {
  7622. class: "sure",
  7623. style: { "color": "#ffffff", "background-color": "#cccccc" }
  7624. },
  7625. vue.toDisplayString($props.noStockText),
  7626. 1
  7627. /* TEXT */
  7628. )
  7629. ])) : $props.mode == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  7630. key: 1,
  7631. class: "btn-wrapper"
  7632. }, [
  7633. vue.createElementVNode(
  7634. "view",
  7635. {
  7636. class: "sure add-cart",
  7637. style: vue.normalizeStyle([{ "border-radius": "38rpx 0rpx 0rpx 38rpx" }, {
  7638. color: $options.themeColorFn("addCartColor"),
  7639. backgroundColor: $options.themeColorFn("addCartBackgroundColor")
  7640. }]),
  7641. onClick: _cache[4] || (_cache[4] = (...args) => $options.addCart && $options.addCart(...args))
  7642. },
  7643. vue.toDisplayString($props.addCartText),
  7644. 5
  7645. /* TEXT, STYLE */
  7646. ),
  7647. vue.createElementVNode(
  7648. "view",
  7649. {
  7650. class: "sure",
  7651. style: vue.normalizeStyle([{ "border-radius": "0rpx 38rpx 38rpx 0rpx" }, {
  7652. color: $options.themeColorFn("buyNowColor"),
  7653. backgroundColor: $options.themeColorFn("buyNowBackgroundColor")
  7654. }]),
  7655. onClick: _cache[5] || (_cache[5] = (...args) => $options.buyNow && $options.buyNow(...args))
  7656. },
  7657. vue.toDisplayString($props.buyNowText),
  7658. 5
  7659. /* TEXT, STYLE */
  7660. )
  7661. ])) : $props.mode == 2 ? (vue.openBlock(), vue.createElementBlock("view", {
  7662. key: 2,
  7663. class: "btn-wrapper"
  7664. }, [
  7665. vue.createElementVNode(
  7666. "view",
  7667. {
  7668. class: "sure add-cart",
  7669. style: vue.normalizeStyle({
  7670. color: $options.themeColorFn("addCartColor"),
  7671. backgroundColor: $options.themeColorFn("addCartBackgroundColor")
  7672. }),
  7673. onClick: _cache[6] || (_cache[6] = (...args) => $options.addCart && $options.addCart(...args))
  7674. },
  7675. vue.toDisplayString($props.addCartText),
  7676. 5
  7677. /* TEXT, STYLE */
  7678. )
  7679. ])) : $props.mode == 3 ? (vue.openBlock(), vue.createElementBlock("view", {
  7680. key: 3,
  7681. class: "btn-wrapper"
  7682. }, [
  7683. vue.createElementVNode(
  7684. "view",
  7685. {
  7686. class: "sure",
  7687. style: vue.normalizeStyle({
  7688. color: $options.themeColorFn("buyNowColor"),
  7689. backgroundColor: $options.themeColorFn("buyNowBackgroundColor")
  7690. }),
  7691. onClick: _cache[7] || (_cache[7] = (...args) => $options.buyNow && $options.buyNow(...args))
  7692. },
  7693. vue.toDisplayString($props.buyNowText),
  7694. 5
  7695. /* TEXT, STYLE */
  7696. )
  7697. ])) : vue.createCommentVNode("v-if", true)
  7698. ],
  7699. 6
  7700. /* CLASS, STYLE */
  7701. ),
  7702. vue.createCommentVNode(" 页面内容结束 ")
  7703. ],
  7704. 34
  7705. /* CLASS, NEED_HYDRATION */
  7706. );
  7707. }
  7708. const __easycom_0$6 = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["render", _sfc_render$I], ["__scopeId", "data-v-d1e15e37"], ["__file", "E:/demo/hmrabbit/src/components/vk-data-goods-sku-popup/vk-data-goods-sku-popup.vue"]]);
  7709. class MPAnimation {
  7710. constructor(options, _this) {
  7711. this.options = options;
  7712. this.animation = uni.createAnimation(options);
  7713. this.currentStepAnimates = {};
  7714. this.next = 0;
  7715. this.$ = _this;
  7716. }
  7717. _nvuePushAnimates(type, args) {
  7718. let aniObj = this.currentStepAnimates[this.next];
  7719. let styles = {};
  7720. if (!aniObj) {
  7721. styles = {
  7722. styles: {},
  7723. config: {}
  7724. };
  7725. } else {
  7726. styles = aniObj;
  7727. }
  7728. if (animateTypes1.includes(type)) {
  7729. if (!styles.styles.transform) {
  7730. styles.styles.transform = "";
  7731. }
  7732. let unit = "";
  7733. if (type === "rotate") {
  7734. unit = "deg";
  7735. }
  7736. styles.styles.transform += `${type}(${args + unit}) `;
  7737. } else {
  7738. styles.styles[type] = `${args}`;
  7739. }
  7740. this.currentStepAnimates[this.next] = styles;
  7741. }
  7742. _animateRun(styles = {}, config = {}) {
  7743. let ref = this.$.$refs["ani"].ref;
  7744. if (!ref)
  7745. return;
  7746. return new Promise((resolve, reject) => {
  7747. nvueAnimation.transition(ref, {
  7748. styles,
  7749. ...config
  7750. }, (res) => {
  7751. resolve();
  7752. });
  7753. });
  7754. }
  7755. _nvueNextAnimate(animates, step = 0, fn) {
  7756. let obj = animates[step];
  7757. if (obj) {
  7758. let {
  7759. styles,
  7760. config
  7761. } = obj;
  7762. this._animateRun(styles, config).then(() => {
  7763. step += 1;
  7764. this._nvueNextAnimate(animates, step, fn);
  7765. });
  7766. } else {
  7767. this.currentStepAnimates = {};
  7768. typeof fn === "function" && fn();
  7769. this.isEnd = true;
  7770. }
  7771. }
  7772. step(config = {}) {
  7773. this.animation.step(config);
  7774. return this;
  7775. }
  7776. run(fn) {
  7777. this.$.animationData = this.animation.export();
  7778. this.$.timer = setTimeout(() => {
  7779. typeof fn === "function" && fn();
  7780. }, this.$.durationTime);
  7781. }
  7782. }
  7783. const animateTypes1 = [
  7784. "matrix",
  7785. "matrix3d",
  7786. "rotate",
  7787. "rotate3d",
  7788. "rotateX",
  7789. "rotateY",
  7790. "rotateZ",
  7791. "scale",
  7792. "scale3d",
  7793. "scaleX",
  7794. "scaleY",
  7795. "scaleZ",
  7796. "skew",
  7797. "skewX",
  7798. "skewY",
  7799. "translate",
  7800. "translate3d",
  7801. "translateX",
  7802. "translateY",
  7803. "translateZ"
  7804. ];
  7805. const animateTypes2 = ["opacity", "backgroundColor"];
  7806. const animateTypes3 = ["width", "height", "left", "right", "top", "bottom"];
  7807. animateTypes1.concat(animateTypes2, animateTypes3).forEach((type) => {
  7808. MPAnimation.prototype[type] = function(...args) {
  7809. this.animation[type](...args);
  7810. return this;
  7811. };
  7812. });
  7813. function createAnimation(option, _this) {
  7814. if (!_this)
  7815. return;
  7816. clearTimeout(_this.timer);
  7817. return new MPAnimation(option, _this);
  7818. }
  7819. const _sfc_main$I = {
  7820. name: "uniTransition",
  7821. emits: ["click", "change"],
  7822. props: {
  7823. show: {
  7824. type: Boolean,
  7825. default: false
  7826. },
  7827. modeClass: {
  7828. type: [Array, String],
  7829. default() {
  7830. return "fade";
  7831. }
  7832. },
  7833. duration: {
  7834. type: Number,
  7835. default: 300
  7836. },
  7837. styles: {
  7838. type: Object,
  7839. default() {
  7840. return {};
  7841. }
  7842. },
  7843. customClass: {
  7844. type: String,
  7845. default: ""
  7846. },
  7847. onceRender: {
  7848. type: Boolean,
  7849. default: false
  7850. }
  7851. },
  7852. data() {
  7853. return {
  7854. isShow: false,
  7855. transform: "",
  7856. opacity: 1,
  7857. animationData: {},
  7858. durationTime: 300,
  7859. config: {}
  7860. };
  7861. },
  7862. watch: {
  7863. show: {
  7864. handler(newVal) {
  7865. if (newVal) {
  7866. this.open();
  7867. } else {
  7868. if (this.isShow) {
  7869. this.close();
  7870. }
  7871. }
  7872. },
  7873. immediate: true
  7874. }
  7875. },
  7876. computed: {
  7877. // 生成样式数据
  7878. stylesObject() {
  7879. let styles = {
  7880. ...this.styles,
  7881. "transition-duration": this.duration / 1e3 + "s"
  7882. };
  7883. let transform = "";
  7884. for (let i2 in styles) {
  7885. let line = this.toLine(i2);
  7886. transform += line + ":" + styles[i2] + ";";
  7887. }
  7888. return transform;
  7889. },
  7890. // 初始化动画条件
  7891. transformStyles() {
  7892. return "transform:" + this.transform + ";opacity:" + this.opacity + ";" + this.stylesObject;
  7893. }
  7894. },
  7895. created() {
  7896. this.config = {
  7897. duration: this.duration,
  7898. timingFunction: "ease",
  7899. transformOrigin: "50% 50%",
  7900. delay: 0
  7901. };
  7902. this.durationTime = this.duration;
  7903. },
  7904. methods: {
  7905. /**
  7906. * ref 触发 初始化动画
  7907. */
  7908. init(obj = {}) {
  7909. if (obj.duration) {
  7910. this.durationTime = obj.duration;
  7911. }
  7912. this.animation = createAnimation(Object.assign(this.config, obj), this);
  7913. },
  7914. /**
  7915. * 点击组件触发回调
  7916. */
  7917. onClick() {
  7918. this.$emit("click", {
  7919. detail: this.isShow
  7920. });
  7921. },
  7922. /**
  7923. * ref 触发 动画分组
  7924. * @param {Object} obj
  7925. */
  7926. step(obj, config = {}) {
  7927. if (!this.animation)
  7928. return;
  7929. for (let i2 in obj) {
  7930. try {
  7931. if (typeof obj[i2] === "object") {
  7932. this.animation[i2](...obj[i2]);
  7933. } else {
  7934. this.animation[i2](obj[i2]);
  7935. }
  7936. } catch (e2) {
  7937. console.error(`方法 ${i2} 不存在`);
  7938. }
  7939. }
  7940. this.animation.step(config);
  7941. return this;
  7942. },
  7943. /**
  7944. * ref 触发 执行动画
  7945. */
  7946. run(fn) {
  7947. if (!this.animation)
  7948. return;
  7949. this.animation.run(fn);
  7950. },
  7951. // 开始过度动画
  7952. open() {
  7953. clearTimeout(this.timer);
  7954. this.transform = "";
  7955. this.isShow = true;
  7956. let { opacity, transform } = this.styleInit(false);
  7957. if (typeof opacity !== "undefined") {
  7958. this.opacity = opacity;
  7959. }
  7960. this.transform = transform;
  7961. this.$nextTick(() => {
  7962. this.timer = setTimeout(() => {
  7963. this.animation = createAnimation(this.config, this);
  7964. this.tranfromInit(false).step();
  7965. this.animation.run();
  7966. this.$emit("change", {
  7967. detail: this.isShow
  7968. });
  7969. }, 20);
  7970. });
  7971. },
  7972. // 关闭过度动画
  7973. close(type) {
  7974. if (!this.animation)
  7975. return;
  7976. this.tranfromInit(true).step().run(() => {
  7977. this.isShow = false;
  7978. this.animationData = null;
  7979. this.animation = null;
  7980. let { opacity, transform } = this.styleInit(false);
  7981. this.opacity = opacity || 1;
  7982. this.transform = transform;
  7983. this.$emit("change", {
  7984. detail: this.isShow
  7985. });
  7986. });
  7987. },
  7988. // 处理动画开始前的默认样式
  7989. styleInit(type) {
  7990. let styles = {
  7991. transform: ""
  7992. };
  7993. let buildStyle = (type2, mode) => {
  7994. if (mode === "fade") {
  7995. styles.opacity = this.animationType(type2)[mode];
  7996. } else {
  7997. styles.transform += this.animationType(type2)[mode] + " ";
  7998. }
  7999. };
  8000. if (typeof this.modeClass === "string") {
  8001. buildStyle(type, this.modeClass);
  8002. } else {
  8003. this.modeClass.forEach((mode) => {
  8004. buildStyle(type, mode);
  8005. });
  8006. }
  8007. return styles;
  8008. },
  8009. // 处理内置组合动画
  8010. tranfromInit(type) {
  8011. let buildTranfrom = (type2, mode) => {
  8012. let aniNum = null;
  8013. if (mode === "fade") {
  8014. aniNum = type2 ? 0 : 1;
  8015. } else {
  8016. aniNum = type2 ? "-100%" : "0";
  8017. if (mode === "zoom-in") {
  8018. aniNum = type2 ? 0.8 : 1;
  8019. }
  8020. if (mode === "zoom-out") {
  8021. aniNum = type2 ? 1.2 : 1;
  8022. }
  8023. if (mode === "slide-right") {
  8024. aniNum = type2 ? "100%" : "0";
  8025. }
  8026. if (mode === "slide-bottom") {
  8027. aniNum = type2 ? "100%" : "0";
  8028. }
  8029. }
  8030. this.animation[this.animationMode()[mode]](aniNum);
  8031. };
  8032. if (typeof this.modeClass === "string") {
  8033. buildTranfrom(type, this.modeClass);
  8034. } else {
  8035. this.modeClass.forEach((mode) => {
  8036. buildTranfrom(type, mode);
  8037. });
  8038. }
  8039. return this.animation;
  8040. },
  8041. animationType(type) {
  8042. return {
  8043. fade: type ? 1 : 0,
  8044. "slide-top": `translateY(${type ? "0" : "-100%"})`,
  8045. "slide-right": `translateX(${type ? "0" : "100%"})`,
  8046. "slide-bottom": `translateY(${type ? "0" : "100%"})`,
  8047. "slide-left": `translateX(${type ? "0" : "-100%"})`,
  8048. "zoom-in": `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
  8049. "zoom-out": `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
  8050. };
  8051. },
  8052. // 内置动画类型与实际动画对应字典
  8053. animationMode() {
  8054. return {
  8055. fade: "opacity",
  8056. "slide-top": "translateY",
  8057. "slide-right": "translateX",
  8058. "slide-bottom": "translateY",
  8059. "slide-left": "translateX",
  8060. "zoom-in": "scale",
  8061. "zoom-out": "scale"
  8062. };
  8063. },
  8064. // 驼峰转中横线
  8065. toLine(name) {
  8066. return name.replace(/([A-Z])/g, "-$1").toLowerCase();
  8067. }
  8068. }
  8069. };
  8070. function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) {
  8071. return $data.isShow || $props.onceRender ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
  8072. key: 0,
  8073. ref: "ani",
  8074. animation: $data.animationData,
  8075. class: vue.normalizeClass($props.customClass),
  8076. style: vue.normalizeStyle($options.transformStyles),
  8077. onClick: _cache[0] || (_cache[0] = (...args) => $options.onClick && $options.onClick(...args))
  8078. }, [
  8079. vue.renderSlot(_ctx.$slots, "default")
  8080. ], 14, ["animation"])), [
  8081. [vue.vShow, $data.isShow]
  8082. ]) : vue.createCommentVNode("v-if", true);
  8083. }
  8084. const __easycom_0$5 = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["render", _sfc_render$H], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-transition/uni-transition.vue"]]);
  8085. const _sfc_main$H = {
  8086. name: "uniPopup",
  8087. components: {},
  8088. emits: ["change", "maskClick"],
  8089. props: {
  8090. // 开启动画
  8091. animation: {
  8092. type: Boolean,
  8093. default: true
  8094. },
  8095. // 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
  8096. // message: 消息提示 ; dialog : 对话框
  8097. type: {
  8098. type: String,
  8099. default: "center"
  8100. },
  8101. // maskClick
  8102. isMaskClick: {
  8103. type: Boolean,
  8104. default: null
  8105. },
  8106. // TODO 2 个版本后废弃属性 ,使用 isMaskClick
  8107. maskClick: {
  8108. type: Boolean,
  8109. default: null
  8110. },
  8111. backgroundColor: {
  8112. type: String,
  8113. default: "none"
  8114. },
  8115. safeArea: {
  8116. type: Boolean,
  8117. default: true
  8118. },
  8119. maskBackgroundColor: {
  8120. type: String,
  8121. default: "rgba(0, 0, 0, 0.4)"
  8122. },
  8123. // 指定使用v-show指令,不重新渲染Pop组件
  8124. onceRender: {
  8125. type: Boolean,
  8126. default: false
  8127. }
  8128. },
  8129. watch: {
  8130. /**
  8131. * 监听type类型
  8132. */
  8133. type: {
  8134. handler: function(type) {
  8135. if (!this.config[type])
  8136. return;
  8137. this[this.config[type]](true);
  8138. },
  8139. immediate: true
  8140. },
  8141. isDesktop: {
  8142. handler: function(newVal) {
  8143. if (!this.config[newVal])
  8144. return;
  8145. this[this.config[this.type]](true);
  8146. },
  8147. immediate: true
  8148. },
  8149. /**
  8150. * 监听遮罩是否可点击
  8151. * @param {Object} val
  8152. */
  8153. maskClick: {
  8154. handler: function(val) {
  8155. this.mkclick = val;
  8156. },
  8157. immediate: true
  8158. },
  8159. isMaskClick: {
  8160. handler: function(val) {
  8161. this.mkclick = val;
  8162. },
  8163. immediate: true
  8164. },
  8165. // H5 下禁止底部滚动
  8166. showPopup(show) {
  8167. }
  8168. },
  8169. data() {
  8170. return {
  8171. duration: 300,
  8172. ani: [],
  8173. showPopup: false,
  8174. showTrans: false,
  8175. popupWidth: 0,
  8176. popupHeight: 0,
  8177. config: {
  8178. top: "top",
  8179. bottom: "bottom",
  8180. center: "center",
  8181. left: "left",
  8182. right: "right",
  8183. message: "top",
  8184. dialog: "center",
  8185. share: "bottom"
  8186. },
  8187. maskClass: {
  8188. position: "fixed",
  8189. bottom: 0,
  8190. top: 0,
  8191. left: 0,
  8192. right: 0,
  8193. backgroundColor: "rgba(0, 0, 0, 0.4)"
  8194. },
  8195. transClass: {
  8196. position: "fixed",
  8197. left: 0,
  8198. right: 0
  8199. },
  8200. maskShow: true,
  8201. mkclick: true,
  8202. popupstyle: this.isDesktop ? "fixforpc-top" : "top"
  8203. };
  8204. },
  8205. computed: {
  8206. isDesktop() {
  8207. return this.popupWidth >= 500 && this.popupHeight >= 500;
  8208. },
  8209. bg() {
  8210. if (this.backgroundColor === "" || this.backgroundColor === "none") {
  8211. return "transparent";
  8212. }
  8213. return this.backgroundColor;
  8214. }
  8215. },
  8216. mounted() {
  8217. const fixSize = () => {
  8218. const {
  8219. windowWidth,
  8220. windowHeight,
  8221. windowTop,
  8222. safeArea,
  8223. screenHeight,
  8224. safeAreaInsets
  8225. } = uni.getSystemInfoSync();
  8226. this.popupWidth = windowWidth;
  8227. this.popupHeight = windowHeight + (windowTop || 0);
  8228. if (safeArea && this.safeArea) {
  8229. this.safeAreaInsets = safeAreaInsets.bottom;
  8230. } else {
  8231. this.safeAreaInsets = 0;
  8232. }
  8233. };
  8234. fixSize();
  8235. },
  8236. // TODO vue3
  8237. unmounted() {
  8238. this.setH5Visible();
  8239. },
  8240. created() {
  8241. if (this.isMaskClick === null && this.maskClick === null) {
  8242. this.mkclick = true;
  8243. } else {
  8244. this.mkclick = this.isMaskClick !== null ? this.isMaskClick : this.maskClick;
  8245. }
  8246. if (this.animation) {
  8247. this.duration = 300;
  8248. } else {
  8249. this.duration = 0;
  8250. }
  8251. this.messageChild = null;
  8252. this.clearPropagation = false;
  8253. this.maskClass.backgroundColor = this.maskBackgroundColor;
  8254. },
  8255. methods: {
  8256. setH5Visible() {
  8257. },
  8258. /**
  8259. * 公用方法,不显示遮罩层
  8260. */
  8261. closeMask() {
  8262. this.maskShow = false;
  8263. },
  8264. /**
  8265. * 公用方法,遮罩层禁止点击
  8266. */
  8267. disableMask() {
  8268. this.mkclick = false;
  8269. },
  8270. // TODO nvue 取消冒泡
  8271. clear(e2) {
  8272. e2.stopPropagation();
  8273. this.clearPropagation = true;
  8274. },
  8275. open(direction) {
  8276. if (this.showPopup) {
  8277. clearTimeout(this.timer);
  8278. this.showPopup = false;
  8279. }
  8280. let innerType = ["top", "center", "bottom", "left", "right", "message", "dialog", "share"];
  8281. if (!(direction && innerType.indexOf(direction) !== -1)) {
  8282. direction = this.type;
  8283. }
  8284. if (!this.config[direction]) {
  8285. console.error("缺少类型:", direction);
  8286. return;
  8287. }
  8288. this[this.config[direction]]();
  8289. this.$emit("change", {
  8290. show: true,
  8291. type: direction
  8292. });
  8293. },
  8294. close(type) {
  8295. this.showTrans = false;
  8296. this.$emit("change", {
  8297. show: false,
  8298. type: this.type
  8299. });
  8300. clearTimeout(this.timer);
  8301. this.timer = setTimeout(() => {
  8302. this.showPopup = false;
  8303. }, 300);
  8304. },
  8305. // TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
  8306. touchstart() {
  8307. this.clearPropagation = false;
  8308. },
  8309. onTap() {
  8310. if (this.clearPropagation) {
  8311. this.clearPropagation = false;
  8312. return;
  8313. }
  8314. this.$emit("maskClick");
  8315. if (!this.mkclick)
  8316. return;
  8317. this.close();
  8318. },
  8319. /**
  8320. * 顶部弹出样式处理
  8321. */
  8322. top(type) {
  8323. this.popupstyle = this.isDesktop ? "fixforpc-top" : "top";
  8324. this.ani = ["slide-top"];
  8325. this.transClass = {
  8326. position: "fixed",
  8327. left: 0,
  8328. right: 0,
  8329. backgroundColor: this.bg
  8330. };
  8331. if (type)
  8332. return;
  8333. this.showPopup = true;
  8334. this.showTrans = true;
  8335. this.$nextTick(() => {
  8336. if (this.messageChild && this.type === "message") {
  8337. this.messageChild.timerClose();
  8338. }
  8339. });
  8340. },
  8341. /**
  8342. * 底部弹出样式处理
  8343. */
  8344. bottom(type) {
  8345. this.popupstyle = "bottom";
  8346. this.ani = ["slide-bottom"];
  8347. this.transClass = {
  8348. position: "fixed",
  8349. left: 0,
  8350. right: 0,
  8351. bottom: 0,
  8352. paddingBottom: this.safeAreaInsets + "px",
  8353. backgroundColor: this.bg
  8354. };
  8355. if (type)
  8356. return;
  8357. this.showPopup = true;
  8358. this.showTrans = true;
  8359. },
  8360. /**
  8361. * 中间弹出样式处理
  8362. */
  8363. center(type) {
  8364. this.popupstyle = "center";
  8365. this.ani = ["zoom-out", "fade"];
  8366. this.transClass = {
  8367. position: "fixed",
  8368. display: "flex",
  8369. flexDirection: "column",
  8370. bottom: 0,
  8371. left: 0,
  8372. right: 0,
  8373. top: 0,
  8374. justifyContent: "center",
  8375. alignItems: "center"
  8376. };
  8377. if (type)
  8378. return;
  8379. this.showPopup = true;
  8380. this.showTrans = true;
  8381. },
  8382. left(type) {
  8383. this.popupstyle = "left";
  8384. this.ani = ["slide-left"];
  8385. this.transClass = {
  8386. position: "fixed",
  8387. left: 0,
  8388. bottom: 0,
  8389. top: 0,
  8390. backgroundColor: this.bg,
  8391. display: "flex",
  8392. flexDirection: "column"
  8393. };
  8394. if (type)
  8395. return;
  8396. this.showPopup = true;
  8397. this.showTrans = true;
  8398. },
  8399. right(type) {
  8400. this.popupstyle = "right";
  8401. this.ani = ["slide-right"];
  8402. this.transClass = {
  8403. position: "fixed",
  8404. bottom: 0,
  8405. right: 0,
  8406. top: 0,
  8407. backgroundColor: this.bg,
  8408. display: "flex",
  8409. flexDirection: "column"
  8410. };
  8411. if (type)
  8412. return;
  8413. this.showPopup = true;
  8414. this.showTrans = true;
  8415. }
  8416. }
  8417. };
  8418. function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
  8419. const _component_uni_transition = resolveEasycom(vue.resolveDynamicComponent("uni-transition"), __easycom_0$5);
  8420. return $data.showPopup || $props.onceRender ? vue.withDirectives((vue.openBlock(), vue.createElementBlock(
  8421. "view",
  8422. {
  8423. key: 0,
  8424. class: vue.normalizeClass(["uni-popup", [$data.popupstyle, $options.isDesktop ? "fixforpc-z-index" : ""]])
  8425. },
  8426. [
  8427. vue.createElementVNode(
  8428. "view",
  8429. {
  8430. onTouchstart: _cache[1] || (_cache[1] = (...args) => $options.touchstart && $options.touchstart(...args))
  8431. },
  8432. [
  8433. $data.maskShow ? (vue.openBlock(), vue.createBlock(_component_uni_transition, {
  8434. key: "1",
  8435. name: "mask",
  8436. "mode-class": "fade",
  8437. styles: $data.maskClass,
  8438. duration: $data.duration,
  8439. show: $data.showTrans,
  8440. onClick: $options.onTap
  8441. }, null, 8, ["styles", "duration", "show", "onClick"])) : vue.createCommentVNode("v-if", true),
  8442. vue.createVNode(_component_uni_transition, {
  8443. key: "2",
  8444. "mode-class": $data.ani,
  8445. name: "content",
  8446. styles: $data.transClass,
  8447. duration: $data.duration,
  8448. show: $data.showTrans,
  8449. onClick: $options.onTap,
  8450. "once-render": $props.onceRender
  8451. }, {
  8452. default: vue.withCtx(() => [
  8453. vue.createElementVNode(
  8454. "view",
  8455. {
  8456. class: vue.normalizeClass(["uni-popup__wrapper", [$data.popupstyle]]),
  8457. style: vue.normalizeStyle({ backgroundColor: $options.bg }),
  8458. onClick: _cache[0] || (_cache[0] = (...args) => $options.clear && $options.clear(...args))
  8459. },
  8460. [
  8461. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  8462. ],
  8463. 6
  8464. /* CLASS, STYLE */
  8465. )
  8466. ]),
  8467. _: 3
  8468. /* FORWARDED */
  8469. }, 8, ["mode-class", "styles", "duration", "show", "onClick", "once-render"])
  8470. ],
  8471. 32
  8472. /* NEED_HYDRATION */
  8473. )
  8474. ],
  8475. 2
  8476. /* CLASS */
  8477. )), [
  8478. [vue.vShow, $data.showPopup]
  8479. ]) : vue.createCommentVNode("v-if", true);
  8480. }
  8481. const __easycom_2 = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["render", _sfc_render$G], ["__scopeId", "data-v-7db519c7"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-popup/uni-popup.vue"]]);
  8482. const getGoodsByIdAPI = (id) => {
  8483. return http({
  8484. method: "GET",
  8485. url: "/goods",
  8486. data: { id }
  8487. });
  8488. };
  8489. const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
  8490. __name: "AddressPanel",
  8491. setup(__props, { expose: __expose }) {
  8492. __expose();
  8493. const __returned__ = {};
  8494. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  8495. return __returned__;
  8496. }
  8497. });
  8498. function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
  8499. return vue.openBlock(), vue.createElementBlock("view", { class: "address-panel" }, [
  8500. vue.createCommentVNode(" 关闭按钮 "),
  8501. vue.createElementVNode("text", { class: "close icon-close" }),
  8502. vue.createCommentVNode(" 标题 "),
  8503. vue.createElementVNode("view", { class: "title" }, "配送至"),
  8504. vue.createCommentVNode(" 内容 "),
  8505. vue.createElementVNode("view", { class: "content" }, [
  8506. vue.createElementVNode("view", { class: "item" }, [
  8507. vue.createElementVNode("view", { class: "user" }, "李明 13824686868"),
  8508. vue.createElementVNode("view", { class: "address" }, "北京市顺义区后沙峪地区安平北街6号院"),
  8509. vue.createElementVNode("text", { class: "icon icon-checked" })
  8510. ]),
  8511. vue.createElementVNode("view", { class: "item" }, [
  8512. vue.createElementVNode("view", { class: "user" }, "王东 13824686868"),
  8513. vue.createElementVNode("view", { class: "address" }, "北京市顺义区后沙峪地区安平北街6号院"),
  8514. vue.createElementVNode("text", { class: "icon icon-ring" })
  8515. ]),
  8516. vue.createElementVNode("view", { class: "item" }, [
  8517. vue.createElementVNode("view", { class: "user" }, "张三 13824686868"),
  8518. vue.createElementVNode("view", { class: "address" }, "北京市朝阳区孙河安平北街6号院"),
  8519. vue.createElementVNode("text", { class: "icon icon-ring" })
  8520. ])
  8521. ]),
  8522. vue.createElementVNode("view", { class: "footer" }, [
  8523. vue.createElementVNode("view", { class: "button primary" }, " 新建地址 "),
  8524. vue.createCommentVNode("v-if", true)
  8525. ])
  8526. ]);
  8527. }
  8528. const AddressPanel = /* @__PURE__ */ _export_sfc(_sfc_main$G, [["render", _sfc_render$F], ["__scopeId", "data-v-4157c245"], ["__file", "E:/demo/hmrabbit/src/pages/goods/components/AddressPanel.vue"]]);
  8529. const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
  8530. __name: "ServicePanel",
  8531. emits: ["close"],
  8532. setup(__props, { expose: __expose, emit: __emit }) {
  8533. __expose();
  8534. const emit = __emit;
  8535. const __returned__ = { emit };
  8536. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  8537. return __returned__;
  8538. }
  8539. });
  8540. function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) {
  8541. return vue.openBlock(), vue.createElementBlock("view", { class: "service-panel" }, [
  8542. vue.createCommentVNode(" 关闭按钮 "),
  8543. vue.createElementVNode("text", {
  8544. class: "close icon-close",
  8545. onClick: _cache[0] || (_cache[0] = ($event) => $setup.emit("close"))
  8546. }),
  8547. vue.createCommentVNode(" 标题 "),
  8548. vue.createElementVNode("view", { class: "title" }, "服务说明"),
  8549. vue.createCommentVNode(" 内容 "),
  8550. vue.createElementVNode("view", { class: "content" }, [
  8551. vue.createElementVNode("view", { class: "item" }, [
  8552. vue.createElementVNode("view", { class: "dt" }, "无忧退货"),
  8553. vue.createElementVNode("view", { class: "dd" }, " 自收到商品之日起30天内,可在线申请无忧退货服务(食品等特殊商品除外) ")
  8554. ]),
  8555. vue.createElementVNode("view", { class: "item" }, [
  8556. vue.createElementVNode("view", { class: "dt" }, "快速退款"),
  8557. vue.createElementVNode("view", { class: "dd" }, " 收到退货包裹并确认无误后,将在48小时内办理退款, 退款将原路返回,不同银行处理时间不同,预计1-5个工作日到账 ")
  8558. ]),
  8559. vue.createElementVNode("view", { class: "item" }, [
  8560. vue.createElementVNode("view", { class: "dt" }, "满88元免邮费"),
  8561. vue.createElementVNode("view", { class: "dd" }, " 单笔订单金额(不含运费)满88元可免邮费,不满88元, 单笔订单收取10元邮费 ")
  8562. ])
  8563. ])
  8564. ]);
  8565. }
  8566. const ServicePanel = /* @__PURE__ */ _export_sfc(_sfc_main$F, [["render", _sfc_render$E], ["__scopeId", "data-v-7a45ec41"], ["__file", "E:/demo/hmrabbit/src/pages/goods/components/ServicePanel.vue"]]);
  8567. var SkuMode = /* @__PURE__ */ ((SkuMode2) => {
  8568. SkuMode2[SkuMode2["Both"] = 1] = "Both";
  8569. SkuMode2[SkuMode2["Cart"] = 2] = "Cart";
  8570. SkuMode2[SkuMode2["Buy"] = 3] = "Buy";
  8571. return SkuMode2;
  8572. })(SkuMode || {});
  8573. const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
  8574. __name: "goods",
  8575. props: {
  8576. id: { type: String, required: true }
  8577. },
  8578. setup(__props, { expose: __expose }) {
  8579. __expose();
  8580. const { safeAreaInsets } = uni.getSystemInfoSync();
  8581. const query = __props;
  8582. const goods2 = vue.ref();
  8583. const getGoodsByIdData = async () => {
  8584. const res = await getGoodsByIdAPI(query.id);
  8585. goods2.value = res.result;
  8586. localdata.value = {
  8587. _id: res.result.id,
  8588. name: res.result.name,
  8589. goods_thumb: res.result.mainPictures[0],
  8590. spec_list: res.result.specs.map((v2) => {
  8591. return {
  8592. name: v2.name,
  8593. list: v2.values
  8594. };
  8595. }),
  8596. sku_list: res.result.skus.map((v2) => {
  8597. return {
  8598. _id: v2.id,
  8599. goods_id: res.result.id,
  8600. goods_name: res.result.name,
  8601. image: v2.picture,
  8602. price: v2.price * 100,
  8603. // 注意:需要乘以 100
  8604. stock: v2.inventory,
  8605. sku_name_arr: v2.specs.map((vv) => vv.valueName)
  8606. };
  8607. })
  8608. };
  8609. };
  8610. onLoad(() => {
  8611. getGoodsByIdData();
  8612. });
  8613. const currentIndex = vue.ref(0);
  8614. const onChange = (ev) => {
  8615. currentIndex.value = ev.detail.current;
  8616. };
  8617. const onTapImage = (url) => {
  8618. uni.previewImage({
  8619. current: url,
  8620. urls: goods2.value.mainPictures
  8621. });
  8622. };
  8623. const popup2 = vue.ref();
  8624. const popupName = vue.ref();
  8625. const openPopup = (name) => {
  8626. var _a;
  8627. popupName.value = name;
  8628. (_a = popup2.value) == null ? void 0 : _a.open();
  8629. };
  8630. const isShowSku = vue.ref(false);
  8631. const localdata = vue.ref({});
  8632. const mode = vue.ref(
  8633. 2
  8634. /* Cart */
  8635. );
  8636. const openSkuPopup = (val) => {
  8637. isShowSku.value = true;
  8638. mode.value = val;
  8639. };
  8640. const skuPopupRef = vue.ref();
  8641. const selectArrText = vue.computed(() => {
  8642. var _a, _b;
  8643. return ((_b = (_a = skuPopupRef.value) == null ? void 0 : _a.selectArr) == null ? void 0 : _b.join(" ").trim()) || "请选择商品规格";
  8644. });
  8645. const onAddCart = async (ev) => {
  8646. await postMemberCartAPI({ skuId: ev._id, count: ev.buy_num });
  8647. uni.showToast({ title: "添加成功" });
  8648. isShowSku.value = false;
  8649. };
  8650. const onBuyNow = (ev) => {
  8651. uni.navigateTo({ url: `/pagesOrder/create/create?skuId=${ev._id}&count=${ev.buy_num}` });
  8652. };
  8653. const __returned__ = { safeAreaInsets, query, goods: goods2, getGoodsByIdData, currentIndex, onChange, onTapImage, popup: popup2, popupName, openPopup, isShowSku, localdata, SkuMode, mode, openSkuPopup, skuPopupRef, selectArrText, onAddCart, onBuyNow, AddressPanel, ServicePanel };
  8654. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  8655. return __returned__;
  8656. }
  8657. });
  8658. function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) {
  8659. var _a, _b, _c, _d, _e2, _f, _g, _h, _i;
  8660. const _component_vk_data_goods_sku_popup = resolveEasycom(vue.resolveDynamicComponent("vk-data-goods-sku-popup"), __easycom_0$6);
  8661. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  8662. return vue.openBlock(), vue.createElementBlock(
  8663. vue.Fragment,
  8664. null,
  8665. [
  8666. vue.createCommentVNode(" SKU弹窗组件 "),
  8667. vue.createVNode(_component_vk_data_goods_sku_popup, {
  8668. modelValue: $setup.isShowSku,
  8669. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.isShowSku = $event),
  8670. localdata: $setup.localdata,
  8671. mode: $setup.mode,
  8672. "add-cart-background-color": "#FFA868",
  8673. "buy-now-background-color": "#27BA9B",
  8674. ref: "skuPopupRef",
  8675. "actived-style": {
  8676. color: "#27BA9B",
  8677. borderColor: "#27BA9B",
  8678. backgroundColor: "#E9F8F5"
  8679. },
  8680. onAddCart: $setup.onAddCart,
  8681. onBuyNow: $setup.onBuyNow
  8682. }, null, 8, ["modelValue", "localdata", "mode"]),
  8683. vue.createElementVNode("scroll-view", {
  8684. "enable-back-to-top": "",
  8685. "scroll-y": "",
  8686. class: "viewport"
  8687. }, [
  8688. vue.createCommentVNode(" 基本信息 "),
  8689. vue.createElementVNode("view", { class: "goods" }, [
  8690. vue.createCommentVNode(" 商品主图 "),
  8691. vue.createElementVNode("view", { class: "preview" }, [
  8692. vue.createElementVNode(
  8693. "swiper",
  8694. {
  8695. onChange: $setup.onChange,
  8696. circular: ""
  8697. },
  8698. [
  8699. (vue.openBlock(true), vue.createElementBlock(
  8700. vue.Fragment,
  8701. null,
  8702. vue.renderList((_a = $setup.goods) == null ? void 0 : _a.mainPictures, (item) => {
  8703. return vue.openBlock(), vue.createElementBlock("swiper-item", { key: item }, [
  8704. vue.createElementVNode("image", {
  8705. class: "image",
  8706. onClick: ($event) => $setup.onTapImage(item),
  8707. mode: "aspectFill",
  8708. src: item
  8709. }, null, 8, ["onClick", "src"])
  8710. ]);
  8711. }),
  8712. 128
  8713. /* KEYED_FRAGMENT */
  8714. ))
  8715. ],
  8716. 32
  8717. /* NEED_HYDRATION */
  8718. ),
  8719. vue.createElementVNode("view", { class: "indicator" }, [
  8720. vue.createElementVNode(
  8721. "text",
  8722. { class: "current" },
  8723. vue.toDisplayString($setup.currentIndex + 1),
  8724. 1
  8725. /* TEXT */
  8726. ),
  8727. vue.createElementVNode("text", { class: "split" }, "/"),
  8728. vue.createElementVNode(
  8729. "text",
  8730. { class: "total" },
  8731. vue.toDisplayString((_b = $setup.goods) == null ? void 0 : _b.mainPictures.length),
  8732. 1
  8733. /* TEXT */
  8734. )
  8735. ])
  8736. ]),
  8737. vue.createCommentVNode(" 商品简介 "),
  8738. vue.createElementVNode("view", { class: "meta" }, [
  8739. vue.createElementVNode("view", { class: "price" }, [
  8740. vue.createElementVNode("text", { class: "symbol" }, "¥"),
  8741. vue.createElementVNode(
  8742. "text",
  8743. { class: "number" },
  8744. vue.toDisplayString((_c = $setup.goods) == null ? void 0 : _c.price),
  8745. 1
  8746. /* TEXT */
  8747. )
  8748. ]),
  8749. vue.createElementVNode(
  8750. "view",
  8751. { class: "name ellipsis" },
  8752. vue.toDisplayString((_d = $setup.goods) == null ? void 0 : _d.name),
  8753. 1
  8754. /* TEXT */
  8755. ),
  8756. vue.createElementVNode(
  8757. "view",
  8758. { class: "desc" },
  8759. vue.toDisplayString((_e2 = $setup.goods) == null ? void 0 : _e2.desc),
  8760. 1
  8761. /* TEXT */
  8762. )
  8763. ]),
  8764. vue.createCommentVNode(" 操作面板 "),
  8765. vue.createElementVNode("view", { class: "action" }, [
  8766. vue.createElementVNode("view", {
  8767. onClick: _cache[1] || (_cache[1] = ($event) => $setup.openSkuPopup($setup.SkuMode.Both)),
  8768. class: "item arrow"
  8769. }, [
  8770. vue.createElementVNode("text", { class: "label" }, "选择"),
  8771. vue.createElementVNode(
  8772. "text",
  8773. { class: "text ellipsis" },
  8774. vue.toDisplayString($setup.selectArrText),
  8775. 1
  8776. /* TEXT */
  8777. )
  8778. ]),
  8779. vue.createElementVNode("view", {
  8780. onClick: _cache[2] || (_cache[2] = ($event) => $setup.openPopup("address")),
  8781. class: "item arrow"
  8782. }, [
  8783. vue.createElementVNode("text", { class: "label" }, "送至"),
  8784. vue.createElementVNode("text", { class: "text ellipsis" }, " 请选择收获地址 ")
  8785. ]),
  8786. vue.createElementVNode("view", {
  8787. onClick: _cache[3] || (_cache[3] = ($event) => $setup.openPopup("service")),
  8788. class: "item arrow"
  8789. }, [
  8790. vue.createElementVNode("text", { class: "label" }, "服务"),
  8791. vue.createElementVNode("text", { class: "text ellipsis" }, " 无忧退 快速退款 免费包邮 ")
  8792. ])
  8793. ])
  8794. ]),
  8795. vue.createCommentVNode(" 商品详情 "),
  8796. vue.createElementVNode("view", { class: "detail panel" }, [
  8797. vue.createElementVNode("view", { class: "title" }, [
  8798. vue.createElementVNode("text", null, "详情")
  8799. ]),
  8800. vue.createElementVNode("view", { class: "content" }, [
  8801. vue.createElementVNode("view", { class: "properties" }, [
  8802. vue.createCommentVNode(" 属性详情 "),
  8803. (vue.openBlock(true), vue.createElementBlock(
  8804. vue.Fragment,
  8805. null,
  8806. vue.renderList((_f = $setup.goods) == null ? void 0 : _f.details.properties, (item) => {
  8807. return vue.openBlock(), vue.createElementBlock("view", {
  8808. class: "item",
  8809. key: item.name
  8810. }, [
  8811. vue.createElementVNode(
  8812. "text",
  8813. { class: "label" },
  8814. vue.toDisplayString(item.name),
  8815. 1
  8816. /* TEXT */
  8817. ),
  8818. vue.createElementVNode(
  8819. "text",
  8820. { class: "value" },
  8821. vue.toDisplayString(item.value),
  8822. 1
  8823. /* TEXT */
  8824. )
  8825. ]);
  8826. }),
  8827. 128
  8828. /* KEYED_FRAGMENT */
  8829. ))
  8830. ]),
  8831. vue.createCommentVNode(" 图片详情 "),
  8832. (vue.openBlock(true), vue.createElementBlock(
  8833. vue.Fragment,
  8834. null,
  8835. vue.renderList((_g = $setup.goods) == null ? void 0 : _g.details.pictures, (item) => {
  8836. return vue.openBlock(), vue.createElementBlock("image", {
  8837. class: "image",
  8838. key: item,
  8839. mode: "widthFix",
  8840. src: item
  8841. }, null, 8, ["src"]);
  8842. }),
  8843. 128
  8844. /* KEYED_FRAGMENT */
  8845. ))
  8846. ])
  8847. ]),
  8848. vue.createCommentVNode(" 同类推荐 "),
  8849. vue.createElementVNode("view", { class: "similar panel" }, [
  8850. vue.createElementVNode("view", { class: "title" }, [
  8851. vue.createElementVNode("text", null, "同类推荐")
  8852. ]),
  8853. vue.createElementVNode("view", { class: "content" }, [
  8854. (vue.openBlock(true), vue.createElementBlock(
  8855. vue.Fragment,
  8856. null,
  8857. vue.renderList((_h = $setup.goods) == null ? void 0 : _h.similarProducts, (item) => {
  8858. return vue.openBlock(), vue.createElementBlock("navigator", {
  8859. key: item.id,
  8860. class: "goods",
  8861. "hover-class": "none",
  8862. url: `/pages/goods/goods?id=${item.id}`
  8863. }, [
  8864. vue.createElementVNode("image", {
  8865. class: "image",
  8866. mode: "aspectFill",
  8867. src: item.picture
  8868. }, null, 8, ["src"]),
  8869. vue.createElementVNode(
  8870. "view",
  8871. { class: "name ellipsis" },
  8872. vue.toDisplayString(item.name),
  8873. 1
  8874. /* TEXT */
  8875. ),
  8876. vue.createElementVNode("view", { class: "price" }, [
  8877. vue.createElementVNode("text", { class: "symbol" }, "¥"),
  8878. vue.createElementVNode(
  8879. "text",
  8880. { class: "number" },
  8881. vue.toDisplayString(item.price),
  8882. 1
  8883. /* TEXT */
  8884. )
  8885. ])
  8886. ], 8, ["url"]);
  8887. }),
  8888. 128
  8889. /* KEYED_FRAGMENT */
  8890. ))
  8891. ])
  8892. ])
  8893. ]),
  8894. vue.createCommentVNode(" 用户操作 "),
  8895. $setup.goods ? (vue.openBlock(), vue.createElementBlock(
  8896. "view",
  8897. {
  8898. key: 0,
  8899. class: "toolbar",
  8900. style: vue.normalizeStyle({ paddingBottom: ((_i = $setup.safeAreaInsets) == null ? void 0 : _i.bottom) + "px" })
  8901. },
  8902. [
  8903. vue.createElementVNode("view", { class: "icons" }, [
  8904. vue.createElementVNode("button", { class: "icons-button" }, [
  8905. vue.createElementVNode("text", { class: "icon-heart" }),
  8906. vue.createTextVNode("收藏")
  8907. ]),
  8908. vue.createElementVNode("navigator", {
  8909. class: "icons-button",
  8910. url: "/pages/cart/cart2",
  8911. "open-type": "navigate"
  8912. }, [
  8913. vue.createElementVNode("text", { class: "icon-cart" }),
  8914. vue.createTextVNode("购物车 ")
  8915. ])
  8916. ]),
  8917. vue.createElementVNode("view", { class: "buttons" }, [
  8918. vue.createElementVNode("view", {
  8919. onClick: _cache[4] || (_cache[4] = ($event) => $setup.openSkuPopup($setup.SkuMode.Cart)),
  8920. class: "addcart"
  8921. }, " 加入购物车 "),
  8922. vue.createElementVNode("view", {
  8923. onClick: _cache[5] || (_cache[5] = ($event) => $setup.openSkuPopup($setup.SkuMode.Buy)),
  8924. class: "payment"
  8925. }, " 立即购买 ")
  8926. ])
  8927. ],
  8928. 4
  8929. /* STYLE */
  8930. )) : vue.createCommentVNode("v-if", true),
  8931. vue.createCommentVNode(" uni-ui 弹出层 "),
  8932. vue.createVNode(
  8933. _component_uni_popup,
  8934. {
  8935. ref: "popup",
  8936. type: "bottom",
  8937. "background-color": "#fff"
  8938. },
  8939. {
  8940. default: vue.withCtx(() => [
  8941. $setup.popupName === "address" ? (vue.openBlock(), vue.createBlock($setup["AddressPanel"], {
  8942. key: 0,
  8943. onClose: _cache[6] || (_cache[6] = ($event) => {
  8944. var _a2;
  8945. return (_a2 = $setup.popup) == null ? void 0 : _a2.close();
  8946. })
  8947. })) : vue.createCommentVNode("v-if", true),
  8948. $setup.popupName === "service" ? (vue.openBlock(), vue.createBlock($setup["ServicePanel"], {
  8949. key: 1,
  8950. onClose: _cache[7] || (_cache[7] = ($event) => {
  8951. var _a2;
  8952. return (_a2 = $setup.popup) == null ? void 0 : _a2.close();
  8953. })
  8954. })) : vue.createCommentVNode("v-if", true)
  8955. ]),
  8956. _: 1
  8957. /* STABLE */
  8958. },
  8959. 512
  8960. /* NEED_PATCH */
  8961. )
  8962. ],
  8963. 64
  8964. /* STABLE_FRAGMENT */
  8965. );
  8966. }
  8967. const PagesGoodsGoods = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["render", _sfc_render$D], ["__file", "E:/demo/hmrabbit/src/pages/goods/goods.vue"]]);
  8968. const _sfc_main$D = {
  8969. name: "uniFormsItem",
  8970. options: {
  8971. virtualHost: true
  8972. },
  8973. provide() {
  8974. return {
  8975. uniFormItem: this
  8976. };
  8977. },
  8978. inject: {
  8979. form: {
  8980. from: "uniForm",
  8981. default: null
  8982. }
  8983. },
  8984. props: {
  8985. // 表单校验规则
  8986. rules: {
  8987. type: Array,
  8988. default() {
  8989. return null;
  8990. }
  8991. },
  8992. // 表单域的属性名,在使用校验规则时必填
  8993. name: {
  8994. type: [String, Array],
  8995. default: ""
  8996. },
  8997. required: {
  8998. type: Boolean,
  8999. default: false
  9000. },
  9001. label: {
  9002. type: String,
  9003. default: ""
  9004. },
  9005. // label的宽度 ,默认 80
  9006. labelWidth: {
  9007. type: [String, Number],
  9008. default: ""
  9009. },
  9010. // label 居中方式,默认 left 取值 left/center/right
  9011. labelAlign: {
  9012. type: String,
  9013. default: ""
  9014. },
  9015. // 强制显示错误信息
  9016. errorMessage: {
  9017. type: [String, Boolean],
  9018. default: ""
  9019. },
  9020. // 1.4.0 弃用,统一使用 form 的校验时机
  9021. // validateTrigger: {
  9022. // type: String,
  9023. // default: ''
  9024. // },
  9025. // 1.4.0 弃用,统一使用 form 的label 位置
  9026. // labelPosition: {
  9027. // type: String,
  9028. // default: ''
  9029. // },
  9030. // 1.4.0 以下属性已经废弃,请使用 #label 插槽代替
  9031. leftIcon: String,
  9032. iconColor: {
  9033. type: String,
  9034. default: "#606266"
  9035. }
  9036. },
  9037. data() {
  9038. return {
  9039. errMsg: "",
  9040. isRequired: false,
  9041. userRules: null,
  9042. localLabelAlign: "left",
  9043. localLabelWidth: "65px",
  9044. localLabelPos: "left",
  9045. border: false,
  9046. isFirstBorder: false
  9047. };
  9048. },
  9049. computed: {
  9050. // 处理错误信息
  9051. msg() {
  9052. return this.errorMessage || this.errMsg;
  9053. }
  9054. },
  9055. watch: {
  9056. // 规则发生变化通知子组件更新
  9057. "form.formRules"(val) {
  9058. this.init();
  9059. },
  9060. "form.labelWidth"(val) {
  9061. this.localLabelWidth = this._labelWidthUnit(val);
  9062. },
  9063. "form.labelPosition"(val) {
  9064. this.localLabelPos = this._labelPosition();
  9065. },
  9066. "form.labelAlign"(val) {
  9067. }
  9068. },
  9069. created() {
  9070. this.init(true);
  9071. if (this.name && this.form) {
  9072. this.$watch(
  9073. () => {
  9074. const val = this.form._getDataValue(this.name, this.form.localData);
  9075. return val;
  9076. },
  9077. (value, oldVal) => {
  9078. const isEqual2 = this.form._isEqual(value, oldVal);
  9079. if (!isEqual2) {
  9080. const val = this.itemSetValue(value);
  9081. this.onFieldChange(val, false);
  9082. }
  9083. },
  9084. {
  9085. immediate: false
  9086. }
  9087. );
  9088. }
  9089. },
  9090. unmounted() {
  9091. this.__isUnmounted = true;
  9092. this.unInit();
  9093. },
  9094. methods: {
  9095. /**
  9096. * 外部调用方法
  9097. * 设置规则 ,主要用于小程序自定义检验规则
  9098. * @param {Array} rules 规则源数据
  9099. */
  9100. setRules(rules = null) {
  9101. this.userRules = rules;
  9102. this.init(false);
  9103. },
  9104. // 兼容老版本表单组件
  9105. setValue() {
  9106. },
  9107. /**
  9108. * 外部调用方法
  9109. * 校验数据
  9110. * @param {any} value 需要校验的数据
  9111. * @param {boolean} 是否立即校验
  9112. * @return {Array|null} 校验内容
  9113. */
  9114. async onFieldChange(value, formtrigger = true) {
  9115. const {
  9116. formData,
  9117. localData,
  9118. errShowType,
  9119. validateCheck,
  9120. validateTrigger,
  9121. _isRequiredField,
  9122. _realName
  9123. } = this.form;
  9124. const name = _realName(this.name);
  9125. if (!value) {
  9126. value = this.form.formData[name];
  9127. }
  9128. const ruleLen = this.itemRules.rules && this.itemRules.rules.length;
  9129. if (!this.validator || !ruleLen || ruleLen === 0)
  9130. return;
  9131. const isRequiredField2 = _isRequiredField(this.itemRules.rules || []);
  9132. let result = null;
  9133. if (validateTrigger === "bind" || formtrigger) {
  9134. result = await this.validator.validateUpdate(
  9135. {
  9136. [name]: value
  9137. },
  9138. formData
  9139. );
  9140. if (!isRequiredField2 && (value === void 0 || value === "")) {
  9141. result = null;
  9142. }
  9143. if (result && result.errorMessage) {
  9144. if (errShowType === "undertext") {
  9145. this.errMsg = !result ? "" : result.errorMessage;
  9146. }
  9147. if (errShowType === "toast") {
  9148. uni.showToast({
  9149. title: result.errorMessage || "校验错误",
  9150. icon: "none"
  9151. });
  9152. }
  9153. if (errShowType === "modal") {
  9154. uni.showModal({
  9155. title: "提示",
  9156. content: result.errorMessage || "校验错误"
  9157. });
  9158. }
  9159. } else {
  9160. this.errMsg = "";
  9161. }
  9162. validateCheck(result ? result : null);
  9163. } else {
  9164. this.errMsg = "";
  9165. }
  9166. return result ? result : null;
  9167. },
  9168. /**
  9169. * 初始组件数据
  9170. */
  9171. init(type = false) {
  9172. const {
  9173. validator,
  9174. formRules,
  9175. childrens,
  9176. formData,
  9177. localData,
  9178. _realName,
  9179. labelWidth,
  9180. _getDataValue,
  9181. _setDataValue
  9182. } = this.form || {};
  9183. this.localLabelAlign = this._justifyContent();
  9184. this.localLabelWidth = this._labelWidthUnit(labelWidth);
  9185. this.localLabelPos = this._labelPosition();
  9186. this.isRequired = this.required;
  9187. this.form && type && childrens.push(this);
  9188. if (!validator || !formRules)
  9189. return;
  9190. if (!this.form.isFirstBorder) {
  9191. this.form.isFirstBorder = true;
  9192. this.isFirstBorder = true;
  9193. }
  9194. if (this.group) {
  9195. if (!this.group.isFirstBorder) {
  9196. this.group.isFirstBorder = true;
  9197. this.isFirstBorder = true;
  9198. }
  9199. }
  9200. this.border = this.form.border;
  9201. const name = _realName(this.name);
  9202. const itemRule = this.userRules || this.rules;
  9203. if (typeof formRules === "object" && itemRule) {
  9204. formRules[name] = {
  9205. rules: itemRule
  9206. };
  9207. validator.updateSchema(formRules);
  9208. }
  9209. const itemRules = formRules[name] || {};
  9210. this.itemRules = itemRules;
  9211. this.validator = validator;
  9212. this.itemSetValue(_getDataValue(this.name, localData));
  9213. this.isRequired = this._isRequired();
  9214. },
  9215. unInit() {
  9216. if (this.form) {
  9217. const {
  9218. childrens,
  9219. formData,
  9220. _realName
  9221. } = this.form;
  9222. childrens.forEach((item, index) => {
  9223. if (item === this) {
  9224. this.form.childrens.splice(index, 1);
  9225. delete formData[_realName(item.name)];
  9226. }
  9227. });
  9228. }
  9229. },
  9230. // 设置item 的值
  9231. itemSetValue(value) {
  9232. const name = this.form._realName(this.name);
  9233. const rules = this.itemRules.rules || [];
  9234. const val = this.form._getValue(name, value, rules);
  9235. this.form._setDataValue(name, this.form.formData, val);
  9236. return val;
  9237. },
  9238. /**
  9239. * 移除该表单项的校验结果
  9240. */
  9241. clearValidate() {
  9242. this.errMsg = "";
  9243. },
  9244. // 是否显示星号
  9245. _isRequired() {
  9246. return this.required;
  9247. },
  9248. // 处理对齐方式
  9249. _justifyContent() {
  9250. if (this.form) {
  9251. const {
  9252. labelAlign
  9253. } = this.form;
  9254. let labelAli = this.labelAlign ? this.labelAlign : labelAlign;
  9255. if (labelAli === "left")
  9256. return "flex-start";
  9257. if (labelAli === "center")
  9258. return "center";
  9259. if (labelAli === "right")
  9260. return "flex-end";
  9261. }
  9262. return "flex-start";
  9263. },
  9264. // 处理 label宽度单位 ,继承父元素的值
  9265. _labelWidthUnit(labelWidth) {
  9266. return this.num2px(this.labelWidth ? this.labelWidth : labelWidth || (this.label ? 65 : "auto"));
  9267. },
  9268. // 处理 label 位置
  9269. _labelPosition() {
  9270. if (this.form)
  9271. return this.form.labelPosition || "left";
  9272. return "left";
  9273. },
  9274. /**
  9275. * 触发时机
  9276. * @param {Object} rule 当前规则内时机
  9277. * @param {Object} itemRlue 当前组件时机
  9278. * @param {Object} parentRule 父组件时机
  9279. */
  9280. isTrigger(rule, itemRlue, parentRule) {
  9281. if (rule === "submit" || !rule) {
  9282. if (rule === void 0) {
  9283. if (itemRlue !== "bind") {
  9284. if (!itemRlue) {
  9285. return parentRule === "" ? "bind" : "submit";
  9286. }
  9287. return "submit";
  9288. }
  9289. return "bind";
  9290. }
  9291. return "submit";
  9292. }
  9293. return "bind";
  9294. },
  9295. num2px(num) {
  9296. if (typeof num === "number") {
  9297. return `${num}px`;
  9298. }
  9299. return num;
  9300. }
  9301. }
  9302. };
  9303. function _sfc_render$C(_ctx, _cache, $props, $setup, $data, $options) {
  9304. return vue.openBlock(), vue.createElementBlock(
  9305. "view",
  9306. {
  9307. class: vue.normalizeClass(["uni-forms-item", ["is-direction-" + $data.localLabelPos, $data.border ? "uni-forms-item--border" : "", $data.border && $data.isFirstBorder ? "is-first-border" : ""]])
  9308. },
  9309. [
  9310. vue.renderSlot(_ctx.$slots, "label", {}, () => [
  9311. vue.createElementVNode(
  9312. "view",
  9313. {
  9314. class: vue.normalizeClass(["uni-forms-item__label", { "no-label": !$props.label && !$data.isRequired }]),
  9315. style: vue.normalizeStyle({ width: $data.localLabelWidth, justifyContent: $data.localLabelAlign })
  9316. },
  9317. [
  9318. $data.isRequired ? (vue.openBlock(), vue.createElementBlock("text", {
  9319. key: 0,
  9320. class: "is-required"
  9321. }, "*")) : vue.createCommentVNode("v-if", true),
  9322. vue.createElementVNode(
  9323. "text",
  9324. null,
  9325. vue.toDisplayString($props.label),
  9326. 1
  9327. /* TEXT */
  9328. )
  9329. ],
  9330. 6
  9331. /* CLASS, STYLE */
  9332. )
  9333. ], true),
  9334. vue.createElementVNode("view", { class: "uni-forms-item__content" }, [
  9335. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
  9336. vue.createElementVNode(
  9337. "view",
  9338. {
  9339. class: vue.normalizeClass(["uni-forms-item__error", { "msg--active": $options.msg }])
  9340. },
  9341. [
  9342. vue.createElementVNode(
  9343. "text",
  9344. null,
  9345. vue.toDisplayString($options.msg),
  9346. 1
  9347. /* TEXT */
  9348. )
  9349. ],
  9350. 2
  9351. /* CLASS */
  9352. )
  9353. ])
  9354. ],
  9355. 2
  9356. /* CLASS */
  9357. );
  9358. }
  9359. const __easycom_0$4 = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["render", _sfc_render$C], ["__scopeId", "data-v-3515f8e1"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-forms-item/uni-forms-item.vue"]]);
  9360. const easycom = {
  9361. autoscan: true,
  9362. custom: {
  9363. "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue",
  9364. "^Xtx(.*)": "@/components/Xtx$1.vue"
  9365. }
  9366. };
  9367. const pages = [
  9368. {
  9369. path: "pages/index/index",
  9370. style: {
  9371. navigationStyle: "custom",
  9372. navigationBarTextStyle: "white",
  9373. navigationBarTitleText: "首页"
  9374. }
  9375. },
  9376. {
  9377. path: "pages/category/category",
  9378. style: {
  9379. navigationBarTitleText: "商品分类"
  9380. }
  9381. },
  9382. {
  9383. path: "pages/cart/cart",
  9384. style: {
  9385. navigationBarTitleText: "购物车"
  9386. }
  9387. },
  9388. {
  9389. path: "pages/cart/cart2",
  9390. style: {
  9391. navigationBarTitleText: "购物车"
  9392. }
  9393. },
  9394. {
  9395. path: "pages/my/my",
  9396. style: {
  9397. navigationStyle: "custom",
  9398. navigationBarTextStyle: "white",
  9399. navigationBarTitleText: "我的"
  9400. }
  9401. },
  9402. {
  9403. path: "pages/login/login",
  9404. style: {
  9405. navigationBarTitleText: "登录"
  9406. }
  9407. },
  9408. {
  9409. path: "pages/hot/hot",
  9410. style: {
  9411. navigationBarTitleText: "热门推荐"
  9412. }
  9413. },
  9414. {
  9415. path: "pages/goods/goods",
  9416. style: {
  9417. navigationBarTitleText: "商品详情"
  9418. }
  9419. },
  9420. {
  9421. path: "pages/inbound/inbound",
  9422. style: {
  9423. navigationBarTitleText: "入库",
  9424. "app-plus": {
  9425. bounce: "none",
  9426. titleNView: {
  9427. buttons: [
  9428. {
  9429. fontSize: "16px",
  9430. text: "历史"
  9431. }
  9432. ]
  9433. }
  9434. }
  9435. }
  9436. },
  9437. {
  9438. path: "pages/inbound/logList",
  9439. style: {
  9440. navigationBarTitleText: "录入历史"
  9441. }
  9442. },
  9443. {
  9444. path: "pages/weigh/weigh",
  9445. style: {
  9446. navigationBarTitleText: "称重",
  9447. "app-plus": {
  9448. bounce: "none",
  9449. titleNView: {
  9450. buttons: [
  9451. {
  9452. fontSize: "16px",
  9453. text: "历史"
  9454. }
  9455. ]
  9456. }
  9457. }
  9458. }
  9459. },
  9460. {
  9461. path: "pages/weigh/logList",
  9462. style: {
  9463. navigationBarTitleText: "录入历史"
  9464. }
  9465. },
  9466. {
  9467. path: "pages/outbound/outbound",
  9468. style: {
  9469. navigationBarTitleText: "出库",
  9470. "app-plus": {
  9471. bounce: "none",
  9472. titleNView: {
  9473. buttons: [
  9474. {
  9475. fontSize: "16px",
  9476. text: "历史"
  9477. }
  9478. ]
  9479. }
  9480. }
  9481. }
  9482. },
  9483. {
  9484. path: "pages/outbound/logList",
  9485. style: {
  9486. navigationBarTitleText: "录入历史"
  9487. }
  9488. },
  9489. {
  9490. path: "pages/warehouseScan/warehouseScan",
  9491. style: {
  9492. navigationBarTitleText: "仓库扫描",
  9493. "app-plus": {
  9494. bounce: "none",
  9495. titleNView: {
  9496. buttons: [
  9497. {
  9498. fontSize: "16px",
  9499. text: "历史"
  9500. }
  9501. ]
  9502. }
  9503. }
  9504. }
  9505. },
  9506. {
  9507. path: "pages/warehouseScan/logList",
  9508. style: {
  9509. navigationBarTitleText: "录入历史"
  9510. }
  9511. },
  9512. {
  9513. path: "pages/printer/printer",
  9514. style: {
  9515. navigationBarTitleText: "打印",
  9516. "app-plus": {
  9517. bounce: "none",
  9518. titleNView: {
  9519. buttons: [
  9520. {
  9521. fontSize: "16px",
  9522. text: "历史"
  9523. }
  9524. ]
  9525. }
  9526. }
  9527. }
  9528. },
  9529. {
  9530. path: "pages/printer/logList",
  9531. style: {
  9532. navigationBarTitleText: "录入历史"
  9533. }
  9534. },
  9535. {
  9536. path: "pages/scanLotno/scanLotno",
  9537. style: {
  9538. navigationBarTitleText: "托盘/批次",
  9539. "app-plus": {
  9540. bounce: "none",
  9541. titleNView: {
  9542. buttons: [
  9543. {
  9544. fontSize: "16px",
  9545. text: "历史"
  9546. }
  9547. ]
  9548. }
  9549. }
  9550. }
  9551. },
  9552. {
  9553. path: "pages/scanLotno/logList",
  9554. style: {
  9555. navigationBarTitleText: "录入历史"
  9556. }
  9557. },
  9558. {
  9559. path: "pages/scanLotno/waybillsList",
  9560. style: {
  9561. navigationBarTitleText: "运单列表"
  9562. }
  9563. },
  9564. {
  9565. path: "pages/waybillNo/waybillNo",
  9566. style: {
  9567. navigationBarTitleText: "库位绑定",
  9568. "app-plus": {
  9569. bounce: "none",
  9570. titleNView: {
  9571. buttons: [
  9572. {
  9573. fontSize: "16px",
  9574. text: "历史"
  9575. }
  9576. ]
  9577. }
  9578. }
  9579. }
  9580. },
  9581. {
  9582. path: "pages/waybillNo/logList",
  9583. style: {
  9584. navigationBarTitleText: "库位历史"
  9585. }
  9586. },
  9587. {
  9588. path: "pages/pickup/waybillPickUpOrder",
  9589. style: {
  9590. navigationBarTitleText: "取件单",
  9591. "app-plus": {
  9592. bounce: "none",
  9593. titleNView: {
  9594. buttons: [
  9595. {
  9596. color: "#007AFF",
  9597. fontSize: "22px",
  9598. text: "",
  9599. fontSrc: "/static/iconfont/iconfont.ttf",
  9600. float: "right"
  9601. }
  9602. ]
  9603. }
  9604. }
  9605. }
  9606. },
  9607. {
  9608. path: "pages/pickup/waybillPickUpDetails",
  9609. style: {
  9610. navigationBarTitleText: "取件详情"
  9611. }
  9612. },
  9613. {
  9614. path: "pages/pickup/waybillPickUpDetail",
  9615. style: {
  9616. navigationBarTitleText: "运单信息"
  9617. }
  9618. },
  9619. {
  9620. path: "pages/waybillDeliveryOrder/waybillDeliveryOrder",
  9621. style: {
  9622. navigationBarTitleText: "派送单"
  9623. }
  9624. }
  9625. ];
  9626. const globalStyle = {
  9627. navigationBarTextStyle: "black",
  9628. navigationBarTitleText: "",
  9629. navigationBarBackgroundColor: "#F8F8F8",
  9630. backgroundColor: "#F8F8F8"
  9631. };
  9632. const tabBar = {
  9633. color: "#333",
  9634. selectedColor: "#27ba9b",
  9635. backgroundColor: "#fff",
  9636. borderStyle: "white",
  9637. list: [
  9638. {
  9639. text: "首页",
  9640. pagePath: "pages/index/index",
  9641. iconPath: "static/tabs/home_default.png",
  9642. selectedIconPath: "static/tabs/home_selected.png"
  9643. },
  9644. {
  9645. text: "我的",
  9646. pagePath: "pages/my/my",
  9647. iconPath: "static/tabs/user_default.png",
  9648. selectedIconPath: "static/tabs/user_selected.png"
  9649. }
  9650. ]
  9651. };
  9652. const subPackages = [
  9653. {
  9654. root: "pagesMember",
  9655. pages: [
  9656. {
  9657. path: "settings/settings",
  9658. style: {
  9659. navigationBarTitleText: "设置"
  9660. }
  9661. },
  9662. {
  9663. path: "profile/profile",
  9664. style: {
  9665. navigationStyle: "custom",
  9666. navigationBarTextStyle: "white",
  9667. navigationBarTitleText: "个人信息"
  9668. }
  9669. },
  9670. {
  9671. path: "address/address",
  9672. style: {
  9673. navigationBarTitleText: "地址管理"
  9674. }
  9675. },
  9676. {
  9677. path: "address-form/address-form",
  9678. style: {
  9679. navigationBarTitleText: ""
  9680. }
  9681. }
  9682. ]
  9683. },
  9684. {
  9685. root: "pagesOrder",
  9686. pages: [
  9687. {
  9688. path: "create/create",
  9689. style: {
  9690. navigationBarTitleText: "填写订单"
  9691. }
  9692. },
  9693. {
  9694. path: "detail/detail",
  9695. style: {
  9696. navigationBarTitleText: "订单详情",
  9697. navigationStyle: "custom"
  9698. }
  9699. },
  9700. {
  9701. path: "payment/payment",
  9702. style: {
  9703. navigationBarTitleText: "支付结果"
  9704. }
  9705. },
  9706. {
  9707. path: "list/list",
  9708. style: {
  9709. navigationBarTitleText: "订单列表"
  9710. }
  9711. }
  9712. ]
  9713. }
  9714. ];
  9715. const preloadRule = {
  9716. "pages/my/my": {
  9717. network: "all",
  9718. packages: [
  9719. "pagesMember"
  9720. ]
  9721. }
  9722. };
  9723. const e = {
  9724. easycom,
  9725. pages,
  9726. globalStyle,
  9727. tabBar,
  9728. subPackages,
  9729. preloadRule
  9730. };
  9731. var define_process_env_UNI_SECURE_NETWORK_CONFIG_default = [];
  9732. function t$3(e2) {
  9733. return e2 && e2.__esModule && Object.prototype.hasOwnProperty.call(e2, "default") ? e2.default : e2;
  9734. }
  9735. function n(e2, t2, n2) {
  9736. return e2(n2 = { path: t2, exports: {}, require: function(e3, t3) {
  9737. return function() {
  9738. throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs");
  9739. }(null == t3 && n2.path);
  9740. } }, n2.exports), n2.exports;
  9741. }
  9742. var s = n(function(e2, t2) {
  9743. var n2;
  9744. e2.exports = (n2 = n2 || function(e3, t3) {
  9745. var n3 = Object.create || /* @__PURE__ */ function() {
  9746. function e4() {
  9747. }
  9748. return function(t4) {
  9749. var n4;
  9750. return e4.prototype = t4, n4 = new e4(), e4.prototype = null, n4;
  9751. };
  9752. }(), s2 = {}, r2 = s2.lib = {}, i2 = r2.Base = { extend: function(e4) {
  9753. var t4 = n3(this);
  9754. return e4 && t4.mixIn(e4), t4.hasOwnProperty("init") && this.init !== t4.init || (t4.init = function() {
  9755. t4.$super.init.apply(this, arguments);
  9756. }), t4.init.prototype = t4, t4.$super = this, t4;
  9757. }, create: function() {
  9758. var e4 = this.extend();
  9759. return e4.init.apply(e4, arguments), e4;
  9760. }, init: function() {
  9761. }, mixIn: function(e4) {
  9762. for (var t4 in e4)
  9763. e4.hasOwnProperty(t4) && (this[t4] = e4[t4]);
  9764. e4.hasOwnProperty("toString") && (this.toString = e4.toString);
  9765. }, clone: function() {
  9766. return this.init.prototype.extend(this);
  9767. } }, o2 = r2.WordArray = i2.extend({ init: function(e4, n4) {
  9768. e4 = this.words = e4 || [], this.sigBytes = n4 != t3 ? n4 : 4 * e4.length;
  9769. }, toString: function(e4) {
  9770. return (e4 || c2).stringify(this);
  9771. }, concat: function(e4) {
  9772. var t4 = this.words, n4 = e4.words, s3 = this.sigBytes, r3 = e4.sigBytes;
  9773. if (this.clamp(), s3 % 4)
  9774. for (var i3 = 0; i3 < r3; i3++) {
  9775. var o3 = n4[i3 >>> 2] >>> 24 - i3 % 4 * 8 & 255;
  9776. t4[s3 + i3 >>> 2] |= o3 << 24 - (s3 + i3) % 4 * 8;
  9777. }
  9778. else
  9779. for (i3 = 0; i3 < r3; i3 += 4)
  9780. t4[s3 + i3 >>> 2] = n4[i3 >>> 2];
  9781. return this.sigBytes += r3, this;
  9782. }, clamp: function() {
  9783. var t4 = this.words, n4 = this.sigBytes;
  9784. t4[n4 >>> 2] &= 4294967295 << 32 - n4 % 4 * 8, t4.length = e3.ceil(n4 / 4);
  9785. }, clone: function() {
  9786. var e4 = i2.clone.call(this);
  9787. return e4.words = this.words.slice(0), e4;
  9788. }, random: function(t4) {
  9789. for (var n4, s3 = [], r3 = function(t5) {
  9790. t5 = t5;
  9791. var n5 = 987654321, s4 = 4294967295;
  9792. return function() {
  9793. var r4 = ((n5 = 36969 * (65535 & n5) + (n5 >> 16) & s4) << 16) + (t5 = 18e3 * (65535 & t5) + (t5 >> 16) & s4) & s4;
  9794. return r4 /= 4294967296, (r4 += 0.5) * (e3.random() > 0.5 ? 1 : -1);
  9795. };
  9796. }, i3 = 0; i3 < t4; i3 += 4) {
  9797. var a3 = r3(4294967296 * (n4 || e3.random()));
  9798. n4 = 987654071 * a3(), s3.push(4294967296 * a3() | 0);
  9799. }
  9800. return new o2.init(s3, t4);
  9801. } }), a2 = s2.enc = {}, c2 = a2.Hex = { stringify: function(e4) {
  9802. for (var t4 = e4.words, n4 = e4.sigBytes, s3 = [], r3 = 0; r3 < n4; r3++) {
  9803. var i3 = t4[r3 >>> 2] >>> 24 - r3 % 4 * 8 & 255;
  9804. s3.push((i3 >>> 4).toString(16)), s3.push((15 & i3).toString(16));
  9805. }
  9806. return s3.join("");
  9807. }, parse: function(e4) {
  9808. for (var t4 = e4.length, n4 = [], s3 = 0; s3 < t4; s3 += 2)
  9809. n4[s3 >>> 3] |= parseInt(e4.substr(s3, 2), 16) << 24 - s3 % 8 * 4;
  9810. return new o2.init(n4, t4 / 2);
  9811. } }, u2 = a2.Latin1 = { stringify: function(e4) {
  9812. for (var t4 = e4.words, n4 = e4.sigBytes, s3 = [], r3 = 0; r3 < n4; r3++) {
  9813. var i3 = t4[r3 >>> 2] >>> 24 - r3 % 4 * 8 & 255;
  9814. s3.push(String.fromCharCode(i3));
  9815. }
  9816. return s3.join("");
  9817. }, parse: function(e4) {
  9818. for (var t4 = e4.length, n4 = [], s3 = 0; s3 < t4; s3++)
  9819. n4[s3 >>> 2] |= (255 & e4.charCodeAt(s3)) << 24 - s3 % 4 * 8;
  9820. return new o2.init(n4, t4);
  9821. } }, h2 = a2.Utf8 = { stringify: function(e4) {
  9822. try {
  9823. return decodeURIComponent(escape(u2.stringify(e4)));
  9824. } catch (e5) {
  9825. throw new Error("Malformed UTF-8 data");
  9826. }
  9827. }, parse: function(e4) {
  9828. return u2.parse(unescape(encodeURIComponent(e4)));
  9829. } }, l2 = r2.BufferedBlockAlgorithm = i2.extend({ reset: function() {
  9830. this._data = new o2.init(), this._nDataBytes = 0;
  9831. }, _append: function(e4) {
  9832. "string" == typeof e4 && (e4 = h2.parse(e4)), this._data.concat(e4), this._nDataBytes += e4.sigBytes;
  9833. }, _process: function(t4) {
  9834. var n4 = this._data, s3 = n4.words, r3 = n4.sigBytes, i3 = this.blockSize, a3 = r3 / (4 * i3), c3 = (a3 = t4 ? e3.ceil(a3) : e3.max((0 | a3) - this._minBufferSize, 0)) * i3, u3 = e3.min(4 * c3, r3);
  9835. if (c3) {
  9836. for (var h3 = 0; h3 < c3; h3 += i3)
  9837. this._doProcessBlock(s3, h3);
  9838. var l3 = s3.splice(0, c3);
  9839. n4.sigBytes -= u3;
  9840. }
  9841. return new o2.init(l3, u3);
  9842. }, clone: function() {
  9843. var e4 = i2.clone.call(this);
  9844. return e4._data = this._data.clone(), e4;
  9845. }, _minBufferSize: 0 });
  9846. r2.Hasher = l2.extend({ cfg: i2.extend(), init: function(e4) {
  9847. this.cfg = this.cfg.extend(e4), this.reset();
  9848. }, reset: function() {
  9849. l2.reset.call(this), this._doReset();
  9850. }, update: function(e4) {
  9851. return this._append(e4), this._process(), this;
  9852. }, finalize: function(e4) {
  9853. return e4 && this._append(e4), this._doFinalize();
  9854. }, blockSize: 16, _createHelper: function(e4) {
  9855. return function(t4, n4) {
  9856. return new e4.init(n4).finalize(t4);
  9857. };
  9858. }, _createHmacHelper: function(e4) {
  9859. return function(t4, n4) {
  9860. return new d2.HMAC.init(e4, n4).finalize(t4);
  9861. };
  9862. } });
  9863. var d2 = s2.algo = {};
  9864. return s2;
  9865. }(Math), n2);
  9866. }), r = s, i = (n(function(e2, t2) {
  9867. var n2;
  9868. e2.exports = (n2 = r, function(e3) {
  9869. var t3 = n2, s2 = t3.lib, r2 = s2.WordArray, i2 = s2.Hasher, o2 = t3.algo, a2 = [];
  9870. !function() {
  9871. for (var t4 = 0; t4 < 64; t4++)
  9872. a2[t4] = 4294967296 * e3.abs(e3.sin(t4 + 1)) | 0;
  9873. }();
  9874. var c2 = o2.MD5 = i2.extend({ _doReset: function() {
  9875. this._hash = new r2.init([1732584193, 4023233417, 2562383102, 271733878]);
  9876. }, _doProcessBlock: function(e4, t4) {
  9877. for (var n3 = 0; n3 < 16; n3++) {
  9878. var s3 = t4 + n3, r3 = e4[s3];
  9879. e4[s3] = 16711935 & (r3 << 8 | r3 >>> 24) | 4278255360 & (r3 << 24 | r3 >>> 8);
  9880. }
  9881. var i3 = this._hash.words, o3 = e4[t4 + 0], c3 = e4[t4 + 1], p2 = e4[t4 + 2], f2 = e4[t4 + 3], g2 = e4[t4 + 4], m2 = e4[t4 + 5], y2 = e4[t4 + 6], _2 = e4[t4 + 7], w2 = e4[t4 + 8], v2 = e4[t4 + 9], I2 = e4[t4 + 10], S2 = e4[t4 + 11], b2 = e4[t4 + 12], k2 = e4[t4 + 13], A2 = e4[t4 + 14], C2 = e4[t4 + 15], P2 = i3[0], T2 = i3[1], x2 = i3[2], O2 = i3[3];
  9882. P2 = u2(P2, T2, x2, O2, o3, 7, a2[0]), O2 = u2(O2, P2, T2, x2, c3, 12, a2[1]), x2 = u2(x2, O2, P2, T2, p2, 17, a2[2]), T2 = u2(T2, x2, O2, P2, f2, 22, a2[3]), P2 = u2(P2, T2, x2, O2, g2, 7, a2[4]), O2 = u2(O2, P2, T2, x2, m2, 12, a2[5]), x2 = u2(x2, O2, P2, T2, y2, 17, a2[6]), T2 = u2(T2, x2, O2, P2, _2, 22, a2[7]), P2 = u2(P2, T2, x2, O2, w2, 7, a2[8]), O2 = u2(O2, P2, T2, x2, v2, 12, a2[9]), x2 = u2(x2, O2, P2, T2, I2, 17, a2[10]), T2 = u2(T2, x2, O2, P2, S2, 22, a2[11]), P2 = u2(P2, T2, x2, O2, b2, 7, a2[12]), O2 = u2(O2, P2, T2, x2, k2, 12, a2[13]), x2 = u2(x2, O2, P2, T2, A2, 17, a2[14]), P2 = h2(P2, T2 = u2(T2, x2, O2, P2, C2, 22, a2[15]), x2, O2, c3, 5, a2[16]), O2 = h2(O2, P2, T2, x2, y2, 9, a2[17]), x2 = h2(x2, O2, P2, T2, S2, 14, a2[18]), T2 = h2(T2, x2, O2, P2, o3, 20, a2[19]), P2 = h2(P2, T2, x2, O2, m2, 5, a2[20]), O2 = h2(O2, P2, T2, x2, I2, 9, a2[21]), x2 = h2(x2, O2, P2, T2, C2, 14, a2[22]), T2 = h2(T2, x2, O2, P2, g2, 20, a2[23]), P2 = h2(P2, T2, x2, O2, v2, 5, a2[24]), O2 = h2(O2, P2, T2, x2, A2, 9, a2[25]), x2 = h2(x2, O2, P2, T2, f2, 14, a2[26]), T2 = h2(T2, x2, O2, P2, w2, 20, a2[27]), P2 = h2(P2, T2, x2, O2, k2, 5, a2[28]), O2 = h2(O2, P2, T2, x2, p2, 9, a2[29]), x2 = h2(x2, O2, P2, T2, _2, 14, a2[30]), P2 = l2(P2, T2 = h2(T2, x2, O2, P2, b2, 20, a2[31]), x2, O2, m2, 4, a2[32]), O2 = l2(O2, P2, T2, x2, w2, 11, a2[33]), x2 = l2(x2, O2, P2, T2, S2, 16, a2[34]), T2 = l2(T2, x2, O2, P2, A2, 23, a2[35]), P2 = l2(P2, T2, x2, O2, c3, 4, a2[36]), O2 = l2(O2, P2, T2, x2, g2, 11, a2[37]), x2 = l2(x2, O2, P2, T2, _2, 16, a2[38]), T2 = l2(T2, x2, O2, P2, I2, 23, a2[39]), P2 = l2(P2, T2, x2, O2, k2, 4, a2[40]), O2 = l2(O2, P2, T2, x2, o3, 11, a2[41]), x2 = l2(x2, O2, P2, T2, f2, 16, a2[42]), T2 = l2(T2, x2, O2, P2, y2, 23, a2[43]), P2 = l2(P2, T2, x2, O2, v2, 4, a2[44]), O2 = l2(O2, P2, T2, x2, b2, 11, a2[45]), x2 = l2(x2, O2, P2, T2, C2, 16, a2[46]), P2 = d2(P2, T2 = l2(T2, x2, O2, P2, p2, 23, a2[47]), x2, O2, o3, 6, a2[48]), O2 = d2(O2, P2, T2, x2, _2, 10, a2[49]), x2 = d2(x2, O2, P2, T2, A2, 15, a2[50]), T2 = d2(T2, x2, O2, P2, m2, 21, a2[51]), P2 = d2(P2, T2, x2, O2, b2, 6, a2[52]), O2 = d2(O2, P2, T2, x2, f2, 10, a2[53]), x2 = d2(x2, O2, P2, T2, I2, 15, a2[54]), T2 = d2(T2, x2, O2, P2, c3, 21, a2[55]), P2 = d2(P2, T2, x2, O2, w2, 6, a2[56]), O2 = d2(O2, P2, T2, x2, C2, 10, a2[57]), x2 = d2(x2, O2, P2, T2, y2, 15, a2[58]), T2 = d2(T2, x2, O2, P2, k2, 21, a2[59]), P2 = d2(P2, T2, x2, O2, g2, 6, a2[60]), O2 = d2(O2, P2, T2, x2, S2, 10, a2[61]), x2 = d2(x2, O2, P2, T2, p2, 15, a2[62]), T2 = d2(T2, x2, O2, P2, v2, 21, a2[63]), i3[0] = i3[0] + P2 | 0, i3[1] = i3[1] + T2 | 0, i3[2] = i3[2] + x2 | 0, i3[3] = i3[3] + O2 | 0;
  9883. }, _doFinalize: function() {
  9884. var t4 = this._data, n3 = t4.words, s3 = 8 * this._nDataBytes, r3 = 8 * t4.sigBytes;
  9885. n3[r3 >>> 5] |= 128 << 24 - r3 % 32;
  9886. var i3 = e3.floor(s3 / 4294967296), o3 = s3;
  9887. n3[15 + (r3 + 64 >>> 9 << 4)] = 16711935 & (i3 << 8 | i3 >>> 24) | 4278255360 & (i3 << 24 | i3 >>> 8), n3[14 + (r3 + 64 >>> 9 << 4)] = 16711935 & (o3 << 8 | o3 >>> 24) | 4278255360 & (o3 << 24 | o3 >>> 8), t4.sigBytes = 4 * (n3.length + 1), this._process();
  9888. for (var a3 = this._hash, c3 = a3.words, u3 = 0; u3 < 4; u3++) {
  9889. var h3 = c3[u3];
  9890. c3[u3] = 16711935 & (h3 << 8 | h3 >>> 24) | 4278255360 & (h3 << 24 | h3 >>> 8);
  9891. }
  9892. return a3;
  9893. }, clone: function() {
  9894. var e4 = i2.clone.call(this);
  9895. return e4._hash = this._hash.clone(), e4;
  9896. } });
  9897. function u2(e4, t4, n3, s3, r3, i3, o3) {
  9898. var a3 = e4 + (t4 & n3 | ~t4 & s3) + r3 + o3;
  9899. return (a3 << i3 | a3 >>> 32 - i3) + t4;
  9900. }
  9901. function h2(e4, t4, n3, s3, r3, i3, o3) {
  9902. var a3 = e4 + (t4 & s3 | n3 & ~s3) + r3 + o3;
  9903. return (a3 << i3 | a3 >>> 32 - i3) + t4;
  9904. }
  9905. function l2(e4, t4, n3, s3, r3, i3, o3) {
  9906. var a3 = e4 + (t4 ^ n3 ^ s3) + r3 + o3;
  9907. return (a3 << i3 | a3 >>> 32 - i3) + t4;
  9908. }
  9909. function d2(e4, t4, n3, s3, r3, i3, o3) {
  9910. var a3 = e4 + (n3 ^ (t4 | ~s3)) + r3 + o3;
  9911. return (a3 << i3 | a3 >>> 32 - i3) + t4;
  9912. }
  9913. t3.MD5 = i2._createHelper(c2), t3.HmacMD5 = i2._createHmacHelper(c2);
  9914. }(Math), n2.MD5);
  9915. }), n(function(e2, t2) {
  9916. var n2;
  9917. e2.exports = (n2 = r, void function() {
  9918. var e3 = n2, t3 = e3.lib.Base, s2 = e3.enc.Utf8;
  9919. e3.algo.HMAC = t3.extend({ init: function(e4, t4) {
  9920. e4 = this._hasher = new e4.init(), "string" == typeof t4 && (t4 = s2.parse(t4));
  9921. var n3 = e4.blockSize, r2 = 4 * n3;
  9922. t4.sigBytes > r2 && (t4 = e4.finalize(t4)), t4.clamp();
  9923. for (var i2 = this._oKey = t4.clone(), o2 = this._iKey = t4.clone(), a2 = i2.words, c2 = o2.words, u2 = 0; u2 < n3; u2++)
  9924. a2[u2] ^= 1549556828, c2[u2] ^= 909522486;
  9925. i2.sigBytes = o2.sigBytes = r2, this.reset();
  9926. }, reset: function() {
  9927. var e4 = this._hasher;
  9928. e4.reset(), e4.update(this._iKey);
  9929. }, update: function(e4) {
  9930. return this._hasher.update(e4), this;
  9931. }, finalize: function(e4) {
  9932. var t4 = this._hasher, n3 = t4.finalize(e4);
  9933. return t4.reset(), t4.finalize(this._oKey.clone().concat(n3));
  9934. } });
  9935. }());
  9936. }), n(function(e2, t2) {
  9937. e2.exports = r.HmacMD5;
  9938. })), o = n(function(e2, t2) {
  9939. e2.exports = r.enc.Utf8;
  9940. }), a = n(function(e2, t2) {
  9941. var n2;
  9942. e2.exports = (n2 = r, function() {
  9943. var e3 = n2, t3 = e3.lib.WordArray;
  9944. function s2(e4, n3, s3) {
  9945. for (var r2 = [], i2 = 0, o2 = 0; o2 < n3; o2++)
  9946. if (o2 % 4) {
  9947. var a2 = s3[e4.charCodeAt(o2 - 1)] << o2 % 4 * 2, c2 = s3[e4.charCodeAt(o2)] >>> 6 - o2 % 4 * 2;
  9948. r2[i2 >>> 2] |= (a2 | c2) << 24 - i2 % 4 * 8, i2++;
  9949. }
  9950. return t3.create(r2, i2);
  9951. }
  9952. e3.enc.Base64 = { stringify: function(e4) {
  9953. var t4 = e4.words, n3 = e4.sigBytes, s3 = this._map;
  9954. e4.clamp();
  9955. for (var r2 = [], i2 = 0; i2 < n3; i2 += 3)
  9956. for (var o2 = (t4[i2 >>> 2] >>> 24 - i2 % 4 * 8 & 255) << 16 | (t4[i2 + 1 >>> 2] >>> 24 - (i2 + 1) % 4 * 8 & 255) << 8 | t4[i2 + 2 >>> 2] >>> 24 - (i2 + 2) % 4 * 8 & 255, a2 = 0; a2 < 4 && i2 + 0.75 * a2 < n3; a2++)
  9957. r2.push(s3.charAt(o2 >>> 6 * (3 - a2) & 63));
  9958. var c2 = s3.charAt(64);
  9959. if (c2)
  9960. for (; r2.length % 4; )
  9961. r2.push(c2);
  9962. return r2.join("");
  9963. }, parse: function(e4) {
  9964. var t4 = e4.length, n3 = this._map, r2 = this._reverseMap;
  9965. if (!r2) {
  9966. r2 = this._reverseMap = [];
  9967. for (var i2 = 0; i2 < n3.length; i2++)
  9968. r2[n3.charCodeAt(i2)] = i2;
  9969. }
  9970. var o2 = n3.charAt(64);
  9971. if (o2) {
  9972. var a2 = e4.indexOf(o2);
  9973. -1 !== a2 && (t4 = a2);
  9974. }
  9975. return s2(e4, t4, r2);
  9976. }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" };
  9977. }(), n2.enc.Base64);
  9978. });
  9979. const c = "FUNCTION", u = "OBJECT", h = "CLIENT_DB", l = "pending", d = "fulfilled", p = "rejected";
  9980. function f(e2) {
  9981. return Object.prototype.toString.call(e2).slice(8, -1).toLowerCase();
  9982. }
  9983. function g(e2) {
  9984. return "object" === f(e2);
  9985. }
  9986. function m(e2) {
  9987. return "function" == typeof e2;
  9988. }
  9989. function y(e2) {
  9990. return function() {
  9991. try {
  9992. return e2.apply(e2, arguments);
  9993. } catch (e3) {
  9994. console.error(e3);
  9995. }
  9996. };
  9997. }
  9998. const _ = "REJECTED", w = "NOT_PENDING";
  9999. class v {
  10000. constructor({ createPromise: e2, retryRule: t2 = _ } = {}) {
  10001. this.createPromise = e2, this.status = null, this.promise = null, this.retryRule = t2;
  10002. }
  10003. get needRetry() {
  10004. if (!this.status)
  10005. return true;
  10006. switch (this.retryRule) {
  10007. case _:
  10008. return this.status === p;
  10009. case w:
  10010. return this.status !== l;
  10011. }
  10012. }
  10013. exec() {
  10014. return this.needRetry ? (this.status = l, this.promise = this.createPromise().then((e2) => (this.status = d, Promise.resolve(e2)), (e2) => (this.status = p, Promise.reject(e2))), this.promise) : this.promise;
  10015. }
  10016. }
  10017. function I(e2) {
  10018. return e2 && "string" == typeof e2 ? JSON.parse(e2) : e2;
  10019. }
  10020. const S = true, b = "app", A = I(define_process_env_UNI_SECURE_NETWORK_CONFIG_default), C = b, P = I(""), T = I("[]") || [];
  10021. let O = "";
  10022. try {
  10023. O = "__UNI__1619D0F";
  10024. } catch (e2) {
  10025. }
  10026. let E = {};
  10027. function L(e2, t2 = {}) {
  10028. var n2, s2;
  10029. return n2 = E, s2 = e2, Object.prototype.hasOwnProperty.call(n2, s2) || (E[e2] = t2), E[e2];
  10030. }
  10031. E = uni._globalUniCloudObj ? uni._globalUniCloudObj : uni._globalUniCloudObj = {};
  10032. const R = ["invoke", "success", "fail", "complete"], U = L("_globalUniCloudInterceptor");
  10033. function N(e2, t2) {
  10034. U[e2] || (U[e2] = {}), g(t2) && Object.keys(t2).forEach((n2) => {
  10035. R.indexOf(n2) > -1 && function(e3, t3, n3) {
  10036. let s2 = U[e3][t3];
  10037. s2 || (s2 = U[e3][t3] = []), -1 === s2.indexOf(n3) && m(n3) && s2.push(n3);
  10038. }(e2, n2, t2[n2]);
  10039. });
  10040. }
  10041. function D(e2, t2) {
  10042. U[e2] || (U[e2] = {}), g(t2) ? Object.keys(t2).forEach((n2) => {
  10043. R.indexOf(n2) > -1 && function(e3, t3, n3) {
  10044. const s2 = U[e3][t3];
  10045. if (!s2)
  10046. return;
  10047. const r2 = s2.indexOf(n3);
  10048. r2 > -1 && s2.splice(r2, 1);
  10049. }(e2, n2, t2[n2]);
  10050. }) : delete U[e2];
  10051. }
  10052. function M(e2, t2) {
  10053. return e2 && 0 !== e2.length ? e2.reduce((e3, n2) => e3.then(() => n2(t2)), Promise.resolve()) : Promise.resolve();
  10054. }
  10055. function q(e2, t2) {
  10056. return U[e2] && U[e2][t2] || [];
  10057. }
  10058. function F(e2) {
  10059. N("callObject", e2);
  10060. }
  10061. const K = L("_globalUniCloudListener"), j = "response", $ = "needLogin", B = "refreshToken", W = "clientdb", H = "cloudfunction", z = "cloudobject";
  10062. function J(e2) {
  10063. return K[e2] || (K[e2] = []), K[e2];
  10064. }
  10065. function V(e2, t2) {
  10066. const n2 = J(e2);
  10067. n2.includes(t2) || n2.push(t2);
  10068. }
  10069. function G(e2, t2) {
  10070. const n2 = J(e2), s2 = n2.indexOf(t2);
  10071. -1 !== s2 && n2.splice(s2, 1);
  10072. }
  10073. function Y(e2, t2) {
  10074. const n2 = J(e2);
  10075. for (let e3 = 0; e3 < n2.length; e3++) {
  10076. (0, n2[e3])(t2);
  10077. }
  10078. }
  10079. let Q, X = false;
  10080. function Z() {
  10081. return Q || (Q = new Promise((e2) => {
  10082. X && e2(), function t2() {
  10083. if ("function" == typeof getCurrentPages) {
  10084. const t3 = getCurrentPages();
  10085. t3 && t3[0] && (X = true, e2());
  10086. }
  10087. X || setTimeout(() => {
  10088. t2();
  10089. }, 30);
  10090. }();
  10091. }), Q);
  10092. }
  10093. function ee(e2) {
  10094. const t2 = {};
  10095. for (const n2 in e2) {
  10096. const s2 = e2[n2];
  10097. m(s2) && (t2[n2] = y(s2));
  10098. }
  10099. return t2;
  10100. }
  10101. class te extends Error {
  10102. constructor(e2) {
  10103. super(e2.message), this.errMsg = e2.message || e2.errMsg || "unknown system error", this.code = this.errCode = e2.code || e2.errCode || "SYSTEM_ERROR", this.errSubject = this.subject = e2.subject || e2.errSubject, this.cause = e2.cause, this.requestId = e2.requestId;
  10104. }
  10105. toJson(e2 = 0) {
  10106. if (!(e2 >= 10))
  10107. return e2++, { errCode: this.errCode, errMsg: this.errMsg, errSubject: this.errSubject, cause: this.cause && this.cause.toJson ? this.cause.toJson(e2) : this.cause };
  10108. }
  10109. }
  10110. var ne = { request: (e2) => uni.request(e2), uploadFile: (e2) => uni.uploadFile(e2), setStorageSync: (e2, t2) => uni.setStorageSync(e2, t2), getStorageSync: (e2) => uni.getStorageSync(e2), removeStorageSync: (e2) => uni.removeStorageSync(e2), clearStorageSync: () => uni.clearStorageSync(), connectSocket: (e2) => uni.connectSocket(e2) };
  10111. function se(e2) {
  10112. return e2 && se(e2.__v_raw) || e2;
  10113. }
  10114. function re() {
  10115. return { token: ne.getStorageSync("uni_id_token") || ne.getStorageSync("uniIdToken"), tokenExpired: ne.getStorageSync("uni_id_token_expired") };
  10116. }
  10117. function ie({ token: e2, tokenExpired: t2 } = {}) {
  10118. e2 && ne.setStorageSync("uni_id_token", e2), t2 && ne.setStorageSync("uni_id_token_expired", t2);
  10119. }
  10120. let oe, ae;
  10121. function ce() {
  10122. return oe || (oe = uni.getSystemInfoSync()), oe;
  10123. }
  10124. function ue() {
  10125. let e2, t2;
  10126. try {
  10127. if (uni.getLaunchOptionsSync) {
  10128. if (uni.getLaunchOptionsSync.toString().indexOf("not yet implemented") > -1)
  10129. return;
  10130. const { scene: n2, channel: s2 } = uni.getLaunchOptionsSync();
  10131. e2 = s2, t2 = n2;
  10132. }
  10133. } catch (e3) {
  10134. }
  10135. return { channel: e2, scene: t2 };
  10136. }
  10137. let he = {};
  10138. function le() {
  10139. const e2 = uni.getLocale && uni.getLocale() || "en";
  10140. if (ae)
  10141. return { ...he, ...ae, locale: e2, LOCALE: e2 };
  10142. const t2 = ce(), { deviceId: n2, osName: s2, uniPlatform: r2, appId: i2 } = t2, o2 = ["appId", "appLanguage", "appName", "appVersion", "appVersionCode", "appWgtVersion", "browserName", "browserVersion", "deviceBrand", "deviceId", "deviceModel", "deviceType", "osName", "osVersion", "romName", "romVersion", "ua", "hostName", "hostVersion", "uniPlatform", "uniRuntimeVersion", "uniRuntimeVersionCode", "uniCompilerVersion", "uniCompilerVersionCode"];
  10143. for (const e3 in t2)
  10144. Object.hasOwnProperty.call(t2, e3) && -1 === o2.indexOf(e3) && delete t2[e3];
  10145. return ae = { PLATFORM: r2, OS: s2, APPID: i2, DEVICEID: n2, ...ue(), ...t2 }, { ...he, ...ae, locale: e2, LOCALE: e2 };
  10146. }
  10147. var de = { sign: function(e2, t2) {
  10148. let n2 = "";
  10149. return Object.keys(e2).sort().forEach(function(t3) {
  10150. e2[t3] && (n2 = n2 + "&" + t3 + "=" + e2[t3]);
  10151. }), n2 = n2.slice(1), i(n2, t2).toString();
  10152. }, wrappedRequest: function(e2, t2) {
  10153. return new Promise((n2, s2) => {
  10154. t2(Object.assign(e2, { complete(e3) {
  10155. e3 || (e3 = {});
  10156. const t3 = e3.data && e3.data.header && e3.data.header["x-serverless-request-id"] || e3.header && e3.header["request-id"];
  10157. if (!e3.statusCode || e3.statusCode >= 400) {
  10158. const n3 = e3.data && e3.data.error && e3.data.error.code || "SYS_ERR", r3 = e3.data && e3.data.error && e3.data.error.message || e3.errMsg || "request:fail";
  10159. return s2(new te({ code: n3, message: r3, requestId: t3 }));
  10160. }
  10161. const r2 = e3.data;
  10162. if (r2.error)
  10163. return s2(new te({ code: r2.error.code, message: r2.error.message, requestId: t3 }));
  10164. r2.result = r2.data, r2.requestId = t3, delete r2.data, n2(r2);
  10165. } }));
  10166. });
  10167. }, toBase64: function(e2) {
  10168. return a.stringify(o.parse(e2));
  10169. } };
  10170. var pe = class {
  10171. constructor(e2) {
  10172. ["spaceId", "clientSecret"].forEach((t2) => {
  10173. if (!Object.prototype.hasOwnProperty.call(e2, t2))
  10174. throw new Error(`${t2} required`);
  10175. }), this.config = Object.assign({}, { endpoint: 0 === e2.spaceId.indexOf("mp-") ? "https://api.next.bspapp.com" : "https://api.bspapp.com" }, e2), this.config.provider = "aliyun", this.config.requestUrl = this.config.endpoint + "/client", this.config.envType = this.config.envType || "public", this.config.accessTokenKey = "access_token_" + this.config.spaceId, this.adapter = ne, this._getAccessTokenPromiseHub = new v({ createPromise: () => this.requestAuth(this.setupRequest({ method: "serverless.auth.user.anonymousAuthorize", params: "{}" }, "auth")).then((e3) => {
  10176. if (!e3.result || !e3.result.accessToken)
  10177. throw new te({ code: "AUTH_FAILED", message: "获取accessToken失败" });
  10178. this.setAccessToken(e3.result.accessToken);
  10179. }), retryRule: w });
  10180. }
  10181. get hasAccessToken() {
  10182. return !!this.accessToken;
  10183. }
  10184. setAccessToken(e2) {
  10185. this.accessToken = e2;
  10186. }
  10187. requestWrapped(e2) {
  10188. return de.wrappedRequest(e2, this.adapter.request);
  10189. }
  10190. requestAuth(e2) {
  10191. return this.requestWrapped(e2);
  10192. }
  10193. request(e2, t2) {
  10194. return Promise.resolve().then(() => this.hasAccessToken ? t2 ? this.requestWrapped(e2) : this.requestWrapped(e2).catch((t3) => new Promise((e3, n2) => {
  10195. !t3 || "GATEWAY_INVALID_TOKEN" !== t3.code && "InvalidParameter.InvalidToken" !== t3.code ? n2(t3) : e3();
  10196. }).then(() => this.getAccessToken()).then(() => {
  10197. const t4 = this.rebuildRequest(e2);
  10198. return this.request(t4, true);
  10199. })) : this.getAccessToken().then(() => {
  10200. const t3 = this.rebuildRequest(e2);
  10201. return this.request(t3, true);
  10202. }));
  10203. }
  10204. rebuildRequest(e2) {
  10205. const t2 = Object.assign({}, e2);
  10206. return t2.data.token = this.accessToken, t2.header["x-basement-token"] = this.accessToken, t2.header["x-serverless-sign"] = de.sign(t2.data, this.config.clientSecret), t2;
  10207. }
  10208. setupRequest(e2, t2) {
  10209. const n2 = Object.assign({}, e2, { spaceId: this.config.spaceId, timestamp: Date.now() }), s2 = { "Content-Type": "application/json" };
  10210. return "auth" !== t2 && (n2.token = this.accessToken, s2["x-basement-token"] = this.accessToken), s2["x-serverless-sign"] = de.sign(n2, this.config.clientSecret), { url: this.config.requestUrl, method: "POST", data: n2, dataType: "json", header: s2 };
  10211. }
  10212. getAccessToken() {
  10213. return this._getAccessTokenPromiseHub.exec();
  10214. }
  10215. async authorize() {
  10216. await this.getAccessToken();
  10217. }
  10218. callFunction(e2) {
  10219. const t2 = { method: "serverless.function.runtime.invoke", params: JSON.stringify({ functionTarget: e2.name, functionArgs: e2.data || {} }) };
  10220. return this.request(this.setupRequest(t2));
  10221. }
  10222. getOSSUploadOptionsFromPath(e2) {
  10223. const t2 = { method: "serverless.file.resource.generateProximalSign", params: JSON.stringify(e2) };
  10224. return this.request(this.setupRequest(t2));
  10225. }
  10226. uploadFileToOSS({ url: e2, formData: t2, name: n2, filePath: s2, fileType: r2, onUploadProgress: i2 }) {
  10227. return new Promise((o2, a2) => {
  10228. const c2 = this.adapter.uploadFile({ url: e2, formData: t2, name: n2, filePath: s2, fileType: r2, header: { "X-OSS-server-side-encrpytion": "AES256" }, success(e3) {
  10229. e3 && e3.statusCode < 400 ? o2(e3) : a2(new te({ code: "UPLOAD_FAILED", message: "文件上传失败" }));
  10230. }, fail(e3) {
  10231. a2(new te({ code: e3.code || "UPLOAD_FAILED", message: e3.message || e3.errMsg || "文件上传失败" }));
  10232. } });
  10233. "function" == typeof i2 && c2 && "function" == typeof c2.onProgressUpdate && c2.onProgressUpdate((e3) => {
  10234. i2({ loaded: e3.totalBytesSent, total: e3.totalBytesExpectedToSend });
  10235. });
  10236. });
  10237. }
  10238. reportOSSUpload(e2) {
  10239. const t2 = { method: "serverless.file.resource.report", params: JSON.stringify(e2) };
  10240. return this.request(this.setupRequest(t2));
  10241. }
  10242. async uploadFile({ filePath: e2, cloudPath: t2, fileType: n2 = "image", cloudPathAsRealPath: s2 = false, onUploadProgress: r2, config: i2 }) {
  10243. if ("string" !== f(t2))
  10244. throw new te({ code: "INVALID_PARAM", message: "cloudPath必须为字符串类型" });
  10245. if (!(t2 = t2.trim()))
  10246. throw new te({ code: "INVALID_PARAM", message: "cloudPath不可为空" });
  10247. if (/:\/\//.test(t2))
  10248. throw new te({ code: "INVALID_PARAM", message: "cloudPath不合法" });
  10249. const o2 = i2 && i2.envType || this.config.envType;
  10250. if (s2 && ("/" !== t2[0] && (t2 = "/" + t2), t2.indexOf("\\") > -1))
  10251. throw new te({ code: "INVALID_PARAM", message: "使用cloudPath作为路径时,cloudPath不可包含“\\”" });
  10252. const a2 = (await this.getOSSUploadOptionsFromPath({ env: o2, filename: s2 ? t2.split("/").pop() : t2, fileId: s2 ? t2 : void 0 })).result, c2 = "https://" + a2.cdnDomain + "/" + a2.ossPath, { securityToken: u2, accessKeyId: h2, signature: l2, host: d2, ossPath: p2, id: g2, policy: m2, ossCallbackUrl: y2 } = a2, _2 = { "Cache-Control": "max-age=2592000", "Content-Disposition": "attachment", OSSAccessKeyId: h2, Signature: l2, host: d2, id: g2, key: p2, policy: m2, success_action_status: 200 };
  10253. if (u2 && (_2["x-oss-security-token"] = u2), y2) {
  10254. const e3 = JSON.stringify({ callbackUrl: y2, callbackBody: JSON.stringify({ fileId: g2, spaceId: this.config.spaceId }), callbackBodyType: "application/json" });
  10255. _2.callback = de.toBase64(e3);
  10256. }
  10257. const w2 = { url: "https://" + a2.host, formData: _2, fileName: "file", name: "file", filePath: e2, fileType: n2 };
  10258. if (await this.uploadFileToOSS(Object.assign({}, w2, { onUploadProgress: r2 })), y2)
  10259. return { success: true, filePath: e2, fileID: c2 };
  10260. if ((await this.reportOSSUpload({ id: g2 })).success)
  10261. return { success: true, filePath: e2, fileID: c2 };
  10262. throw new te({ code: "UPLOAD_FAILED", message: "文件上传失败" });
  10263. }
  10264. getTempFileURL({ fileList: e2 } = {}) {
  10265. return new Promise((t2, n2) => {
  10266. Array.isArray(e2) && 0 !== e2.length || n2(new te({ code: "INVALID_PARAM", message: "fileList的元素必须是非空的字符串" })), t2({ fileList: e2.map((e3) => ({ fileID: e3, tempFileURL: e3 })) });
  10267. });
  10268. }
  10269. async getFileInfo({ fileList: e2 } = {}) {
  10270. if (!Array.isArray(e2) || 0 === e2.length)
  10271. throw new te({ code: "INVALID_PARAM", message: "fileList的元素必须是非空的字符串" });
  10272. const t2 = { method: "serverless.file.resource.info", params: JSON.stringify({ id: e2.map((e3) => e3.split("?")[0]).join(",") }) };
  10273. return { fileList: (await this.request(this.setupRequest(t2))).result };
  10274. }
  10275. };
  10276. var fe = { init(e2) {
  10277. const t2 = new pe(e2), n2 = { signInAnonymously: function() {
  10278. return t2.authorize();
  10279. }, getLoginState: function() {
  10280. return Promise.resolve(false);
  10281. } };
  10282. return t2.auth = function() {
  10283. return n2;
  10284. }, t2.customAuth = t2.auth, t2;
  10285. } };
  10286. const ge = "undefined" != typeof location && "http:" === location.protocol ? "http:" : "https:";
  10287. var me;
  10288. !function(e2) {
  10289. e2.local = "local", e2.none = "none", e2.session = "session";
  10290. }(me || (me = {}));
  10291. var ye = function() {
  10292. }, _e = n(function(e2, t2) {
  10293. var n2;
  10294. e2.exports = (n2 = r, function(e3) {
  10295. var t3 = n2, s2 = t3.lib, r2 = s2.WordArray, i2 = s2.Hasher, o2 = t3.algo, a2 = [], c2 = [];
  10296. !function() {
  10297. function t4(t5) {
  10298. for (var n4 = e3.sqrt(t5), s4 = 2; s4 <= n4; s4++)
  10299. if (!(t5 % s4))
  10300. return false;
  10301. return true;
  10302. }
  10303. function n3(e4) {
  10304. return 4294967296 * (e4 - (0 | e4)) | 0;
  10305. }
  10306. for (var s3 = 2, r3 = 0; r3 < 64; )
  10307. t4(s3) && (r3 < 8 && (a2[r3] = n3(e3.pow(s3, 0.5))), c2[r3] = n3(e3.pow(s3, 1 / 3)), r3++), s3++;
  10308. }();
  10309. var u2 = [], h2 = o2.SHA256 = i2.extend({ _doReset: function() {
  10310. this._hash = new r2.init(a2.slice(0));
  10311. }, _doProcessBlock: function(e4, t4) {
  10312. for (var n3 = this._hash.words, s3 = n3[0], r3 = n3[1], i3 = n3[2], o3 = n3[3], a3 = n3[4], h3 = n3[5], l2 = n3[6], d2 = n3[7], p2 = 0; p2 < 64; p2++) {
  10313. if (p2 < 16)
  10314. u2[p2] = 0 | e4[t4 + p2];
  10315. else {
  10316. var f2 = u2[p2 - 15], g2 = (f2 << 25 | f2 >>> 7) ^ (f2 << 14 | f2 >>> 18) ^ f2 >>> 3, m2 = u2[p2 - 2], y2 = (m2 << 15 | m2 >>> 17) ^ (m2 << 13 | m2 >>> 19) ^ m2 >>> 10;
  10317. u2[p2] = g2 + u2[p2 - 7] + y2 + u2[p2 - 16];
  10318. }
  10319. var _2 = s3 & r3 ^ s3 & i3 ^ r3 & i3, w2 = (s3 << 30 | s3 >>> 2) ^ (s3 << 19 | s3 >>> 13) ^ (s3 << 10 | s3 >>> 22), v2 = d2 + ((a3 << 26 | a3 >>> 6) ^ (a3 << 21 | a3 >>> 11) ^ (a3 << 7 | a3 >>> 25)) + (a3 & h3 ^ ~a3 & l2) + c2[p2] + u2[p2];
  10320. d2 = l2, l2 = h3, h3 = a3, a3 = o3 + v2 | 0, o3 = i3, i3 = r3, r3 = s3, s3 = v2 + (w2 + _2) | 0;
  10321. }
  10322. n3[0] = n3[0] + s3 | 0, n3[1] = n3[1] + r3 | 0, n3[2] = n3[2] + i3 | 0, n3[3] = n3[3] + o3 | 0, n3[4] = n3[4] + a3 | 0, n3[5] = n3[5] + h3 | 0, n3[6] = n3[6] + l2 | 0, n3[7] = n3[7] + d2 | 0;
  10323. }, _doFinalize: function() {
  10324. var t4 = this._data, n3 = t4.words, s3 = 8 * this._nDataBytes, r3 = 8 * t4.sigBytes;
  10325. return n3[r3 >>> 5] |= 128 << 24 - r3 % 32, n3[14 + (r3 + 64 >>> 9 << 4)] = e3.floor(s3 / 4294967296), n3[15 + (r3 + 64 >>> 9 << 4)] = s3, t4.sigBytes = 4 * n3.length, this._process(), this._hash;
  10326. }, clone: function() {
  10327. var e4 = i2.clone.call(this);
  10328. return e4._hash = this._hash.clone(), e4;
  10329. } });
  10330. t3.SHA256 = i2._createHelper(h2), t3.HmacSHA256 = i2._createHmacHelper(h2);
  10331. }(Math), n2.SHA256);
  10332. }), we = _e, ve = n(function(e2, t2) {
  10333. e2.exports = r.HmacSHA256;
  10334. });
  10335. const Ie = () => {
  10336. let e2;
  10337. if (!Promise) {
  10338. e2 = () => {
  10339. }, e2.promise = {};
  10340. const t3 = () => {
  10341. throw new te({ message: 'Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.' });
  10342. };
  10343. return Object.defineProperty(e2.promise, "then", { get: t3 }), Object.defineProperty(e2.promise, "catch", { get: t3 }), e2;
  10344. }
  10345. const t2 = new Promise((t3, n2) => {
  10346. e2 = (e3, s2) => e3 ? n2(e3) : t3(s2);
  10347. });
  10348. return e2.promise = t2, e2;
  10349. };
  10350. function Se(e2) {
  10351. return void 0 === e2;
  10352. }
  10353. function be(e2) {
  10354. return "[object Null]" === Object.prototype.toString.call(e2);
  10355. }
  10356. var ke;
  10357. function Ae(e2) {
  10358. const t2 = (n2 = e2, "[object Array]" === Object.prototype.toString.call(n2) ? e2 : [e2]);
  10359. var n2;
  10360. for (const e3 of t2) {
  10361. const { isMatch: t3, genAdapter: n3, runtime: s2 } = e3;
  10362. if (t3())
  10363. return { adapter: n3(), runtime: s2 };
  10364. }
  10365. }
  10366. !function(e2) {
  10367. e2.WEB = "web", e2.WX_MP = "wx_mp";
  10368. }(ke || (ke = {}));
  10369. const Ce = { adapter: null, runtime: void 0 }, Pe = ["anonymousUuidKey"];
  10370. class Te extends ye {
  10371. constructor() {
  10372. super(), Ce.adapter.root.tcbObject || (Ce.adapter.root.tcbObject = {});
  10373. }
  10374. setItem(e2, t2) {
  10375. Ce.adapter.root.tcbObject[e2] = t2;
  10376. }
  10377. getItem(e2) {
  10378. return Ce.adapter.root.tcbObject[e2];
  10379. }
  10380. removeItem(e2) {
  10381. delete Ce.adapter.root.tcbObject[e2];
  10382. }
  10383. clear() {
  10384. delete Ce.adapter.root.tcbObject;
  10385. }
  10386. }
  10387. function xe(e2, t2) {
  10388. switch (e2) {
  10389. case "local":
  10390. return t2.localStorage || new Te();
  10391. case "none":
  10392. return new Te();
  10393. default:
  10394. return t2.sessionStorage || new Te();
  10395. }
  10396. }
  10397. class Oe {
  10398. constructor(e2) {
  10399. if (!this._storage) {
  10400. this._persistence = Ce.adapter.primaryStorage || e2.persistence, this._storage = xe(this._persistence, Ce.adapter);
  10401. const t2 = `access_token_${e2.env}`, n2 = `access_token_expire_${e2.env}`, s2 = `refresh_token_${e2.env}`, r2 = `anonymous_uuid_${e2.env}`, i2 = `login_type_${e2.env}`, o2 = `user_info_${e2.env}`;
  10402. this.keys = { accessTokenKey: t2, accessTokenExpireKey: n2, refreshTokenKey: s2, anonymousUuidKey: r2, loginTypeKey: i2, userInfoKey: o2 };
  10403. }
  10404. }
  10405. updatePersistence(e2) {
  10406. if (e2 === this._persistence)
  10407. return;
  10408. const t2 = "local" === this._persistence;
  10409. this._persistence = e2;
  10410. const n2 = xe(e2, Ce.adapter);
  10411. for (const e3 in this.keys) {
  10412. const s2 = this.keys[e3];
  10413. if (t2 && Pe.includes(e3))
  10414. continue;
  10415. const r2 = this._storage.getItem(s2);
  10416. Se(r2) || be(r2) || (n2.setItem(s2, r2), this._storage.removeItem(s2));
  10417. }
  10418. this._storage = n2;
  10419. }
  10420. setStore(e2, t2, n2) {
  10421. if (!this._storage)
  10422. return;
  10423. const s2 = { version: n2 || "localCachev1", content: t2 }, r2 = JSON.stringify(s2);
  10424. try {
  10425. this._storage.setItem(e2, r2);
  10426. } catch (e3) {
  10427. throw e3;
  10428. }
  10429. }
  10430. getStore(e2, t2) {
  10431. try {
  10432. if (!this._storage)
  10433. return;
  10434. } catch (e3) {
  10435. return "";
  10436. }
  10437. t2 = t2 || "localCachev1";
  10438. const n2 = this._storage.getItem(e2);
  10439. if (!n2)
  10440. return "";
  10441. if (n2.indexOf(t2) >= 0) {
  10442. return JSON.parse(n2).content;
  10443. }
  10444. return "";
  10445. }
  10446. removeStore(e2) {
  10447. this._storage.removeItem(e2);
  10448. }
  10449. }
  10450. const Ee = {}, Le = {};
  10451. function Re(e2) {
  10452. return Ee[e2];
  10453. }
  10454. class Ue {
  10455. constructor(e2, t2) {
  10456. this.data = t2 || null, this.name = e2;
  10457. }
  10458. }
  10459. class Ne extends Ue {
  10460. constructor(e2, t2) {
  10461. super("error", { error: e2, data: t2 }), this.error = e2;
  10462. }
  10463. }
  10464. const De = new class {
  10465. constructor() {
  10466. this._listeners = {};
  10467. }
  10468. on(e2, t2) {
  10469. return function(e3, t3, n2) {
  10470. n2[e3] = n2[e3] || [], n2[e3].push(t3);
  10471. }(e2, t2, this._listeners), this;
  10472. }
  10473. off(e2, t2) {
  10474. return function(e3, t3, n2) {
  10475. if (n2 && n2[e3]) {
  10476. const s2 = n2[e3].indexOf(t3);
  10477. -1 !== s2 && n2[e3].splice(s2, 1);
  10478. }
  10479. }(e2, t2, this._listeners), this;
  10480. }
  10481. fire(e2, t2) {
  10482. if (e2 instanceof Ne)
  10483. return console.error(e2.error), this;
  10484. const n2 = "string" == typeof e2 ? new Ue(e2, t2 || {}) : e2;
  10485. const s2 = n2.name;
  10486. if (this._listens(s2)) {
  10487. n2.target = this;
  10488. const e3 = this._listeners[s2] ? [...this._listeners[s2]] : [];
  10489. for (const t3 of e3)
  10490. t3.call(this, n2);
  10491. }
  10492. return this;
  10493. }
  10494. _listens(e2) {
  10495. return this._listeners[e2] && this._listeners[e2].length > 0;
  10496. }
  10497. }();
  10498. function Me(e2, t2) {
  10499. De.on(e2, t2);
  10500. }
  10501. function qe(e2, t2 = {}) {
  10502. De.fire(e2, t2);
  10503. }
  10504. function Fe(e2, t2) {
  10505. De.off(e2, t2);
  10506. }
  10507. const Ke = "loginStateChanged", je = "loginStateExpire", $e = "loginTypeChanged", Be = "anonymousConverted", We = "refreshAccessToken";
  10508. var He;
  10509. !function(e2) {
  10510. e2.ANONYMOUS = "ANONYMOUS", e2.WECHAT = "WECHAT", e2.WECHAT_PUBLIC = "WECHAT-PUBLIC", e2.WECHAT_OPEN = "WECHAT-OPEN", e2.CUSTOM = "CUSTOM", e2.EMAIL = "EMAIL", e2.USERNAME = "USERNAME", e2.NULL = "NULL";
  10511. }(He || (He = {}));
  10512. const ze = ["auth.getJwt", "auth.logout", "auth.signInWithTicket", "auth.signInAnonymously", "auth.signIn", "auth.fetchAccessTokenWithRefreshToken", "auth.signUpWithEmailAndPassword", "auth.activateEndUserMail", "auth.sendPasswordResetEmail", "auth.resetPasswordWithToken", "auth.isUsernameRegistered"], Je = { "X-SDK-Version": "1.3.5" };
  10513. function Ve(e2, t2, n2) {
  10514. const s2 = e2[t2];
  10515. e2[t2] = function(t3) {
  10516. const r2 = {}, i2 = {};
  10517. n2.forEach((n3) => {
  10518. const { data: s3, headers: o3 } = n3.call(e2, t3);
  10519. Object.assign(r2, s3), Object.assign(i2, o3);
  10520. });
  10521. const o2 = t3.data;
  10522. return o2 && (() => {
  10523. var e3;
  10524. if (e3 = o2, "[object FormData]" !== Object.prototype.toString.call(e3))
  10525. t3.data = { ...o2, ...r2 };
  10526. else
  10527. for (const e4 in r2)
  10528. o2.append(e4, r2[e4]);
  10529. })(), t3.headers = { ...t3.headers || {}, ...i2 }, s2.call(e2, t3);
  10530. };
  10531. }
  10532. function Ge() {
  10533. const e2 = Math.random().toString(16).slice(2);
  10534. return { data: { seqId: e2 }, headers: { ...Je, "x-seqid": e2 } };
  10535. }
  10536. class Ye {
  10537. constructor(e2 = {}) {
  10538. var t2;
  10539. this.config = e2, this._reqClass = new Ce.adapter.reqClass({ timeout: this.config.timeout, timeoutMsg: `请求在${this.config.timeout / 1e3}s内未完成,已中断`, restrictedMethods: ["post"] }), this._cache = Re(this.config.env), this._localCache = (t2 = this.config.env, Le[t2]), Ve(this._reqClass, "post", [Ge]), Ve(this._reqClass, "upload", [Ge]), Ve(this._reqClass, "download", [Ge]);
  10540. }
  10541. async post(e2) {
  10542. return await this._reqClass.post(e2);
  10543. }
  10544. async upload(e2) {
  10545. return await this._reqClass.upload(e2);
  10546. }
  10547. async download(e2) {
  10548. return await this._reqClass.download(e2);
  10549. }
  10550. async refreshAccessToken() {
  10551. let e2, t2;
  10552. this._refreshAccessTokenPromise || (this._refreshAccessTokenPromise = this._refreshAccessToken());
  10553. try {
  10554. e2 = await this._refreshAccessTokenPromise;
  10555. } catch (e3) {
  10556. t2 = e3;
  10557. }
  10558. if (this._refreshAccessTokenPromise = null, this._shouldRefreshAccessTokenHook = null, t2)
  10559. throw t2;
  10560. return e2;
  10561. }
  10562. async _refreshAccessToken() {
  10563. const { accessTokenKey: e2, accessTokenExpireKey: t2, refreshTokenKey: n2, loginTypeKey: s2, anonymousUuidKey: r2 } = this._cache.keys;
  10564. this._cache.removeStore(e2), this._cache.removeStore(t2);
  10565. let i2 = this._cache.getStore(n2);
  10566. if (!i2)
  10567. throw new te({ message: "未登录CloudBase" });
  10568. const o2 = { refresh_token: i2 }, a2 = await this.request("auth.fetchAccessTokenWithRefreshToken", o2);
  10569. if (a2.data.code) {
  10570. const { code: e3 } = a2.data;
  10571. if ("SIGN_PARAM_INVALID" === e3 || "REFRESH_TOKEN_EXPIRED" === e3 || "INVALID_REFRESH_TOKEN" === e3) {
  10572. if (this._cache.getStore(s2) === He.ANONYMOUS && "INVALID_REFRESH_TOKEN" === e3) {
  10573. const e4 = this._cache.getStore(r2), t3 = this._cache.getStore(n2), s3 = await this.send("auth.signInAnonymously", { anonymous_uuid: e4, refresh_token: t3 });
  10574. return this.setRefreshToken(s3.refresh_token), this._refreshAccessToken();
  10575. }
  10576. qe(je), this._cache.removeStore(n2);
  10577. }
  10578. throw new te({ code: a2.data.code, message: `刷新access token失败:${a2.data.code}` });
  10579. }
  10580. if (a2.data.access_token)
  10581. return qe(We), this._cache.setStore(e2, a2.data.access_token), this._cache.setStore(t2, a2.data.access_token_expire + Date.now()), { accessToken: a2.data.access_token, accessTokenExpire: a2.data.access_token_expire };
  10582. a2.data.refresh_token && (this._cache.removeStore(n2), this._cache.setStore(n2, a2.data.refresh_token), this._refreshAccessToken());
  10583. }
  10584. async getAccessToken() {
  10585. const { accessTokenKey: e2, accessTokenExpireKey: t2, refreshTokenKey: n2 } = this._cache.keys;
  10586. if (!this._cache.getStore(n2))
  10587. throw new te({ message: "refresh token不存在,登录状态异常" });
  10588. let s2 = this._cache.getStore(e2), r2 = this._cache.getStore(t2), i2 = true;
  10589. return this._shouldRefreshAccessTokenHook && !await this._shouldRefreshAccessTokenHook(s2, r2) && (i2 = false), (!s2 || !r2 || r2 < Date.now()) && i2 ? this.refreshAccessToken() : { accessToken: s2, accessTokenExpire: r2 };
  10590. }
  10591. async request(e2, t2, n2) {
  10592. const s2 = `x-tcb-trace_${this.config.env}`;
  10593. let r2 = "application/x-www-form-urlencoded";
  10594. const i2 = { action: e2, env: this.config.env, dataVersion: "2019-08-16", ...t2 };
  10595. if (-1 === ze.indexOf(e2)) {
  10596. const { refreshTokenKey: e3 } = this._cache.keys;
  10597. this._cache.getStore(e3) && (i2.access_token = (await this.getAccessToken()).accessToken);
  10598. }
  10599. let o2;
  10600. if ("storage.uploadFile" === e2) {
  10601. o2 = new FormData();
  10602. for (let e3 in o2)
  10603. o2.hasOwnProperty(e3) && void 0 !== o2[e3] && o2.append(e3, i2[e3]);
  10604. r2 = "multipart/form-data";
  10605. } else {
  10606. r2 = "application/json", o2 = {};
  10607. for (let e3 in i2)
  10608. void 0 !== i2[e3] && (o2[e3] = i2[e3]);
  10609. }
  10610. let a2 = { headers: { "content-type": r2 } };
  10611. n2 && n2.onUploadProgress && (a2.onUploadProgress = n2.onUploadProgress);
  10612. const c2 = this._localCache.getStore(s2);
  10613. c2 && (a2.headers["X-TCB-Trace"] = c2);
  10614. const { parse: u2, inQuery: h2, search: l2 } = t2;
  10615. let d2 = { env: this.config.env };
  10616. u2 && (d2.parse = true), h2 && (d2 = { ...h2, ...d2 });
  10617. let p2 = function(e3, t3, n3 = {}) {
  10618. const s3 = /\?/.test(t3);
  10619. let r3 = "";
  10620. for (let e4 in n3)
  10621. "" === r3 ? !s3 && (t3 += "?") : r3 += "&", r3 += `${e4}=${encodeURIComponent(n3[e4])}`;
  10622. return /^http(s)?\:\/\//.test(t3 += r3) ? t3 : `${e3}${t3}`;
  10623. }(ge, "//tcb-api.tencentcloudapi.com/web", d2);
  10624. l2 && (p2 += l2);
  10625. const f2 = await this.post({ url: p2, data: o2, ...a2 }), g2 = f2.header && f2.header["x-tcb-trace"];
  10626. if (g2 && this._localCache.setStore(s2, g2), 200 !== Number(f2.status) && 200 !== Number(f2.statusCode) || !f2.data)
  10627. throw new te({ code: "NETWORK_ERROR", message: "network request error" });
  10628. return f2;
  10629. }
  10630. async send(e2, t2 = {}) {
  10631. const n2 = await this.request(e2, t2, { onUploadProgress: t2.onUploadProgress });
  10632. if ("ACCESS_TOKEN_EXPIRED" === n2.data.code && -1 === ze.indexOf(e2)) {
  10633. await this.refreshAccessToken();
  10634. const n3 = await this.request(e2, t2, { onUploadProgress: t2.onUploadProgress });
  10635. if (n3.data.code)
  10636. throw new te({ code: n3.data.code, message: n3.data.message });
  10637. return n3.data;
  10638. }
  10639. if (n2.data.code)
  10640. throw new te({ code: n2.data.code, message: n2.data.message });
  10641. return n2.data;
  10642. }
  10643. setRefreshToken(e2) {
  10644. const { accessTokenKey: t2, accessTokenExpireKey: n2, refreshTokenKey: s2 } = this._cache.keys;
  10645. this._cache.removeStore(t2), this._cache.removeStore(n2), this._cache.setStore(s2, e2);
  10646. }
  10647. }
  10648. const Qe = {};
  10649. function Xe(e2) {
  10650. return Qe[e2];
  10651. }
  10652. class Ze {
  10653. constructor(e2) {
  10654. this.config = e2, this._cache = Re(e2.env), this._request = Xe(e2.env);
  10655. }
  10656. setRefreshToken(e2) {
  10657. const { accessTokenKey: t2, accessTokenExpireKey: n2, refreshTokenKey: s2 } = this._cache.keys;
  10658. this._cache.removeStore(t2), this._cache.removeStore(n2), this._cache.setStore(s2, e2);
  10659. }
  10660. setAccessToken(e2, t2) {
  10661. const { accessTokenKey: n2, accessTokenExpireKey: s2 } = this._cache.keys;
  10662. this._cache.setStore(n2, e2), this._cache.setStore(s2, t2);
  10663. }
  10664. async refreshUserInfo() {
  10665. const { data: e2 } = await this._request.send("auth.getUserInfo", {});
  10666. return this.setLocalUserInfo(e2), e2;
  10667. }
  10668. setLocalUserInfo(e2) {
  10669. const { userInfoKey: t2 } = this._cache.keys;
  10670. this._cache.setStore(t2, e2);
  10671. }
  10672. }
  10673. class et {
  10674. constructor(e2) {
  10675. if (!e2)
  10676. throw new te({ code: "PARAM_ERROR", message: "envId is not defined" });
  10677. this._envId = e2, this._cache = Re(this._envId), this._request = Xe(this._envId), this.setUserInfo();
  10678. }
  10679. linkWithTicket(e2) {
  10680. if ("string" != typeof e2)
  10681. throw new te({ code: "PARAM_ERROR", message: "ticket must be string" });
  10682. return this._request.send("auth.linkWithTicket", { ticket: e2 });
  10683. }
  10684. linkWithRedirect(e2) {
  10685. e2.signInWithRedirect();
  10686. }
  10687. updatePassword(e2, t2) {
  10688. return this._request.send("auth.updatePassword", { oldPassword: t2, newPassword: e2 });
  10689. }
  10690. updateEmail(e2) {
  10691. return this._request.send("auth.updateEmail", { newEmail: e2 });
  10692. }
  10693. updateUsername(e2) {
  10694. if ("string" != typeof e2)
  10695. throw new te({ code: "PARAM_ERROR", message: "username must be a string" });
  10696. return this._request.send("auth.updateUsername", { username: e2 });
  10697. }
  10698. async getLinkedUidList() {
  10699. const { data: e2 } = await this._request.send("auth.getLinkedUidList", {});
  10700. let t2 = false;
  10701. const { users: n2 } = e2;
  10702. return n2.forEach((e3) => {
  10703. e3.wxOpenId && e3.wxPublicId && (t2 = true);
  10704. }), { users: n2, hasPrimaryUid: t2 };
  10705. }
  10706. setPrimaryUid(e2) {
  10707. return this._request.send("auth.setPrimaryUid", { uid: e2 });
  10708. }
  10709. unlink(e2) {
  10710. return this._request.send("auth.unlink", { platform: e2 });
  10711. }
  10712. async update(e2) {
  10713. const { nickName: t2, gender: n2, avatarUrl: s2, province: r2, country: i2, city: o2 } = e2, { data: a2 } = await this._request.send("auth.updateUserInfo", { nickName: t2, gender: n2, avatarUrl: s2, province: r2, country: i2, city: o2 });
  10714. this.setLocalUserInfo(a2);
  10715. }
  10716. async refresh() {
  10717. const { data: e2 } = await this._request.send("auth.getUserInfo", {});
  10718. return this.setLocalUserInfo(e2), e2;
  10719. }
  10720. setUserInfo() {
  10721. const { userInfoKey: e2 } = this._cache.keys, t2 = this._cache.getStore(e2);
  10722. ["uid", "loginType", "openid", "wxOpenId", "wxPublicId", "unionId", "qqMiniOpenId", "email", "hasPassword", "customUserId", "nickName", "gender", "avatarUrl"].forEach((e3) => {
  10723. this[e3] = t2[e3];
  10724. }), this.location = { country: t2.country, province: t2.province, city: t2.city };
  10725. }
  10726. setLocalUserInfo(e2) {
  10727. const { userInfoKey: t2 } = this._cache.keys;
  10728. this._cache.setStore(t2, e2), this.setUserInfo();
  10729. }
  10730. }
  10731. class tt {
  10732. constructor(e2) {
  10733. if (!e2)
  10734. throw new te({ code: "PARAM_ERROR", message: "envId is not defined" });
  10735. this._cache = Re(e2);
  10736. const { refreshTokenKey: t2, accessTokenKey: n2, accessTokenExpireKey: s2 } = this._cache.keys, r2 = this._cache.getStore(t2), i2 = this._cache.getStore(n2), o2 = this._cache.getStore(s2);
  10737. this.credential = { refreshToken: r2, accessToken: i2, accessTokenExpire: o2 }, this.user = new et(e2);
  10738. }
  10739. get isAnonymousAuth() {
  10740. return this.loginType === He.ANONYMOUS;
  10741. }
  10742. get isCustomAuth() {
  10743. return this.loginType === He.CUSTOM;
  10744. }
  10745. get isWeixinAuth() {
  10746. return this.loginType === He.WECHAT || this.loginType === He.WECHAT_OPEN || this.loginType === He.WECHAT_PUBLIC;
  10747. }
  10748. get loginType() {
  10749. return this._cache.getStore(this._cache.keys.loginTypeKey);
  10750. }
  10751. }
  10752. class nt extends Ze {
  10753. async signIn() {
  10754. this._cache.updatePersistence("local");
  10755. const { anonymousUuidKey: e2, refreshTokenKey: t2 } = this._cache.keys, n2 = this._cache.getStore(e2) || void 0, s2 = this._cache.getStore(t2) || void 0, r2 = await this._request.send("auth.signInAnonymously", { anonymous_uuid: n2, refresh_token: s2 });
  10756. if (r2.uuid && r2.refresh_token) {
  10757. this._setAnonymousUUID(r2.uuid), this.setRefreshToken(r2.refresh_token), await this._request.refreshAccessToken(), qe(Ke), qe($e, { env: this.config.env, loginType: He.ANONYMOUS, persistence: "local" });
  10758. const e3 = new tt(this.config.env);
  10759. return await e3.user.refresh(), e3;
  10760. }
  10761. throw new te({ message: "匿名登录失败" });
  10762. }
  10763. async linkAndRetrieveDataWithTicket(e2) {
  10764. const { anonymousUuidKey: t2, refreshTokenKey: n2 } = this._cache.keys, s2 = this._cache.getStore(t2), r2 = this._cache.getStore(n2), i2 = await this._request.send("auth.linkAndRetrieveDataWithTicket", { anonymous_uuid: s2, refresh_token: r2, ticket: e2 });
  10765. if (i2.refresh_token)
  10766. return this._clearAnonymousUUID(), this.setRefreshToken(i2.refresh_token), await this._request.refreshAccessToken(), qe(Be, { env: this.config.env }), qe($e, { loginType: He.CUSTOM, persistence: "local" }), { credential: { refreshToken: i2.refresh_token } };
  10767. throw new te({ message: "匿名转化失败" });
  10768. }
  10769. _setAnonymousUUID(e2) {
  10770. const { anonymousUuidKey: t2, loginTypeKey: n2 } = this._cache.keys;
  10771. this._cache.removeStore(t2), this._cache.setStore(t2, e2), this._cache.setStore(n2, He.ANONYMOUS);
  10772. }
  10773. _clearAnonymousUUID() {
  10774. this._cache.removeStore(this._cache.keys.anonymousUuidKey);
  10775. }
  10776. }
  10777. class st extends Ze {
  10778. async signIn(e2) {
  10779. if ("string" != typeof e2)
  10780. throw new te({ code: "PARAM_ERROR", message: "ticket must be a string" });
  10781. const { refreshTokenKey: t2 } = this._cache.keys, n2 = await this._request.send("auth.signInWithTicket", { ticket: e2, refresh_token: this._cache.getStore(t2) || "" });
  10782. if (n2.refresh_token)
  10783. return this.setRefreshToken(n2.refresh_token), await this._request.refreshAccessToken(), qe(Ke), qe($e, { env: this.config.env, loginType: He.CUSTOM, persistence: this.config.persistence }), await this.refreshUserInfo(), new tt(this.config.env);
  10784. throw new te({ message: "自定义登录失败" });
  10785. }
  10786. }
  10787. class rt extends Ze {
  10788. async signIn(e2, t2) {
  10789. if ("string" != typeof e2)
  10790. throw new te({ code: "PARAM_ERROR", message: "email must be a string" });
  10791. const { refreshTokenKey: n2 } = this._cache.keys, s2 = await this._request.send("auth.signIn", { loginType: "EMAIL", email: e2, password: t2, refresh_token: this._cache.getStore(n2) || "" }), { refresh_token: r2, access_token: i2, access_token_expire: o2 } = s2;
  10792. if (r2)
  10793. return this.setRefreshToken(r2), i2 && o2 ? this.setAccessToken(i2, o2) : await this._request.refreshAccessToken(), await this.refreshUserInfo(), qe(Ke), qe($e, { env: this.config.env, loginType: He.EMAIL, persistence: this.config.persistence }), new tt(this.config.env);
  10794. throw s2.code ? new te({ code: s2.code, message: `邮箱登录失败: ${s2.message}` }) : new te({ message: "邮箱登录失败" });
  10795. }
  10796. async activate(e2) {
  10797. return this._request.send("auth.activateEndUserMail", { token: e2 });
  10798. }
  10799. async resetPasswordWithToken(e2, t2) {
  10800. return this._request.send("auth.resetPasswordWithToken", { token: e2, newPassword: t2 });
  10801. }
  10802. }
  10803. class it extends Ze {
  10804. async signIn(e2, t2) {
  10805. if ("string" != typeof e2)
  10806. throw new te({ code: "PARAM_ERROR", message: "username must be a string" });
  10807. "string" != typeof t2 && (t2 = "", console.warn("password is empty"));
  10808. const { refreshTokenKey: n2 } = this._cache.keys, s2 = await this._request.send("auth.signIn", { loginType: He.USERNAME, username: e2, password: t2, refresh_token: this._cache.getStore(n2) || "" }), { refresh_token: r2, access_token_expire: i2, access_token: o2 } = s2;
  10809. if (r2)
  10810. return this.setRefreshToken(r2), o2 && i2 ? this.setAccessToken(o2, i2) : await this._request.refreshAccessToken(), await this.refreshUserInfo(), qe(Ke), qe($e, { env: this.config.env, loginType: He.USERNAME, persistence: this.config.persistence }), new tt(this.config.env);
  10811. throw s2.code ? new te({ code: s2.code, message: `用户名密码登录失败: ${s2.message}` }) : new te({ message: "用户名密码登录失败" });
  10812. }
  10813. }
  10814. class ot {
  10815. constructor(e2) {
  10816. this.config = e2, this._cache = Re(e2.env), this._request = Xe(e2.env), this._onAnonymousConverted = this._onAnonymousConverted.bind(this), this._onLoginTypeChanged = this._onLoginTypeChanged.bind(this), Me($e, this._onLoginTypeChanged);
  10817. }
  10818. get currentUser() {
  10819. const e2 = this.hasLoginState();
  10820. return e2 && e2.user || null;
  10821. }
  10822. get loginType() {
  10823. return this._cache.getStore(this._cache.keys.loginTypeKey);
  10824. }
  10825. anonymousAuthProvider() {
  10826. return new nt(this.config);
  10827. }
  10828. customAuthProvider() {
  10829. return new st(this.config);
  10830. }
  10831. emailAuthProvider() {
  10832. return new rt(this.config);
  10833. }
  10834. usernameAuthProvider() {
  10835. return new it(this.config);
  10836. }
  10837. async signInAnonymously() {
  10838. return new nt(this.config).signIn();
  10839. }
  10840. async signInWithEmailAndPassword(e2, t2) {
  10841. return new rt(this.config).signIn(e2, t2);
  10842. }
  10843. signInWithUsernameAndPassword(e2, t2) {
  10844. return new it(this.config).signIn(e2, t2);
  10845. }
  10846. async linkAndRetrieveDataWithTicket(e2) {
  10847. this._anonymousAuthProvider || (this._anonymousAuthProvider = new nt(this.config)), Me(Be, this._onAnonymousConverted);
  10848. return await this._anonymousAuthProvider.linkAndRetrieveDataWithTicket(e2);
  10849. }
  10850. async signOut() {
  10851. if (this.loginType === He.ANONYMOUS)
  10852. throw new te({ message: "匿名用户不支持登出操作" });
  10853. const { refreshTokenKey: e2, accessTokenKey: t2, accessTokenExpireKey: n2 } = this._cache.keys, s2 = this._cache.getStore(e2);
  10854. if (!s2)
  10855. return;
  10856. const r2 = await this._request.send("auth.logout", { refresh_token: s2 });
  10857. return this._cache.removeStore(e2), this._cache.removeStore(t2), this._cache.removeStore(n2), qe(Ke), qe($e, { env: this.config.env, loginType: He.NULL, persistence: this.config.persistence }), r2;
  10858. }
  10859. async signUpWithEmailAndPassword(e2, t2) {
  10860. return this._request.send("auth.signUpWithEmailAndPassword", { email: e2, password: t2 });
  10861. }
  10862. async sendPasswordResetEmail(e2) {
  10863. return this._request.send("auth.sendPasswordResetEmail", { email: e2 });
  10864. }
  10865. onLoginStateChanged(e2) {
  10866. Me(Ke, () => {
  10867. const t3 = this.hasLoginState();
  10868. e2.call(this, t3);
  10869. });
  10870. const t2 = this.hasLoginState();
  10871. e2.call(this, t2);
  10872. }
  10873. onLoginStateExpired(e2) {
  10874. Me(je, e2.bind(this));
  10875. }
  10876. onAccessTokenRefreshed(e2) {
  10877. Me(We, e2.bind(this));
  10878. }
  10879. onAnonymousConverted(e2) {
  10880. Me(Be, e2.bind(this));
  10881. }
  10882. onLoginTypeChanged(e2) {
  10883. Me($e, () => {
  10884. const t2 = this.hasLoginState();
  10885. e2.call(this, t2);
  10886. });
  10887. }
  10888. async getAccessToken() {
  10889. return { accessToken: (await this._request.getAccessToken()).accessToken, env: this.config.env };
  10890. }
  10891. hasLoginState() {
  10892. const { refreshTokenKey: e2 } = this._cache.keys;
  10893. return this._cache.getStore(e2) ? new tt(this.config.env) : null;
  10894. }
  10895. async isUsernameRegistered(e2) {
  10896. if ("string" != typeof e2)
  10897. throw new te({ code: "PARAM_ERROR", message: "username must be a string" });
  10898. const { data: t2 } = await this._request.send("auth.isUsernameRegistered", { username: e2 });
  10899. return t2 && t2.isRegistered;
  10900. }
  10901. getLoginState() {
  10902. return Promise.resolve(this.hasLoginState());
  10903. }
  10904. async signInWithTicket(e2) {
  10905. return new st(this.config).signIn(e2);
  10906. }
  10907. shouldRefreshAccessToken(e2) {
  10908. this._request._shouldRefreshAccessTokenHook = e2.bind(this);
  10909. }
  10910. getUserInfo() {
  10911. return this._request.send("auth.getUserInfo", {}).then((e2) => e2.code ? e2 : { ...e2.data, requestId: e2.seqId });
  10912. }
  10913. getAuthHeader() {
  10914. const { refreshTokenKey: e2, accessTokenKey: t2 } = this._cache.keys, n2 = this._cache.getStore(e2);
  10915. return { "x-cloudbase-credentials": this._cache.getStore(t2) + "/@@/" + n2 };
  10916. }
  10917. _onAnonymousConverted(e2) {
  10918. const { env: t2 } = e2.data;
  10919. t2 === this.config.env && this._cache.updatePersistence(this.config.persistence);
  10920. }
  10921. _onLoginTypeChanged(e2) {
  10922. const { loginType: t2, persistence: n2, env: s2 } = e2.data;
  10923. s2 === this.config.env && (this._cache.updatePersistence(n2), this._cache.setStore(this._cache.keys.loginTypeKey, t2));
  10924. }
  10925. }
  10926. const at = function(e2, t2) {
  10927. t2 = t2 || Ie();
  10928. const n2 = Xe(this.config.env), { cloudPath: s2, filePath: r2, onUploadProgress: i2, fileType: o2 = "image" } = e2;
  10929. return n2.send("storage.getUploadMetadata", { path: s2 }).then((e3) => {
  10930. const { data: { url: a2, authorization: c2, token: u2, fileId: h2, cosFileId: l2 }, requestId: d2 } = e3, p2 = { key: s2, signature: c2, "x-cos-meta-fileid": l2, success_action_status: "201", "x-cos-security-token": u2 };
  10931. n2.upload({ url: a2, data: p2, file: r2, name: s2, fileType: o2, onUploadProgress: i2 }).then((e4) => {
  10932. 201 === e4.statusCode ? t2(null, { fileID: h2, requestId: d2 }) : t2(new te({ code: "STORAGE_REQUEST_FAIL", message: `STORAGE_REQUEST_FAIL: ${e4.data}` }));
  10933. }).catch((e4) => {
  10934. t2(e4);
  10935. });
  10936. }).catch((e3) => {
  10937. t2(e3);
  10938. }), t2.promise;
  10939. }, ct = function(e2, t2) {
  10940. t2 = t2 || Ie();
  10941. const n2 = Xe(this.config.env), { cloudPath: s2 } = e2;
  10942. return n2.send("storage.getUploadMetadata", { path: s2 }).then((e3) => {
  10943. t2(null, e3);
  10944. }).catch((e3) => {
  10945. t2(e3);
  10946. }), t2.promise;
  10947. }, ut = function({ fileList: e2 }, t2) {
  10948. if (t2 = t2 || Ie(), !e2 || !Array.isArray(e2))
  10949. return { code: "INVALID_PARAM", message: "fileList必须是非空的数组" };
  10950. for (let t3 of e2)
  10951. if (!t3 || "string" != typeof t3)
  10952. return { code: "INVALID_PARAM", message: "fileList的元素必须是非空的字符串" };
  10953. const n2 = { fileid_list: e2 };
  10954. return Xe(this.config.env).send("storage.batchDeleteFile", n2).then((e3) => {
  10955. e3.code ? t2(null, e3) : t2(null, { fileList: e3.data.delete_list, requestId: e3.requestId });
  10956. }).catch((e3) => {
  10957. t2(e3);
  10958. }), t2.promise;
  10959. }, ht = function({ fileList: e2 }, t2) {
  10960. t2 = t2 || Ie(), e2 && Array.isArray(e2) || t2(null, { code: "INVALID_PARAM", message: "fileList必须是非空的数组" });
  10961. let n2 = [];
  10962. for (let s3 of e2)
  10963. "object" == typeof s3 ? (s3.hasOwnProperty("fileID") && s3.hasOwnProperty("maxAge") || t2(null, { code: "INVALID_PARAM", message: "fileList的元素必须是包含fileID和maxAge的对象" }), n2.push({ fileid: s3.fileID, max_age: s3.maxAge })) : "string" == typeof s3 ? n2.push({ fileid: s3 }) : t2(null, { code: "INVALID_PARAM", message: "fileList的元素必须是字符串" });
  10964. const s2 = { file_list: n2 };
  10965. return Xe(this.config.env).send("storage.batchGetDownloadUrl", s2).then((e3) => {
  10966. e3.code ? t2(null, e3) : t2(null, { fileList: e3.data.download_list, requestId: e3.requestId });
  10967. }).catch((e3) => {
  10968. t2(e3);
  10969. }), t2.promise;
  10970. }, lt = async function({ fileID: e2 }, t2) {
  10971. const n2 = (await ht.call(this, { fileList: [{ fileID: e2, maxAge: 600 }] })).fileList[0];
  10972. if ("SUCCESS" !== n2.code)
  10973. return t2 ? t2(n2) : new Promise((e3) => {
  10974. e3(n2);
  10975. });
  10976. const s2 = Xe(this.config.env);
  10977. let r2 = n2.download_url;
  10978. if (r2 = encodeURI(r2), !t2)
  10979. return s2.download({ url: r2 });
  10980. t2(await s2.download({ url: r2 }));
  10981. }, dt = function({ name: e2, data: t2, query: n2, parse: s2, search: r2 }, i2) {
  10982. const o2 = i2 || Ie();
  10983. let a2;
  10984. try {
  10985. a2 = t2 ? JSON.stringify(t2) : "";
  10986. } catch (e3) {
  10987. return Promise.reject(e3);
  10988. }
  10989. if (!e2)
  10990. return Promise.reject(new te({ code: "PARAM_ERROR", message: "函数名不能为空" }));
  10991. const c2 = { inQuery: n2, parse: s2, search: r2, function_name: e2, request_data: a2 };
  10992. return Xe(this.config.env).send("functions.invokeFunction", c2).then((e3) => {
  10993. if (e3.code)
  10994. o2(null, e3);
  10995. else {
  10996. let t3 = e3.data.response_data;
  10997. if (s2)
  10998. o2(null, { result: t3, requestId: e3.requestId });
  10999. else
  11000. try {
  11001. t3 = JSON.parse(e3.data.response_data), o2(null, { result: t3, requestId: e3.requestId });
  11002. } catch (e4) {
  11003. o2(new te({ message: "response data must be json" }));
  11004. }
  11005. }
  11006. return o2.promise;
  11007. }).catch((e3) => {
  11008. o2(e3);
  11009. }), o2.promise;
  11010. }, pt = { timeout: 15e3, persistence: "session" }, ft = {};
  11011. class gt {
  11012. constructor(e2) {
  11013. this.config = e2 || this.config, this.authObj = void 0;
  11014. }
  11015. init(e2) {
  11016. switch (Ce.adapter || (this.requestClient = new Ce.adapter.reqClass({ timeout: e2.timeout || 5e3, timeoutMsg: `请求在${(e2.timeout || 5e3) / 1e3}s内未完成,已中断` })), this.config = { ...pt, ...e2 }, true) {
  11017. case this.config.timeout > 6e5:
  11018. console.warn("timeout大于可配置上限[10分钟],已重置为上限数值"), this.config.timeout = 6e5;
  11019. break;
  11020. case this.config.timeout < 100:
  11021. console.warn("timeout小于可配置下限[100ms],已重置为下限数值"), this.config.timeout = 100;
  11022. }
  11023. return new gt(this.config);
  11024. }
  11025. auth({ persistence: e2 } = {}) {
  11026. if (this.authObj)
  11027. return this.authObj;
  11028. const t2 = e2 || Ce.adapter.primaryStorage || pt.persistence;
  11029. var n2;
  11030. return t2 !== this.config.persistence && (this.config.persistence = t2), function(e3) {
  11031. const { env: t3 } = e3;
  11032. Ee[t3] = new Oe(e3), Le[t3] = new Oe({ ...e3, persistence: "local" });
  11033. }(this.config), n2 = this.config, Qe[n2.env] = new Ye(n2), this.authObj = new ot(this.config), this.authObj;
  11034. }
  11035. on(e2, t2) {
  11036. return Me.apply(this, [e2, t2]);
  11037. }
  11038. off(e2, t2) {
  11039. return Fe.apply(this, [e2, t2]);
  11040. }
  11041. callFunction(e2, t2) {
  11042. return dt.apply(this, [e2, t2]);
  11043. }
  11044. deleteFile(e2, t2) {
  11045. return ut.apply(this, [e2, t2]);
  11046. }
  11047. getTempFileURL(e2, t2) {
  11048. return ht.apply(this, [e2, t2]);
  11049. }
  11050. downloadFile(e2, t2) {
  11051. return lt.apply(this, [e2, t2]);
  11052. }
  11053. uploadFile(e2, t2) {
  11054. return at.apply(this, [e2, t2]);
  11055. }
  11056. getUploadMetadata(e2, t2) {
  11057. return ct.apply(this, [e2, t2]);
  11058. }
  11059. registerExtension(e2) {
  11060. ft[e2.name] = e2;
  11061. }
  11062. async invokeExtension(e2, t2) {
  11063. const n2 = ft[e2];
  11064. if (!n2)
  11065. throw new te({ message: `扩展${e2} 必须先注册` });
  11066. return await n2.invoke(t2, this);
  11067. }
  11068. useAdapters(e2) {
  11069. const { adapter: t2, runtime: n2 } = Ae(e2) || {};
  11070. t2 && (Ce.adapter = t2), n2 && (Ce.runtime = n2);
  11071. }
  11072. }
  11073. var mt = new gt();
  11074. function yt(e2, t2, n2) {
  11075. void 0 === n2 && (n2 = {});
  11076. var s2 = /\?/.test(t2), r2 = "";
  11077. for (var i2 in n2)
  11078. "" === r2 ? !s2 && (t2 += "?") : r2 += "&", r2 += i2 + "=" + encodeURIComponent(n2[i2]);
  11079. return /^http(s)?:\/\//.test(t2 += r2) ? t2 : "" + e2 + t2;
  11080. }
  11081. class _t {
  11082. post(e2) {
  11083. const { url: t2, data: n2, headers: s2 } = e2;
  11084. return new Promise((e3, r2) => {
  11085. ne.request({ url: yt("https:", t2), data: n2, method: "POST", header: s2, success(t3) {
  11086. e3(t3);
  11087. }, fail(e4) {
  11088. r2(e4);
  11089. } });
  11090. });
  11091. }
  11092. upload(e2) {
  11093. return new Promise((t2, n2) => {
  11094. const { url: s2, file: r2, data: i2, headers: o2, fileType: a2 } = e2, c2 = ne.uploadFile({ url: yt("https:", s2), name: "file", formData: Object.assign({}, i2), filePath: r2, fileType: a2, header: o2, success(e3) {
  11095. const n3 = { statusCode: e3.statusCode, data: e3.data || {} };
  11096. 200 === e3.statusCode && i2.success_action_status && (n3.statusCode = parseInt(i2.success_action_status, 10)), t2(n3);
  11097. }, fail(e3) {
  11098. n2(new Error(e3.errMsg || "uploadFile:fail"));
  11099. } });
  11100. "function" == typeof e2.onUploadProgress && c2 && "function" == typeof c2.onProgressUpdate && c2.onProgressUpdate((t3) => {
  11101. e2.onUploadProgress({ loaded: t3.totalBytesSent, total: t3.totalBytesExpectedToSend });
  11102. });
  11103. });
  11104. }
  11105. }
  11106. const wt = { setItem(e2, t2) {
  11107. ne.setStorageSync(e2, t2);
  11108. }, getItem: (e2) => ne.getStorageSync(e2), removeItem(e2) {
  11109. ne.removeStorageSync(e2);
  11110. }, clear() {
  11111. ne.clearStorageSync();
  11112. } };
  11113. var vt = { genAdapter: function() {
  11114. return { root: {}, reqClass: _t, localStorage: wt, primaryStorage: "local" };
  11115. }, isMatch: function() {
  11116. return true;
  11117. }, runtime: "uni_app" };
  11118. mt.useAdapters(vt);
  11119. const It = mt, St = It.init;
  11120. It.init = function(e2) {
  11121. e2.env = e2.spaceId;
  11122. const t2 = St.call(this, e2);
  11123. t2.config.provider = "tencent", t2.config.spaceId = e2.spaceId;
  11124. const n2 = t2.auth;
  11125. return t2.auth = function(e3) {
  11126. const t3 = n2.call(this, e3);
  11127. return ["linkAndRetrieveDataWithTicket", "signInAnonymously", "signOut", "getAccessToken", "getLoginState", "signInWithTicket", "getUserInfo"].forEach((e4) => {
  11128. var n3;
  11129. t3[e4] = (n3 = t3[e4], function(e5) {
  11130. e5 = e5 || {};
  11131. const { success: t4, fail: s2, complete: r2 } = ee(e5);
  11132. if (!(t4 || s2 || r2))
  11133. return n3.call(this, e5);
  11134. n3.call(this, e5).then((e6) => {
  11135. t4 && t4(e6), r2 && r2(e6);
  11136. }, (e6) => {
  11137. s2 && s2(e6), r2 && r2(e6);
  11138. });
  11139. }).bind(t3);
  11140. }), t3;
  11141. }, t2.customAuth = t2.auth, t2;
  11142. };
  11143. var bt = It;
  11144. var kt = class extends pe {
  11145. getAccessToken() {
  11146. return new Promise((e2, t2) => {
  11147. const n2 = "Anonymous_Access_token";
  11148. this.setAccessToken(n2), e2(n2);
  11149. });
  11150. }
  11151. setupRequest(e2, t2) {
  11152. const n2 = Object.assign({}, e2, { spaceId: this.config.spaceId, timestamp: Date.now() }), s2 = { "Content-Type": "application/json" };
  11153. "auth" !== t2 && (n2.token = this.accessToken, s2["x-basement-token"] = this.accessToken), s2["x-serverless-sign"] = de.sign(n2, this.config.clientSecret);
  11154. const r2 = le();
  11155. s2["x-client-info"] = encodeURIComponent(JSON.stringify(r2));
  11156. const { token: i2 } = re();
  11157. return s2["x-client-token"] = i2, { url: this.config.requestUrl, method: "POST", data: n2, dataType: "json", header: JSON.parse(JSON.stringify(s2)) };
  11158. }
  11159. uploadFileToOSS({ url: e2, formData: t2, name: n2, filePath: s2, fileType: r2, onUploadProgress: i2 }) {
  11160. return new Promise((o2, a2) => {
  11161. const c2 = this.adapter.uploadFile({ url: e2, formData: t2, name: n2, filePath: s2, fileType: r2, success(e3) {
  11162. e3 && e3.statusCode < 400 ? o2(e3) : a2(new te({ code: "UPLOAD_FAILED", message: "文件上传失败" }));
  11163. }, fail(e3) {
  11164. a2(new te({ code: e3.code || "UPLOAD_FAILED", message: e3.message || e3.errMsg || "文件上传失败" }));
  11165. } });
  11166. "function" == typeof i2 && c2 && "function" == typeof c2.onProgressUpdate && c2.onProgressUpdate((e3) => {
  11167. i2({ loaded: e3.totalBytesSent, total: e3.totalBytesExpectedToSend });
  11168. });
  11169. });
  11170. }
  11171. uploadFile({ filePath: e2, cloudPath: t2, fileType: n2 = "image", onUploadProgress: s2 }) {
  11172. if (!t2)
  11173. throw new te({ code: "CLOUDPATH_REQUIRED", message: "cloudPath不可为空" });
  11174. let r2;
  11175. return this.getOSSUploadOptionsFromPath({ cloudPath: t2 }).then((t3) => {
  11176. const { url: i2, formData: o2, name: a2 } = t3.result;
  11177. r2 = t3.result.fileUrl;
  11178. const c2 = { url: i2, formData: o2, name: a2, filePath: e2, fileType: n2 };
  11179. return this.uploadFileToOSS(Object.assign({}, c2, { onUploadProgress: s2 }));
  11180. }).then(() => this.reportOSSUpload({ cloudPath: t2 })).then((t3) => new Promise((n3, s3) => {
  11181. t3.success ? n3({ success: true, filePath: e2, fileID: r2 }) : s3(new te({ code: "UPLOAD_FAILED", message: "文件上传失败" }));
  11182. }));
  11183. }
  11184. deleteFile({ fileList: e2 }) {
  11185. const t2 = { method: "serverless.file.resource.delete", params: JSON.stringify({ fileList: e2 }) };
  11186. return this.request(this.setupRequest(t2)).then((e3) => {
  11187. if (e3.success)
  11188. return e3.result;
  11189. throw new te({ code: "DELETE_FILE_FAILED", message: "删除文件失败" });
  11190. });
  11191. }
  11192. getTempFileURL({ fileList: e2, maxAge: t2 } = {}) {
  11193. if (!Array.isArray(e2) || 0 === e2.length)
  11194. throw new te({ code: "INVALID_PARAM", message: "fileList的元素必须是非空的字符串" });
  11195. const n2 = { method: "serverless.file.resource.getTempFileURL", params: JSON.stringify({ fileList: e2, maxAge: t2 }) };
  11196. return this.request(this.setupRequest(n2)).then((e3) => {
  11197. if (e3.success)
  11198. return { fileList: e3.result.fileList.map((e4) => ({ fileID: e4.fileID, tempFileURL: e4.tempFileURL })) };
  11199. throw new te({ code: "GET_TEMP_FILE_URL_FAILED", message: "获取临时文件链接失败" });
  11200. });
  11201. }
  11202. };
  11203. var At = { init(e2) {
  11204. const t2 = new kt(e2), n2 = { signInAnonymously: function() {
  11205. return t2.authorize();
  11206. }, getLoginState: function() {
  11207. return Promise.resolve(false);
  11208. } };
  11209. return t2.auth = function() {
  11210. return n2;
  11211. }, t2.customAuth = t2.auth, t2;
  11212. } }, Ct = n(function(e2, t2) {
  11213. e2.exports = r.enc.Hex;
  11214. });
  11215. function Pt() {
  11216. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e2) {
  11217. var t2 = 16 * Math.random() | 0;
  11218. return ("x" === e2 ? t2 : 3 & t2 | 8).toString(16);
  11219. });
  11220. }
  11221. function Tt(e2 = "", t2 = {}) {
  11222. const { data: n2, functionName: s2, method: r2, headers: i2, signHeaderKeys: o2 = [], config: a2 } = t2, c2 = Date.now(), u2 = Pt(), h2 = Object.assign({}, i2, { "x-from-app-id": a2.spaceAppId, "x-from-env-id": a2.spaceId, "x-to-env-id": a2.spaceId, "x-from-instance-id": c2, "x-from-function-name": s2, "x-client-timestamp": c2, "x-alipay-source": "client", "x-request-id": u2, "x-alipay-callid": u2, "x-trace-id": u2 }), l2 = ["x-from-app-id", "x-from-env-id", "x-to-env-id", "x-from-instance-id", "x-from-function-name", "x-client-timestamp"].concat(o2), [d2 = "", p2 = ""] = e2.split("?") || [], f2 = function(e3) {
  11223. const t3 = e3.signedHeaders.join(";"), n3 = e3.signedHeaders.map((t4) => `${t4.toLowerCase()}:${e3.headers[t4]}
  11224. `).join(""), s3 = we(e3.body).toString(Ct), r3 = `${e3.method.toUpperCase()}
  11225. ${e3.path}
  11226. ${e3.query}
  11227. ${n3}
  11228. ${t3}
  11229. ${s3}
  11230. `, i3 = we(r3).toString(Ct), o3 = `HMAC-SHA256
  11231. ${e3.timestamp}
  11232. ${i3}
  11233. `, a3 = ve(o3, e3.secretKey).toString(Ct);
  11234. return `HMAC-SHA256 Credential=${e3.secretId}, SignedHeaders=${t3}, Signature=${a3}`;
  11235. }({ path: d2, query: p2, method: r2, headers: h2, timestamp: c2, body: JSON.stringify(n2), secretId: a2.accessKey, secretKey: a2.secretKey, signedHeaders: l2.sort() });
  11236. return { url: `${a2.endpoint}${e2}`, headers: Object.assign({}, h2, { Authorization: f2 }) };
  11237. }
  11238. function xt({ url: e2, data: t2, method: n2 = "POST", headers: s2 = {} }) {
  11239. return new Promise((r2, i2) => {
  11240. ne.request({ url: e2, method: n2, data: "object" == typeof t2 ? JSON.stringify(t2) : t2, header: s2, dataType: "json", complete: (e3 = {}) => {
  11241. const t3 = s2["x-trace-id"] || "";
  11242. if (!e3.statusCode || e3.statusCode >= 400) {
  11243. const { message: n3, errMsg: s3, trace_id: r3 } = e3.data || {};
  11244. return i2(new te({ code: "SYS_ERR", message: n3 || s3 || "request:fail", requestId: r3 || t3 }));
  11245. }
  11246. r2({ status: e3.statusCode, data: e3.data, headers: e3.header, requestId: t3 });
  11247. } });
  11248. });
  11249. }
  11250. function Ot(e2, t2) {
  11251. const { path: n2, data: s2, method: r2 = "GET" } = e2, { url: i2, headers: o2 } = Tt(n2, { functionName: "", data: s2, method: r2, headers: { "x-alipay-cloud-mode": "oss", "x-data-api-type": "oss", "x-expire-timestamp": Date.now() + 6e4 }, signHeaderKeys: ["x-data-api-type", "x-expire-timestamp"], config: t2 });
  11252. return xt({ url: i2, data: s2, method: r2, headers: o2 }).then((e3) => {
  11253. const t3 = e3.data || {};
  11254. if (!t3.success)
  11255. throw new te({ code: e3.errCode, message: e3.errMsg, requestId: e3.requestId });
  11256. return t3.data || {};
  11257. }).catch((e3) => {
  11258. throw new te({ code: e3.errCode, message: e3.errMsg, requestId: e3.requestId });
  11259. });
  11260. }
  11261. function Et(e2 = "") {
  11262. const t2 = e2.trim().replace(/^cloud:\/\//, ""), n2 = t2.indexOf("/");
  11263. if (n2 <= 0)
  11264. throw new te({ code: "INVALID_PARAM", message: "fileID不合法" });
  11265. const s2 = t2.substring(0, n2), r2 = t2.substring(n2 + 1);
  11266. return s2 !== this.config.spaceId && console.warn("file ".concat(e2, " does not belong to env ").concat(this.config.spaceId)), r2;
  11267. }
  11268. function Lt(e2 = "") {
  11269. return "cloud://".concat(this.config.spaceId, "/").concat(e2.replace(/^\/+/, ""));
  11270. }
  11271. class Rt {
  11272. constructor(e2) {
  11273. this.config = e2;
  11274. }
  11275. signedURL(e2, t2 = {}) {
  11276. const n2 = `/ws/function/${e2}`, s2 = this.config.wsEndpoint.replace(/^ws(s)?:\/\//, ""), r2 = Object.assign({}, t2, { accessKeyId: this.config.accessKey, signatureNonce: Pt(), timestamp: "" + Date.now() }), i2 = [n2, ["accessKeyId", "authorization", "signatureNonce", "timestamp"].sort().map(function(e3) {
  11277. return r2[e3] ? "".concat(e3, "=").concat(r2[e3]) : null;
  11278. }).filter(Boolean).join("&"), `host:${s2}`].join("\n"), o2 = ["HMAC-SHA256", we(i2).toString(Ct)].join("\n"), a2 = ve(o2, this.config.secretKey).toString(Ct), c2 = Object.keys(r2).map((e3) => `${e3}=${encodeURIComponent(r2[e3])}`).join("&");
  11279. return `${this.config.wsEndpoint}${n2}?${c2}&signature=${a2}`;
  11280. }
  11281. }
  11282. var Ut = class {
  11283. constructor(e2) {
  11284. if (["spaceId", "spaceAppId", "accessKey", "secretKey"].forEach((t2) => {
  11285. if (!Object.prototype.hasOwnProperty.call(e2, t2))
  11286. throw new Error(`${t2} required`);
  11287. }), e2.endpoint) {
  11288. if ("string" != typeof e2.endpoint)
  11289. throw new Error("endpoint must be string");
  11290. if (!/^https:\/\//.test(e2.endpoint))
  11291. throw new Error("endpoint must start with https://");
  11292. e2.endpoint = e2.endpoint.replace(/\/$/, "");
  11293. }
  11294. this.config = Object.assign({}, e2, { endpoint: e2.endpoint || `https://${e2.spaceId}.api-hz.cloudbasefunction.cn`, wsEndpoint: e2.wsEndpoint || `wss://${e2.spaceId}.api-hz.cloudbasefunction.cn` }), this._websocket = new Rt(this.config);
  11295. }
  11296. callFunction(e2) {
  11297. return function(e3, t2) {
  11298. const { name: n2, data: s2, async: r2 = false } = e3, i2 = "POST", o2 = { "x-to-function-name": n2 };
  11299. r2 && (o2["x-function-invoke-type"] = "async");
  11300. const { url: a2, headers: c2 } = Tt("/functions/invokeFunction", { functionName: n2, data: s2, method: i2, headers: o2, signHeaderKeys: ["x-to-function-name"], config: t2 });
  11301. return xt({ url: a2, data: s2, method: i2, headers: c2 }).then((e4) => {
  11302. let t3 = 0;
  11303. if (r2) {
  11304. const n3 = e4.data || {};
  11305. t3 = "200" === n3.errCode ? 0 : n3.errCode, e4.data = n3.data || {}, e4.errMsg = n3.errMsg;
  11306. }
  11307. if (0 !== t3)
  11308. throw new te({ code: t3, message: e4.errMsg, requestId: e4.requestId });
  11309. return { errCode: t3, success: 0 === t3, requestId: e4.requestId, result: e4.data };
  11310. }).catch((e4) => {
  11311. throw new te({ code: e4.errCode, message: e4.errMsg, requestId: e4.requestId });
  11312. });
  11313. }(e2, this.config);
  11314. }
  11315. uploadFileToOSS({ url: e2, filePath: t2, fileType: n2, formData: s2, onUploadProgress: r2 }) {
  11316. return new Promise((i2, o2) => {
  11317. const a2 = ne.uploadFile({ url: e2, filePath: t2, fileType: n2, formData: s2, name: "file", success(e3) {
  11318. e3 && e3.statusCode < 400 ? i2(e3) : o2(new te({ code: "UPLOAD_FAILED", message: "文件上传失败" }));
  11319. }, fail(e3) {
  11320. o2(new te({ code: e3.code || "UPLOAD_FAILED", message: e3.message || e3.errMsg || "文件上传失败" }));
  11321. } });
  11322. "function" == typeof r2 && a2 && "function" == typeof a2.onProgressUpdate && a2.onProgressUpdate((e3) => {
  11323. r2({ loaded: e3.totalBytesSent, total: e3.totalBytesExpectedToSend });
  11324. });
  11325. });
  11326. }
  11327. async uploadFile({ filePath: e2, cloudPath: t2 = "", fileType: n2 = "image", onUploadProgress: s2 }) {
  11328. if ("string" !== f(t2))
  11329. throw new te({ code: "INVALID_PARAM", message: "cloudPath必须为字符串类型" });
  11330. if (!(t2 = t2.trim()))
  11331. throw new te({ code: "INVALID_PARAM", message: "cloudPath不可为空" });
  11332. if (/:\/\//.test(t2))
  11333. throw new te({ code: "INVALID_PARAM", message: "cloudPath不合法" });
  11334. const r2 = await Ot({ path: "/".concat(t2.replace(/^\//, ""), "?post_url") }, this.config), { file_id: i2, upload_url: o2, form_data: a2 } = r2, c2 = a2 && a2.reduce((e3, t3) => (e3[t3.key] = t3.value, e3), {});
  11335. return this.uploadFileToOSS({ url: o2, filePath: e2, fileType: n2, formData: c2, onUploadProgress: s2 }).then(() => ({ fileID: i2 }));
  11336. }
  11337. async getTempFileURL({ fileList: e2 }) {
  11338. return new Promise((t2, n2) => {
  11339. (!e2 || e2.length < 0) && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList不能为空数组" })), e2.length > 50 && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList数组长度不能超过50" }));
  11340. const s2 = [];
  11341. for (const t3 of e2) {
  11342. "string" !== f(t3) && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList的元素必须是非空的字符串" }));
  11343. const e3 = Et.call(this, t3);
  11344. s2.push({ file_id: e3, expire: 600 });
  11345. }
  11346. Ot({ path: "/?download_url", data: { file_list: s2 }, method: "POST" }, this.config).then((e3) => {
  11347. const { file_list: n3 = [] } = e3;
  11348. t2({ fileList: n3.map((e4) => ({ fileID: Lt.call(this, e4.file_id), tempFileURL: e4.download_url })) });
  11349. }).catch((e3) => n2(e3));
  11350. });
  11351. }
  11352. async connectWebSocket(e2) {
  11353. const { name: t2, query: n2 } = e2;
  11354. return ne.connectSocket({ url: this._websocket.signedURL(t2, n2), complete: () => {
  11355. } });
  11356. }
  11357. };
  11358. var Nt = { init: (e2) => {
  11359. e2.provider = "alipay";
  11360. const t2 = new Ut(e2);
  11361. return t2.auth = function() {
  11362. return { signInAnonymously: function() {
  11363. return Promise.resolve();
  11364. }, getLoginState: function() {
  11365. return Promise.resolve(true);
  11366. } };
  11367. }, t2;
  11368. } };
  11369. function Dt({ data: e2 }) {
  11370. let t2;
  11371. t2 = le();
  11372. const n2 = JSON.parse(JSON.stringify(e2 || {}));
  11373. if (Object.assign(n2, { clientInfo: t2 }), !n2.uniIdToken) {
  11374. const { token: e3 } = re();
  11375. e3 && (n2.uniIdToken = e3);
  11376. }
  11377. return n2;
  11378. }
  11379. async function Mt({ name: e2, data: t2 } = {}) {
  11380. await this.__dev__.initLocalNetwork();
  11381. const { localAddress: n2, localPort: s2 } = this.__dev__, r2 = { aliyun: "aliyun", tencent: "tcb", alipay: "alipay" }[this.config.provider], i2 = this.config.spaceId, o2 = `http://${n2}:${s2}/system/check-function`, a2 = `http://${n2}:${s2}/cloudfunctions/${e2}`;
  11382. return new Promise((t3, n3) => {
  11383. ne.request({ method: "POST", url: o2, data: { name: e2, platform: C, provider: r2, spaceId: i2 }, timeout: 3e3, success(e3) {
  11384. t3(e3);
  11385. }, fail() {
  11386. t3({ data: { code: "NETWORK_ERROR", message: "连接本地调试服务失败,请检查客户端是否和主机在同一局域网下,自动切换为已部署的云函数。" } });
  11387. } });
  11388. }).then(({ data: e3 } = {}) => {
  11389. const { code: t3, message: n3 } = e3 || {};
  11390. return { code: 0 === t3 ? 0 : t3 || "SYS_ERR", message: n3 || "SYS_ERR" };
  11391. }).then(({ code: n3, message: s3 }) => {
  11392. if (0 !== n3) {
  11393. switch (n3) {
  11394. case "MODULE_ENCRYPTED":
  11395. console.error(`此云函数(${e2})依赖加密公共模块不可本地调试,自动切换为云端已部署的云函数`);
  11396. break;
  11397. case "FUNCTION_ENCRYPTED":
  11398. console.error(`此云函数(${e2})已加密不可本地调试,自动切换为云端已部署的云函数`);
  11399. break;
  11400. case "ACTION_ENCRYPTED":
  11401. console.error(s3 || "需要访问加密的uni-clientDB-action,自动切换为云端环境");
  11402. break;
  11403. case "NETWORK_ERROR":
  11404. console.error(s3 || "连接本地调试服务失败,请检查客户端是否和主机在同一局域网下");
  11405. break;
  11406. case "SWITCH_TO_CLOUD":
  11407. break;
  11408. default: {
  11409. const e3 = `检测本地调试服务出现错误:${s3},请检查网络环境或重启客户端再试`;
  11410. throw console.error(e3), new Error(e3);
  11411. }
  11412. }
  11413. return this._callCloudFunction({ name: e2, data: t2 });
  11414. }
  11415. return new Promise((e3, n4) => {
  11416. const s4 = Dt.call(this, { data: t2 });
  11417. ne.request({ method: "POST", url: a2, data: { provider: r2, platform: C, param: s4 }, success: ({ statusCode: t3, data: s5 } = {}) => !t3 || t3 >= 400 ? n4(new te({ code: s5.code || "SYS_ERR", message: s5.message || "request:fail" })) : e3({ result: s5 }), fail(e4) {
  11418. n4(new te({ code: e4.code || e4.errCode || "SYS_ERR", message: e4.message || e4.errMsg || "request:fail" }));
  11419. } });
  11420. });
  11421. });
  11422. }
  11423. const qt = [{ rule: /fc_function_not_found|FUNCTION_NOT_FOUND/, content: ",云函数[{functionName}]在云端不存在,请检查此云函数名称是否正确以及该云函数是否已上传到服务空间", mode: "append" }];
  11424. var Ft = /[\\^$.*+?()[\]{}|]/g, Kt = RegExp(Ft.source);
  11425. function jt(e2, t2, n2) {
  11426. return e2.replace(new RegExp((s2 = t2) && Kt.test(s2) ? s2.replace(Ft, "\\$&") : s2, "g"), n2);
  11427. var s2;
  11428. }
  11429. const Bt = "request", Wt = "response", Ht = "both";
  11430. const Tn = { code: 2e4, message: "System error" }, xn = { code: 20101, message: "Invalid client" };
  11431. function Ln(e2) {
  11432. const { errSubject: t2, subject: n2, errCode: s2, errMsg: r2, code: i2, message: o2, cause: a2 } = e2 || {};
  11433. return new te({ subject: t2 || n2 || "uni-secure-network", code: s2 || i2 || Tn.code, message: r2 || o2, cause: a2 });
  11434. }
  11435. let Un;
  11436. function Fn({ secretType: e2 } = {}) {
  11437. return e2 === Bt || e2 === Wt || e2 === Ht;
  11438. }
  11439. function Kn({ name: e2, data: t2 = {} } = {}) {
  11440. return "DCloud-clientDB" === e2 && "encryption" === t2.redirectTo && "getAppClientKey" === t2.action;
  11441. }
  11442. function jn({ provider: e2, spaceId: t2, functionName: n2 } = {}) {
  11443. const { appId: s2, uniPlatform: r2, osName: i2 } = ce();
  11444. let o2 = r2;
  11445. "app" === r2 && (o2 = i2);
  11446. const a2 = function({ provider: e3, spaceId: t3 } = {}) {
  11447. const n3 = A;
  11448. if (!n3)
  11449. return {};
  11450. e3 = /* @__PURE__ */ function(e4) {
  11451. return "tencent" === e4 ? "tcb" : e4;
  11452. }(e3);
  11453. const s3 = n3.find((n4) => n4.provider === e3 && n4.spaceId === t3);
  11454. return s3 && s3.config;
  11455. }({ provider: e2, spaceId: t2 });
  11456. if (!a2 || !a2.accessControl || !a2.accessControl.enable)
  11457. return false;
  11458. const c2 = a2.accessControl.function || {}, u2 = Object.keys(c2);
  11459. if (0 === u2.length)
  11460. return true;
  11461. const h2 = function(e3, t3) {
  11462. let n3, s3, r3;
  11463. for (let i3 = 0; i3 < e3.length; i3++) {
  11464. const o3 = e3[i3];
  11465. o3 !== t3 ? "*" !== o3 ? o3.split(",").map((e4) => e4.trim()).indexOf(t3) > -1 && (s3 = o3) : r3 = o3 : n3 = o3;
  11466. }
  11467. return n3 || s3 || r3;
  11468. }(u2, n2);
  11469. if (!h2)
  11470. return false;
  11471. if ((c2[h2] || []).find((e3 = {}) => e3.appId === s2 && (e3.platform || "").toLowerCase() === o2.toLowerCase()))
  11472. return true;
  11473. throw console.error(`此应用[appId: ${s2}, platform: ${o2}]不在云端配置的允许访问的应用列表内,参考:https://uniapp.dcloud.net.cn/uniCloud/secure-network.html#verify-client`), Ln(xn);
  11474. }
  11475. function $n({ functionName: e2, result: t2, logPvd: n2 }) {
  11476. if (this.__dev__.debugLog && t2 && t2.requestId) {
  11477. const s2 = JSON.stringify({ spaceId: this.config.spaceId, functionName: e2, requestId: t2.requestId });
  11478. console.log(`[${n2}-request]${s2}[/${n2}-request]`);
  11479. }
  11480. }
  11481. function Bn(e2) {
  11482. const t2 = e2.callFunction, n2 = function(n3) {
  11483. const s2 = n3.name;
  11484. n3.data = Dt.call(e2, { data: n3.data });
  11485. const r2 = { aliyun: "aliyun", tencent: "tcb", tcb: "tcb", alipay: "alipay" }[this.config.provider], i2 = Fn(n3), o2 = Kn(n3), a2 = i2 || o2;
  11486. return t2.call(this, n3).then((e3) => (e3.errCode = 0, !a2 && $n.call(this, { functionName: s2, result: e3, logPvd: r2 }), Promise.resolve(e3)), (e3) => (!a2 && $n.call(this, { functionName: s2, result: e3, logPvd: r2 }), e3 && e3.message && (e3.message = function({ message: e4 = "", extraInfo: t3 = {}, formatter: n4 = [] } = {}) {
  11487. for (let s3 = 0; s3 < n4.length; s3++) {
  11488. const { rule: r3, content: i3, mode: o3 } = n4[s3], a3 = e4.match(r3);
  11489. if (!a3)
  11490. continue;
  11491. let c2 = i3;
  11492. for (let e5 = 1; e5 < a3.length; e5++)
  11493. c2 = jt(c2, `{$${e5}}`, a3[e5]);
  11494. for (const e5 in t3)
  11495. c2 = jt(c2, `{${e5}}`, t3[e5]);
  11496. return "replace" === o3 ? c2 : e4 + c2;
  11497. }
  11498. return e4;
  11499. }({ message: `[${n3.name}]: ${e3.message}`, formatter: qt, extraInfo: { functionName: s2 } })), Promise.reject(e3)));
  11500. };
  11501. e2.callFunction = function(t3) {
  11502. const { provider: s2, spaceId: r2 } = e2.config, i2 = t3.name;
  11503. let o2, a2;
  11504. if (t3.data = t3.data || {}, e2.__dev__.debugInfo && !e2.__dev__.debugInfo.forceRemote && T ? (e2._callCloudFunction || (e2._callCloudFunction = n2, e2._callLocalFunction = Mt), o2 = Mt) : o2 = n2, o2 = o2.bind(e2), Kn(t3))
  11505. a2 = n2.call(e2, t3);
  11506. else if (Fn(t3)) {
  11507. a2 = new Un({ secretType: t3.secretType, uniCloudIns: e2 }).wrapEncryptDataCallFunction(n2.bind(e2))(t3);
  11508. } else if (jn({ provider: s2, spaceId: r2, functionName: i2 })) {
  11509. a2 = new Un({ secretType: t3.secretType, uniCloudIns: e2 }).wrapVerifyClientCallFunction(n2.bind(e2))(t3);
  11510. } else
  11511. a2 = o2(t3);
  11512. return Object.defineProperty(a2, "result", { get: () => (console.warn("当前返回结果为Promise类型,不可直接访问其result属性,详情请参考:https://uniapp.dcloud.net.cn/uniCloud/faq?id=promise"), {}) }), a2.then((e3) => ("undefined" != typeof UTSJSONObject && (e3.result = new UTSJSONObject(e3.result)), e3));
  11513. };
  11514. }
  11515. Un = class {
  11516. constructor() {
  11517. throw Ln({ message: `Platform ${C} is not enabled, please check whether secure network module is enabled in your manifest.json` });
  11518. }
  11519. };
  11520. const Wn = Symbol("CLIENT_DB_INTERNAL");
  11521. function Hn(e2, t2) {
  11522. return e2.then = "DoNotReturnProxyWithAFunctionNamedThen", e2._internalType = Wn, e2.inspect = null, e2.__v_raw = void 0, new Proxy(e2, { get(e3, n2, s2) {
  11523. if ("_uniClient" === n2)
  11524. return null;
  11525. if ("symbol" == typeof n2)
  11526. return e3[n2];
  11527. if (n2 in e3 || "string" != typeof n2) {
  11528. const t3 = e3[n2];
  11529. return "function" == typeof t3 ? t3.bind(e3) : t3;
  11530. }
  11531. return t2.get(e3, n2, s2);
  11532. } });
  11533. }
  11534. function zn(e2) {
  11535. return { on: (t2, n2) => {
  11536. e2[t2] = e2[t2] || [], e2[t2].indexOf(n2) > -1 || e2[t2].push(n2);
  11537. }, off: (t2, n2) => {
  11538. e2[t2] = e2[t2] || [];
  11539. const s2 = e2[t2].indexOf(n2);
  11540. -1 !== s2 && e2[t2].splice(s2, 1);
  11541. } };
  11542. }
  11543. const Jn = ["db.Geo", "db.command", "command.aggregate"];
  11544. function Vn(e2, t2) {
  11545. return Jn.indexOf(`${e2}.${t2}`) > -1;
  11546. }
  11547. function Gn(e2) {
  11548. switch (f(e2 = se(e2))) {
  11549. case "array":
  11550. return e2.map((e3) => Gn(e3));
  11551. case "object":
  11552. return e2._internalType === Wn || Object.keys(e2).forEach((t2) => {
  11553. e2[t2] = Gn(e2[t2]);
  11554. }), e2;
  11555. case "regexp":
  11556. return { $regexp: { source: e2.source, flags: e2.flags } };
  11557. case "date":
  11558. return { $date: e2.toISOString() };
  11559. default:
  11560. return e2;
  11561. }
  11562. }
  11563. function Yn(e2) {
  11564. return e2 && e2.content && e2.content.$method;
  11565. }
  11566. class Qn {
  11567. constructor(e2, t2, n2) {
  11568. this.content = e2, this.prevStage = t2 || null, this.udb = null, this._database = n2;
  11569. }
  11570. toJSON() {
  11571. let e2 = this;
  11572. const t2 = [e2.content];
  11573. for (; e2.prevStage; )
  11574. e2 = e2.prevStage, t2.push(e2.content);
  11575. return { $db: t2.reverse().map((e3) => ({ $method: e3.$method, $param: Gn(e3.$param) })) };
  11576. }
  11577. toString() {
  11578. return JSON.stringify(this.toJSON());
  11579. }
  11580. getAction() {
  11581. const e2 = this.toJSON().$db.find((e3) => "action" === e3.$method);
  11582. return e2 && e2.$param && e2.$param[0];
  11583. }
  11584. getCommand() {
  11585. return { $db: this.toJSON().$db.filter((e2) => "action" !== e2.$method) };
  11586. }
  11587. get isAggregate() {
  11588. let e2 = this;
  11589. for (; e2; ) {
  11590. const t2 = Yn(e2), n2 = Yn(e2.prevStage);
  11591. if ("aggregate" === t2 && "collection" === n2 || "pipeline" === t2)
  11592. return true;
  11593. e2 = e2.prevStage;
  11594. }
  11595. return false;
  11596. }
  11597. get isCommand() {
  11598. let e2 = this;
  11599. for (; e2; ) {
  11600. if ("command" === Yn(e2))
  11601. return true;
  11602. e2 = e2.prevStage;
  11603. }
  11604. return false;
  11605. }
  11606. get isAggregateCommand() {
  11607. let e2 = this;
  11608. for (; e2; ) {
  11609. const t2 = Yn(e2), n2 = Yn(e2.prevStage);
  11610. if ("aggregate" === t2 && "command" === n2)
  11611. return true;
  11612. e2 = e2.prevStage;
  11613. }
  11614. return false;
  11615. }
  11616. getNextStageFn(e2) {
  11617. const t2 = this;
  11618. return function() {
  11619. return Xn({ $method: e2, $param: Gn(Array.from(arguments)) }, t2, t2._database);
  11620. };
  11621. }
  11622. get count() {
  11623. return this.isAggregate ? this.getNextStageFn("count") : function() {
  11624. return this._send("count", Array.from(arguments));
  11625. };
  11626. }
  11627. get remove() {
  11628. return this.isCommand ? this.getNextStageFn("remove") : function() {
  11629. return this._send("remove", Array.from(arguments));
  11630. };
  11631. }
  11632. get() {
  11633. return this._send("get", Array.from(arguments));
  11634. }
  11635. get add() {
  11636. return this.isCommand ? this.getNextStageFn("add") : function() {
  11637. return this._send("add", Array.from(arguments));
  11638. };
  11639. }
  11640. update() {
  11641. return this._send("update", Array.from(arguments));
  11642. }
  11643. end() {
  11644. return this._send("end", Array.from(arguments));
  11645. }
  11646. get set() {
  11647. return this.isCommand ? this.getNextStageFn("set") : function() {
  11648. throw new Error("JQL禁止使用set方法");
  11649. };
  11650. }
  11651. _send(e2, t2) {
  11652. const n2 = this.getAction(), s2 = this.getCommand();
  11653. if (s2.$db.push({ $method: e2, $param: Gn(t2) }), S) {
  11654. const e3 = s2.$db.find((e4) => "collection" === e4.$method), t3 = e3 && e3.$param;
  11655. t3 && 1 === t3.length && "string" == typeof e3.$param[0] && e3.$param[0].indexOf(",") > -1 && console.warn("检测到使用JQL语法联表查询时,未使用getTemp先过滤主表数据,在主表数据量大的情况下可能会查询缓慢。\n- 如何优化请参考此文档:https://uniapp.dcloud.net.cn/uniCloud/jql?id=lookup-with-temp \n- 如果主表数据量很小请忽略此信息,项目发行时不会出现此提示。");
  11656. }
  11657. return this._database._callCloudFunction({ action: n2, command: s2 });
  11658. }
  11659. }
  11660. function Xn(e2, t2, n2) {
  11661. return Hn(new Qn(e2, t2, n2), { get(e3, t3) {
  11662. let s2 = "db";
  11663. return e3 && e3.content && (s2 = e3.content.$method), Vn(s2, t3) ? Xn({ $method: t3 }, e3, n2) : function() {
  11664. return Xn({ $method: t3, $param: Gn(Array.from(arguments)) }, e3, n2);
  11665. };
  11666. } });
  11667. }
  11668. function Zn({ path: e2, method: t2 }) {
  11669. return class {
  11670. constructor() {
  11671. this.param = Array.from(arguments);
  11672. }
  11673. toJSON() {
  11674. return { $newDb: [...e2.map((e3) => ({ $method: e3 })), { $method: t2, $param: this.param }] };
  11675. }
  11676. toString() {
  11677. return JSON.stringify(this.toJSON());
  11678. }
  11679. };
  11680. }
  11681. function es(e2, t2 = {}) {
  11682. return Hn(new e2(t2), { get: (e3, t3) => Vn("db", t3) ? Xn({ $method: t3 }, null, e3) : function() {
  11683. return Xn({ $method: t3, $param: Gn(Array.from(arguments)) }, null, e3);
  11684. } });
  11685. }
  11686. class ts extends class {
  11687. constructor({ uniClient: e2 = {}, isJQL: t2 = false } = {}) {
  11688. this._uniClient = e2, this._authCallBacks = {}, this._dbCallBacks = {}, e2._isDefault && (this._dbCallBacks = L("_globalUniCloudDatabaseCallback")), t2 || (this.auth = zn(this._authCallBacks)), this._isJQL = t2, Object.assign(this, zn(this._dbCallBacks)), this.env = Hn({}, { get: (e3, t3) => ({ $env: t3 }) }), this.Geo = Hn({}, { get: (e3, t3) => Zn({ path: ["Geo"], method: t3 }) }), this.serverDate = Zn({ path: [], method: "serverDate" }), this.RegExp = Zn({ path: [], method: "RegExp" });
  11689. }
  11690. getCloudEnv(e2) {
  11691. if ("string" != typeof e2 || !e2.trim())
  11692. throw new Error("getCloudEnv参数错误");
  11693. return { $env: e2.replace("$cloudEnv_", "") };
  11694. }
  11695. _callback(e2, t2) {
  11696. const n2 = this._dbCallBacks;
  11697. n2[e2] && n2[e2].forEach((e3) => {
  11698. e3(...t2);
  11699. });
  11700. }
  11701. _callbackAuth(e2, t2) {
  11702. const n2 = this._authCallBacks;
  11703. n2[e2] && n2[e2].forEach((e3) => {
  11704. e3(...t2);
  11705. });
  11706. }
  11707. multiSend() {
  11708. const e2 = Array.from(arguments), t2 = e2.map((e3) => {
  11709. const t3 = e3.getAction(), n2 = e3.getCommand();
  11710. if ("getTemp" !== n2.$db[n2.$db.length - 1].$method)
  11711. throw new Error("multiSend只支持子命令内使用getTemp");
  11712. return { action: t3, command: n2 };
  11713. });
  11714. return this._callCloudFunction({ multiCommand: t2, queryList: e2 });
  11715. }
  11716. } {
  11717. _parseResult(e2) {
  11718. return this._isJQL ? e2.result : e2;
  11719. }
  11720. _callCloudFunction({ action: e2, command: t2, multiCommand: n2, queryList: s2 }) {
  11721. function r2(e3, t3) {
  11722. if (n2 && s2)
  11723. for (let n3 = 0; n3 < s2.length; n3++) {
  11724. const r3 = s2[n3];
  11725. r3.udb && "function" == typeof r3.udb.setResult && (t3 ? r3.udb.setResult(t3) : r3.udb.setResult(e3.result.dataList[n3]));
  11726. }
  11727. }
  11728. const i2 = this, o2 = this._isJQL ? "databaseForJQL" : "database";
  11729. function a2(e3) {
  11730. return i2._callback("error", [e3]), M(q(o2, "fail"), e3).then(() => M(q(o2, "complete"), e3)).then(() => (r2(null, e3), Y(j, { type: W, content: e3 }), Promise.reject(e3)));
  11731. }
  11732. const c2 = M(q(o2, "invoke")), u2 = this._uniClient;
  11733. return c2.then(() => u2.callFunction({ name: "DCloud-clientDB", type: h, data: { action: e2, command: t2, multiCommand: n2 } })).then((e3) => {
  11734. const { code: t3, message: n3, token: s3, tokenExpired: c3, systemInfo: u3 = [] } = e3.result;
  11735. if (u3)
  11736. for (let e4 = 0; e4 < u3.length; e4++) {
  11737. const { level: t4, message: n4, detail: s4 } = u3[e4], r3 = console["warn" === t4 ? "error" : t4] || console.log;
  11738. let i3 = "[System Info]" + n4;
  11739. s4 && (i3 = `${i3}
  11740. 详细信息:${s4}`), r3(i3);
  11741. }
  11742. if (t3) {
  11743. return a2(new te({ code: t3, message: n3, requestId: e3.requestId }));
  11744. }
  11745. e3.result.errCode = e3.result.errCode || e3.result.code, e3.result.errMsg = e3.result.errMsg || e3.result.message, s3 && c3 && (ie({ token: s3, tokenExpired: c3 }), this._callbackAuth("refreshToken", [{ token: s3, tokenExpired: c3 }]), this._callback("refreshToken", [{ token: s3, tokenExpired: c3 }]), Y(B, { token: s3, tokenExpired: c3 }));
  11746. const h2 = [{ prop: "affectedDocs", tips: "affectedDocs不再推荐使用,请使用inserted/deleted/updated/data.length替代" }, { prop: "code", tips: "code不再推荐使用,请使用errCode替代" }, { prop: "message", tips: "message不再推荐使用,请使用errMsg替代" }];
  11747. for (let t4 = 0; t4 < h2.length; t4++) {
  11748. const { prop: n4, tips: s4 } = h2[t4];
  11749. if (n4 in e3.result) {
  11750. const t5 = e3.result[n4];
  11751. Object.defineProperty(e3.result, n4, { get: () => (console.warn(s4), t5) });
  11752. }
  11753. }
  11754. return function(e4) {
  11755. return M(q(o2, "success"), e4).then(() => M(q(o2, "complete"), e4)).then(() => {
  11756. r2(e4, null);
  11757. const t4 = i2._parseResult(e4);
  11758. return Y(j, { type: W, content: t4 }), Promise.resolve(t4);
  11759. });
  11760. }(e3);
  11761. }, (e3) => {
  11762. /fc_function_not_found|FUNCTION_NOT_FOUND/g.test(e3.message) && console.warn("clientDB未初始化,请在web控制台保存一次schema以开启clientDB");
  11763. return a2(new te({ code: e3.code || "SYSTEM_ERROR", message: e3.message, requestId: e3.requestId }));
  11764. });
  11765. }
  11766. }
  11767. const ns = "token无效,跳转登录页面", ss = "token过期,跳转登录页面", rs = { TOKEN_INVALID_TOKEN_EXPIRED: ss, TOKEN_INVALID_INVALID_CLIENTID: ns, TOKEN_INVALID: ns, TOKEN_INVALID_WRONG_TOKEN: ns, TOKEN_INVALID_ANONYMOUS_USER: ns }, is = { "uni-id-token-expired": ss, "uni-id-check-token-failed": ns, "uni-id-token-not-exist": ns, "uni-id-check-device-feature-failed": ns };
  11768. function os(e2, t2) {
  11769. let n2 = "";
  11770. return n2 = e2 ? `${e2}/${t2}` : t2, n2.replace(/^\//, "");
  11771. }
  11772. function as(e2 = [], t2 = "") {
  11773. const n2 = [], s2 = [];
  11774. return e2.forEach((e3) => {
  11775. true === e3.needLogin ? n2.push(os(t2, e3.path)) : false === e3.needLogin && s2.push(os(t2, e3.path));
  11776. }), { needLoginPage: n2, notNeedLoginPage: s2 };
  11777. }
  11778. function cs(e2) {
  11779. return e2.split("?")[0].replace(/^\//, "");
  11780. }
  11781. function us() {
  11782. return function(e2) {
  11783. let t2 = e2 && e2.$page && e2.$page.fullPath || "";
  11784. return t2 ? ("/" !== t2.charAt(0) && (t2 = "/" + t2), t2) : t2;
  11785. }(function() {
  11786. const e2 = getCurrentPages();
  11787. return e2[e2.length - 1];
  11788. }());
  11789. }
  11790. function hs() {
  11791. return cs(us());
  11792. }
  11793. function ls(e2 = "", t2 = {}) {
  11794. if (!e2)
  11795. return false;
  11796. if (!(t2 && t2.list && t2.list.length))
  11797. return false;
  11798. const n2 = t2.list, s2 = cs(e2);
  11799. return n2.some((e3) => e3.pagePath === s2);
  11800. }
  11801. const ds = !!e.uniIdRouter;
  11802. const { loginPage: ps, routerNeedLogin: fs, resToLogin: gs, needLoginPage: ms, notNeedLoginPage: ys, loginPageInTabBar: _s } = function({ pages: t2 = [], subPackages: n2 = [], uniIdRouter: s2 = {}, tabBar: r2 = {} } = e) {
  11803. const { loginPage: i2, needLogin: o2 = [], resToLogin: a2 = true } = s2, { needLoginPage: c2, notNeedLoginPage: u2 } = as(t2), { needLoginPage: h2, notNeedLoginPage: l2 } = function(e2 = []) {
  11804. const t3 = [], n3 = [];
  11805. return e2.forEach((e3) => {
  11806. const { root: s3, pages: r3 = [] } = e3, { needLoginPage: i3, notNeedLoginPage: o3 } = as(r3, s3);
  11807. t3.push(...i3), n3.push(...o3);
  11808. }), { needLoginPage: t3, notNeedLoginPage: n3 };
  11809. }(n2);
  11810. return { loginPage: i2, routerNeedLogin: o2, resToLogin: a2, needLoginPage: [...c2, ...h2], notNeedLoginPage: [...u2, ...l2], loginPageInTabBar: ls(i2, r2) };
  11811. }();
  11812. if (ms.indexOf(ps) > -1)
  11813. throw new Error(`Login page [${ps}] should not be "needLogin", please check your pages.json`);
  11814. function ws(e2) {
  11815. const t2 = hs();
  11816. if ("/" === e2.charAt(0))
  11817. return e2;
  11818. const [n2, s2] = e2.split("?"), r2 = n2.replace(/^\//, "").split("/"), i2 = t2.split("/");
  11819. i2.pop();
  11820. for (let e3 = 0; e3 < r2.length; e3++) {
  11821. const t3 = r2[e3];
  11822. ".." === t3 ? i2.pop() : "." !== t3 && i2.push(t3);
  11823. }
  11824. return "" === i2[0] && i2.shift(), "/" + i2.join("/") + (s2 ? "?" + s2 : "");
  11825. }
  11826. function vs(e2) {
  11827. const t2 = cs(ws(e2));
  11828. return !(ys.indexOf(t2) > -1) && (ms.indexOf(t2) > -1 || fs.some((t3) => function(e3, t4) {
  11829. return new RegExp(t4).test(e3);
  11830. }(e2, t3)));
  11831. }
  11832. function Is({ redirect: e2 }) {
  11833. const t2 = cs(e2), n2 = cs(ps);
  11834. return hs() !== n2 && t2 !== n2;
  11835. }
  11836. function Ss({ api: e2, redirect: t2 } = {}) {
  11837. if (!t2 || !Is({ redirect: t2 }))
  11838. return;
  11839. const n2 = function(e3, t3) {
  11840. return "/" !== e3.charAt(0) && (e3 = "/" + e3), t3 ? e3.indexOf("?") > -1 ? e3 + `&uniIdRedirectUrl=${encodeURIComponent(t3)}` : e3 + `?uniIdRedirectUrl=${encodeURIComponent(t3)}` : e3;
  11841. }(ps, t2);
  11842. _s ? "navigateTo" !== e2 && "redirectTo" !== e2 || (e2 = "switchTab") : "switchTab" === e2 && (e2 = "navigateTo");
  11843. const s2 = { navigateTo: uni.navigateTo, redirectTo: uni.redirectTo, switchTab: uni.switchTab, reLaunch: uni.reLaunch };
  11844. setTimeout(() => {
  11845. s2[e2]({ url: n2 });
  11846. }, 0);
  11847. }
  11848. function bs({ url: e2 } = {}) {
  11849. const t2 = { abortLoginPageJump: false, autoToLoginPage: false }, n2 = function() {
  11850. const { token: e3, tokenExpired: t3 } = re();
  11851. let n3;
  11852. if (e3) {
  11853. if (t3 < Date.now()) {
  11854. const e4 = "uni-id-token-expired";
  11855. n3 = { errCode: e4, errMsg: is[e4] };
  11856. }
  11857. } else {
  11858. const e4 = "uni-id-check-token-failed";
  11859. n3 = { errCode: e4, errMsg: is[e4] };
  11860. }
  11861. return n3;
  11862. }();
  11863. if (vs(e2) && n2) {
  11864. n2.uniIdRedirectUrl = e2;
  11865. if (J($).length > 0)
  11866. return setTimeout(() => {
  11867. Y($, n2);
  11868. }, 0), t2.abortLoginPageJump = true, t2;
  11869. t2.autoToLoginPage = true;
  11870. }
  11871. return t2;
  11872. }
  11873. function ks() {
  11874. !function() {
  11875. const e3 = us(), { abortLoginPageJump: t2, autoToLoginPage: n2 } = bs({ url: e3 });
  11876. t2 || n2 && Ss({ api: "redirectTo", redirect: e3 });
  11877. }();
  11878. const e2 = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
  11879. for (let t2 = 0; t2 < e2.length; t2++) {
  11880. const n2 = e2[t2];
  11881. uni.addInterceptor(n2, { invoke(e3) {
  11882. const { abortLoginPageJump: t3, autoToLoginPage: s2 } = bs({ url: e3.url });
  11883. return t3 ? e3 : s2 ? (Ss({ api: n2, redirect: ws(e3.url) }), false) : e3;
  11884. } });
  11885. }
  11886. }
  11887. function As() {
  11888. this.onResponse((e2) => {
  11889. const { type: t2, content: n2 } = e2;
  11890. let s2 = false;
  11891. switch (t2) {
  11892. case "cloudobject":
  11893. s2 = function(e3) {
  11894. if ("object" != typeof e3)
  11895. return false;
  11896. const { errCode: t3 } = e3 || {};
  11897. return t3 in is;
  11898. }(n2);
  11899. break;
  11900. case "clientdb":
  11901. s2 = function(e3) {
  11902. if ("object" != typeof e3)
  11903. return false;
  11904. const { errCode: t3 } = e3 || {};
  11905. return t3 in rs;
  11906. }(n2);
  11907. }
  11908. s2 && function(e3 = {}) {
  11909. const t3 = J($);
  11910. Z().then(() => {
  11911. const n3 = us();
  11912. if (n3 && Is({ redirect: n3 }))
  11913. return t3.length > 0 ? Y($, Object.assign({ uniIdRedirectUrl: n3 }, e3)) : void (ps && Ss({ api: "navigateTo", redirect: n3 }));
  11914. });
  11915. }(n2);
  11916. });
  11917. }
  11918. function Cs(e2) {
  11919. !function(e3) {
  11920. e3.onResponse = function(e4) {
  11921. V(j, e4);
  11922. }, e3.offResponse = function(e4) {
  11923. G(j, e4);
  11924. };
  11925. }(e2), function(e3) {
  11926. e3.onNeedLogin = function(e4) {
  11927. V($, e4);
  11928. }, e3.offNeedLogin = function(e4) {
  11929. G($, e4);
  11930. }, ds && (L("_globalUniCloudStatus").needLoginInit || (L("_globalUniCloudStatus").needLoginInit = true, Z().then(() => {
  11931. ks.call(e3);
  11932. }), gs && As.call(e3)));
  11933. }(e2), function(e3) {
  11934. e3.onRefreshToken = function(e4) {
  11935. V(B, e4);
  11936. }, e3.offRefreshToken = function(e4) {
  11937. G(B, e4);
  11938. };
  11939. }(e2);
  11940. }
  11941. let Ps;
  11942. const Ts = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", xs = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;
  11943. function Os() {
  11944. const e2 = re().token || "", t2 = e2.split(".");
  11945. if (!e2 || 3 !== t2.length)
  11946. return { uid: null, role: [], permission: [], tokenExpired: 0 };
  11947. let n2;
  11948. try {
  11949. n2 = JSON.parse((s2 = t2[1], decodeURIComponent(Ps(s2).split("").map(function(e3) {
  11950. return "%" + ("00" + e3.charCodeAt(0).toString(16)).slice(-2);
  11951. }).join(""))));
  11952. } catch (e3) {
  11953. throw new Error("获取当前用户信息出错,详细错误信息为:" + e3.message);
  11954. }
  11955. var s2;
  11956. return n2.tokenExpired = 1e3 * n2.exp, delete n2.exp, delete n2.iat, n2;
  11957. }
  11958. Ps = "function" != typeof atob ? function(e2) {
  11959. if (e2 = String(e2).replace(/[\t\n\f\r ]+/g, ""), !xs.test(e2))
  11960. throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
  11961. var t2;
  11962. e2 += "==".slice(2 - (3 & e2.length));
  11963. for (var n2, s2, r2 = "", i2 = 0; i2 < e2.length; )
  11964. t2 = Ts.indexOf(e2.charAt(i2++)) << 18 | Ts.indexOf(e2.charAt(i2++)) << 12 | (n2 = Ts.indexOf(e2.charAt(i2++))) << 6 | (s2 = Ts.indexOf(e2.charAt(i2++))), r2 += 64 === n2 ? String.fromCharCode(t2 >> 16 & 255) : 64 === s2 ? String.fromCharCode(t2 >> 16 & 255, t2 >> 8 & 255) : String.fromCharCode(t2 >> 16 & 255, t2 >> 8 & 255, 255 & t2);
  11965. return r2;
  11966. } : atob;
  11967. var Es = n(function(e2, t2) {
  11968. Object.defineProperty(t2, "__esModule", { value: true });
  11969. const n2 = "chooseAndUploadFile:ok", s2 = "chooseAndUploadFile:fail";
  11970. function r2(e3, t3) {
  11971. return e3.tempFiles.forEach((e4, n3) => {
  11972. e4.name || (e4.name = e4.path.substring(e4.path.lastIndexOf("/") + 1)), t3 && (e4.fileType = t3), e4.cloudPath = Date.now() + "_" + n3 + e4.name.substring(e4.name.lastIndexOf("."));
  11973. }), e3.tempFilePaths || (e3.tempFilePaths = e3.tempFiles.map((e4) => e4.path)), e3;
  11974. }
  11975. function i2(e3, t3, { onChooseFile: s3, onUploadProgress: r3 }) {
  11976. return t3.then((e4) => {
  11977. if (s3) {
  11978. const t4 = s3(e4);
  11979. if (void 0 !== t4)
  11980. return Promise.resolve(t4).then((t5) => void 0 === t5 ? e4 : t5);
  11981. }
  11982. return e4;
  11983. }).then((t4) => false === t4 ? { errMsg: n2, tempFilePaths: [], tempFiles: [] } : function(e4, t5, s4 = 5, r4) {
  11984. (t5 = Object.assign({}, t5)).errMsg = n2;
  11985. const i3 = t5.tempFiles, o2 = i3.length;
  11986. let a2 = 0;
  11987. return new Promise((n3) => {
  11988. for (; a2 < s4; )
  11989. c2();
  11990. function c2() {
  11991. const s5 = a2++;
  11992. if (s5 >= o2)
  11993. return void (!i3.find((e5) => !e5.url && !e5.errMsg) && n3(t5));
  11994. const u2 = i3[s5];
  11995. e4.uploadFile({ provider: u2.provider, filePath: u2.path, cloudPath: u2.cloudPath, fileType: u2.fileType, cloudPathAsRealPath: u2.cloudPathAsRealPath, onUploadProgress(e5) {
  11996. e5.index = s5, e5.tempFile = u2, e5.tempFilePath = u2.path, r4 && r4(e5);
  11997. } }).then((e5) => {
  11998. u2.url = e5.fileID, s5 < o2 && c2();
  11999. }).catch((e5) => {
  12000. u2.errMsg = e5.errMsg || e5.message, s5 < o2 && c2();
  12001. });
  12002. }
  12003. });
  12004. }(e3, t4, 5, r3));
  12005. }
  12006. t2.initChooseAndUploadFile = function(e3) {
  12007. return function(t3 = { type: "all" }) {
  12008. return "image" === t3.type ? i2(e3, function(e4) {
  12009. const { count: t4, sizeType: n3, sourceType: i3 = ["album", "camera"], extension: o2 } = e4;
  12010. return new Promise((e5, a2) => {
  12011. uni.chooseImage({ count: t4, sizeType: n3, sourceType: i3, extension: o2, success(t5) {
  12012. e5(r2(t5, "image"));
  12013. }, fail(e6) {
  12014. a2({ errMsg: e6.errMsg.replace("chooseImage:fail", s2) });
  12015. } });
  12016. });
  12017. }(t3), t3) : "video" === t3.type ? i2(e3, function(e4) {
  12018. const { camera: t4, compressed: n3, maxDuration: i3, sourceType: o2 = ["album", "camera"], extension: a2 } = e4;
  12019. return new Promise((e5, c2) => {
  12020. uni.chooseVideo({ camera: t4, compressed: n3, maxDuration: i3, sourceType: o2, extension: a2, success(t5) {
  12021. const { tempFilePath: n4, duration: s3, size: i4, height: o3, width: a3 } = t5;
  12022. e5(r2({ errMsg: "chooseVideo:ok", tempFilePaths: [n4], tempFiles: [{ name: t5.tempFile && t5.tempFile.name || "", path: n4, size: i4, type: t5.tempFile && t5.tempFile.type || "", width: a3, height: o3, duration: s3, fileType: "video", cloudPath: "" }] }, "video"));
  12023. }, fail(e6) {
  12024. c2({ errMsg: e6.errMsg.replace("chooseVideo:fail", s2) });
  12025. } });
  12026. });
  12027. }(t3), t3) : i2(e3, function(e4) {
  12028. const { count: t4, extension: n3 } = e4;
  12029. return new Promise((e5, i3) => {
  12030. let o2 = uni.chooseFile;
  12031. if ("undefined" != typeof wx && "function" == typeof wx.chooseMessageFile && (o2 = wx.chooseMessageFile), "function" != typeof o2)
  12032. return i3({ errMsg: s2 + " 请指定 type 类型,该平台仅支持选择 image 或 video。" });
  12033. o2({ type: "all", count: t4, extension: n3, success(t5) {
  12034. e5(r2(t5));
  12035. }, fail(e6) {
  12036. i3({ errMsg: e6.errMsg.replace("chooseFile:fail", s2) });
  12037. } });
  12038. });
  12039. }(t3), t3);
  12040. };
  12041. };
  12042. }), Ls = t$3(Es);
  12043. const Rs = "manual";
  12044. function Us(e2) {
  12045. return { props: { localdata: { type: Array, default: () => [] }, options: { type: [Object, Array], default: () => ({}) }, spaceInfo: { type: Object, default: () => ({}) }, collection: { type: [String, Array], default: "" }, action: { type: String, default: "" }, field: { type: String, default: "" }, orderby: { type: String, default: "" }, where: { type: [String, Object], default: "" }, pageData: { type: String, default: "add" }, pageCurrent: { type: Number, default: 1 }, pageSize: { type: Number, default: 20 }, getcount: { type: [Boolean, String], default: false }, gettree: { type: [Boolean, String], default: false }, gettreepath: { type: [Boolean, String], default: false }, startwith: { type: String, default: "" }, limitlevel: { type: Number, default: 10 }, groupby: { type: String, default: "" }, groupField: { type: String, default: "" }, distinct: { type: [Boolean, String], default: false }, foreignKey: { type: String, default: "" }, loadtime: { type: String, default: "auto" }, manual: { type: Boolean, default: false } }, data: () => ({ mixinDatacomLoading: false, mixinDatacomHasMore: false, mixinDatacomResData: [], mixinDatacomErrorMessage: "", mixinDatacomPage: {}, mixinDatacomError: null }), created() {
  12046. this.mixinDatacomPage = { current: this.pageCurrent, size: this.pageSize, count: 0 }, this.$watch(() => {
  12047. var e3 = [];
  12048. return ["pageCurrent", "pageSize", "localdata", "collection", "action", "field", "orderby", "where", "getont", "getcount", "gettree", "groupby", "groupField", "distinct"].forEach((t2) => {
  12049. e3.push(this[t2]);
  12050. }), e3;
  12051. }, (e3, t2) => {
  12052. if (this.loadtime === Rs)
  12053. return;
  12054. let n2 = false;
  12055. const s2 = [];
  12056. for (let r2 = 2; r2 < e3.length; r2++)
  12057. e3[r2] !== t2[r2] && (s2.push(e3[r2]), n2 = true);
  12058. e3[0] !== t2[0] && (this.mixinDatacomPage.current = this.pageCurrent), this.mixinDatacomPage.size = this.pageSize, this.onMixinDatacomPropsChange(n2, s2);
  12059. });
  12060. }, methods: { onMixinDatacomPropsChange(e3, t2) {
  12061. }, mixinDatacomEasyGet({ getone: e3 = false, success: t2, fail: n2 } = {}) {
  12062. this.mixinDatacomLoading || (this.mixinDatacomLoading = true, this.mixinDatacomErrorMessage = "", this.mixinDatacomError = null, this.mixinDatacomGet().then((n3) => {
  12063. this.mixinDatacomLoading = false;
  12064. const { data: s2, count: r2 } = n3.result;
  12065. this.getcount && (this.mixinDatacomPage.count = r2), this.mixinDatacomHasMore = s2.length < this.pageSize;
  12066. const i2 = e3 ? s2.length ? s2[0] : void 0 : s2;
  12067. this.mixinDatacomResData = i2, t2 && t2(i2);
  12068. }).catch((e4) => {
  12069. this.mixinDatacomLoading = false, this.mixinDatacomErrorMessage = e4, this.mixinDatacomError = e4, n2 && n2(e4);
  12070. }));
  12071. }, mixinDatacomGet(t2 = {}) {
  12072. let n2;
  12073. t2 = t2 || {}, n2 = "undefined" != typeof __uniX && __uniX ? e2.databaseForJQL(this.spaceInfo) : e2.database(this.spaceInfo);
  12074. const s2 = t2.action || this.action;
  12075. s2 && (n2 = n2.action(s2));
  12076. const r2 = t2.collection || this.collection;
  12077. n2 = Array.isArray(r2) ? n2.collection(...r2) : n2.collection(r2);
  12078. const i2 = t2.where || this.where;
  12079. i2 && Object.keys(i2).length && (n2 = n2.where(i2));
  12080. const o2 = t2.field || this.field;
  12081. o2 && (n2 = n2.field(o2));
  12082. const a2 = t2.foreignKey || this.foreignKey;
  12083. a2 && (n2 = n2.foreignKey(a2));
  12084. const c2 = t2.groupby || this.groupby;
  12085. c2 && (n2 = n2.groupBy(c2));
  12086. const u2 = t2.groupField || this.groupField;
  12087. u2 && (n2 = n2.groupField(u2));
  12088. true === (void 0 !== t2.distinct ? t2.distinct : this.distinct) && (n2 = n2.distinct());
  12089. const h2 = t2.orderby || this.orderby;
  12090. h2 && (n2 = n2.orderBy(h2));
  12091. const l2 = void 0 !== t2.pageCurrent ? t2.pageCurrent : this.mixinDatacomPage.current, d2 = void 0 !== t2.pageSize ? t2.pageSize : this.mixinDatacomPage.size, p2 = void 0 !== t2.getcount ? t2.getcount : this.getcount, f2 = void 0 !== t2.gettree ? t2.gettree : this.gettree, g2 = void 0 !== t2.gettreepath ? t2.gettreepath : this.gettreepath, m2 = { getCount: p2 }, y2 = { limitLevel: void 0 !== t2.limitlevel ? t2.limitlevel : this.limitlevel, startWith: void 0 !== t2.startwith ? t2.startwith : this.startwith };
  12092. return f2 && (m2.getTree = y2), g2 && (m2.getTreePath = y2), n2 = n2.skip(d2 * (l2 - 1)).limit(d2).get(m2), n2;
  12093. } } };
  12094. }
  12095. function Ns(e2) {
  12096. return function(t2, n2 = {}) {
  12097. n2 = function(e3, t3 = {}) {
  12098. return e3.customUI = t3.customUI || e3.customUI, e3.parseSystemError = t3.parseSystemError || e3.parseSystemError, Object.assign(e3.loadingOptions, t3.loadingOptions), Object.assign(e3.errorOptions, t3.errorOptions), "object" == typeof t3.secretMethods && (e3.secretMethods = t3.secretMethods), e3;
  12099. }({ customUI: false, loadingOptions: { title: "加载中...", mask: true }, errorOptions: { type: "modal", retry: false } }, n2);
  12100. const { customUI: s2, loadingOptions: r2, errorOptions: i2, parseSystemError: o2 } = n2, a2 = !s2;
  12101. return new Proxy({}, { get(s3, c2) {
  12102. switch (c2) {
  12103. case "toString":
  12104. return "[object UniCloudObject]";
  12105. case "toJSON":
  12106. return {};
  12107. }
  12108. return function({ fn: e3, interceptorName: t3, getCallbackArgs: n3 } = {}) {
  12109. return async function(...s4) {
  12110. const r3 = n3 ? n3({ params: s4 }) : {};
  12111. let i3, o3;
  12112. try {
  12113. return await M(q(t3, "invoke"), { ...r3 }), i3 = await e3(...s4), await M(q(t3, "success"), { ...r3, result: i3 }), i3;
  12114. } catch (e4) {
  12115. throw o3 = e4, await M(q(t3, "fail"), { ...r3, error: o3 }), o3;
  12116. } finally {
  12117. await M(q(t3, "complete"), o3 ? { ...r3, error: o3 } : { ...r3, result: i3 });
  12118. }
  12119. };
  12120. }({ fn: async function s4(...h2) {
  12121. let l2;
  12122. a2 && uni.showLoading({ title: r2.title, mask: r2.mask });
  12123. const d2 = { name: t2, type: u, data: { method: c2, params: h2 } };
  12124. "object" == typeof n2.secretMethods && function(e3, t3) {
  12125. const n3 = t3.data.method, s5 = e3.secretMethods || {}, r3 = s5[n3] || s5["*"];
  12126. r3 && (t3.secretType = r3);
  12127. }(n2, d2);
  12128. let p2 = false;
  12129. try {
  12130. l2 = await e2.callFunction(d2);
  12131. } catch (e3) {
  12132. p2 = true, l2 = { result: new te(e3) };
  12133. }
  12134. const { errSubject: f2, errCode: g2, errMsg: m2, newToken: y2 } = l2.result || {};
  12135. if (a2 && uni.hideLoading(), y2 && y2.token && y2.tokenExpired && (ie(y2), Y(B, { ...y2 })), g2) {
  12136. let e3 = m2;
  12137. if (p2 && o2) {
  12138. e3 = (await o2({ objectName: t2, methodName: c2, params: h2, errSubject: f2, errCode: g2, errMsg: m2 })).errMsg || m2;
  12139. }
  12140. if (a2)
  12141. if ("toast" === i2.type)
  12142. uni.showToast({ title: e3, icon: "none" });
  12143. else {
  12144. if ("modal" !== i2.type)
  12145. throw new Error(`Invalid errorOptions.type: ${i2.type}`);
  12146. {
  12147. const { confirm: t3 } = await async function({ title: e4, content: t4, showCancel: n4, cancelText: s5, confirmText: r3 } = {}) {
  12148. return new Promise((i3, o3) => {
  12149. uni.showModal({ title: e4, content: t4, showCancel: n4, cancelText: s5, confirmText: r3, success(e5) {
  12150. i3(e5);
  12151. }, fail() {
  12152. i3({ confirm: false, cancel: true });
  12153. } });
  12154. });
  12155. }({ title: "提示", content: e3, showCancel: i2.retry, cancelText: "取消", confirmText: i2.retry ? "重试" : "确定" });
  12156. if (i2.retry && t3)
  12157. return s4(...h2);
  12158. }
  12159. }
  12160. const n3 = new te({ subject: f2, code: g2, message: m2, requestId: l2.requestId });
  12161. throw n3.detail = l2.result, Y(j, { type: z, content: n3 }), n3;
  12162. }
  12163. return Y(j, { type: z, content: l2.result }), l2.result;
  12164. }, interceptorName: "callObject", getCallbackArgs: function({ params: e3 } = {}) {
  12165. return { objectName: t2, methodName: c2, params: e3 };
  12166. } });
  12167. } });
  12168. };
  12169. }
  12170. function Ds(e2) {
  12171. return L("_globalUniCloudSecureNetworkCache__{spaceId}".replace("{spaceId}", e2.config.spaceId));
  12172. }
  12173. async function Ms({ openid: e2, callLoginByWeixin: t2 = false } = {}) {
  12174. Ds(this);
  12175. throw new Error(`[SecureNetwork] API \`initSecureNetworkByWeixin\` is not supported on platform \`${C}\``);
  12176. }
  12177. async function qs(e2) {
  12178. const t2 = Ds(this);
  12179. return t2.initPromise || (t2.initPromise = Ms.call(this, e2).then((e3) => e3).catch((e3) => {
  12180. throw delete t2.initPromise, e3;
  12181. })), t2.initPromise;
  12182. }
  12183. function Fs(e2) {
  12184. return function({ openid: t2, callLoginByWeixin: n2 = false } = {}) {
  12185. return qs.call(e2, { openid: t2, callLoginByWeixin: n2 });
  12186. };
  12187. }
  12188. function Ks(e2) {
  12189. !function(e3) {
  12190. he = e3;
  12191. }(e2);
  12192. }
  12193. function js(e2) {
  12194. const t2 = { getSystemInfo: uni.getSystemInfo, getPushClientId: uni.getPushClientId };
  12195. return function(n2) {
  12196. return new Promise((s2, r2) => {
  12197. t2[e2]({ ...n2, success(e3) {
  12198. s2(e3);
  12199. }, fail(e3) {
  12200. r2(e3);
  12201. } });
  12202. });
  12203. };
  12204. }
  12205. class $s extends class {
  12206. constructor() {
  12207. this._callback = {};
  12208. }
  12209. addListener(e2, t2) {
  12210. this._callback[e2] || (this._callback[e2] = []), this._callback[e2].push(t2);
  12211. }
  12212. on(e2, t2) {
  12213. return this.addListener(e2, t2);
  12214. }
  12215. removeListener(e2, t2) {
  12216. if (!t2)
  12217. throw new Error('The "listener" argument must be of type function. Received undefined');
  12218. const n2 = this._callback[e2];
  12219. if (!n2)
  12220. return;
  12221. const s2 = function(e3, t3) {
  12222. for (let n3 = e3.length - 1; n3 >= 0; n3--)
  12223. if (e3[n3] === t3)
  12224. return n3;
  12225. return -1;
  12226. }(n2, t2);
  12227. n2.splice(s2, 1);
  12228. }
  12229. off(e2, t2) {
  12230. return this.removeListener(e2, t2);
  12231. }
  12232. removeAllListener(e2) {
  12233. delete this._callback[e2];
  12234. }
  12235. emit(e2, ...t2) {
  12236. const n2 = this._callback[e2];
  12237. if (n2)
  12238. for (let e3 = 0; e3 < n2.length; e3++)
  12239. n2[e3](...t2);
  12240. }
  12241. } {
  12242. constructor() {
  12243. super(), this._uniPushMessageCallback = this._receivePushMessage.bind(this), this._currentMessageId = -1, this._payloadQueue = [];
  12244. }
  12245. init() {
  12246. return Promise.all([js("getSystemInfo")(), js("getPushClientId")()]).then(([{ appId: e2 } = {}, { cid: t2 } = {}] = []) => {
  12247. if (!e2)
  12248. throw new Error("Invalid appId, please check the manifest.json file");
  12249. if (!t2)
  12250. throw new Error("Invalid push client id");
  12251. this._appId = e2, this._pushClientId = t2, this._seqId = Date.now() + "-" + Math.floor(9e5 * Math.random() + 1e5), this.emit("open"), this._initMessageListener();
  12252. }, (e2) => {
  12253. throw this.emit("error", e2), this.close(), e2;
  12254. });
  12255. }
  12256. async open() {
  12257. return this.init();
  12258. }
  12259. _isUniCloudSSE(e2) {
  12260. if ("receive" !== e2.type)
  12261. return false;
  12262. const t2 = e2 && e2.data && e2.data.payload;
  12263. return !(!t2 || "UNI_CLOUD_SSE" !== t2.channel || t2.seqId !== this._seqId);
  12264. }
  12265. _receivePushMessage(e2) {
  12266. if (!this._isUniCloudSSE(e2))
  12267. return;
  12268. const t2 = e2 && e2.data && e2.data.payload, { action: n2, messageId: s2, message: r2 } = t2;
  12269. this._payloadQueue.push({ action: n2, messageId: s2, message: r2 }), this._consumMessage();
  12270. }
  12271. _consumMessage() {
  12272. for (; ; ) {
  12273. const e2 = this._payloadQueue.find((e3) => e3.messageId === this._currentMessageId + 1);
  12274. if (!e2)
  12275. break;
  12276. this._currentMessageId++, this._parseMessagePayload(e2);
  12277. }
  12278. }
  12279. _parseMessagePayload(e2) {
  12280. const { action: t2, messageId: n2, message: s2 } = e2;
  12281. "end" === t2 ? this._end({ messageId: n2, message: s2 }) : "message" === t2 && this._appendMessage({ messageId: n2, message: s2 });
  12282. }
  12283. _appendMessage({ messageId: e2, message: t2 } = {}) {
  12284. this.emit("message", t2);
  12285. }
  12286. _end({ messageId: e2, message: t2 } = {}) {
  12287. this.emit("end", t2), this.close();
  12288. }
  12289. _initMessageListener() {
  12290. uni.onPushMessage(this._uniPushMessageCallback);
  12291. }
  12292. _destroy() {
  12293. uni.offPushMessage(this._uniPushMessageCallback);
  12294. }
  12295. toJSON() {
  12296. return { appId: this._appId, pushClientId: this._pushClientId, seqId: this._seqId };
  12297. }
  12298. close() {
  12299. this._destroy(), this.emit("close");
  12300. }
  12301. }
  12302. async function Bs(e2, t2) {
  12303. const n2 = `http://${e2}:${t2}/system/ping`;
  12304. try {
  12305. const e3 = await (s2 = { url: n2, timeout: 500 }, new Promise((e4, t3) => {
  12306. ne.request({ ...s2, success(t4) {
  12307. e4(t4);
  12308. }, fail(e5) {
  12309. t3(e5);
  12310. } });
  12311. }));
  12312. return !(!e3.data || 0 !== e3.data.code);
  12313. } catch (e3) {
  12314. return false;
  12315. }
  12316. var s2;
  12317. }
  12318. async function Ws(e2) {
  12319. {
  12320. const { osName: e3, osVersion: t3 } = ce();
  12321. "ios" === e3 && function(e4) {
  12322. if (!e4 || "string" != typeof e4)
  12323. return 0;
  12324. const t4 = e4.match(/^(\d+)./);
  12325. return t4 && t4[1] ? parseInt(t4[1]) : 0;
  12326. }(t3) >= 14 && console.warn("iOS 14及以上版本连接uniCloud本地调试服务需要允许客户端查找并连接到本地网络上的设备(仅开发期间需要,发行后不需要)");
  12327. }
  12328. const t2 = e2.__dev__;
  12329. if (!t2.debugInfo)
  12330. return;
  12331. const { address: n2, servePort: s2 } = t2.debugInfo, { address: r2 } = await async function(e3, t3) {
  12332. let n3;
  12333. for (let s3 = 0; s3 < e3.length; s3++) {
  12334. const r3 = e3[s3];
  12335. if (await Bs(r3, t3)) {
  12336. n3 = r3;
  12337. break;
  12338. }
  12339. }
  12340. return { address: n3, port: t3 };
  12341. }(n2, s2);
  12342. if (r2)
  12343. return t2.localAddress = r2, void (t2.localPort = s2);
  12344. const i2 = console["error"];
  12345. let o2 = "";
  12346. if ("remote" === t2.debugInfo.initialLaunchType ? (t2.debugInfo.forceRemote = true, o2 = "当前客户端和HBuilderX不在同一局域网下(或其他网络原因无法连接HBuilderX),uniCloud本地调试服务不对当前客户端生效。\n- 如果不使用uniCloud本地调试服务,请直接忽略此信息。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。") : o2 = "无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。", o2 += "\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试\n- 检查系统防火墙是否拦截了HBuilderX自带的nodejs\n- 检查是否错误的使用拦截器修改uni.request方法的参数", 0 === C.indexOf("mp-") && (o2 += "\n- 小程序中如何使用uniCloud,请参考:https://uniapp.dcloud.net.cn/uniCloud/publish.html#useinmp"), !t2.debugInfo.forceRemote)
  12347. throw new Error(o2);
  12348. i2(o2);
  12349. }
  12350. function Hs(e2) {
  12351. e2._initPromiseHub || (e2._initPromiseHub = new v({ createPromise: function() {
  12352. let t2 = Promise.resolve();
  12353. var n2;
  12354. n2 = 1, t2 = new Promise((e3) => {
  12355. setTimeout(() => {
  12356. e3();
  12357. }, n2);
  12358. });
  12359. const s2 = e2.auth();
  12360. return t2.then(() => s2.getLoginState()).then((e3) => e3 ? Promise.resolve() : s2.signInAnonymously());
  12361. } }));
  12362. }
  12363. const zs = { tcb: bt, tencent: bt, aliyun: fe, private: At, alipay: Nt };
  12364. let Js = new class {
  12365. init(e2) {
  12366. let t2 = {};
  12367. const n2 = zs[e2.provider];
  12368. if (!n2)
  12369. throw new Error("未提供正确的provider参数");
  12370. t2 = n2.init(e2), function(e3) {
  12371. const t3 = {};
  12372. e3.__dev__ = t3, t3.debugLog = "app" === C;
  12373. const n3 = P;
  12374. n3 && !n3.code && (t3.debugInfo = n3);
  12375. const s2 = new v({ createPromise: function() {
  12376. return Ws(e3);
  12377. } });
  12378. t3.initLocalNetwork = function() {
  12379. return s2.exec();
  12380. };
  12381. }(t2), Hs(t2), Bn(t2), function(e3) {
  12382. const t3 = e3.uploadFile;
  12383. e3.uploadFile = function(e4) {
  12384. return t3.call(this, e4);
  12385. };
  12386. }(t2), function(e3) {
  12387. e3.database = function(t3) {
  12388. if (t3 && Object.keys(t3).length > 0)
  12389. return e3.init(t3).database();
  12390. if (this._database)
  12391. return this._database;
  12392. const n3 = es(ts, { uniClient: e3 });
  12393. return this._database = n3, n3;
  12394. }, e3.databaseForJQL = function(t3) {
  12395. if (t3 && Object.keys(t3).length > 0)
  12396. return e3.init(t3).databaseForJQL();
  12397. if (this._databaseForJQL)
  12398. return this._databaseForJQL;
  12399. const n3 = es(ts, { uniClient: e3, isJQL: true });
  12400. return this._databaseForJQL = n3, n3;
  12401. };
  12402. }(t2), function(e3) {
  12403. e3.getCurrentUserInfo = Os, e3.chooseAndUploadFile = Ls.initChooseAndUploadFile(e3), Object.assign(e3, { get mixinDatacom() {
  12404. return Us(e3);
  12405. } }), e3.SSEChannel = $s, e3.initSecureNetworkByWeixin = Fs(e3), e3.setCustomClientInfo = Ks, e3.importObject = Ns(e3);
  12406. }(t2);
  12407. return ["callFunction", "uploadFile", "deleteFile", "getTempFileURL", "downloadFile", "chooseAndUploadFile"].forEach((e3) => {
  12408. if (!t2[e3])
  12409. return;
  12410. const n3 = t2[e3];
  12411. t2[e3] = function() {
  12412. return n3.apply(t2, Array.from(arguments));
  12413. }, t2[e3] = (/* @__PURE__ */ function(e4, t3) {
  12414. return function(n4) {
  12415. let s2 = false;
  12416. if ("callFunction" === t3) {
  12417. const e5 = n4 && n4.type || c;
  12418. s2 = e5 !== c;
  12419. }
  12420. const r2 = "callFunction" === t3 && !s2, i2 = this._initPromiseHub.exec();
  12421. n4 = n4 || {};
  12422. const { success: o2, fail: a2, complete: u2 } = ee(n4), h2 = i2.then(() => s2 ? Promise.resolve() : M(q(t3, "invoke"), n4)).then(() => e4.call(this, n4)).then((e5) => s2 ? Promise.resolve(e5) : M(q(t3, "success"), e5).then(() => M(q(t3, "complete"), e5)).then(() => (r2 && Y(j, { type: H, content: e5 }), Promise.resolve(e5))), (e5) => s2 ? Promise.reject(e5) : M(q(t3, "fail"), e5).then(() => M(q(t3, "complete"), e5)).then(() => (Y(j, { type: H, content: e5 }), Promise.reject(e5))));
  12423. if (!(o2 || a2 || u2))
  12424. return h2;
  12425. h2.then((e5) => {
  12426. o2 && o2(e5), u2 && u2(e5), r2 && Y(j, { type: H, content: e5 });
  12427. }, (e5) => {
  12428. a2 && a2(e5), u2 && u2(e5), r2 && Y(j, { type: H, content: e5 });
  12429. });
  12430. };
  12431. }(t2[e3], e3)).bind(t2);
  12432. }), t2.init = this.init, t2;
  12433. }
  12434. }();
  12435. (() => {
  12436. const e2 = T;
  12437. let t2 = {};
  12438. if (e2 && 1 === e2.length)
  12439. t2 = e2[0], Js = Js.init(t2), Js._isDefault = true;
  12440. else {
  12441. const t3 = ["auth", "callFunction", "uploadFile", "deleteFile", "getTempFileURL", "downloadFile", "database", "getCurrentUSerInfo", "importObject"];
  12442. let n2;
  12443. n2 = e2 && e2.length > 0 ? "应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间" : "应用未关联服务空间,请在uniCloud目录右键关联服务空间", t3.forEach((e3) => {
  12444. Js[e3] = function() {
  12445. return console.error(n2), Promise.reject(new te({ code: "SYS_ERR", message: n2 }));
  12446. };
  12447. });
  12448. }
  12449. Object.assign(Js, { get mixinDatacom() {
  12450. return Us(Js);
  12451. } }), Cs(Js), Js.addInterceptor = N, Js.removeInterceptor = D, Js.interceptObject = F;
  12452. })();
  12453. var Vs = Js;
  12454. const _sfc_main$C = {
  12455. name: "uni-stat-select",
  12456. mixins: [Vs.mixinDatacom || {}],
  12457. data() {
  12458. return {
  12459. showSelector: false,
  12460. current: "",
  12461. mixinDatacomResData: [],
  12462. apps: [],
  12463. channels: []
  12464. };
  12465. },
  12466. props: {
  12467. localdata: {
  12468. type: Array,
  12469. default() {
  12470. return [];
  12471. }
  12472. },
  12473. value: {
  12474. type: [String, Number],
  12475. default: ""
  12476. },
  12477. modelValue: {
  12478. type: [String, Number],
  12479. default: ""
  12480. },
  12481. label: {
  12482. type: String,
  12483. default: ""
  12484. },
  12485. placeholder: {
  12486. type: String,
  12487. default: "请选择"
  12488. },
  12489. emptyTips: {
  12490. type: String,
  12491. default: "无选项"
  12492. },
  12493. clear: {
  12494. type: Boolean,
  12495. default: true
  12496. },
  12497. defItem: {
  12498. type: Number,
  12499. default: 0
  12500. },
  12501. disabled: {
  12502. type: Boolean,
  12503. default: false
  12504. }
  12505. },
  12506. created() {
  12507. this.last = `${this.collection}_last_selected_option_value`;
  12508. if (this.collection && !this.localdata.length) {
  12509. this.mixinDatacomEasyGet();
  12510. }
  12511. },
  12512. computed: {
  12513. typePlaceholder() {
  12514. const text = {
  12515. "opendb-stat-app-versions": "版本",
  12516. "opendb-app-channels": "渠道",
  12517. "opendb-app-list": "应用"
  12518. };
  12519. const common = this.placeholder;
  12520. const placeholder = text[this.collection];
  12521. return placeholder ? common + placeholder : common;
  12522. }
  12523. },
  12524. watch: {
  12525. localdata: {
  12526. immediate: true,
  12527. handler(val, old) {
  12528. if (Array.isArray(val) && old !== val) {
  12529. this.mixinDatacomResData = val;
  12530. }
  12531. }
  12532. },
  12533. modelValue() {
  12534. this.initDefVal();
  12535. },
  12536. mixinDatacomResData: {
  12537. immediate: true,
  12538. handler(val) {
  12539. if (val.length) {
  12540. this.initDefVal();
  12541. }
  12542. }
  12543. }
  12544. },
  12545. methods: {
  12546. initDefVal() {
  12547. let defValue = "";
  12548. if ((this.value || this.value === 0) && !this.isDisabled(this.value)) {
  12549. defValue = this.value;
  12550. } else if ((this.modelValue || this.modelValue === 0) && !this.isDisabled(this.modelValue)) {
  12551. defValue = this.modelValue;
  12552. } else {
  12553. let strogeValue;
  12554. if (this.collection) {
  12555. strogeValue = uni.getStorageSync(this.last);
  12556. }
  12557. if (strogeValue || strogeValue === 0) {
  12558. defValue = strogeValue;
  12559. } else {
  12560. let defItem = "";
  12561. if (this.defItem > 0 && this.defItem < this.mixinDatacomResData.length) {
  12562. defItem = this.mixinDatacomResData[this.defItem - 1].value;
  12563. }
  12564. defValue = defItem;
  12565. }
  12566. this.emit(defValue);
  12567. }
  12568. const def = this.mixinDatacomResData.find((item) => item.value === defValue);
  12569. this.current = def ? this.formatItemName(def) : "";
  12570. },
  12571. /**
  12572. * @param {[String, Number]} value
  12573. * 判断用户给的 value 是否同时为禁用状态
  12574. */
  12575. isDisabled(value) {
  12576. let isDisabled = false;
  12577. this.mixinDatacomResData.forEach((item) => {
  12578. if (item.value === value) {
  12579. isDisabled = item.disable;
  12580. }
  12581. });
  12582. return isDisabled;
  12583. },
  12584. clearVal() {
  12585. this.emit("");
  12586. if (this.collection) {
  12587. uni.removeStorageSync(this.last);
  12588. }
  12589. },
  12590. change(item) {
  12591. if (!item.disable) {
  12592. this.showSelector = false;
  12593. this.current = this.formatItemName(item);
  12594. this.emit(item.value);
  12595. }
  12596. },
  12597. emit(val) {
  12598. this.$emit("change", val);
  12599. this.$emit("input", val);
  12600. this.$emit("update:modelValue", val);
  12601. if (this.collection) {
  12602. uni.setStorageSync(this.last, val);
  12603. }
  12604. },
  12605. toggleSelector() {
  12606. if (this.disabled) {
  12607. return;
  12608. }
  12609. this.showSelector = !this.showSelector;
  12610. },
  12611. formatItemName(item) {
  12612. let {
  12613. text,
  12614. value,
  12615. channel_code
  12616. } = item;
  12617. channel_code = channel_code ? `(${channel_code})` : "";
  12618. return this.collection.indexOf("app-list") > 0 ? `${text}(${value})` : text ? text : `未命名${channel_code}`;
  12619. }
  12620. }
  12621. };
  12622. function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) {
  12623. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  12624. return vue.openBlock(), vue.createElementBlock("view", { class: "uni-stat__select" }, [
  12625. $props.label ? (vue.openBlock(), vue.createElementBlock(
  12626. "span",
  12627. {
  12628. key: 0,
  12629. class: "uni-label-text hide-on-phone"
  12630. },
  12631. vue.toDisplayString($props.label + ":"),
  12632. 1
  12633. /* TEXT */
  12634. )) : vue.createCommentVNode("v-if", true),
  12635. vue.createElementVNode(
  12636. "view",
  12637. {
  12638. class: vue.normalizeClass(["uni-stat-box", { "uni-stat__actived": $data.current }])
  12639. },
  12640. [
  12641. vue.createElementVNode(
  12642. "view",
  12643. {
  12644. class: vue.normalizeClass(["uni-select", { "uni-select--disabled": $props.disabled }])
  12645. },
  12646. [
  12647. vue.createElementVNode("view", {
  12648. class: "uni-select__input-box",
  12649. onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleSelector && $options.toggleSelector(...args))
  12650. }, [
  12651. $data.current ? (vue.openBlock(), vue.createElementBlock(
  12652. "view",
  12653. {
  12654. key: 0,
  12655. class: "uni-select__input-text"
  12656. },
  12657. vue.toDisplayString($data.current),
  12658. 1
  12659. /* TEXT */
  12660. )) : (vue.openBlock(), vue.createElementBlock(
  12661. "view",
  12662. {
  12663. key: 1,
  12664. class: "uni-select__input-text uni-select__input-placeholder"
  12665. },
  12666. vue.toDisplayString($options.typePlaceholder),
  12667. 1
  12668. /* TEXT */
  12669. )),
  12670. $data.current && $props.clear ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  12671. key: 2,
  12672. type: "clear",
  12673. color: "#c0c4cc",
  12674. size: "24",
  12675. onClick: $options.clearVal
  12676. }, null, 8, ["onClick"])) : (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  12677. key: 3,
  12678. type: $data.showSelector ? "top" : "bottom",
  12679. size: "14",
  12680. color: "#999"
  12681. }, null, 8, ["type"]))
  12682. ]),
  12683. $data.showSelector ? (vue.openBlock(), vue.createElementBlock("view", {
  12684. key: 0,
  12685. class: "uni-select--mask",
  12686. onClick: _cache[1] || (_cache[1] = (...args) => $options.toggleSelector && $options.toggleSelector(...args))
  12687. })) : vue.createCommentVNode("v-if", true),
  12688. $data.showSelector ? (vue.openBlock(), vue.createElementBlock("view", {
  12689. key: 1,
  12690. class: "uni-select__selector"
  12691. }, [
  12692. vue.createElementVNode("view", { class: "uni-popper__arrow" }),
  12693. vue.createElementVNode("scroll-view", {
  12694. "scroll-y": "true",
  12695. class: "uni-select__selector-scroll"
  12696. }, [
  12697. $data.mixinDatacomResData.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  12698. key: 0,
  12699. class: "uni-select__selector-empty"
  12700. }, [
  12701. vue.createElementVNode(
  12702. "text",
  12703. null,
  12704. vue.toDisplayString($props.emptyTips),
  12705. 1
  12706. /* TEXT */
  12707. )
  12708. ])) : (vue.openBlock(true), vue.createElementBlock(
  12709. vue.Fragment,
  12710. { key: 1 },
  12711. vue.renderList($data.mixinDatacomResData, (item, index) => {
  12712. return vue.openBlock(), vue.createElementBlock("view", {
  12713. class: "uni-select__selector-item",
  12714. key: index,
  12715. onClick: ($event) => $options.change(item)
  12716. }, [
  12717. vue.createElementVNode(
  12718. "text",
  12719. {
  12720. class: vue.normalizeClass({ "uni-select__selector__disabled": item.disable })
  12721. },
  12722. vue.toDisplayString($options.formatItemName(item)),
  12723. 3
  12724. /* TEXT, CLASS */
  12725. )
  12726. ], 8, ["onClick"]);
  12727. }),
  12728. 128
  12729. /* KEYED_FRAGMENT */
  12730. ))
  12731. ])
  12732. ])) : vue.createCommentVNode("v-if", true)
  12733. ],
  12734. 2
  12735. /* CLASS */
  12736. )
  12737. ],
  12738. 2
  12739. /* CLASS */
  12740. )
  12741. ]);
  12742. }
  12743. const __easycom_0$3 = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["render", _sfc_render$B], ["__scopeId", "data-v-123e8af9"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-data-select/uni-data-select.vue"]]);
  12744. const popup = {
  12745. data() {
  12746. return {};
  12747. },
  12748. created() {
  12749. this.popup = this.getParent();
  12750. },
  12751. methods: {
  12752. /**
  12753. * 获取父元素实例
  12754. */
  12755. getParent(name = "uniPopup") {
  12756. let parent = this.$parent;
  12757. let parentName = parent.$options.name;
  12758. while (parentName !== name) {
  12759. parent = parent.$parent;
  12760. if (!parent)
  12761. return false;
  12762. parentName = parent.$options.name;
  12763. }
  12764. return parent;
  12765. }
  12766. }
  12767. };
  12768. const _sfc_main$B = {
  12769. name: "uniPopupMessage",
  12770. mixins: [popup],
  12771. props: {
  12772. /**
  12773. * 主题 success/warning/info/error 默认 success
  12774. */
  12775. type: {
  12776. type: String,
  12777. default: "success"
  12778. },
  12779. /**
  12780. * 消息文字
  12781. */
  12782. message: {
  12783. type: String,
  12784. default: ""
  12785. },
  12786. /**
  12787. * 显示时间,设置为 0 则不会自动关闭
  12788. */
  12789. duration: {
  12790. type: Number,
  12791. default: 3e3
  12792. },
  12793. maskShow: {
  12794. type: Boolean,
  12795. default: false
  12796. }
  12797. },
  12798. data() {
  12799. return {};
  12800. },
  12801. created() {
  12802. this.popup.maskShow = this.maskShow;
  12803. this.popup.messageChild = this;
  12804. },
  12805. methods: {
  12806. timerClose() {
  12807. if (this.duration === 0)
  12808. return;
  12809. clearTimeout(this.timer);
  12810. this.timer = setTimeout(() => {
  12811. this.popup.close();
  12812. }, this.duration);
  12813. }
  12814. }
  12815. };
  12816. function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) {
  12817. return vue.openBlock(), vue.createElementBlock("view", { class: "uni-popup-message" }, [
  12818. vue.createElementVNode(
  12819. "view",
  12820. {
  12821. class: vue.normalizeClass(["uni-popup-message__box fixforpc-width", "uni-popup__" + $props.type])
  12822. },
  12823. [
  12824. vue.renderSlot(_ctx.$slots, "default", {}, () => [
  12825. vue.createElementVNode(
  12826. "text",
  12827. {
  12828. class: vue.normalizeClass(["uni-popup-message-text", "uni-popup__" + $props.type + "-text"])
  12829. },
  12830. vue.toDisplayString($props.message),
  12831. 3
  12832. /* TEXT, CLASS */
  12833. )
  12834. ], true)
  12835. ],
  12836. 2
  12837. /* CLASS */
  12838. )
  12839. ]);
  12840. }
  12841. const __easycom_1$1 = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["render", _sfc_render$A], ["__scopeId", "data-v-515d10d7"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-popup-message/uni-popup-message.vue"]]);
  12842. var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
  12843. function getDefaultExportFromCjs(x) {
  12844. return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
  12845. }
  12846. var dayjs_min = { exports: {} };
  12847. (function(module, exports) {
  12848. !function(t2, e2) {
  12849. module.exports = e2();
  12850. }(commonjsGlobal, function() {
  12851. var t2 = 1e3, e2 = 6e4, n2 = 36e5, r2 = "millisecond", i2 = "second", s2 = "minute", u2 = "hour", a2 = "day", o2 = "week", c2 = "month", f2 = "quarter", h2 = "year", d2 = "date", l2 = "Invalid Date", $2 = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y2 = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M2 = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(t3) {
  12852. var e3 = ["th", "st", "nd", "rd"], n3 = t3 % 100;
  12853. return "[" + t3 + (e3[(n3 - 20) % 10] || e3[n3] || e3[0]) + "]";
  12854. } }, m2 = function(t3, e3, n3) {
  12855. var r3 = String(t3);
  12856. return !r3 || r3.length >= e3 ? t3 : "" + Array(e3 + 1 - r3.length).join(n3) + t3;
  12857. }, v2 = { s: m2, z: function(t3) {
  12858. var e3 = -t3.utcOffset(), n3 = Math.abs(e3), r3 = Math.floor(n3 / 60), i3 = n3 % 60;
  12859. return (e3 <= 0 ? "+" : "-") + m2(r3, 2, "0") + ":" + m2(i3, 2, "0");
  12860. }, m: function t3(e3, n3) {
  12861. if (e3.date() < n3.date())
  12862. return -t3(n3, e3);
  12863. var r3 = 12 * (n3.year() - e3.year()) + (n3.month() - e3.month()), i3 = e3.clone().add(r3, c2), s3 = n3 - i3 < 0, u3 = e3.clone().add(r3 + (s3 ? -1 : 1), c2);
  12864. return +(-(r3 + (n3 - i3) / (s3 ? i3 - u3 : u3 - i3)) || 0);
  12865. }, a: function(t3) {
  12866. return t3 < 0 ? Math.ceil(t3) || 0 : Math.floor(t3);
  12867. }, p: function(t3) {
  12868. return { M: c2, y: h2, w: o2, d: a2, D: d2, h: u2, m: s2, s: i2, ms: r2, Q: f2 }[t3] || String(t3 || "").toLowerCase().replace(/s$/, "");
  12869. }, u: function(t3) {
  12870. return void 0 === t3;
  12871. } }, g2 = "en", D2 = {};
  12872. D2[g2] = M2;
  12873. var p2 = "$isDayjsObject", S2 = function(t3) {
  12874. return t3 instanceof _2 || !(!t3 || !t3[p2]);
  12875. }, w2 = function t3(e3, n3, r3) {
  12876. var i3;
  12877. if (!e3)
  12878. return g2;
  12879. if ("string" == typeof e3) {
  12880. var s3 = e3.toLowerCase();
  12881. D2[s3] && (i3 = s3), n3 && (D2[s3] = n3, i3 = s3);
  12882. var u3 = e3.split("-");
  12883. if (!i3 && u3.length > 1)
  12884. return t3(u3[0]);
  12885. } else {
  12886. var a3 = e3.name;
  12887. D2[a3] = e3, i3 = a3;
  12888. }
  12889. return !r3 && i3 && (g2 = i3), i3 || !r3 && g2;
  12890. }, O2 = function(t3, e3) {
  12891. if (S2(t3))
  12892. return t3.clone();
  12893. var n3 = "object" == typeof e3 ? e3 : {};
  12894. return n3.date = t3, n3.args = arguments, new _2(n3);
  12895. }, b2 = v2;
  12896. b2.l = w2, b2.i = S2, b2.w = function(t3, e3) {
  12897. return O2(t3, { locale: e3.$L, utc: e3.$u, x: e3.$x, $offset: e3.$offset });
  12898. };
  12899. var _2 = function() {
  12900. function M3(t3) {
  12901. this.$L = w2(t3.locale, null, true), this.parse(t3), this.$x = this.$x || t3.x || {}, this[p2] = true;
  12902. }
  12903. var m3 = M3.prototype;
  12904. return m3.parse = function(t3) {
  12905. this.$d = function(t4) {
  12906. var e3 = t4.date, n3 = t4.utc;
  12907. if (null === e3)
  12908. return /* @__PURE__ */ new Date(NaN);
  12909. if (b2.u(e3))
  12910. return /* @__PURE__ */ new Date();
  12911. if (e3 instanceof Date)
  12912. return new Date(e3);
  12913. if ("string" == typeof e3 && !/Z$/i.test(e3)) {
  12914. var r3 = e3.match($2);
  12915. if (r3) {
  12916. var i3 = r3[2] - 1 || 0, s3 = (r3[7] || "0").substring(0, 3);
  12917. return n3 ? new Date(Date.UTC(r3[1], i3, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s3)) : new Date(r3[1], i3, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s3);
  12918. }
  12919. }
  12920. return new Date(e3);
  12921. }(t3), this.init();
  12922. }, m3.init = function() {
  12923. var t3 = this.$d;
  12924. this.$y = t3.getFullYear(), this.$M = t3.getMonth(), this.$D = t3.getDate(), this.$W = t3.getDay(), this.$H = t3.getHours(), this.$m = t3.getMinutes(), this.$s = t3.getSeconds(), this.$ms = t3.getMilliseconds();
  12925. }, m3.$utils = function() {
  12926. return b2;
  12927. }, m3.isValid = function() {
  12928. return !(this.$d.toString() === l2);
  12929. }, m3.isSame = function(t3, e3) {
  12930. var n3 = O2(t3);
  12931. return this.startOf(e3) <= n3 && n3 <= this.endOf(e3);
  12932. }, m3.isAfter = function(t3, e3) {
  12933. return O2(t3) < this.startOf(e3);
  12934. }, m3.isBefore = function(t3, e3) {
  12935. return this.endOf(e3) < O2(t3);
  12936. }, m3.$g = function(t3, e3, n3) {
  12937. return b2.u(t3) ? this[e3] : this.set(n3, t3);
  12938. }, m3.unix = function() {
  12939. return Math.floor(this.valueOf() / 1e3);
  12940. }, m3.valueOf = function() {
  12941. return this.$d.getTime();
  12942. }, m3.startOf = function(t3, e3) {
  12943. var n3 = this, r3 = !!b2.u(e3) || e3, f3 = b2.p(t3), l3 = function(t4, e4) {
  12944. var i3 = b2.w(n3.$u ? Date.UTC(n3.$y, e4, t4) : new Date(n3.$y, e4, t4), n3);
  12945. return r3 ? i3 : i3.endOf(a2);
  12946. }, $3 = function(t4, e4) {
  12947. return b2.w(n3.toDate()[t4].apply(n3.toDate("s"), (r3 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e4)), n3);
  12948. }, y3 = this.$W, M4 = this.$M, m4 = this.$D, v3 = "set" + (this.$u ? "UTC" : "");
  12949. switch (f3) {
  12950. case h2:
  12951. return r3 ? l3(1, 0) : l3(31, 11);
  12952. case c2:
  12953. return r3 ? l3(1, M4) : l3(0, M4 + 1);
  12954. case o2:
  12955. var g3 = this.$locale().weekStart || 0, D3 = (y3 < g3 ? y3 + 7 : y3) - g3;
  12956. return l3(r3 ? m4 - D3 : m4 + (6 - D3), M4);
  12957. case a2:
  12958. case d2:
  12959. return $3(v3 + "Hours", 0);
  12960. case u2:
  12961. return $3(v3 + "Minutes", 1);
  12962. case s2:
  12963. return $3(v3 + "Seconds", 2);
  12964. case i2:
  12965. return $3(v3 + "Milliseconds", 3);
  12966. default:
  12967. return this.clone();
  12968. }
  12969. }, m3.endOf = function(t3) {
  12970. return this.startOf(t3, false);
  12971. }, m3.$set = function(t3, e3) {
  12972. var n3, o3 = b2.p(t3), f3 = "set" + (this.$u ? "UTC" : ""), l3 = (n3 = {}, n3[a2] = f3 + "Date", n3[d2] = f3 + "Date", n3[c2] = f3 + "Month", n3[h2] = f3 + "FullYear", n3[u2] = f3 + "Hours", n3[s2] = f3 + "Minutes", n3[i2] = f3 + "Seconds", n3[r2] = f3 + "Milliseconds", n3)[o3], $3 = o3 === a2 ? this.$D + (e3 - this.$W) : e3;
  12973. if (o3 === c2 || o3 === h2) {
  12974. var y3 = this.clone().set(d2, 1);
  12975. y3.$d[l3]($3), y3.init(), this.$d = y3.set(d2, Math.min(this.$D, y3.daysInMonth())).$d;
  12976. } else
  12977. l3 && this.$d[l3]($3);
  12978. return this.init(), this;
  12979. }, m3.set = function(t3, e3) {
  12980. return this.clone().$set(t3, e3);
  12981. }, m3.get = function(t3) {
  12982. return this[b2.p(t3)]();
  12983. }, m3.add = function(r3, f3) {
  12984. var d3, l3 = this;
  12985. r3 = Number(r3);
  12986. var $3 = b2.p(f3), y3 = function(t3) {
  12987. var e3 = O2(l3);
  12988. return b2.w(e3.date(e3.date() + Math.round(t3 * r3)), l3);
  12989. };
  12990. if ($3 === c2)
  12991. return this.set(c2, this.$M + r3);
  12992. if ($3 === h2)
  12993. return this.set(h2, this.$y + r3);
  12994. if ($3 === a2)
  12995. return y3(1);
  12996. if ($3 === o2)
  12997. return y3(7);
  12998. var M4 = (d3 = {}, d3[s2] = e2, d3[u2] = n2, d3[i2] = t2, d3)[$3] || 1, m4 = this.$d.getTime() + r3 * M4;
  12999. return b2.w(m4, this);
  13000. }, m3.subtract = function(t3, e3) {
  13001. return this.add(-1 * t3, e3);
  13002. }, m3.format = function(t3) {
  13003. var e3 = this, n3 = this.$locale();
  13004. if (!this.isValid())
  13005. return n3.invalidDate || l2;
  13006. var r3 = t3 || "YYYY-MM-DDTHH:mm:ssZ", i3 = b2.z(this), s3 = this.$H, u3 = this.$m, a3 = this.$M, o3 = n3.weekdays, c3 = n3.months, f3 = n3.meridiem, h3 = function(t4, n4, i4, s4) {
  13007. return t4 && (t4[n4] || t4(e3, r3)) || i4[n4].slice(0, s4);
  13008. }, d3 = function(t4) {
  13009. return b2.s(s3 % 12 || 12, t4, "0");
  13010. }, $3 = f3 || function(t4, e4, n4) {
  13011. var r4 = t4 < 12 ? "AM" : "PM";
  13012. return n4 ? r4.toLowerCase() : r4;
  13013. };
  13014. return r3.replace(y2, function(t4, r4) {
  13015. return r4 || function(t5) {
  13016. switch (t5) {
  13017. case "YY":
  13018. return String(e3.$y).slice(-2);
  13019. case "YYYY":
  13020. return b2.s(e3.$y, 4, "0");
  13021. case "M":
  13022. return a3 + 1;
  13023. case "MM":
  13024. return b2.s(a3 + 1, 2, "0");
  13025. case "MMM":
  13026. return h3(n3.monthsShort, a3, c3, 3);
  13027. case "MMMM":
  13028. return h3(c3, a3);
  13029. case "D":
  13030. return e3.$D;
  13031. case "DD":
  13032. return b2.s(e3.$D, 2, "0");
  13033. case "d":
  13034. return String(e3.$W);
  13035. case "dd":
  13036. return h3(n3.weekdaysMin, e3.$W, o3, 2);
  13037. case "ddd":
  13038. return h3(n3.weekdaysShort, e3.$W, o3, 3);
  13039. case "dddd":
  13040. return o3[e3.$W];
  13041. case "H":
  13042. return String(s3);
  13043. case "HH":
  13044. return b2.s(s3, 2, "0");
  13045. case "h":
  13046. return d3(1);
  13047. case "hh":
  13048. return d3(2);
  13049. case "a":
  13050. return $3(s3, u3, true);
  13051. case "A":
  13052. return $3(s3, u3, false);
  13053. case "m":
  13054. return String(u3);
  13055. case "mm":
  13056. return b2.s(u3, 2, "0");
  13057. case "s":
  13058. return String(e3.$s);
  13059. case "ss":
  13060. return b2.s(e3.$s, 2, "0");
  13061. case "SSS":
  13062. return b2.s(e3.$ms, 3, "0");
  13063. case "Z":
  13064. return i3;
  13065. }
  13066. return null;
  13067. }(t4) || i3.replace(":", "");
  13068. });
  13069. }, m3.utcOffset = function() {
  13070. return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
  13071. }, m3.diff = function(r3, d3, l3) {
  13072. var $3, y3 = this, M4 = b2.p(d3), m4 = O2(r3), v3 = (m4.utcOffset() - this.utcOffset()) * e2, g3 = this - m4, D3 = function() {
  13073. return b2.m(y3, m4);
  13074. };
  13075. switch (M4) {
  13076. case h2:
  13077. $3 = D3() / 12;
  13078. break;
  13079. case c2:
  13080. $3 = D3();
  13081. break;
  13082. case f2:
  13083. $3 = D3() / 3;
  13084. break;
  13085. case o2:
  13086. $3 = (g3 - v3) / 6048e5;
  13087. break;
  13088. case a2:
  13089. $3 = (g3 - v3) / 864e5;
  13090. break;
  13091. case u2:
  13092. $3 = g3 / n2;
  13093. break;
  13094. case s2:
  13095. $3 = g3 / e2;
  13096. break;
  13097. case i2:
  13098. $3 = g3 / t2;
  13099. break;
  13100. default:
  13101. $3 = g3;
  13102. }
  13103. return l3 ? $3 : b2.a($3);
  13104. }, m3.daysInMonth = function() {
  13105. return this.endOf(c2).$D;
  13106. }, m3.$locale = function() {
  13107. return D2[this.$L];
  13108. }, m3.locale = function(t3, e3) {
  13109. if (!t3)
  13110. return this.$L;
  13111. var n3 = this.clone(), r3 = w2(t3, e3, true);
  13112. return r3 && (n3.$L = r3), n3;
  13113. }, m3.clone = function() {
  13114. return b2.w(this.$d, this);
  13115. }, m3.toDate = function() {
  13116. return new Date(this.valueOf());
  13117. }, m3.toJSON = function() {
  13118. return this.isValid() ? this.toISOString() : null;
  13119. }, m3.toISOString = function() {
  13120. return this.$d.toISOString();
  13121. }, m3.toString = function() {
  13122. return this.$d.toUTCString();
  13123. }, M3;
  13124. }(), k = _2.prototype;
  13125. return O2.prototype = k, [["$ms", r2], ["$s", i2], ["$m", s2], ["$H", u2], ["$W", a2], ["$M", c2], ["$y", h2], ["$D", d2]].forEach(function(t3) {
  13126. k[t3[1]] = function(e3) {
  13127. return this.$g(e3, t3[0], t3[1]);
  13128. };
  13129. }), O2.extend = function(t3, e3) {
  13130. return t3.$i || (t3(e3, _2, O2), t3.$i = true), O2;
  13131. }, O2.locale = w2, O2.isDayjs = S2, O2.unix = function(t3) {
  13132. return O2(1e3 * t3);
  13133. }, O2.en = D2[g2], O2.Ls = D2, O2.p = {}, O2;
  13134. });
  13135. })(dayjs_min);
  13136. var dayjs_minExports = dayjs_min.exports;
  13137. const dayjs = /* @__PURE__ */ getDefaultExportFromCjs(dayjs_minExports);
  13138. var isIOS;
  13139. function album() {
  13140. var result = 0;
  13141. var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
  13142. var authStatus = PHPhotoLibrary.authorizationStatus();
  13143. if (authStatus === 0) {
  13144. result = null;
  13145. } else if (authStatus == 3) {
  13146. result = 1;
  13147. } else {
  13148. result = 0;
  13149. }
  13150. plus.ios.deleteObject(PHPhotoLibrary);
  13151. return result;
  13152. }
  13153. function camera() {
  13154. var result = 0;
  13155. var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
  13156. var authStatus = AVCaptureDevice.authorizationStatusForMediaType("vide");
  13157. if (authStatus === 0) {
  13158. result = null;
  13159. } else if (authStatus == 3) {
  13160. result = 1;
  13161. } else {
  13162. result = 0;
  13163. }
  13164. plus.ios.deleteObject(AVCaptureDevice);
  13165. return result;
  13166. }
  13167. function location$1() {
  13168. var result = 0;
  13169. var cllocationManger = plus.ios.import("CLLocationManager");
  13170. var enable = cllocationManger.locationServicesEnabled();
  13171. var status = cllocationManger.authorizationStatus();
  13172. if (!enable) {
  13173. result = 2;
  13174. } else if (status === 0) {
  13175. result = null;
  13176. } else if (status === 3 || status === 4) {
  13177. result = 1;
  13178. } else {
  13179. result = 0;
  13180. }
  13181. plus.ios.deleteObject(cllocationManger);
  13182. return result;
  13183. }
  13184. function push() {
  13185. var result = 0;
  13186. var UIApplication = plus.ios.import("UIApplication");
  13187. var app = UIApplication.sharedApplication();
  13188. var enabledTypes = 0;
  13189. if (app.currentUserNotificationSettings) {
  13190. var settings = app.currentUserNotificationSettings();
  13191. enabledTypes = settings.plusGetAttribute("types");
  13192. if (enabledTypes == 0) {
  13193. result = 0;
  13194. formatAppLog("log", "at utils/permission.js:64", "推送权限没有开启");
  13195. } else {
  13196. result = 1;
  13197. formatAppLog("log", "at utils/permission.js:67", "已经开启推送功能!");
  13198. }
  13199. plus.ios.deleteObject(settings);
  13200. } else {
  13201. enabledTypes = app.enabledRemoteNotificationTypes();
  13202. if (enabledTypes == 0) {
  13203. result = 3;
  13204. formatAppLog("log", "at utils/permission.js:74", "推送权限没有开启!");
  13205. } else {
  13206. result = 4;
  13207. formatAppLog("log", "at utils/permission.js:77", "已经开启推送功能!");
  13208. }
  13209. }
  13210. plus.ios.deleteObject(app);
  13211. plus.ios.deleteObject(UIApplication);
  13212. return result;
  13213. }
  13214. function contact() {
  13215. var result = 0;
  13216. var CNContactStore = plus.ios.import("CNContactStore");
  13217. var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
  13218. if (cnAuthStatus === 0) {
  13219. result = null;
  13220. } else if (cnAuthStatus == 3) {
  13221. result = 1;
  13222. } else {
  13223. result = 0;
  13224. }
  13225. plus.ios.deleteObject(CNContactStore);
  13226. return result;
  13227. }
  13228. function record() {
  13229. var result = null;
  13230. var avaudiosession = plus.ios.import("AVAudioSession");
  13231. var avaudio = avaudiosession.sharedInstance();
  13232. var status = avaudio.recordPermission();
  13233. formatAppLog("log", "at utils/permission.js:105", "permissionStatus:" + status);
  13234. if (status === 1970168948) {
  13235. result = null;
  13236. } else if (status === 1735552628) {
  13237. result = 1;
  13238. } else {
  13239. result = 0;
  13240. }
  13241. plus.ios.deleteObject(avaudiosession);
  13242. return result;
  13243. }
  13244. function calendar() {
  13245. var result = null;
  13246. var EKEventStore = plus.ios.import("EKEventStore");
  13247. var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
  13248. if (ekAuthStatus == 3) {
  13249. result = 1;
  13250. formatAppLog("log", "at utils/permission.js:123", "日历权限已经开启");
  13251. } else {
  13252. formatAppLog("log", "at utils/permission.js:125", "日历权限没有开启");
  13253. }
  13254. plus.ios.deleteObject(EKEventStore);
  13255. return result;
  13256. }
  13257. function memo() {
  13258. var result = null;
  13259. var EKEventStore = plus.ios.import("EKEventStore");
  13260. var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
  13261. if (ekAuthStatus == 3) {
  13262. result = 1;
  13263. formatAppLog("log", "at utils/permission.js:137", "备忘录权限已经开启");
  13264. } else {
  13265. formatAppLog("log", "at utils/permission.js:139", "备忘录权限没有开启");
  13266. }
  13267. plus.ios.deleteObject(EKEventStore);
  13268. return result;
  13269. }
  13270. function requestIOS(permissionID) {
  13271. return new Promise((resolve) => {
  13272. switch (permissionID) {
  13273. case "push":
  13274. resolve(push());
  13275. break;
  13276. case "location":
  13277. resolve(location$1());
  13278. break;
  13279. case "record":
  13280. resolve(record());
  13281. break;
  13282. case "camera":
  13283. resolve(camera());
  13284. break;
  13285. case "album":
  13286. resolve(album());
  13287. break;
  13288. case "contact":
  13289. resolve(contact());
  13290. break;
  13291. case "calendar":
  13292. resolve(calendar());
  13293. break;
  13294. case "memo":
  13295. resolve(memo());
  13296. break;
  13297. default:
  13298. resolve(0);
  13299. break;
  13300. }
  13301. });
  13302. }
  13303. function requestAndroid(permissionID) {
  13304. return new Promise((resolve) => {
  13305. plus.android.requestPermissions(
  13306. [permissionID],
  13307. function(resultObj) {
  13308. var result = 0;
  13309. for (let i2 = 0; i2 < resultObj.granted.length; i2++) {
  13310. var grantedPermission = resultObj.granted[i2];
  13311. formatAppLog("log", "at utils/permission.js:187", "已获取的权限:" + grantedPermission);
  13312. result = 1;
  13313. }
  13314. for (let i2 = 0; i2 < resultObj.deniedPresent.length; i2++) {
  13315. var deniedPresentPermission = resultObj.deniedPresent[i2];
  13316. formatAppLog("log", "at utils/permission.js:192", "拒绝本次申请的权限:" + deniedPresentPermission);
  13317. result = 0;
  13318. }
  13319. for (let i2 = 0; i2 < resultObj.deniedAlways.length; i2++) {
  13320. var deniedAlwaysPermission = resultObj.deniedAlways[i2];
  13321. formatAppLog("log", "at utils/permission.js:197", "永久拒绝申请的权限:" + deniedAlwaysPermission);
  13322. result = -1;
  13323. }
  13324. resolve(result);
  13325. },
  13326. function(error) {
  13327. formatAppLog("log", "at utils/permission.js:203", "result error: " + error.message);
  13328. resolve({
  13329. code: error.code,
  13330. message: error.message
  13331. });
  13332. }
  13333. );
  13334. });
  13335. }
  13336. function gotoAppPermissionSetting() {
  13337. if (permission.isIOS) {
  13338. var UIApplication = plus.ios.import("UIApplication");
  13339. var application2 = UIApplication.sharedApplication();
  13340. var NSURL2 = plus.ios.import("NSURL");
  13341. var setting2 = NSURL2.URLWithString("app-settings:");
  13342. application2.openURL(setting2);
  13343. plus.ios.deleteObject(setting2);
  13344. plus.ios.deleteObject(NSURL2);
  13345. plus.ios.deleteObject(application2);
  13346. } else {
  13347. var Intent = plus.android.importClass("android.content.Intent");
  13348. var Settings = plus.android.importClass("android.provider.Settings");
  13349. var Uri = plus.android.importClass("android.net.Uri");
  13350. var mainActivity = plus.android.runtimeMainActivity();
  13351. var intent = new Intent();
  13352. intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  13353. var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
  13354. intent.setData(uri);
  13355. mainActivity.startActivity(intent);
  13356. }
  13357. }
  13358. const permission = {
  13359. get isIOS() {
  13360. return typeof isIOS === "boolean" ? isIOS : isIOS = uni.getSystemInfoSync().platform === "ios";
  13361. },
  13362. requestIOS,
  13363. requestAndroid,
  13364. gotoAppSetting: gotoAppPermissionSetting
  13365. };
  13366. const formatDate = (date, format = "YYYY-MM-DD HH:mm:ss") => {
  13367. const year = String(date.getFullYear());
  13368. const month = String(date.getMonth() + 1).padStart(2, "0");
  13369. const day = String(date.getDate()).padStart(2, "0");
  13370. const hours = String(date.getHours()).padStart(2, "0");
  13371. const minutes = String(date.getMinutes()).padStart(2, "0");
  13372. const seconds = String(date.getSeconds()).padStart(2, "0");
  13373. return format.replace("YYYY", year).replace("MM", month).replace("DD", day).replace("HH", hours).replace("mm", minutes).replace("ss", seconds);
  13374. };
  13375. const checkPermission = async () => {
  13376. let status = permission.isIOS ? await permission.requestIOS("camera") : await permission.requestAndroid("android.permission.CAMERA");
  13377. if (status === null || status === 1) {
  13378. status = 1;
  13379. } else {
  13380. uni.showModal({
  13381. content: "Camera permission required",
  13382. confirmText: "Setting",
  13383. success: function(res) {
  13384. if (res.confirm) {
  13385. permission.gotoAppSetting();
  13386. }
  13387. }
  13388. });
  13389. }
  13390. return status;
  13391. };
  13392. const getAliyunOssSignature = () => {
  13393. return http({
  13394. method: "GET",
  13395. url: "/admin/Config/getAliyunOssSignature"
  13396. });
  13397. };
  13398. const weigh = (data) => {
  13399. return http({
  13400. method: "POST",
  13401. url: "/admin/order.scanOrder/weigh",
  13402. data
  13403. });
  13404. };
  13405. const outStock = (data) => {
  13406. return http({
  13407. method: "POST",
  13408. url: "/admin/order.scanOrder/outStock",
  13409. data
  13410. });
  13411. };
  13412. const instock = (data) => {
  13413. return http({
  13414. method: "POST",
  13415. url: "/admin/order.scanOrder/instock",
  13416. data
  13417. });
  13418. };
  13419. const getBindParams$1 = () => {
  13420. return http({
  13421. method: "GET",
  13422. url: "/admin/order.scanOrder/getBindParams"
  13423. });
  13424. };
  13425. const getOrderInfo = (data) => {
  13426. return http({
  13427. method: "GET",
  13428. url: "/admin/order.scanOrder/getOrderInfo",
  13429. data
  13430. });
  13431. };
  13432. const checkWaybillGoods = (order_no) => {
  13433. return http({
  13434. method: "POST",
  13435. url: "/admin/order.scanOrder/checkWaybillGoods",
  13436. data: { order_no }
  13437. });
  13438. };
  13439. const getWarehouseSpace = (code = "") => {
  13440. return http({
  13441. method: "POST",
  13442. url: "/admin/order.ScanOrder/getWarehouseSpace",
  13443. data: { code }
  13444. });
  13445. };
  13446. const hexList = [];
  13447. for (let i2 = 0; i2 <= 15; i2++) {
  13448. hexList[i2] = i2.toString(16);
  13449. }
  13450. function uuid() {
  13451. let uuid2 = "";
  13452. for (let i2 = 1; i2 <= 36; i2++) {
  13453. if (i2 === 9 || i2 === 14 || i2 === 19 || i2 === 24) {
  13454. uuid2 += "-";
  13455. } else if (i2 === 15) {
  13456. uuid2 += 4;
  13457. } else if (i2 === 20) {
  13458. uuid2 += hexList[Math.random() * 4 | 8];
  13459. } else {
  13460. uuid2 += hexList[Math.random() * 16 | 0];
  13461. }
  13462. }
  13463. return uuid2;
  13464. }
  13465. const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
  13466. __name: "inbound",
  13467. setup(__props, { expose: __expose }) {
  13468. __expose();
  13469. const message = vue.ref();
  13470. const valiForm = vue.ref();
  13471. const loading = vue.ref(false);
  13472. const images = vue.ref([]);
  13473. const messageType = vue.ref("");
  13474. const messageText = vue.ref("");
  13475. const spaces = vue.ref([]);
  13476. const previewImage = vue.ref(null);
  13477. const maxImages = vue.ref(6);
  13478. const historyList = vue.ref([]);
  13479. const focusType = vue.ref(true);
  13480. const result = vue.ref();
  13481. const valiFormData = vue.reactive({
  13482. images: [],
  13483. orderNum: "",
  13484. space_code: "",
  13485. weight: "",
  13486. typing: true
  13487. });
  13488. const rules = vue.computed(() => {
  13489. return {
  13490. orderNum: {
  13491. rules: [
  13492. {
  13493. required: true,
  13494. errorMessage: "单号不能为空"
  13495. }
  13496. ]
  13497. }
  13498. };
  13499. });
  13500. const spaceRes = vue.computed(() => {
  13501. try {
  13502. const res = spaces.value.find((item) => item.value === valiFormData.space_code);
  13503. return res == null ? void 0 : res.text;
  13504. } catch (e2) {
  13505. formatAppLog("log", "at pages/inbound/inbound.vue:163", e2);
  13506. return "";
  13507. }
  13508. });
  13509. onShow(async () => {
  13510. focusType.value = true;
  13511. loading.value = false;
  13512. await _getWarehouseSpace();
  13513. });
  13514. onHide(() => {
  13515. focusType.value = false;
  13516. loading.value = false;
  13517. });
  13518. onNavigationBarButtonTap((event) => {
  13519. if (event.index === 0) {
  13520. uni.navigateTo({
  13521. url: "/pages/inbound/logList"
  13522. });
  13523. }
  13524. });
  13525. const _getWarehouseSpace = async () => {
  13526. const res = await getWarehouseSpace();
  13527. if (res.code === 1) {
  13528. spaces.value = res.data.spaces.map((item) => {
  13529. return {
  13530. text: item.name,
  13531. value: item.code
  13532. };
  13533. });
  13534. }
  13535. };
  13536. const reset = () => {
  13537. loading.value = false;
  13538. focusType.value = false;
  13539. images.value = [];
  13540. valiFormData.orderNum = "";
  13541. valiFormData.weight = "";
  13542. valiFormData.typing = true;
  13543. vue.nextTick(() => {
  13544. focusType.value = true;
  13545. });
  13546. };
  13547. const scan = async () => {
  13548. let status = await checkPermission();
  13549. if (status !== 1) {
  13550. return;
  13551. }
  13552. uni.scanCode({
  13553. success: (res) => {
  13554. result.value = res.result;
  13555. valiFormData.orderNum = res.result;
  13556. },
  13557. fail: (err) => {
  13558. }
  13559. });
  13560. };
  13561. let st2;
  13562. const warehouseScan2 = async () => {
  13563. st2 && clearTimeout(st2);
  13564. instockScan();
  13565. };
  13566. const instockScan = async () => {
  13567. const images2 = getImages();
  13568. let allImgVerify = true;
  13569. for (var i2 = 0; i2 < images2.length; i2++) {
  13570. if (!images2[i2].savePath) {
  13571. allImgVerify = false;
  13572. }
  13573. }
  13574. if (!allImgVerify) {
  13575. messageType.value = "error";
  13576. messageText.value = "图片还没上传完毕,请稍后...";
  13577. message.value.open();
  13578. loading.value = false;
  13579. return;
  13580. }
  13581. const res = await instock({
  13582. order_no: valiFormData.orderNum,
  13583. space_code: valiFormData.space_code,
  13584. images: images2
  13585. });
  13586. loading.value = false;
  13587. if (res.code == 1) {
  13588. messageType.value = "success";
  13589. messageText.value = res.msg;
  13590. message.value.open();
  13591. const historyItem = {
  13592. orderNum: valiFormData.orderNum,
  13593. createTime: /* @__PURE__ */ new Date(),
  13594. space: spaceRes.value,
  13595. type: "入库",
  13596. status: true
  13597. };
  13598. historyList.value.unshift(historyItem);
  13599. uni.setStorageSync("inboundHistory", historyList.value);
  13600. getHistory();
  13601. st2 = setTimeout(() => {
  13602. reset();
  13603. st2 && clearTimeout(st2);
  13604. }, 1e3);
  13605. } else {
  13606. messageType.value = "error";
  13607. messageText.value = res.msg;
  13608. message.value.open();
  13609. const historyItem = {
  13610. orderNum: valiFormData.orderNum,
  13611. createTime: /* @__PURE__ */ new Date(),
  13612. space: spaceRes.value,
  13613. type: "入库",
  13614. status: false
  13615. };
  13616. historyList.value.unshift(historyItem);
  13617. uni.setStorageSync("inboundHistory", historyList.value);
  13618. getHistory();
  13619. st2 = setTimeout(() => {
  13620. reset();
  13621. st2 && clearTimeout(st2);
  13622. }, 1e3);
  13623. }
  13624. };
  13625. const onsubmit = () => {
  13626. valiForm.value.validate().then((res) => {
  13627. warehouseScan2();
  13628. }).catch((err) => {
  13629. formatAppLog("log", "at pages/inbound/inbound.vue:300", "err", err);
  13630. });
  13631. };
  13632. const getHistory = () => {
  13633. historyList.value = uni.getStorageSync("inboundHistory");
  13634. };
  13635. const getImages = () => {
  13636. const res = images.value.map((item) => {
  13637. return {
  13638. name: item.name,
  13639. savePath: item.serverUrl,
  13640. fileSize: item.size,
  13641. mimeType: item.type
  13642. };
  13643. });
  13644. return res;
  13645. };
  13646. const _getAliyunOssSignature = async (rawFiles) => {
  13647. const res = await getAliyunOssSignature();
  13648. const signature = res.data.signature;
  13649. const uploadPromises = rawFiles.map((image) => {
  13650. return upLoadFile(signature, image);
  13651. });
  13652. Promise.all(uploadPromises).then((results) => {
  13653. formatAppLog("log", "at pages/inbound/inbound.vue:329", "所有图片加载成功:", results);
  13654. uni.showToast({
  13655. title: "加载成功",
  13656. icon: "success"
  13657. });
  13658. }).catch((error) => {
  13659. formatAppLog("error", "at pages/inbound/inbound.vue:336", "加载失败:", error);
  13660. uni.showToast({
  13661. title: "加载失败",
  13662. icon: "none"
  13663. });
  13664. });
  13665. };
  13666. const upLoadFile = (signature, image) => {
  13667. const fileData = {
  13668. policy: signature.policy,
  13669. signature: signature.signature,
  13670. ossaccessKeyId: signature.ossAccessKeyId,
  13671. key: signature.dir + dayjs().format("YYYYMMDD") + "/" + uuid() + "_" + image.name,
  13672. dir: signature.dir,
  13673. host: signature.host,
  13674. file: image.file
  13675. };
  13676. return new Promise((resolve, reject) => {
  13677. let name = image.name;
  13678. name = "file";
  13679. const uploadTask = uni.uploadFile({
  13680. url: signature.host,
  13681. // 你的上传接口地址
  13682. filePath: image.path,
  13683. name,
  13684. // 这里根据后端需要的字段来定义
  13685. formData: fileData,
  13686. success: (uploadFileRes) => {
  13687. if (uploadFileRes.statusCode === 204 || uploadFileRes.statusCode === 200) {
  13688. image.serverUrl = fileData.key;
  13689. resolve(uploadFileRes);
  13690. } else {
  13691. reject(uploadFileRes);
  13692. }
  13693. },
  13694. fail: (error) => {
  13695. formatAppLog("log", "at pages/inbound/inbound.vue:381", "error++", error);
  13696. reject(error);
  13697. },
  13698. // 更新上传进度
  13699. complete: () => {
  13700. formatAppLog("log", "at pages/inbound/inbound.vue:386", "complete---");
  13701. image.progress = 100;
  13702. }
  13703. });
  13704. uploadTask.onProgressUpdate((progressEvent) => {
  13705. image.progress = progressEvent.progress;
  13706. });
  13707. });
  13708. };
  13709. const chooseImage = () => {
  13710. uni.chooseImage({
  13711. count: maxImages.value - images.value.length,
  13712. success: (res) => {
  13713. images.value = images.value.concat(
  13714. res.tempFiles.map((item) => {
  13715. const res2 = {
  13716. size: item.size,
  13717. path: item.path,
  13718. name: item.name,
  13719. type: item.type,
  13720. progress: 0,
  13721. file: item
  13722. };
  13723. const suffix = item.path.substring(item.path.lastIndexOf(".") + 1);
  13724. const fileName = item.path.substring(item.path.lastIndexOf("/") + 1);
  13725. res2.name = fileName;
  13726. res2.type = suffix;
  13727. return res2;
  13728. })
  13729. );
  13730. const paddingImages = images.value.filter((image) => image.progress === 0);
  13731. vue.nextTick(() => {
  13732. _getAliyunOssSignature(paddingImages);
  13733. });
  13734. },
  13735. fail: (err) => {
  13736. formatAppLog("error", "at pages/inbound/inbound.vue:431", err);
  13737. }
  13738. });
  13739. };
  13740. const deleteImage = (index) => {
  13741. images.value.splice(index, 1);
  13742. };
  13743. const openPreview = (image) => {
  13744. previewImage.value = image;
  13745. };
  13746. const closePreview = () => {
  13747. previewImage.value = null;
  13748. };
  13749. const __returned__ = { message, valiForm, loading, images, messageType, messageText, spaces, previewImage, maxImages, historyList, focusType, result, valiFormData, rules, spaceRes, _getWarehouseSpace, reset, scan, get st() {
  13750. return st2;
  13751. }, set st(v2) {
  13752. st2 = v2;
  13753. }, warehouseScan: warehouseScan2, instockScan, onsubmit, getHistory, getImages, _getAliyunOssSignature, upLoadFile, chooseImage, deleteImage, openPreview, closePreview };
  13754. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  13755. return __returned__;
  13756. }
  13757. });
  13758. function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) {
  13759. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  13760. const _component_uni_forms_item = resolveEasycom(vue.resolveDynamicComponent("uni-forms-item"), __easycom_0$4);
  13761. const _component_uni_data_select = resolveEasycom(vue.resolveDynamicComponent("uni-data-select"), __easycom_0$3);
  13762. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  13763. const _component_uni_forms = resolveEasycom(vue.resolveDynamicComponent("uni-forms"), __easycom_2$1);
  13764. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  13765. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  13766. return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
  13767. vue.createElementVNode("view", { class: "example" }, [
  13768. vue.createCommentVNode(" 基础表单校验 "),
  13769. vue.createVNode(_component_uni_forms, {
  13770. ref: "valiForm",
  13771. "label-align": "right",
  13772. "label-width": "80px",
  13773. rules: $setup.rules,
  13774. modelValue: $setup.valiFormData
  13775. }, {
  13776. default: vue.withCtx(() => [
  13777. vue.createVNode(_component_uni_forms_item, {
  13778. label: "单号",
  13779. required: "",
  13780. name: "orderNum"
  13781. }, {
  13782. default: vue.withCtx(() => [
  13783. vue.createVNode(_component_uni_easyinput, {
  13784. modelValue: $setup.valiFormData.orderNum,
  13785. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.valiFormData.orderNum = $event),
  13786. placeholder: "请输入单号",
  13787. suffixIcon: "scan",
  13788. focus: $setup.focusType,
  13789. onIconClick: $setup.scan
  13790. }, null, 8, ["modelValue", "focus"])
  13791. ]),
  13792. _: 1
  13793. /* STABLE */
  13794. }),
  13795. vue.createVNode(_component_uni_forms_item, {
  13796. label: "仓位编码",
  13797. name: "space_code"
  13798. }, {
  13799. default: vue.withCtx(() => [
  13800. vue.createVNode(_component_uni_data_select, {
  13801. modelValue: $setup.valiFormData.space_code,
  13802. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.valiFormData.space_code = $event),
  13803. localdata: $setup.spaces,
  13804. placeholder: "请选择仓位编码"
  13805. }, null, 8, ["modelValue", "localdata"])
  13806. ]),
  13807. _: 1
  13808. /* STABLE */
  13809. }),
  13810. vue.createVNode(_component_uni_forms_item, {
  13811. label: "图片",
  13812. name: "images"
  13813. }, {
  13814. default: vue.withCtx(() => [
  13815. vue.createElementVNode("view", { class: "upload-container" }, [
  13816. vue.createElementVNode("view", { class: "preview" }, [
  13817. (vue.openBlock(true), vue.createElementBlock(
  13818. vue.Fragment,
  13819. null,
  13820. vue.renderList($setup.images, (img, index) => {
  13821. return vue.openBlock(), vue.createElementBlock("view", {
  13822. key: index,
  13823. class: "image-container"
  13824. }, [
  13825. vue.createElementVNode("image", {
  13826. src: img.path,
  13827. class: "preview-image",
  13828. mode: "aspectFill",
  13829. onClick: ($event) => $setup.openPreview(img.path)
  13830. }, null, 8, ["src", "onClick"]),
  13831. vue.createElementVNode("progress", {
  13832. percent: img.progress || 0,
  13833. activeColor: Number(img.progress || 0) === 100 ? "#00ff00" : "#10AEFF",
  13834. "stroke-width": "3"
  13835. }, null, 8, ["percent", "activeColor"]),
  13836. img.status === "success" ? (vue.openBlock(), vue.createElementBlock("text", { key: 0 }, "1")) : vue.createCommentVNode("v-if", true),
  13837. vue.createVNode(_component_uni_icons, {
  13838. class: "delete-icon",
  13839. onClick: ($event) => $setup.deleteImage(index),
  13840. type: "clear",
  13841. size: "20",
  13842. color: "red"
  13843. }, null, 8, ["onClick"])
  13844. ]);
  13845. }),
  13846. 128
  13847. /* KEYED_FRAGMENT */
  13848. )),
  13849. $setup.images.length < $setup.maxImages ? (vue.openBlock(), vue.createElementBlock("view", {
  13850. key: 0,
  13851. class: "choose-image-container",
  13852. onClick: $setup.chooseImage
  13853. }, [
  13854. vue.createVNode(_component_uni_icons, {
  13855. type: "plusempty",
  13856. size: "40",
  13857. color: "#ccc"
  13858. })
  13859. ])) : vue.createCommentVNode("v-if", true)
  13860. ]),
  13861. vue.createElementVNode("text", { style: { "padding-top": "8px" } }, "最多选择6张图片"),
  13862. vue.createCommentVNode(" 放大预览 "),
  13863. $setup.previewImage ? (vue.openBlock(), vue.createElementBlock("view", {
  13864. key: 0,
  13865. class: "preview-modal",
  13866. onClick: $setup.closePreview
  13867. }, [
  13868. vue.createElementVNode("image", {
  13869. src: $setup.previewImage,
  13870. class: "preview-large",
  13871. mode: "aspectFit",
  13872. onClick: vue.withModifiers($setup.closePreview, ["stop"])
  13873. }, null, 8, ["src"])
  13874. ])) : vue.createCommentVNode("v-if", true)
  13875. ])
  13876. ]),
  13877. _: 1
  13878. /* STABLE */
  13879. })
  13880. ]),
  13881. _: 1
  13882. /* STABLE */
  13883. }, 8, ["rules", "modelValue"]),
  13884. vue.createElementVNode("view", { class: "button-group" }, [
  13885. vue.createElementVNode("button", {
  13886. type: "info",
  13887. onClick: $setup.reset
  13888. }, "重置"),
  13889. vue.createElementVNode("button", {
  13890. type: "primary",
  13891. onClick: $setup.onsubmit,
  13892. loading: $setup.loading
  13893. }, [
  13894. !$setup.loading ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  13895. key: 0,
  13896. type: "checkmarkempty",
  13897. size: "18",
  13898. color: "white"
  13899. })) : vue.createCommentVNode("v-if", true),
  13900. vue.createTextVNode(" 提交 ")
  13901. ], 8, ["loading"])
  13902. ])
  13903. ]),
  13904. vue.createElementVNode("view", { class: "history" }, [
  13905. (vue.openBlock(true), vue.createElementBlock(
  13906. vue.Fragment,
  13907. null,
  13908. vue.renderList($setup.historyList.slice(0, 5), (item, i2) => {
  13909. return vue.openBlock(), vue.createElementBlock("view", {
  13910. class: "item",
  13911. key: i2
  13912. }, [
  13913. vue.createElementVNode(
  13914. "text",
  13915. {
  13916. class: "code",
  13917. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  13918. },
  13919. [
  13920. vue.createTextVNode(
  13921. vue.toDisplayString(item.orderNum) + " ",
  13922. 1
  13923. /* TEXT */
  13924. ),
  13925. item.space ? (vue.openBlock(), vue.createElementBlock(
  13926. "text",
  13927. { key: 0 },
  13928. "仓位编码: " + vue.toDisplayString(item.space),
  13929. 1
  13930. /* TEXT */
  13931. )) : vue.createCommentVNode("v-if", true),
  13932. vue.createTextVNode(
  13933. " " + vue.toDisplayString(item.type),
  13934. 1
  13935. /* TEXT */
  13936. )
  13937. ],
  13938. 4
  13939. /* STYLE */
  13940. ),
  13941. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  13942. key: 0,
  13943. type: "checkmarkempty",
  13944. class: "status",
  13945. size: "16",
  13946. color: "green"
  13947. })) : (vue.openBlock(), vue.createElementBlock("text", {
  13948. key: 1,
  13949. class: "status fail"
  13950. }, "F")),
  13951. vue.createElementVNode(
  13952. "text",
  13953. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  13954. vue.toDisplayString("\r\n" + item.createTime),
  13955. 1
  13956. /* TEXT */
  13957. )
  13958. ]);
  13959. }),
  13960. 128
  13961. /* KEYED_FRAGMENT */
  13962. ))
  13963. ]),
  13964. vue.createVNode(
  13965. _component_uni_popup,
  13966. {
  13967. ref: "message",
  13968. type: "message"
  13969. },
  13970. {
  13971. default: vue.withCtx(() => [
  13972. vue.createVNode(_component_uni_popup_message, {
  13973. type: $setup.messageType,
  13974. message: $setup.messageText,
  13975. duration: 2e3
  13976. }, null, 8, ["type", "message"])
  13977. ]),
  13978. _: 1
  13979. /* STABLE */
  13980. },
  13981. 512
  13982. /* NEED_PATCH */
  13983. )
  13984. ]);
  13985. }
  13986. const PagesInboundInbound = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["render", _sfc_render$z], ["__scopeId", "data-v-4cc835f2"], ["__file", "E:/demo/hmrabbit/src/pages/inbound/inbound.vue"]]);
  13987. const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
  13988. __name: "logList",
  13989. setup(__props, { expose: __expose }) {
  13990. __expose();
  13991. const historyList = vue.ref([]);
  13992. const getHistory = () => {
  13993. historyList.value = uni.getStorageSync("inboundHistory");
  13994. };
  13995. onLoad(() => {
  13996. getHistory();
  13997. });
  13998. const __returned__ = { historyList, getHistory };
  13999. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  14000. return __returned__;
  14001. }
  14002. });
  14003. function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) {
  14004. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  14005. return vue.openBlock(), vue.createElementBlock("view", { class: "history" }, [
  14006. (vue.openBlock(true), vue.createElementBlock(
  14007. vue.Fragment,
  14008. null,
  14009. vue.renderList($setup.historyList, (item, i2) => {
  14010. return vue.openBlock(), vue.createElementBlock("view", {
  14011. class: "item",
  14012. key: i2
  14013. }, [
  14014. vue.createElementVNode(
  14015. "text",
  14016. {
  14017. class: "code",
  14018. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  14019. },
  14020. [
  14021. vue.createTextVNode(
  14022. vue.toDisplayString(item.orderNum) + " ",
  14023. 1
  14024. /* TEXT */
  14025. ),
  14026. item.space ? (vue.openBlock(), vue.createElementBlock(
  14027. "text",
  14028. { key: 0 },
  14029. "仓位编码: " + vue.toDisplayString(item.space),
  14030. 1
  14031. /* TEXT */
  14032. )) : vue.createCommentVNode("v-if", true),
  14033. vue.createTextVNode(
  14034. " " + vue.toDisplayString(item.type),
  14035. 1
  14036. /* TEXT */
  14037. )
  14038. ],
  14039. 4
  14040. /* STYLE */
  14041. ),
  14042. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  14043. key: 0,
  14044. type: "checkmarkempty",
  14045. class: "status",
  14046. size: "16",
  14047. color: "green"
  14048. })) : (vue.openBlock(), vue.createElementBlock("text", {
  14049. key: 1,
  14050. class: "status fail"
  14051. }, "F")),
  14052. vue.createElementVNode(
  14053. "text",
  14054. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  14055. vue.toDisplayString("\r\n" + item.createTime),
  14056. 1
  14057. /* TEXT */
  14058. )
  14059. ]);
  14060. }),
  14061. 128
  14062. /* KEYED_FRAGMENT */
  14063. )),
  14064. $setup.historyList.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  14065. key: 0,
  14066. class: "is-empty"
  14067. }, "暂无历史")) : vue.createCommentVNode("v-if", true)
  14068. ]);
  14069. }
  14070. const PagesInboundLogList = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["render", _sfc_render$y], ["__scopeId", "data-v-5286bcd7"], ["__file", "E:/demo/hmrabbit/src/pages/inbound/logList.vue"]]);
  14071. const isObject = (val) => val !== null && typeof val === "object";
  14072. const defaultDelimiters = ["{", "}"];
  14073. class BaseFormatter {
  14074. constructor() {
  14075. this._caches = /* @__PURE__ */ Object.create(null);
  14076. }
  14077. interpolate(message, values, delimiters = defaultDelimiters) {
  14078. if (!values) {
  14079. return [message];
  14080. }
  14081. let tokens = this._caches[message];
  14082. if (!tokens) {
  14083. tokens = parse(message, delimiters);
  14084. this._caches[message] = tokens;
  14085. }
  14086. return compile(tokens, values);
  14087. }
  14088. }
  14089. const RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
  14090. const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
  14091. function parse(format, [startDelimiter, endDelimiter]) {
  14092. const tokens = [];
  14093. let position = 0;
  14094. let text = "";
  14095. while (position < format.length) {
  14096. let char = format[position++];
  14097. if (char === startDelimiter) {
  14098. if (text) {
  14099. tokens.push({ type: "text", value: text });
  14100. }
  14101. text = "";
  14102. let sub = "";
  14103. char = format[position++];
  14104. while (char !== void 0 && char !== endDelimiter) {
  14105. sub += char;
  14106. char = format[position++];
  14107. }
  14108. const isClosed = char === endDelimiter;
  14109. const type = RE_TOKEN_LIST_VALUE.test(sub) ? "list" : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ? "named" : "unknown";
  14110. tokens.push({ value: sub, type });
  14111. } else {
  14112. text += char;
  14113. }
  14114. }
  14115. text && tokens.push({ type: "text", value: text });
  14116. return tokens;
  14117. }
  14118. function compile(tokens, values) {
  14119. const compiled = [];
  14120. let index = 0;
  14121. const mode = Array.isArray(values) ? "list" : isObject(values) ? "named" : "unknown";
  14122. if (mode === "unknown") {
  14123. return compiled;
  14124. }
  14125. while (index < tokens.length) {
  14126. const token = tokens[index];
  14127. switch (token.type) {
  14128. case "text":
  14129. compiled.push(token.value);
  14130. break;
  14131. case "list":
  14132. compiled.push(values[parseInt(token.value, 10)]);
  14133. break;
  14134. case "named":
  14135. if (mode === "named") {
  14136. compiled.push(values[token.value]);
  14137. } else {
  14138. {
  14139. console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`);
  14140. }
  14141. }
  14142. break;
  14143. case "unknown":
  14144. {
  14145. console.warn(`Detect 'unknown' type of token!`);
  14146. }
  14147. break;
  14148. }
  14149. index++;
  14150. }
  14151. return compiled;
  14152. }
  14153. const LOCALE_ZH_HANS = "zh-Hans";
  14154. const LOCALE_ZH_HANT = "zh-Hant";
  14155. const LOCALE_EN = "en";
  14156. const LOCALE_FR = "fr";
  14157. const LOCALE_ES = "es";
  14158. const hasOwnProperty = Object.prototype.hasOwnProperty;
  14159. const hasOwn = (val, key) => hasOwnProperty.call(val, key);
  14160. const defaultFormatter = new BaseFormatter();
  14161. function include(str, parts) {
  14162. return !!parts.find((part) => str.indexOf(part) !== -1);
  14163. }
  14164. function startsWith(str, parts) {
  14165. return parts.find((part) => str.indexOf(part) === 0);
  14166. }
  14167. function normalizeLocale(locale, messages2) {
  14168. if (!locale) {
  14169. return;
  14170. }
  14171. locale = locale.trim().replace(/_/g, "-");
  14172. if (messages2 && messages2[locale]) {
  14173. return locale;
  14174. }
  14175. locale = locale.toLowerCase();
  14176. if (locale === "chinese") {
  14177. return LOCALE_ZH_HANS;
  14178. }
  14179. if (locale.indexOf("zh") === 0) {
  14180. if (locale.indexOf("-hans") > -1) {
  14181. return LOCALE_ZH_HANS;
  14182. }
  14183. if (locale.indexOf("-hant") > -1) {
  14184. return LOCALE_ZH_HANT;
  14185. }
  14186. if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) {
  14187. return LOCALE_ZH_HANT;
  14188. }
  14189. return LOCALE_ZH_HANS;
  14190. }
  14191. let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];
  14192. if (messages2 && Object.keys(messages2).length > 0) {
  14193. locales = Object.keys(messages2);
  14194. }
  14195. const lang = startsWith(locale, locales);
  14196. if (lang) {
  14197. return lang;
  14198. }
  14199. }
  14200. class I18n {
  14201. constructor({ locale, fallbackLocale, messages: messages2, watcher, formater: formater2 }) {
  14202. this.locale = LOCALE_EN;
  14203. this.fallbackLocale = LOCALE_EN;
  14204. this.message = {};
  14205. this.messages = {};
  14206. this.watchers = [];
  14207. if (fallbackLocale) {
  14208. this.fallbackLocale = fallbackLocale;
  14209. }
  14210. this.formater = formater2 || defaultFormatter;
  14211. this.messages = messages2 || {};
  14212. this.setLocale(locale || LOCALE_EN);
  14213. if (watcher) {
  14214. this.watchLocale(watcher);
  14215. }
  14216. }
  14217. setLocale(locale) {
  14218. const oldLocale = this.locale;
  14219. this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;
  14220. if (!this.messages[this.locale]) {
  14221. this.messages[this.locale] = {};
  14222. }
  14223. this.message = this.messages[this.locale];
  14224. if (oldLocale !== this.locale) {
  14225. this.watchers.forEach((watcher) => {
  14226. watcher(this.locale, oldLocale);
  14227. });
  14228. }
  14229. }
  14230. getLocale() {
  14231. return this.locale;
  14232. }
  14233. watchLocale(fn) {
  14234. const index = this.watchers.push(fn) - 1;
  14235. return () => {
  14236. this.watchers.splice(index, 1);
  14237. };
  14238. }
  14239. add(locale, message, override = true) {
  14240. const curMessages = this.messages[locale];
  14241. if (curMessages) {
  14242. if (override) {
  14243. Object.assign(curMessages, message);
  14244. } else {
  14245. Object.keys(message).forEach((key) => {
  14246. if (!hasOwn(curMessages, key)) {
  14247. curMessages[key] = message[key];
  14248. }
  14249. });
  14250. }
  14251. } else {
  14252. this.messages[locale] = message;
  14253. }
  14254. }
  14255. f(message, values, delimiters) {
  14256. return this.formater.interpolate(message, values, delimiters).join("");
  14257. }
  14258. t(key, locale, values) {
  14259. let message = this.message;
  14260. if (typeof locale === "string") {
  14261. locale = normalizeLocale(locale, this.messages);
  14262. locale && (message = this.messages[locale]);
  14263. } else {
  14264. values = locale;
  14265. }
  14266. if (!hasOwn(message, key)) {
  14267. console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`);
  14268. return key;
  14269. }
  14270. return this.formater.interpolate(message[key], values).join("");
  14271. }
  14272. }
  14273. function watchAppLocale(appVm, i18n) {
  14274. if (appVm.$watchLocale) {
  14275. appVm.$watchLocale((newLocale) => {
  14276. i18n.setLocale(newLocale);
  14277. });
  14278. } else {
  14279. appVm.$watch(() => appVm.$locale, (newLocale) => {
  14280. i18n.setLocale(newLocale);
  14281. });
  14282. }
  14283. }
  14284. function getDefaultLocale() {
  14285. if (typeof uni !== "undefined" && uni.getLocale) {
  14286. return uni.getLocale();
  14287. }
  14288. if (typeof global !== "undefined" && global.getLocale) {
  14289. return global.getLocale();
  14290. }
  14291. return LOCALE_EN;
  14292. }
  14293. function initVueI18n(locale, messages2 = {}, fallbackLocale, watcher) {
  14294. if (typeof locale !== "string") {
  14295. const options = [
  14296. messages2,
  14297. locale
  14298. ];
  14299. locale = options[0];
  14300. messages2 = options[1];
  14301. }
  14302. if (typeof locale !== "string") {
  14303. locale = getDefaultLocale();
  14304. }
  14305. if (typeof fallbackLocale !== "string") {
  14306. fallbackLocale = typeof __uniConfig !== "undefined" && __uniConfig.fallbackLocale || LOCALE_EN;
  14307. }
  14308. const i18n = new I18n({
  14309. locale,
  14310. fallbackLocale,
  14311. messages: messages2,
  14312. watcher
  14313. });
  14314. let t2 = (key, values) => {
  14315. if (typeof getApp !== "function") {
  14316. t2 = function(key2, values2) {
  14317. return i18n.t(key2, values2);
  14318. };
  14319. } else {
  14320. let isWatchedAppLocale = false;
  14321. t2 = function(key2, values2) {
  14322. const appVm = getApp().$vm;
  14323. if (appVm) {
  14324. appVm.$locale;
  14325. if (!isWatchedAppLocale) {
  14326. isWatchedAppLocale = true;
  14327. watchAppLocale(appVm, i18n);
  14328. }
  14329. }
  14330. return i18n.t(key2, values2);
  14331. };
  14332. }
  14333. return t2(key, values);
  14334. };
  14335. return {
  14336. i18n,
  14337. f(message, values, delimiters) {
  14338. return i18n.f(message, values, delimiters);
  14339. },
  14340. t(key, values) {
  14341. return t2(key, values);
  14342. },
  14343. add(locale2, message, override = true) {
  14344. return i18n.add(locale2, message, override);
  14345. },
  14346. watch(fn) {
  14347. return i18n.watchLocale(fn);
  14348. },
  14349. getLocale() {
  14350. return i18n.getLocale();
  14351. },
  14352. setLocale(newLocale) {
  14353. return i18n.setLocale(newLocale);
  14354. }
  14355. };
  14356. }
  14357. const en$2 = {
  14358. "uni-popup.cancel": "cancel",
  14359. "uni-popup.ok": "ok",
  14360. "uni-popup.placeholder": "pleace enter",
  14361. "uni-popup.title": "Hint",
  14362. "uni-popup.shareTitle": "Share to"
  14363. };
  14364. const zhHans$2 = {
  14365. "uni-popup.cancel": "取消",
  14366. "uni-popup.ok": "确定",
  14367. "uni-popup.placeholder": "请输入",
  14368. "uni-popup.title": "提示",
  14369. "uni-popup.shareTitle": "分享到"
  14370. };
  14371. const zhHant$2 = {
  14372. "uni-popup.cancel": "取消",
  14373. "uni-popup.ok": "確定",
  14374. "uni-popup.placeholder": "請輸入",
  14375. "uni-popup.title": "提示",
  14376. "uni-popup.shareTitle": "分享到"
  14377. };
  14378. const messages$2 = {
  14379. en: en$2,
  14380. "zh-Hans": zhHans$2,
  14381. "zh-Hant": zhHant$2
  14382. };
  14383. const { t: t$2 } = initVueI18n(messages$2);
  14384. const _sfc_main$y = {
  14385. name: "uniPopupDialog",
  14386. mixins: [popup],
  14387. emits: ["confirm", "close"],
  14388. props: {
  14389. value: {
  14390. type: [String, Number],
  14391. default: ""
  14392. },
  14393. placeholder: {
  14394. type: [String, Number],
  14395. default: ""
  14396. },
  14397. type: {
  14398. type: String,
  14399. default: "error"
  14400. },
  14401. mode: {
  14402. type: String,
  14403. default: "base"
  14404. },
  14405. title: {
  14406. type: String,
  14407. default: ""
  14408. },
  14409. content: {
  14410. type: String,
  14411. default: ""
  14412. },
  14413. beforeClose: {
  14414. type: Boolean,
  14415. default: false
  14416. },
  14417. cancelText: {
  14418. type: String,
  14419. default: ""
  14420. },
  14421. confirmText: {
  14422. type: String,
  14423. default: ""
  14424. }
  14425. },
  14426. data() {
  14427. return {
  14428. dialogType: "error",
  14429. focus: false,
  14430. val: ""
  14431. };
  14432. },
  14433. computed: {
  14434. okText() {
  14435. return this.confirmText || t$2("uni-popup.ok");
  14436. },
  14437. closeText() {
  14438. return this.cancelText || t$2("uni-popup.cancel");
  14439. },
  14440. placeholderText() {
  14441. return this.placeholder || t$2("uni-popup.placeholder");
  14442. },
  14443. titleText() {
  14444. return this.title || t$2("uni-popup.title");
  14445. }
  14446. },
  14447. watch: {
  14448. type(val) {
  14449. this.dialogType = val;
  14450. },
  14451. mode(val) {
  14452. if (val === "input") {
  14453. this.dialogType = "info";
  14454. }
  14455. },
  14456. value(val) {
  14457. this.val = val;
  14458. }
  14459. },
  14460. created() {
  14461. this.popup.disableMask();
  14462. if (this.mode === "input") {
  14463. this.dialogType = "info";
  14464. this.val = this.value;
  14465. } else {
  14466. this.dialogType = this.type;
  14467. }
  14468. },
  14469. mounted() {
  14470. this.focus = true;
  14471. },
  14472. methods: {
  14473. /**
  14474. * 点击确认按钮
  14475. */
  14476. onOk() {
  14477. if (this.mode === "input") {
  14478. this.$emit("confirm", this.val);
  14479. } else {
  14480. this.$emit("confirm");
  14481. }
  14482. if (this.beforeClose)
  14483. return;
  14484. this.popup.close();
  14485. },
  14486. /**
  14487. * 点击取消按钮
  14488. */
  14489. closeDialog() {
  14490. this.$emit("close");
  14491. if (this.beforeClose)
  14492. return;
  14493. this.popup.close();
  14494. },
  14495. close() {
  14496. this.popup.close();
  14497. }
  14498. }
  14499. };
  14500. function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) {
  14501. return vue.openBlock(), vue.createElementBlock("view", { class: "uni-popup-dialog" }, [
  14502. vue.createElementVNode("view", { class: "uni-dialog-title" }, [
  14503. vue.createElementVNode(
  14504. "text",
  14505. {
  14506. class: vue.normalizeClass(["uni-dialog-title-text", ["uni-popup__" + $data.dialogType]])
  14507. },
  14508. vue.toDisplayString($options.titleText),
  14509. 3
  14510. /* TEXT, CLASS */
  14511. )
  14512. ]),
  14513. $props.mode === "base" ? (vue.openBlock(), vue.createElementBlock("view", {
  14514. key: 0,
  14515. class: "uni-dialog-content"
  14516. }, [
  14517. vue.renderSlot(_ctx.$slots, "default", {}, () => [
  14518. vue.createElementVNode(
  14519. "text",
  14520. { class: "uni-dialog-content-text" },
  14521. vue.toDisplayString($props.content),
  14522. 1
  14523. /* TEXT */
  14524. )
  14525. ], true)
  14526. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  14527. key: 1,
  14528. class: "uni-dialog-content"
  14529. }, [
  14530. vue.renderSlot(_ctx.$slots, "default", {}, () => [
  14531. vue.withDirectives(vue.createElementVNode("input", {
  14532. class: "uni-dialog-input",
  14533. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.val = $event),
  14534. type: "text",
  14535. placeholder: $options.placeholderText,
  14536. focus: $data.focus
  14537. }, null, 8, ["placeholder", "focus"]), [
  14538. [vue.vModelText, $data.val]
  14539. ])
  14540. ], true)
  14541. ])),
  14542. vue.createElementVNode("view", { class: "uni-dialog-button-group" }, [
  14543. vue.createElementVNode("view", {
  14544. class: "uni-dialog-button",
  14545. onClick: _cache[1] || (_cache[1] = (...args) => $options.closeDialog && $options.closeDialog(...args))
  14546. }, [
  14547. vue.createElementVNode(
  14548. "text",
  14549. { class: "uni-dialog-button-text" },
  14550. vue.toDisplayString($options.closeText),
  14551. 1
  14552. /* TEXT */
  14553. )
  14554. ]),
  14555. vue.createElementVNode("view", {
  14556. class: "uni-dialog-button uni-border-left",
  14557. onClick: _cache[2] || (_cache[2] = (...args) => $options.onOk && $options.onOk(...args))
  14558. }, [
  14559. vue.createElementVNode(
  14560. "text",
  14561. { class: "uni-dialog-button-text uni-button-color" },
  14562. vue.toDisplayString($options.okText),
  14563. 1
  14564. /* TEXT */
  14565. )
  14566. ])
  14567. ])
  14568. ]);
  14569. }
  14570. const __easycom_6 = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["render", _sfc_render$x], ["__scopeId", "data-v-678a307f"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-popup-dialog/uni-popup-dialog.vue"]]);
  14571. const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
  14572. __name: "weigh",
  14573. setup(__props, { expose: __expose }) {
  14574. __expose();
  14575. const alertDialog = vue.ref();
  14576. const message = vue.ref();
  14577. const valiForm = vue.ref();
  14578. const loading = vue.ref(false);
  14579. const images = vue.ref([]);
  14580. const messageType = vue.ref("");
  14581. const messageText = vue.ref("");
  14582. const previewImage = vue.ref(null);
  14583. const maxImages = vue.ref(6);
  14584. const historyList = vue.ref([]);
  14585. const focusType = vue.ref(true);
  14586. const result = vue.ref();
  14587. const valiFormData = vue.reactive({
  14588. images: [],
  14589. orderNum: "",
  14590. weight: "",
  14591. typing: true
  14592. });
  14593. const rules = vue.computed(() => {
  14594. return {
  14595. orderNum: {
  14596. rules: [
  14597. {
  14598. required: true,
  14599. errorMessage: "单号不能为空"
  14600. }
  14601. ]
  14602. },
  14603. weight: {
  14604. rules: [
  14605. {
  14606. required: true,
  14607. errorMessage: "重量不能为空"
  14608. },
  14609. {
  14610. format: "number",
  14611. errorMessage: "重量只能输入数字"
  14612. }
  14613. ]
  14614. }
  14615. };
  14616. });
  14617. onShow(async () => {
  14618. focusType.value = true;
  14619. loading.value = false;
  14620. });
  14621. onHide(() => {
  14622. focusType.value = false;
  14623. loading.value = false;
  14624. });
  14625. onNavigationBarButtonTap((event) => {
  14626. if (event.index === 0) {
  14627. uni.navigateTo({
  14628. url: "/pages/weigh/logList"
  14629. });
  14630. }
  14631. });
  14632. const reset = () => {
  14633. loading.value = false;
  14634. focusType.value = false;
  14635. images.value = [];
  14636. valiFormData.orderNum = "";
  14637. valiFormData.weight = "";
  14638. valiFormData.typing = true;
  14639. vue.nextTick(() => {
  14640. focusType.value = true;
  14641. });
  14642. };
  14643. const scan = async () => {
  14644. let status = await checkPermission();
  14645. if (status !== 1) {
  14646. return;
  14647. }
  14648. uni.scanCode({
  14649. success: (res) => {
  14650. result.value = res.result;
  14651. valiFormData.orderNum = res.result;
  14652. },
  14653. fail: (err) => {
  14654. }
  14655. });
  14656. };
  14657. let st2;
  14658. const warehouseScan2 = async () => {
  14659. st2 && clearTimeout(st2);
  14660. await _checkWaybillGoods();
  14661. };
  14662. const _checkWaybillGoods = async () => {
  14663. loading.value = true;
  14664. const res = await checkWaybillGoods(valiFormData.orderNum);
  14665. if (res.code === 1) {
  14666. if (res.data.is_goods_empty) {
  14667. alertDialog.value.open();
  14668. } else {
  14669. weighScan(0);
  14670. }
  14671. } else {
  14672. messageType.value = "error";
  14673. messageText.value = res.msg;
  14674. message.value.open();
  14675. loading.value = false;
  14676. }
  14677. };
  14678. const weighScan = async (is_save_goods) => {
  14679. const images2 = getImages();
  14680. let allImgVerify = true;
  14681. for (var i2 = 0; i2 < images2.length; i2++) {
  14682. if (!images2[i2].savePath) {
  14683. allImgVerify = false;
  14684. }
  14685. }
  14686. if (!allImgVerify) {
  14687. messageType.value = "error";
  14688. messageText.value = "图片还没上传完毕,请稍后...";
  14689. message.value.open();
  14690. loading.value = false;
  14691. return;
  14692. }
  14693. const res = await weigh({
  14694. order_no: valiFormData.orderNum,
  14695. weight: valiFormData.weight,
  14696. is_save_goods,
  14697. images: images2
  14698. });
  14699. loading.value = false;
  14700. if (res.code == 1) {
  14701. messageType.value = "success";
  14702. messageText.value = res.msg;
  14703. message.value.open();
  14704. const historyItem = {
  14705. orderNum: valiFormData.orderNum,
  14706. createTime: /* @__PURE__ */ new Date(),
  14707. type: "称重",
  14708. status: true
  14709. };
  14710. historyList.value.unshift(historyItem);
  14711. uni.setStorageSync("weighHistory", historyList.value);
  14712. getHistory();
  14713. st2 = setTimeout(() => {
  14714. reset();
  14715. st2 && clearTimeout(st2);
  14716. }, 1e3);
  14717. } else {
  14718. messageType.value = "error";
  14719. messageText.value = res.msg;
  14720. message.value.open();
  14721. const historyItem = {
  14722. orderNum: valiFormData.orderNum,
  14723. createTime: /* @__PURE__ */ new Date(),
  14724. type: "称重",
  14725. status: false
  14726. };
  14727. historyList.value.unshift(historyItem);
  14728. uni.setStorageSync("weighHistory", historyList.value);
  14729. getHistory();
  14730. st2 = setTimeout(() => {
  14731. reset();
  14732. st2 && clearTimeout(st2);
  14733. }, 1e3);
  14734. }
  14735. };
  14736. const dialogConfirm = () => {
  14737. weighScan(1);
  14738. };
  14739. const dialogClose = () => {
  14740. weighScan(0);
  14741. };
  14742. const onsubmit = () => {
  14743. valiForm.value.validate().then((res) => {
  14744. warehouseScan2();
  14745. }).catch((err) => {
  14746. formatAppLog("log", "at pages/weigh/weigh.vue:329", "err", err);
  14747. });
  14748. };
  14749. const getHistory = () => {
  14750. historyList.value = uni.getStorageSync("weighHistory");
  14751. };
  14752. const getImages = () => {
  14753. const res = images.value.map((item) => {
  14754. return {
  14755. name: item.name,
  14756. savePath: item.serverUrl,
  14757. fileSize: item.size,
  14758. mimeType: item.type
  14759. };
  14760. });
  14761. return res;
  14762. };
  14763. const _getAliyunOssSignature = async (rawFiles) => {
  14764. const res = await getAliyunOssSignature();
  14765. const signature = res.data.signature;
  14766. const uploadPromises = rawFiles.map((image) => {
  14767. return upLoadFile(signature, image);
  14768. });
  14769. Promise.all(uploadPromises).then((results) => {
  14770. uni.showToast({
  14771. title: "加载成功",
  14772. icon: "success"
  14773. });
  14774. }).catch((error) => {
  14775. formatAppLog("error", "at pages/weigh/weigh.vue:364", "加载失败:", error);
  14776. uni.showToast({
  14777. title: "加载失败",
  14778. icon: "none"
  14779. });
  14780. });
  14781. };
  14782. const upLoadFile = (signature, image) => {
  14783. const fileData = {
  14784. policy: signature.policy,
  14785. signature: signature.signature,
  14786. ossaccessKeyId: signature.ossAccessKeyId,
  14787. key: signature.dir + dayjs().format("YYYYMMDD") + "/" + uuid() + "_" + image.name,
  14788. dir: signature.dir,
  14789. host: signature.host,
  14790. file: image.file
  14791. };
  14792. return new Promise((resolve, reject) => {
  14793. let name = image.name;
  14794. name = "file";
  14795. const uploadTask = uni.uploadFile({
  14796. url: signature.host,
  14797. // 你的上传接口地址
  14798. filePath: image.path,
  14799. name,
  14800. // 这里根据后端需要的字段来定义
  14801. formData: fileData,
  14802. success: (uploadFileRes) => {
  14803. if (uploadFileRes.statusCode === 204 || uploadFileRes.statusCode === 200) {
  14804. image.serverUrl = fileData.key;
  14805. resolve(uploadFileRes);
  14806. } else {
  14807. reject(uploadFileRes);
  14808. }
  14809. },
  14810. fail: (error) => {
  14811. formatAppLog("log", "at pages/weigh/weigh.vue:409", "error++", error);
  14812. reject(error);
  14813. },
  14814. // 更新上传进度
  14815. complete: () => {
  14816. formatAppLog("log", "at pages/weigh/weigh.vue:414", "complete---");
  14817. image.progress = 100;
  14818. }
  14819. });
  14820. uploadTask.onProgressUpdate((progressEvent) => {
  14821. image.progress = progressEvent.progress;
  14822. });
  14823. });
  14824. };
  14825. const chooseImage = () => {
  14826. uni.chooseImage({
  14827. count: maxImages.value - images.value.length,
  14828. success: (res) => {
  14829. images.value = images.value.concat(
  14830. res.tempFiles.map((item) => {
  14831. const res2 = {
  14832. size: item.size,
  14833. path: item.path,
  14834. name: item.name,
  14835. type: item.type,
  14836. progress: 0,
  14837. file: item
  14838. };
  14839. const suffix = item.path.substring(item.path.lastIndexOf(".") + 1);
  14840. const fileName = item.path.substring(item.path.lastIndexOf("/") + 1);
  14841. res2.name = fileName;
  14842. res2.type = suffix;
  14843. return res2;
  14844. })
  14845. );
  14846. const paddingImages = images.value.filter((image) => image.progress === 0);
  14847. vue.nextTick(() => {
  14848. _getAliyunOssSignature(paddingImages);
  14849. });
  14850. },
  14851. fail: (err) => {
  14852. formatAppLog("error", "at pages/weigh/weigh.vue:459", err);
  14853. }
  14854. });
  14855. };
  14856. const deleteImage = (index) => {
  14857. images.value.splice(index, 1);
  14858. };
  14859. const openPreview = (image) => {
  14860. previewImage.value = image;
  14861. };
  14862. const closePreview = () => {
  14863. previewImage.value = null;
  14864. };
  14865. const __returned__ = { alertDialog, message, valiForm, loading, images, messageType, messageText, previewImage, maxImages, historyList, focusType, result, valiFormData, rules, reset, scan, get st() {
  14866. return st2;
  14867. }, set st(v2) {
  14868. st2 = v2;
  14869. }, warehouseScan: warehouseScan2, _checkWaybillGoods, weighScan, dialogConfirm, dialogClose, onsubmit, getHistory, getImages, _getAliyunOssSignature, upLoadFile, chooseImage, deleteImage, openPreview, closePreview };
  14870. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  14871. return __returned__;
  14872. }
  14873. });
  14874. function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) {
  14875. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  14876. const _component_uni_forms_item = resolveEasycom(vue.resolveDynamicComponent("uni-forms-item"), __easycom_0$4);
  14877. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  14878. const _component_uni_forms = resolveEasycom(vue.resolveDynamicComponent("uni-forms"), __easycom_2$1);
  14879. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  14880. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  14881. const _component_uni_popup_dialog = resolveEasycom(vue.resolveDynamicComponent("uni-popup-dialog"), __easycom_6);
  14882. return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
  14883. vue.createElementVNode("view", { class: "example" }, [
  14884. vue.createCommentVNode(" 基础表单校验 "),
  14885. vue.createVNode(_component_uni_forms, {
  14886. ref: "valiForm",
  14887. "label-align": "right",
  14888. "label-width": "80px",
  14889. rules: $setup.rules,
  14890. modelValue: $setup.valiFormData
  14891. }, {
  14892. default: vue.withCtx(() => [
  14893. vue.createVNode(_component_uni_forms_item, {
  14894. label: "单号",
  14895. required: "",
  14896. name: "orderNum"
  14897. }, {
  14898. default: vue.withCtx(() => [
  14899. vue.createVNode(_component_uni_easyinput, {
  14900. modelValue: $setup.valiFormData.orderNum,
  14901. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.valiFormData.orderNum = $event),
  14902. placeholder: "请输入单号",
  14903. suffixIcon: "scan",
  14904. focus: $setup.focusType,
  14905. onIconClick: $setup.scan
  14906. }, null, 8, ["modelValue", "focus"])
  14907. ]),
  14908. _: 1
  14909. /* STABLE */
  14910. }),
  14911. vue.createVNode(_component_uni_forms_item, {
  14912. label: "重量",
  14913. required: "",
  14914. name: "weight"
  14915. }, {
  14916. default: vue.withCtx(() => [
  14917. vue.createVNode(_component_uni_easyinput, {
  14918. modelValue: $setup.valiFormData.weight,
  14919. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.valiFormData.weight = $event),
  14920. placeholder: "请输入重量",
  14921. oninput: "value=value.replace(/[^\\d.]/g,'').replace(/^\\./g, '').replace(/\\.{2,}/g, '').replace('.', '$#$').replace(/\\./g, '').replace('$#$', '.').match(/^\\d*(\\.?\\d{0,2})/g)[0] || null"
  14922. }, {
  14923. right: vue.withCtx(() => [
  14924. vue.createElementVNode("view", { class: "weight-right" }, "KG")
  14925. ]),
  14926. _: 1
  14927. /* STABLE */
  14928. }, 8, ["modelValue"])
  14929. ]),
  14930. _: 1
  14931. /* STABLE */
  14932. }),
  14933. vue.createVNode(_component_uni_forms_item, {
  14934. label: "图片",
  14935. name: "images"
  14936. }, {
  14937. default: vue.withCtx(() => [
  14938. vue.createElementVNode("view", { class: "upload-container" }, [
  14939. vue.createElementVNode("view", { class: "preview" }, [
  14940. (vue.openBlock(true), vue.createElementBlock(
  14941. vue.Fragment,
  14942. null,
  14943. vue.renderList($setup.images, (img, index) => {
  14944. return vue.openBlock(), vue.createElementBlock("view", {
  14945. key: index,
  14946. class: "image-container"
  14947. }, [
  14948. vue.createElementVNode("image", {
  14949. src: img.path,
  14950. class: "preview-image",
  14951. mode: "aspectFill",
  14952. onClick: ($event) => $setup.openPreview(img.path)
  14953. }, null, 8, ["src", "onClick"]),
  14954. vue.createElementVNode("progress", {
  14955. percent: img.progress || 0,
  14956. activeColor: Number(img.progress || 0) === 100 ? "#00ff00" : "#10AEFF",
  14957. "stroke-width": "3"
  14958. }, null, 8, ["percent", "activeColor"]),
  14959. img.status === "success" ? (vue.openBlock(), vue.createElementBlock("text", { key: 0 }, "1")) : vue.createCommentVNode("v-if", true),
  14960. vue.createVNode(_component_uni_icons, {
  14961. class: "delete-icon",
  14962. onClick: ($event) => $setup.deleteImage(index),
  14963. type: "clear",
  14964. size: "20",
  14965. color: "red"
  14966. }, null, 8, ["onClick"])
  14967. ]);
  14968. }),
  14969. 128
  14970. /* KEYED_FRAGMENT */
  14971. )),
  14972. $setup.images.length < $setup.maxImages ? (vue.openBlock(), vue.createElementBlock("view", {
  14973. key: 0,
  14974. class: "choose-image-container",
  14975. onClick: $setup.chooseImage
  14976. }, [
  14977. vue.createVNode(_component_uni_icons, {
  14978. type: "plusempty",
  14979. size: "40",
  14980. color: "#ccc"
  14981. })
  14982. ])) : vue.createCommentVNode("v-if", true)
  14983. ]),
  14984. vue.createElementVNode("text", { style: { "padding-top": "8px" } }, "最多选择6张图片"),
  14985. vue.createCommentVNode(" 放大预览 "),
  14986. $setup.previewImage ? (vue.openBlock(), vue.createElementBlock("view", {
  14987. key: 0,
  14988. class: "preview-modal",
  14989. onClick: $setup.closePreview
  14990. }, [
  14991. vue.createElementVNode("image", {
  14992. src: $setup.previewImage,
  14993. class: "preview-large",
  14994. mode: "aspectFit",
  14995. onClick: vue.withModifiers($setup.closePreview, ["stop"])
  14996. }, null, 8, ["src"])
  14997. ])) : vue.createCommentVNode("v-if", true)
  14998. ])
  14999. ]),
  15000. _: 1
  15001. /* STABLE */
  15002. })
  15003. ]),
  15004. _: 1
  15005. /* STABLE */
  15006. }, 8, ["rules", "modelValue"]),
  15007. vue.createElementVNode("view", { class: "button-group" }, [
  15008. vue.createElementVNode("button", {
  15009. type: "info",
  15010. onClick: $setup.reset
  15011. }, "重置"),
  15012. vue.createElementVNode("button", {
  15013. type: "primary",
  15014. onClick: $setup.onsubmit,
  15015. loading: $setup.loading
  15016. }, [
  15017. !$setup.loading ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  15018. key: 0,
  15019. type: "checkmarkempty",
  15020. size: "18",
  15021. color: "white"
  15022. })) : vue.createCommentVNode("v-if", true),
  15023. vue.createTextVNode(" 提交 ")
  15024. ], 8, ["loading"])
  15025. ])
  15026. ]),
  15027. vue.createElementVNode("view", { class: "history" }, [
  15028. (vue.openBlock(true), vue.createElementBlock(
  15029. vue.Fragment,
  15030. null,
  15031. vue.renderList($setup.historyList.slice(0, 5), (item, i2) => {
  15032. return vue.openBlock(), vue.createElementBlock("view", {
  15033. class: "item",
  15034. key: i2
  15035. }, [
  15036. vue.createElementVNode(
  15037. "text",
  15038. {
  15039. class: "code",
  15040. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  15041. },
  15042. vue.toDisplayString(item.orderNum) + " " + vue.toDisplayString(item.type),
  15043. 5
  15044. /* TEXT, STYLE */
  15045. ),
  15046. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  15047. key: 0,
  15048. type: "checkmarkempty",
  15049. class: "status",
  15050. size: "16",
  15051. color: "green"
  15052. })) : (vue.openBlock(), vue.createElementBlock("text", {
  15053. key: 1,
  15054. class: "status fail"
  15055. }, "F")),
  15056. vue.createElementVNode(
  15057. "text",
  15058. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  15059. vue.toDisplayString("\r\n" + item.createTime),
  15060. 1
  15061. /* TEXT */
  15062. )
  15063. ]);
  15064. }),
  15065. 128
  15066. /* KEYED_FRAGMENT */
  15067. ))
  15068. ]),
  15069. vue.createVNode(
  15070. _component_uni_popup,
  15071. {
  15072. ref: "message",
  15073. type: "message"
  15074. },
  15075. {
  15076. default: vue.withCtx(() => [
  15077. vue.createVNode(_component_uni_popup_message, {
  15078. type: $setup.messageType,
  15079. message: $setup.messageText,
  15080. duration: 2e3
  15081. }, null, 8, ["type", "message"])
  15082. ]),
  15083. _: 1
  15084. /* STABLE */
  15085. },
  15086. 512
  15087. /* NEED_PATCH */
  15088. ),
  15089. vue.createVNode(
  15090. _component_uni_popup,
  15091. {
  15092. ref: "alertDialog",
  15093. type: "dialog"
  15094. },
  15095. {
  15096. default: vue.withCtx(() => [
  15097. vue.createVNode(_component_uni_popup_dialog, {
  15098. type: "info",
  15099. cancelText: "否",
  15100. confirmText: "是",
  15101. title: "提示",
  15102. content: "是否按默认申报(默认申报为:衣服,10件,单价1)",
  15103. onConfirm: $setup.dialogConfirm,
  15104. onClose: $setup.dialogClose
  15105. })
  15106. ]),
  15107. _: 1
  15108. /* STABLE */
  15109. },
  15110. 512
  15111. /* NEED_PATCH */
  15112. )
  15113. ]);
  15114. }
  15115. const PagesWeighWeigh = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["render", _sfc_render$w], ["__scopeId", "data-v-6f825acf"], ["__file", "E:/demo/hmrabbit/src/pages/weigh/weigh.vue"]]);
  15116. const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
  15117. __name: "logList",
  15118. setup(__props, { expose: __expose }) {
  15119. __expose();
  15120. const historyList = vue.ref([]);
  15121. const getHistory = () => {
  15122. historyList.value = uni.getStorageSync("weighHistory");
  15123. };
  15124. onLoad(() => {
  15125. getHistory();
  15126. });
  15127. const __returned__ = { historyList, getHistory };
  15128. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  15129. return __returned__;
  15130. }
  15131. });
  15132. function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
  15133. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  15134. return vue.openBlock(), vue.createElementBlock("view", { class: "history" }, [
  15135. (vue.openBlock(true), vue.createElementBlock(
  15136. vue.Fragment,
  15137. null,
  15138. vue.renderList($setup.historyList, (item, i2) => {
  15139. return vue.openBlock(), vue.createElementBlock("view", {
  15140. class: "item",
  15141. key: i2
  15142. }, [
  15143. vue.createElementVNode(
  15144. "text",
  15145. {
  15146. class: "code",
  15147. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  15148. },
  15149. vue.toDisplayString(item.orderNum) + " " + vue.toDisplayString(item.type),
  15150. 5
  15151. /* TEXT, STYLE */
  15152. ),
  15153. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  15154. key: 0,
  15155. type: "checkmarkempty",
  15156. class: "status",
  15157. size: "16",
  15158. color: "green"
  15159. })) : (vue.openBlock(), vue.createElementBlock("text", {
  15160. key: 1,
  15161. class: "status fail"
  15162. }, "F")),
  15163. vue.createElementVNode(
  15164. "text",
  15165. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  15166. vue.toDisplayString("\r\n" + item.createTime),
  15167. 1
  15168. /* TEXT */
  15169. )
  15170. ]);
  15171. }),
  15172. 128
  15173. /* KEYED_FRAGMENT */
  15174. )),
  15175. $setup.historyList.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  15176. key: 0,
  15177. class: "is-empty"
  15178. }, "暂无历史")) : vue.createCommentVNode("v-if", true)
  15179. ]);
  15180. }
  15181. const PagesWeighLogList = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["render", _sfc_render$v], ["__scopeId", "data-v-4fa869ac"], ["__file", "E:/demo/hmrabbit/src/pages/weigh/logList.vue"]]);
  15182. const getExpressCompany = (data) => {
  15183. return http({
  15184. method: "GET",
  15185. url: "/admin/expressCompany/index",
  15186. data
  15187. });
  15188. };
  15189. const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
  15190. __name: "outbound",
  15191. setup(__props, { expose: __expose }) {
  15192. __expose();
  15193. const message = vue.ref();
  15194. const valiForm = vue.ref();
  15195. const loading = vue.ref(false);
  15196. const messageType = vue.ref("");
  15197. const messageText = vue.ref("");
  15198. const batchOptions = vue.ref([]);
  15199. const companyOptions = vue.ref([]);
  15200. const orderInfo = vue.ref({});
  15201. const historyList = vue.ref([]);
  15202. const focusType = vue.ref(true);
  15203. const result = vue.ref();
  15204. const valiFormData = vue.reactive({
  15205. orderNum: "",
  15206. batch_number: "",
  15207. express_company_id: "",
  15208. express_no: "",
  15209. express_tracking_number: "",
  15210. typing: true
  15211. });
  15212. const rules = vue.computed(() => {
  15213. return {
  15214. orderNum: {
  15215. rules: [
  15216. {
  15217. required: true,
  15218. errorMessage: "单号不能为空"
  15219. }
  15220. ]
  15221. }
  15222. };
  15223. });
  15224. onShow(async () => {
  15225. focusType.value = true;
  15226. loading.value = false;
  15227. await Promise.all([_getBindParams(), _getExpressCompany()]);
  15228. });
  15229. onHide(() => {
  15230. focusType.value = false;
  15231. loading.value = false;
  15232. });
  15233. onNavigationBarButtonTap((event) => {
  15234. if (event.index === 0) {
  15235. uni.navigateTo({
  15236. url: "/pages/outbound/logList"
  15237. });
  15238. }
  15239. });
  15240. const _getBindParams = async () => {
  15241. const res = await getBindParams$1();
  15242. if (res.code === 1) {
  15243. batchOptions.value = res.data.batch_number.map((item) => {
  15244. return {
  15245. text: item.name,
  15246. value: item.id
  15247. };
  15248. });
  15249. }
  15250. };
  15251. const _getExpressCompany = async () => {
  15252. const res = await getExpressCompany({
  15253. limit: 100,
  15254. order: "id,desc"
  15255. });
  15256. if (res.code === 1) {
  15257. companyOptions.value = res.data.list.map((item) => {
  15258. return {
  15259. text: item.name,
  15260. value: item.id
  15261. };
  15262. });
  15263. }
  15264. };
  15265. const batchText = (batch_number) => {
  15266. var _a;
  15267. return (_a = batchOptions.value.find((item) => item.value === batch_number)) == null ? void 0 : _a.text;
  15268. };
  15269. const reset = () => {
  15270. loading.value = false;
  15271. focusType.value = false;
  15272. valiFormData.orderNum = "";
  15273. valiFormData.batch_number = "";
  15274. valiFormData.express_company_id = "";
  15275. valiFormData.express_no = "";
  15276. valiFormData.express_tracking_number = "";
  15277. valiFormData.typing = true;
  15278. vue.nextTick(() => {
  15279. focusType.value = true;
  15280. });
  15281. };
  15282. let st2;
  15283. const orderNumChange = (res) => {
  15284. valiFormData.orderNum = res;
  15285. st2 && clearTimeout(st2);
  15286. st2 = setTimeout(() => {
  15287. _getOrderInfo();
  15288. clearTimeout(st2);
  15289. }, 800);
  15290. };
  15291. const _getOrderInfo = async () => {
  15292. if (valiFormData.orderNum.length === 0) {
  15293. return;
  15294. }
  15295. const res = await getOrderInfo({
  15296. order_no: valiFormData.orderNum
  15297. });
  15298. if (res.code === 1) {
  15299. orderInfo.value = res.data;
  15300. } else {
  15301. orderInfo.value = {};
  15302. messageType.value = "error";
  15303. messageText.value = res.msg;
  15304. message.value.open();
  15305. }
  15306. };
  15307. const scan = async (key) => {
  15308. let status = await checkPermission();
  15309. if (status !== 1) {
  15310. return;
  15311. }
  15312. uni.scanCode({
  15313. success: (res) => {
  15314. result.value = res.result;
  15315. valiFormData[key] = res.result;
  15316. if (key === "orderNum") {
  15317. orderNumChange(res.result);
  15318. }
  15319. },
  15320. fail: (err) => {
  15321. }
  15322. });
  15323. };
  15324. let st3;
  15325. const warehouseScan2 = async () => {
  15326. st3 && clearTimeout(st3);
  15327. await scanOutstock();
  15328. };
  15329. const scanOutstock = async () => {
  15330. if (valiFormData.orderNum.length === 0 && valiFormData.batch_number.length === 0) {
  15331. messageType.value = "error";
  15332. messageText.value = "单号或批次号至少填一个";
  15333. message.value.open();
  15334. return;
  15335. }
  15336. loading.value = true;
  15337. let data = {
  15338. order_no: valiFormData.orderNum,
  15339. batch_number: valiFormData.batch_number
  15340. };
  15341. Number(valiFormData.express_company_id) && (data.express_company_id = Number(valiFormData.express_company_id));
  15342. valiFormData.express_no && (data.express_no = valiFormData.express_no);
  15343. valiFormData.express_tracking_number && (data.express_tracking_number = valiFormData.express_tracking_number);
  15344. const res = await outStock(data);
  15345. loading.value = false;
  15346. if (res.code == 1) {
  15347. messageType.value = "success";
  15348. messageText.value = res.msg;
  15349. message.value.open();
  15350. const historyItem = {
  15351. orderNum: valiFormData.orderNum,
  15352. batch_text: batchText(valiFormData.batch_number),
  15353. createTime: /* @__PURE__ */ new Date(),
  15354. type: "出库",
  15355. status: true
  15356. };
  15357. historyList.value.unshift(historyItem);
  15358. historyList.value.length > 10 && (historyList.value.length = 10);
  15359. uni.setStorageSync("outboundHistory", historyList.value);
  15360. getHistory();
  15361. st3 = setTimeout(() => {
  15362. reset();
  15363. st3 && clearTimeout(st3);
  15364. loading.value = false;
  15365. }, 700);
  15366. } else {
  15367. messageType.value = "error";
  15368. messageText.value = res.msg;
  15369. message.value.open();
  15370. const historyItem = {
  15371. orderNum: valiFormData.orderNum,
  15372. batch_text: batchText(valiFormData.batch_number),
  15373. createTime: /* @__PURE__ */ new Date(),
  15374. type: "出库",
  15375. status: false
  15376. };
  15377. historyList.value.unshift(historyItem);
  15378. historyList.value.length > 10 && (historyList.value.length = 10);
  15379. uni.setStorageSync("outboundHistory", historyList.value);
  15380. getHistory();
  15381. st3 = setTimeout(() => {
  15382. reset();
  15383. st3 && clearTimeout(st3);
  15384. loading.value = false;
  15385. }, 700);
  15386. }
  15387. };
  15388. const onsubmit = () => {
  15389. valiForm.value.validate().then((res) => {
  15390. warehouseScan2();
  15391. }).catch((err) => {
  15392. formatAppLog("log", "at pages/outbound/outbound.vue:331", "err", err);
  15393. });
  15394. };
  15395. const getHistory = () => {
  15396. historyList.value = uni.getStorageSync("outboundHistory");
  15397. };
  15398. const __returned__ = { message, valiForm, loading, messageType, messageText, batchOptions, companyOptions, orderInfo, historyList, focusType, result, valiFormData, rules, _getBindParams, _getExpressCompany, batchText, reset, get st2() {
  15399. return st2;
  15400. }, set st2(v2) {
  15401. st2 = v2;
  15402. }, orderNumChange, _getOrderInfo, scan, get st() {
  15403. return st3;
  15404. }, set st(v2) {
  15405. st3 = v2;
  15406. }, warehouseScan: warehouseScan2, scanOutstock, onsubmit, getHistory };
  15407. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  15408. return __returned__;
  15409. }
  15410. });
  15411. function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
  15412. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  15413. const _component_uni_forms_item = resolveEasycom(vue.resolveDynamicComponent("uni-forms-item"), __easycom_0$4);
  15414. const _component_uni_data_select = resolveEasycom(vue.resolveDynamicComponent("uni-data-select"), __easycom_0$3);
  15415. const _component_uni_forms = resolveEasycom(vue.resolveDynamicComponent("uni-forms"), __easycom_2$1);
  15416. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  15417. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  15418. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  15419. return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
  15420. vue.createElementVNode("view", { class: "example" }, [
  15421. vue.createCommentVNode(" 基础表单校验 "),
  15422. vue.createVNode(_component_uni_forms, {
  15423. ref: "valiForm",
  15424. "label-align": "right",
  15425. "label-width": "80px",
  15426. rules: $setup.rules,
  15427. modelValue: $setup.valiFormData
  15428. }, {
  15429. default: vue.withCtx(() => [
  15430. vue.createVNode(_component_uni_forms_item, {
  15431. label: "单号",
  15432. required: true,
  15433. name: "orderNum"
  15434. }, {
  15435. default: vue.withCtx(() => [
  15436. vue.createVNode(_component_uni_easyinput, {
  15437. modelValue: $setup.valiFormData.orderNum,
  15438. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.valiFormData.orderNum = $event),
  15439. placeholder: "请输入单号",
  15440. suffixIcon: "scan",
  15441. focus: $setup.focusType,
  15442. onIconClick: _cache[1] || (_cache[1] = ($event) => $setup.scan("orderNum"))
  15443. }, null, 8, ["modelValue", "focus"])
  15444. ]),
  15445. _: 1
  15446. /* STABLE */
  15447. }),
  15448. vue.createVNode(_component_uni_forms_item, {
  15449. label: "批次号",
  15450. name: "batch_number"
  15451. }, {
  15452. default: vue.withCtx(() => [
  15453. vue.createVNode(_component_uni_data_select, {
  15454. modelValue: $setup.valiFormData.batch_number,
  15455. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.valiFormData.batch_number = $event),
  15456. localdata: $setup.batchOptions,
  15457. placeholder: "请选择批次号"
  15458. }, null, 8, ["modelValue", "localdata"])
  15459. ]),
  15460. _: 1
  15461. /* STABLE */
  15462. }),
  15463. $setup.orderInfo.order_id ? (vue.openBlock(), vue.createElementBlock("view", { key: 0 }, [
  15464. !$setup.orderInfo.express_sn ? (vue.openBlock(), vue.createElementBlock("view", { key: 0 }, [
  15465. vue.createVNode(_component_uni_forms_item, {
  15466. label: "物流公司",
  15467. name: "express_company_id"
  15468. }, {
  15469. default: vue.withCtx(() => [
  15470. vue.createVNode(_component_uni_data_select, {
  15471. modelValue: $setup.valiFormData.express_company_id,
  15472. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.valiFormData.express_company_id = $event),
  15473. localdata: $setup.companyOptions,
  15474. placeholder: "请选择物流公司"
  15475. }, null, 8, ["modelValue", "localdata"])
  15476. ]),
  15477. _: 1
  15478. /* STABLE */
  15479. }),
  15480. vue.createVNode(_component_uni_forms_item, {
  15481. label: "物流单号",
  15482. name: "express_no"
  15483. }, {
  15484. default: vue.withCtx(() => [
  15485. vue.createVNode(_component_uni_easyinput, {
  15486. modelValue: $setup.valiFormData.express_no,
  15487. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.valiFormData.express_no = $event),
  15488. placeholder: "请输入物流单号",
  15489. suffixIcon: "scan",
  15490. onIconClick: _cache[5] || (_cache[5] = ($event) => $setup.scan("express_no"))
  15491. }, null, 8, ["modelValue"])
  15492. ]),
  15493. _: 1
  15494. /* STABLE */
  15495. }),
  15496. vue.createVNode(_component_uni_forms_item, {
  15497. label: "追踪单号",
  15498. name: "express_tracking_number"
  15499. }, {
  15500. default: vue.withCtx(() => [
  15501. vue.createVNode(_component_uni_easyinput, {
  15502. modelValue: $setup.valiFormData.express_tracking_number,
  15503. "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.valiFormData.express_tracking_number = $event),
  15504. placeholder: "请输入追踪单号",
  15505. suffixIcon: "scan",
  15506. onIconClick: _cache[7] || (_cache[7] = ($event) => $setup.scan("express_tracking_number"))
  15507. }, null, 8, ["modelValue"])
  15508. ]),
  15509. _: 1
  15510. /* STABLE */
  15511. })
  15512. ])) : vue.createCommentVNode("v-if", true)
  15513. ])) : vue.createCommentVNode("v-if", true)
  15514. ]),
  15515. _: 1
  15516. /* STABLE */
  15517. }, 8, ["rules", "modelValue"]),
  15518. vue.createElementVNode("view", { class: "button-group" }, [
  15519. vue.createElementVNode("button", {
  15520. type: "info",
  15521. onClick: $setup.reset
  15522. }, "重置"),
  15523. vue.createElementVNode("button", {
  15524. type: "primary",
  15525. onClick: $setup.onsubmit,
  15526. loading: $setup.loading
  15527. }, [
  15528. !$setup.loading ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  15529. key: 0,
  15530. type: "checkmarkempty",
  15531. size: "18",
  15532. color: "white"
  15533. })) : vue.createCommentVNode("v-if", true),
  15534. vue.createTextVNode(" 提交 ")
  15535. ], 8, ["loading"])
  15536. ])
  15537. ]),
  15538. vue.createElementVNode("view", { class: "history" }, [
  15539. (vue.openBlock(true), vue.createElementBlock(
  15540. vue.Fragment,
  15541. null,
  15542. vue.renderList($setup.historyList.slice(0, 5), (item, i2) => {
  15543. return vue.openBlock(), vue.createElementBlock("view", {
  15544. class: "item",
  15545. key: i2
  15546. }, [
  15547. vue.createElementVNode(
  15548. "text",
  15549. {
  15550. class: "code",
  15551. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  15552. },
  15553. [
  15554. vue.createTextVNode(
  15555. vue.toDisplayString(item.orderNum) + " ",
  15556. 1
  15557. /* TEXT */
  15558. ),
  15559. item.batch_text ? (vue.openBlock(), vue.createElementBlock(
  15560. "text",
  15561. { key: 0 },
  15562. "批次号: " + vue.toDisplayString(item.batch_text),
  15563. 1
  15564. /* TEXT */
  15565. )) : vue.createCommentVNode("v-if", true),
  15566. vue.createTextVNode(
  15567. " " + vue.toDisplayString(item.type),
  15568. 1
  15569. /* TEXT */
  15570. )
  15571. ],
  15572. 4
  15573. /* STYLE */
  15574. ),
  15575. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  15576. key: 0,
  15577. type: "checkmarkempty",
  15578. class: "status",
  15579. size: "16",
  15580. color: "green"
  15581. })) : (vue.openBlock(), vue.createElementBlock("text", {
  15582. key: 1,
  15583. class: "status fail"
  15584. }, "F")),
  15585. vue.createElementVNode(
  15586. "text",
  15587. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  15588. vue.toDisplayString("\r\n" + item.createTime),
  15589. 1
  15590. /* TEXT */
  15591. )
  15592. ]);
  15593. }),
  15594. 128
  15595. /* KEYED_FRAGMENT */
  15596. ))
  15597. ]),
  15598. vue.createVNode(
  15599. _component_uni_popup,
  15600. {
  15601. ref: "message",
  15602. type: "message"
  15603. },
  15604. {
  15605. default: vue.withCtx(() => [
  15606. vue.createVNode(_component_uni_popup_message, {
  15607. type: $setup.messageType,
  15608. message: $setup.messageText,
  15609. duration: 2e3
  15610. }, null, 8, ["type", "message"])
  15611. ]),
  15612. _: 1
  15613. /* STABLE */
  15614. },
  15615. 512
  15616. /* NEED_PATCH */
  15617. )
  15618. ]);
  15619. }
  15620. const PagesOutboundOutbound = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["render", _sfc_render$u], ["__scopeId", "data-v-b3062ebb"], ["__file", "E:/demo/hmrabbit/src/pages/outbound/outbound.vue"]]);
  15621. const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
  15622. __name: "logList",
  15623. setup(__props, { expose: __expose }) {
  15624. __expose();
  15625. const historyList = vue.ref([]);
  15626. const getHistory = () => {
  15627. historyList.value = uni.getStorageSync("outboundHistory");
  15628. };
  15629. onLoad(() => {
  15630. getHistory();
  15631. });
  15632. const __returned__ = { historyList, getHistory };
  15633. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  15634. return __returned__;
  15635. }
  15636. });
  15637. function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
  15638. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  15639. return vue.openBlock(), vue.createElementBlock("view", { class: "history" }, [
  15640. (vue.openBlock(true), vue.createElementBlock(
  15641. vue.Fragment,
  15642. null,
  15643. vue.renderList($setup.historyList, (item, i2) => {
  15644. return vue.openBlock(), vue.createElementBlock("view", {
  15645. class: "item",
  15646. key: i2
  15647. }, [
  15648. vue.createElementVNode(
  15649. "text",
  15650. {
  15651. class: "code",
  15652. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  15653. },
  15654. [
  15655. vue.createTextVNode(
  15656. vue.toDisplayString(item.orderNum) + " ",
  15657. 1
  15658. /* TEXT */
  15659. ),
  15660. item.batch_text ? (vue.openBlock(), vue.createElementBlock(
  15661. "text",
  15662. { key: 0 },
  15663. "批次号: " + vue.toDisplayString(item.batch_text),
  15664. 1
  15665. /* TEXT */
  15666. )) : vue.createCommentVNode("v-if", true),
  15667. vue.createTextVNode(
  15668. " " + vue.toDisplayString(item.type),
  15669. 1
  15670. /* TEXT */
  15671. )
  15672. ],
  15673. 4
  15674. /* STYLE */
  15675. ),
  15676. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  15677. key: 0,
  15678. type: "checkmarkempty",
  15679. class: "status",
  15680. size: "16",
  15681. color: "green"
  15682. })) : (vue.openBlock(), vue.createElementBlock("text", {
  15683. key: 1,
  15684. class: "status fail"
  15685. }, "F")),
  15686. vue.createElementVNode(
  15687. "text",
  15688. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  15689. vue.toDisplayString("\r\n" + item.createTime),
  15690. 1
  15691. /* TEXT */
  15692. )
  15693. ]);
  15694. }),
  15695. 128
  15696. /* KEYED_FRAGMENT */
  15697. )),
  15698. $setup.historyList.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  15699. key: 0,
  15700. class: "is-empty"
  15701. }, "暂无历史")) : vue.createCommentVNode("v-if", true)
  15702. ]);
  15703. }
  15704. const PagesOutboundLogList = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["render", _sfc_render$t], ["__scopeId", "data-v-c14564f1"], ["__file", "E:/demo/hmrabbit/src/pages/outbound/logList.vue"]]);
  15705. const warehouseScan = (data) => {
  15706. return http({
  15707. method: "POST",
  15708. url: "/admin/order.sheetOrder/warehouseScan",
  15709. data
  15710. });
  15711. };
  15712. const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
  15713. __name: "warehouseScan",
  15714. setup(__props, { expose: __expose }) {
  15715. __expose();
  15716. const valiFormRef = vue.ref();
  15717. const loading = vue.ref(false);
  15718. const hidePage = vue.ref(false);
  15719. const focusType = vue.ref(true);
  15720. const warehouseLogHistory = vue.ref([]);
  15721. const messageRef = vue.ref();
  15722. const messageType = vue.ref();
  15723. const messageText = vue.ref();
  15724. let st2;
  15725. const valiFormData = vue.ref({
  15726. order_code: ""
  15727. });
  15728. const rules = vue.reactive({
  15729. order_code: {
  15730. rules: [
  15731. {
  15732. required: true,
  15733. errorMessage: "单据编号不能为空"
  15734. }
  15735. ]
  15736. }
  15737. });
  15738. const scanInput = async () => {
  15739. let status = await checkPermission();
  15740. if (status !== 1) {
  15741. return;
  15742. }
  15743. uni.scanCode({
  15744. success: (res) => {
  15745. valiFormData.value.order_code = res.result;
  15746. onsubmit();
  15747. },
  15748. fail: (err) => {
  15749. }
  15750. });
  15751. };
  15752. const reset = () => {
  15753. loading.value = false;
  15754. valiFormData.value.order_code = "";
  15755. };
  15756. const setfocus = () => {
  15757. if (hidePage.value) {
  15758. return;
  15759. }
  15760. focusType.value = false;
  15761. vue.nextTick(() => {
  15762. focusType.value = true;
  15763. });
  15764. };
  15765. const onsubmit = async () => {
  15766. st2 && clearTimeout(st2);
  15767. const valiRes = await valiFormRef.value.validate();
  15768. if (!valiRes) {
  15769. return;
  15770. }
  15771. loading.value = true;
  15772. const res = await warehouseScan({
  15773. order_code: valiFormData.value.order_code
  15774. });
  15775. formatAppLog("log", "at pages/warehouseScan/warehouseScan.vue:143", "res---", res);
  15776. loading.value = false;
  15777. if (res.code == 1) {
  15778. messageType.value = "success";
  15779. messageText.value = res.msg;
  15780. messageRef.value.open();
  15781. const historyItem = {
  15782. order_code: valiFormData.value.order_code,
  15783. createTime: /* @__PURE__ */ new Date(),
  15784. type: "单据扫描",
  15785. status: true
  15786. };
  15787. warehouseLogHistory.value.unshift(historyItem);
  15788. uni.setStorageSync("warehouseLogHistory", warehouseLogHistory.value);
  15789. getHistory();
  15790. } else {
  15791. messageType.value = "error";
  15792. messageText.value = res.msg;
  15793. messageRef.value.open();
  15794. const historyItem = {
  15795. order_code: valiFormData.value.order_code,
  15796. createTime: /* @__PURE__ */ new Date(),
  15797. type: "单据扫描",
  15798. status: false
  15799. };
  15800. warehouseLogHistory.value.unshift(historyItem);
  15801. uni.setStorageSync("warehouseLogHistory", warehouseLogHistory.value);
  15802. getHistory();
  15803. }
  15804. st2 = setTimeout(() => {
  15805. reset();
  15806. st2 && clearTimeout(st2);
  15807. }, 1e3);
  15808. };
  15809. const getHistory = () => {
  15810. warehouseLogHistory.value = uni.getStorageSync("warehouseLogHistory") || [];
  15811. };
  15812. const keypress = (e2) => {
  15813. if (e2.keyCode === 102 || e2.keyCode === 103 || e2.keyCode === 104)
  15814. ;
  15815. if (e2.keyCode == 66) {
  15816. onsubmit();
  15817. }
  15818. };
  15819. onLoad(() => {
  15820. plus.key.addEventListener("keyup", keypress);
  15821. });
  15822. onUnload(() => {
  15823. plus.key.removeEventListener("keyup", keypress);
  15824. });
  15825. onHide(() => {
  15826. hidePage.value = true;
  15827. plus.key.removeEventListener("keyup", keypress);
  15828. });
  15829. onBackPress(() => {
  15830. plus.key.removeEventListener("keyup", keypress);
  15831. });
  15832. onShow(() => {
  15833. hidePage.value = false;
  15834. getHistory();
  15835. });
  15836. onNavigationBarButtonTap((event) => {
  15837. if (event.index === 0) {
  15838. uni.navigateTo({
  15839. url: "/pages/warehouseScan/logList"
  15840. });
  15841. }
  15842. });
  15843. const __returned__ = { valiFormRef, loading, hidePage, focusType, warehouseLogHistory, messageRef, messageType, messageText, get st() {
  15844. return st2;
  15845. }, set st(v2) {
  15846. st2 = v2;
  15847. }, valiFormData, rules, scanInput, reset, setfocus, onsubmit, getHistory, keypress };
  15848. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  15849. return __returned__;
  15850. }
  15851. });
  15852. function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
  15853. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  15854. const _component_uni_forms_item = resolveEasycom(vue.resolveDynamicComponent("uni-forms-item"), __easycom_0$4);
  15855. const _component_uni_forms = resolveEasycom(vue.resolveDynamicComponent("uni-forms"), __easycom_2$1);
  15856. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  15857. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  15858. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  15859. return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
  15860. vue.createVNode(_component_uni_forms, {
  15861. ref: "valiFormRef",
  15862. "label-align": "right",
  15863. "label-width": 80,
  15864. rules: $setup.rules,
  15865. modelValue: $setup.valiFormData
  15866. }, {
  15867. default: vue.withCtx(() => [
  15868. vue.createVNode(_component_uni_forms_item, {
  15869. label: "单据编号",
  15870. required: "",
  15871. name: "order_code"
  15872. }, {
  15873. default: vue.withCtx(() => [
  15874. vue.createVNode(_component_uni_easyinput, {
  15875. modelValue: $setup.valiFormData.order_code,
  15876. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.valiFormData.order_code = $event),
  15877. placeholder: "请输入单据编号",
  15878. suffixIcon: "scan",
  15879. focus: $setup.focusType,
  15880. onIconClick: $setup.scanInput,
  15881. onBlur: $setup.setfocus,
  15882. onConfirm: $setup.onsubmit
  15883. }, null, 8, ["modelValue", "focus"])
  15884. ]),
  15885. _: 1
  15886. /* STABLE */
  15887. })
  15888. ]),
  15889. _: 1
  15890. /* STABLE */
  15891. }, 8, ["rules", "modelValue"]),
  15892. vue.createElementVNode("view", { class: "button-group" }, [
  15893. vue.createElementVNode("button", {
  15894. type: "default",
  15895. onClick: $setup.reset
  15896. }, "重置"),
  15897. vue.createElementVNode("button", {
  15898. type: "primary",
  15899. onClick: $setup.onsubmit,
  15900. loading: $setup.loading
  15901. }, [
  15902. !$setup.loading ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  15903. key: 0,
  15904. type: "checkmarkempty",
  15905. size: "18",
  15906. color: "white"
  15907. })) : vue.createCommentVNode("v-if", true),
  15908. vue.createTextVNode(" 提交 ")
  15909. ], 8, ["loading"])
  15910. ]),
  15911. $setup.warehouseLogHistory.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  15912. key: 0,
  15913. class: "history"
  15914. }, [
  15915. vue.createElementVNode("text", { class: "title" }, "记录(最近5条)")
  15916. ])) : vue.createCommentVNode("v-if", true),
  15917. vue.createElementVNode("view", { class: "history" }, [
  15918. (vue.openBlock(true), vue.createElementBlock(
  15919. vue.Fragment,
  15920. null,
  15921. vue.renderList($setup.warehouseLogHistory.slice(0, 5), (item, i2) => {
  15922. return vue.openBlock(), vue.createElementBlock("view", {
  15923. class: "item",
  15924. key: i2
  15925. }, [
  15926. vue.createElementVNode(
  15927. "text",
  15928. {
  15929. class: "code",
  15930. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  15931. },
  15932. vue.toDisplayString(item.order_code),
  15933. 5
  15934. /* TEXT, STYLE */
  15935. ),
  15936. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  15937. key: 0,
  15938. type: "checkmarkempty",
  15939. class: "status",
  15940. size: "16",
  15941. color: "green"
  15942. })) : (vue.openBlock(), vue.createElementBlock("text", {
  15943. key: 1,
  15944. class: "status fail"
  15945. }, "F")),
  15946. vue.createElementVNode(
  15947. "text",
  15948. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  15949. vue.toDisplayString("\r\n" + item.createTime),
  15950. 1
  15951. /* TEXT */
  15952. )
  15953. ]);
  15954. }),
  15955. 128
  15956. /* KEYED_FRAGMENT */
  15957. ))
  15958. ]),
  15959. vue.createVNode(
  15960. _component_uni_popup,
  15961. {
  15962. ref: "messageRef",
  15963. type: "message"
  15964. },
  15965. {
  15966. default: vue.withCtx(() => [
  15967. vue.createVNode(_component_uni_popup_message, {
  15968. type: $setup.messageType,
  15969. message: $setup.messageText,
  15970. duration: 2e3
  15971. }, null, 8, ["type", "message"])
  15972. ]),
  15973. _: 1
  15974. /* STABLE */
  15975. },
  15976. 512
  15977. /* NEED_PATCH */
  15978. )
  15979. ]);
  15980. }
  15981. const PagesWarehouseScanWarehouseScan = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["render", _sfc_render$s], ["__scopeId", "data-v-30c3024c"], ["__file", "E:/demo/hmrabbit/src/pages/warehouseScan/warehouseScan.vue"]]);
  15982. const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
  15983. __name: "logList",
  15984. setup(__props, { expose: __expose }) {
  15985. __expose();
  15986. const warehouseLogHistory = vue.ref([]);
  15987. const getHistory = () => {
  15988. warehouseLogHistory.value = uni.getStorageSync("warehouseLogHistory");
  15989. };
  15990. onLoad(() => {
  15991. getHistory();
  15992. });
  15993. const __returned__ = { warehouseLogHistory, getHistory };
  15994. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  15995. return __returned__;
  15996. }
  15997. });
  15998. function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) {
  15999. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  16000. return vue.openBlock(), vue.createElementBlock("view", { class: "history" }, [
  16001. (vue.openBlock(true), vue.createElementBlock(
  16002. vue.Fragment,
  16003. null,
  16004. vue.renderList($setup.warehouseLogHistory, (item, i2) => {
  16005. return vue.openBlock(), vue.createElementBlock("view", {
  16006. class: "item",
  16007. key: i2
  16008. }, [
  16009. vue.createElementVNode(
  16010. "text",
  16011. { class: "type" },
  16012. vue.toDisplayString(item.type),
  16013. 1
  16014. /* TEXT */
  16015. ),
  16016. vue.createElementVNode(
  16017. "text",
  16018. {
  16019. class: "code",
  16020. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  16021. },
  16022. vue.toDisplayString(item.order_code),
  16023. 5
  16024. /* TEXT, STYLE */
  16025. ),
  16026. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  16027. key: 0,
  16028. type: "checkmarkempty",
  16029. class: "status",
  16030. size: "16",
  16031. color: "green"
  16032. })) : (vue.openBlock(), vue.createElementBlock("text", {
  16033. key: 1,
  16034. class: "status fail"
  16035. }, "F")),
  16036. vue.createElementVNode(
  16037. "text",
  16038. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  16039. vue.toDisplayString("\r\n" + item.createTime),
  16040. 1
  16041. /* TEXT */
  16042. )
  16043. ]);
  16044. }),
  16045. 128
  16046. /* KEYED_FRAGMENT */
  16047. )),
  16048. $setup.warehouseLogHistory.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  16049. key: 0,
  16050. class: "is-empty"
  16051. }, "暂无历史")) : vue.createCommentVNode("v-if", true)
  16052. ]);
  16053. }
  16054. const PagesWarehouseScanLogList = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["render", _sfc_render$r], ["__scopeId", "data-v-4f138066"], ["__file", "E:/demo/hmrabbit/src/pages/warehouseScan/logList.vue"]]);
  16055. const modal = requireNativePlugin("modal");
  16056. var AutoReplyPrintUniModule = requireNativePlugin("AutoReplyPrintUniModule");
  16057. var hPrinter = 0;
  16058. var isEnumeratingBT2 = false;
  16059. var isEnumeratingNET = false;
  16060. var selectedPortType = "rbBT2";
  16061. const _sfc_main$r = {
  16062. data() {
  16063. return {
  16064. udsBT2Value: 0,
  16065. udsBT2Range: [],
  16066. udsNETValue: 0,
  16067. udsNETRange: [],
  16068. udsUSBValue: 0,
  16069. udsUSBRange: [],
  16070. udsCOMValue: 0,
  16071. udsCOMRange: [],
  16072. udsCOMBaudrateValue: 9600,
  16073. udsCOMBaudrateRange: [
  16074. {
  16075. text: "9600",
  16076. value: 9600
  16077. },
  16078. {
  16079. text: "19200",
  16080. value: 19200
  16081. },
  16082. {
  16083. text: "38400",
  16084. value: 38400
  16085. },
  16086. {
  16087. text: "57600",
  16088. value: 57600
  16089. },
  16090. {
  16091. text: "115200",
  16092. value: 115200
  16093. },
  16094. {
  16095. text: "230400",
  16096. value: 230400
  16097. },
  16098. {
  16099. text: "256000",
  16100. value: 256e3
  16101. },
  16102. {
  16103. text: "500000",
  16104. value: 5e5
  16105. }
  16106. ],
  16107. udsCOMFlowControlValue: 0,
  16108. udsCOMFlowControlRange: [
  16109. {
  16110. text: "NoFlowControl",
  16111. value: 0
  16112. },
  16113. {
  16114. text: "Hardware",
  16115. value: 2
  16116. }
  16117. ],
  16118. btnOpenPortDisabled: false,
  16119. btnClosePortDisabled: true
  16120. };
  16121. },
  16122. onLoad() {
  16123. uni.setNavigationBarTitle({
  16124. title: "SampleLabel " + AutoReplyPrintUniModule.CP_Library_Version()
  16125. });
  16126. },
  16127. onReady() {
  16128. },
  16129. methods: {
  16130. radioChange: function(evt) {
  16131. selectedPortType = evt.detail.value;
  16132. },
  16133. enumPort() {
  16134. var newComRange = new Array();
  16135. var comNameList = AutoReplyPrintUniModule.CP_Port_EnumCom();
  16136. if (comNameList != null) {
  16137. for (var i2 = 0; i2 < comNameList.length; i2++) {
  16138. var tmp = {
  16139. text: comNameList[i2],
  16140. value: i2
  16141. };
  16142. formatAppLog("log", "at pages/printer/printer.vue:176", tmp);
  16143. newComRange.push(tmp);
  16144. }
  16145. }
  16146. this.udsCOMRange = newComRange;
  16147. var newUsbRange = new Array();
  16148. var usbNameList = AutoReplyPrintUniModule.CP_Port_EnumUsb();
  16149. if (usbNameList != null) {
  16150. for (let i3 = 0; i3 < usbNameList.length; i3++) {
  16151. let tmp2 = {
  16152. text: usbNameList[i3],
  16153. value: i3
  16154. };
  16155. formatAppLog("log", "at pages/printer/printer.vue:190", tmp2);
  16156. newUsbRange.push(tmp2);
  16157. }
  16158. }
  16159. this.udsUSBRange = newUsbRange;
  16160. if (!isEnumeratingBT2) {
  16161. isEnumeratingBT2 = true;
  16162. formatAppLog("log", "at pages/printer/printer.vue:198", "isEnumeratingBT2");
  16163. AutoReplyPrintUniModule.CP_Port_EnumBtDevice(
  16164. 12e3,
  16165. (ret) => {
  16166. var text = ret.device_address + "(" + ret.device_name + ")";
  16167. for (var i3 = 0; i3 < this.udsBT2Range.length; i3++) {
  16168. if (this.udsBT2Range[i3].text == text) {
  16169. return;
  16170. }
  16171. }
  16172. var tmp2 = {
  16173. text,
  16174. value: this.udsBT2Range.length
  16175. };
  16176. formatAppLog("log", "at pages/printer/printer.vue:213", tmp2);
  16177. this.udsBT2Range.push(tmp2);
  16178. },
  16179. (ret) => {
  16180. isEnumeratingBT2 = false;
  16181. formatAppLog("log", "at pages/printer/printer.vue:218", "finishedEnumeratingBT2");
  16182. }
  16183. );
  16184. }
  16185. if (!isEnumeratingNET) {
  16186. isEnumeratingNET = true;
  16187. formatAppLog("log", "at pages/printer/printer.vue:225", "isEnumeratingNET");
  16188. AutoReplyPrintUniModule.CP_Port_EnumNetPrinter(
  16189. 12e3,
  16190. (ret) => {
  16191. var text = ret.discovered_ip + "(" + ret.discovered_name + ")";
  16192. for (var i3 = 0; i3 < this.udsNETRange.length; i3++) {
  16193. if (this.udsNETRange[i3].text == text) {
  16194. return;
  16195. }
  16196. }
  16197. var tmp2 = {
  16198. text,
  16199. value: this.udsNETRange.length
  16200. };
  16201. formatAppLog("log", "at pages/printer/printer.vue:240", tmp2);
  16202. this.udsNETRange.push(tmp2);
  16203. },
  16204. (ret) => {
  16205. isEnumeratingNET = false;
  16206. formatAppLog("log", "at pages/printer/printer.vue:245", "finishedEnumeratingNET");
  16207. }
  16208. );
  16209. }
  16210. },
  16211. openPort() {
  16212. if (hPrinter == 0) {
  16213. if (selectedPortType == "rbBT2") {
  16214. var text = this.udsBT2Range[this.udsBT2Value].text;
  16215. var btAddress = text.substring(0, text.indexOf("("));
  16216. modal.toast({
  16217. message: "Connecting: " + btAddress + " ......",
  16218. duration: 1.5
  16219. });
  16220. formatAppLog("log", "at pages/printer/printer.vue:259", "Connecting: " + btAddress + " ......");
  16221. hPrinter = AutoReplyPrintUniModule.CP_Port_OpenBtSpp(btAddress, 1);
  16222. formatAppLog("log", "at pages/printer/printer.vue:261", "hPrinter: " + hPrinter);
  16223. } else if (selectedPortType == "rbNET") {
  16224. let text2 = this.udsNETRange[this.udsNETValue].text;
  16225. var ipAddress = text2.substring(0, text2.indexOf("("));
  16226. modal.toast({
  16227. message: "Connecting: " + ipAddress + " ......",
  16228. duration: 1.5
  16229. });
  16230. formatAppLog("log", "at pages/printer/printer.vue:269", "Connecting: " + ipAddress + " ......");
  16231. hPrinter = AutoReplyPrintUniModule.CP_Port_OpenTcp(null, ipAddress, 9100, 5e3, 1);
  16232. formatAppLog("log", "at pages/printer/printer.vue:271", "hPrinter: " + hPrinter);
  16233. } else if (selectedPortType == "rbUSB") {
  16234. var usbName = this.udsUSBRange[this.udsUSBValue].text;
  16235. modal.toast({
  16236. message: "Connecting: " + usbName + " ......",
  16237. duration: 1.5
  16238. });
  16239. formatAppLog("log", "at pages/printer/printer.vue:278", "Connecting: " + usbName + " ......");
  16240. hPrinter = AutoReplyPrintUniModule.CP_Port_OpenUsb(usbName, 1);
  16241. formatAppLog("log", "at pages/printer/printer.vue:280", "hPrinter: " + hPrinter);
  16242. } else if (selectedPortType == "rbCOM") {
  16243. var comName = this.udsCOMRange[this.udsCOMValue].text;
  16244. var comBaudrate = this.udsCOMBaudrateValue;
  16245. var comFlowControl = this.udsCOMFlowControlValue;
  16246. modal.toast({
  16247. message: "Connecting: " + comName + "," + comBaudrate + "," + comFlowControl + " ......",
  16248. duration: 1.5
  16249. });
  16250. formatAppLog(
  16251. "log",
  16252. "at pages/printer/printer.vue:290",
  16253. "Connecting: " + comName + "," + comBaudrate + "," + comFlowControl + "......"
  16254. );
  16255. hPrinter = AutoReplyPrintUniModule.CP_Port_OpenCom(
  16256. comName,
  16257. comBaudrate,
  16258. 8,
  16259. 0,
  16260. 0,
  16261. comFlowControl,
  16262. 1
  16263. );
  16264. formatAppLog("log", "at pages/printer/printer.vue:302", "hPrinter: " + hPrinter);
  16265. }
  16266. modal.toast({
  16267. message: hPrinter != 0 ? "Connected" : "Failed",
  16268. duration: 1.5
  16269. });
  16270. }
  16271. this.btnOpenPortDisabled = hPrinter != 0;
  16272. this.btnClosePortDisabled = hPrinter == 0;
  16273. },
  16274. closePort() {
  16275. if (hPrinter != 0) {
  16276. AutoReplyPrintUniModule.CP_Port_Close(hPrinter);
  16277. hPrinter = 0;
  16278. }
  16279. this.btnOpenPortDisabled = hPrinter != 0;
  16280. this.btnClosePortDisabled = hPrinter == 0;
  16281. },
  16282. Test_Label_SampleTicket_58MM_1() {
  16283. AutoReplyPrintUniModule.CP_Pos_SetMultiByteMode(hPrinter);
  16284. AutoReplyPrintUniModule.CP_Pos_SetMultiByteEncoding(hPrinter, 1);
  16285. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 240, 0);
  16286. AutoReplyPrintUniModule.CP_Label_DrawText(hPrinter, 10, 10, 24, 0, "型号:P58A+");
  16287. AutoReplyPrintUniModule.CP_Label_DrawText(hPrinter, 10, 40, 24, 0, "MFG :00");
  16288. AutoReplyPrintUniModule.CP_Label_DrawBarcode(hPrinter, 10, 70, 8, 2, 60, 2, 0, "No.123456");
  16289. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16290. var printResult = AutoReplyPrintUniModule.CP_Pos_QueryPrintResult(hPrinter, 1e4);
  16291. modal.toast({
  16292. message: printResult ? "Print Success" : "Print Failed",
  16293. duration: 1.5
  16294. });
  16295. },
  16296. Test_Label_SampleTicket_80MM_1() {
  16297. AutoReplyPrintUniModule.CP_Pos_SetMultiByteMode(hPrinter);
  16298. AutoReplyPrintUniModule.CP_Pos_SetMultiByteEncoding(hPrinter, 1);
  16299. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 576, 240, 0);
  16300. AutoReplyPrintUniModule.CP_Label_DrawText(hPrinter, 10, 10, 24, 0, "型号:P80A+");
  16301. AutoReplyPrintUniModule.CP_Label_DrawText(hPrinter, 10, 40, 24, 0, "MFG :00");
  16302. AutoReplyPrintUniModule.CP_Label_DrawBarcode(hPrinter, 10, 70, 8, 2, 60, 4, 0, "No.123456");
  16303. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16304. var printResult = AutoReplyPrintUniModule.CP_Pos_QueryPrintResult(hPrinter, 1e4);
  16305. modal.toast({
  16306. message: printResult ? "Print Success" : "Print Failed",
  16307. duration: 1.5
  16308. });
  16309. },
  16310. GetPrinterResolutionInfo() {
  16311. var ret = AutoReplyPrintUniModule.CP_Printer_GetPrinterResolutionInfo(hPrinter);
  16312. modal.toast({
  16313. message: ret,
  16314. duration: 1.5
  16315. });
  16316. },
  16317. GetPrinterFirmwareVersion() {
  16318. var ret = AutoReplyPrintUniModule.CP_Printer_GetPrinterFirmwareVersion(hPrinter);
  16319. modal.toast({
  16320. message: ret,
  16321. duration: 1.5
  16322. });
  16323. },
  16324. GetPrinterStatusInfo() {
  16325. var ret = AutoReplyPrintUniModule.CP_Printer_GetPrinterStatusInfo(hPrinter);
  16326. var status_time = new Date(ret.timestamp_ms);
  16327. var printer_error_status = ret.printer_error_status;
  16328. var status_str = "";
  16329. if (printer_error_status != 0) {
  16330. status_str += "ERROR_OCCURED\n";
  16331. if ((printer_error_status & 1) != 0) {
  16332. status_str += "ERROR_CUTTER\n";
  16333. }
  16334. if ((printer_error_status & 2) != 0) {
  16335. status_str += "ERROR_FLASH\n";
  16336. }
  16337. if ((printer_error_status & 4) != 0) {
  16338. status_str += "ERROR_NOPAPER\n";
  16339. }
  16340. if ((printer_error_status & 8) != 0) {
  16341. status_str += "ERROR_VOLTAGE\n";
  16342. }
  16343. if ((printer_error_status & 16) != 0) {
  16344. status_str += "ERROR_MARKER\n";
  16345. }
  16346. if ((printer_error_status & 32) != 0) {
  16347. status_str += "ERROR_ENGINE\n";
  16348. }
  16349. if ((printer_error_status & 64) != 0) {
  16350. status_str += "ERROR_OVERHEAT\n";
  16351. }
  16352. if ((printer_error_status & 128) != 0) {
  16353. status_str += "ERROR_COVERUP\n";
  16354. }
  16355. if ((printer_error_status & 256) != 0) {
  16356. status_str += "ERROR_MOTOR\n";
  16357. }
  16358. } else {
  16359. status_str += "Status OK\n";
  16360. }
  16361. modal.toast({
  16362. message: "" + status_time + "\n" + status_str,
  16363. duration: 1.5
  16364. });
  16365. },
  16366. CP_Pos_KickOutDrawer() {
  16367. var ret = AutoReplyPrintUniModule.CP_Pos_KickOutDrawer(hPrinter, 0, 100, 100);
  16368. modal.toast({
  16369. message: ret,
  16370. duration: 1.5
  16371. });
  16372. },
  16373. CP_Pos_Beep() {
  16374. var ret = AutoReplyPrintUniModule.CP_Pos_Beep(hPrinter, 3, 500);
  16375. modal.toast({
  16376. message: ret,
  16377. duration: 1.5
  16378. });
  16379. },
  16380. CP_Pos_PrintSelfTestPage() {
  16381. var ret = AutoReplyPrintUniModule.CP_Pos_PrintSelfTestPage(hPrinter);
  16382. modal.toast({
  16383. message: ret,
  16384. duration: 1.5
  16385. });
  16386. },
  16387. CP_Pos_ResetPrinter() {
  16388. var ret = AutoReplyPrintUniModule.CP_Pos_ResetPrinter(hPrinter);
  16389. modal.toast({
  16390. message: ret,
  16391. duration: 1.5
  16392. });
  16393. },
  16394. CP_Pos_SetPrintSpeed_100() {
  16395. var ret = AutoReplyPrintUniModule.CP_Pos_SetPrintSpeed(hPrinter, 100);
  16396. AutoReplyPrintUniModule.CP_Pos_PrintSelfTestPage(hPrinter);
  16397. modal.toast({
  16398. message: ret,
  16399. duration: 1.5
  16400. });
  16401. },
  16402. CP_Pos_SetPrintSpeed_150() {
  16403. var ret = AutoReplyPrintUniModule.CP_Pos_SetPrintSpeed(hPrinter, 150);
  16404. AutoReplyPrintUniModule.CP_Pos_PrintSelfTestPage(hPrinter);
  16405. modal.toast({
  16406. message: ret,
  16407. duration: 1.5
  16408. });
  16409. },
  16410. CP_Pos_SetPrintDensity_7() {
  16411. var ret = AutoReplyPrintUniModule.CP_Pos_SetPrintDensity(hPrinter, 7);
  16412. AutoReplyPrintUniModule.CP_Pos_PrintSelfTestPage(hPrinter);
  16413. modal.toast({
  16414. message: ret,
  16415. duration: 1.5
  16416. });
  16417. },
  16418. CP_Pos_SetPrintDensity_15() {
  16419. var ret = AutoReplyPrintUniModule.CP_Pos_SetPrintDensity(hPrinter, 15);
  16420. AutoReplyPrintUniModule.CP_Pos_PrintSelfTestPage(hPrinter);
  16421. modal.toast({
  16422. message: ret,
  16423. duration: 1.5
  16424. });
  16425. },
  16426. CP_Label_EnableLabelMode() {
  16427. var ret = AutoReplyPrintUniModule.CP_Label_EnableLabelMode(hPrinter);
  16428. modal.toast({
  16429. message: ret,
  16430. duration: 1.5
  16431. });
  16432. },
  16433. CP_Label_DisableLabelMode() {
  16434. var ret = AutoReplyPrintUniModule.CP_Label_DisableLabelMode(hPrinter);
  16435. modal.toast({
  16436. message: ret,
  16437. duration: 1.5
  16438. });
  16439. },
  16440. CP_Label_CalibrateLabel() {
  16441. var ret = AutoReplyPrintUniModule.CP_Label_CalibrateLabel(hPrinter);
  16442. modal.toast({
  16443. message: ret,
  16444. duration: 1.5
  16445. });
  16446. },
  16447. CP_Label_FeedLabel() {
  16448. var ret = AutoReplyPrintUniModule.CP_Label_FeedLabel(hPrinter);
  16449. modal.toast({
  16450. message: ret,
  16451. duration: 1.5
  16452. });
  16453. },
  16454. CP_Label_PageBegin() {
  16455. var ret = AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16456. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16457. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16458. modal.toast({
  16459. message: ret,
  16460. duration: 1.5
  16461. });
  16462. },
  16463. CP_Label_PagePrint() {
  16464. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16465. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16466. var ret = AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16467. modal.toast({
  16468. message: ret,
  16469. duration: 1.5
  16470. });
  16471. },
  16472. CP_Label_DrawText() {
  16473. var str = "$$$123哈哈哈";
  16474. AutoReplyPrintUniModule.CP_Pos_SetMultiByteMode(hPrinter);
  16475. AutoReplyPrintUniModule.CP_Pos_SetMultiByteEncoding(hPrinter, 1);
  16476. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16477. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16478. var ret = AutoReplyPrintUniModule.CP_Label_DrawText(hPrinter, 10, 10, 24, 0, str);
  16479. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16480. modal.toast({
  16481. message: ret,
  16482. duration: 1.5
  16483. });
  16484. },
  16485. CP_Label_DrawTextInUTF8() {
  16486. var str = "$$$123哈哈哈";
  16487. AutoReplyPrintUniModule.CP_Pos_SetMultiByteMode(hPrinter);
  16488. AutoReplyPrintUniModule.CP_Pos_SetMultiByteEncoding(hPrinter, 1);
  16489. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16490. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16491. var ret = AutoReplyPrintUniModule.CP_Label_DrawTextInUTF8(hPrinter, 10, 10, 24, 0, str);
  16492. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16493. modal.toast({
  16494. message: ret,
  16495. duration: 1.5
  16496. });
  16497. },
  16498. CP_Label_DrawTextInGBK() {
  16499. var str = "$$$123哈哈哈";
  16500. AutoReplyPrintUniModule.CP_Pos_SetMultiByteMode(hPrinter);
  16501. AutoReplyPrintUniModule.CP_Pos_SetMultiByteEncoding(hPrinter, 0);
  16502. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16503. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16504. var ret = AutoReplyPrintUniModule.CP_Label_DrawTextInGBK(hPrinter, 10, 10, 24, 0, str);
  16505. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16506. modal.toast({
  16507. message: ret,
  16508. duration: 1.5
  16509. });
  16510. },
  16511. CP_Label_DrawBarcode() {
  16512. var str = "01234567890";
  16513. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16514. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16515. var ret = AutoReplyPrintUniModule.CP_Label_DrawBarcode(hPrinter, 10, 10, 0, 2, 60, 2, 0, str);
  16516. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16517. modal.toast({
  16518. message: ret,
  16519. duration: 1.5
  16520. });
  16521. },
  16522. CP_Label_DrawQRCode() {
  16523. var str = "Hello 你好";
  16524. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16525. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16526. var ret = AutoReplyPrintUniModule.CP_Label_DrawQRCode(hPrinter, 10, 10, 0, 1, 8, 0, str);
  16527. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16528. modal.toast({
  16529. message: ret,
  16530. duration: 1.5
  16531. });
  16532. },
  16533. CP_Label_DrawPDF417Code() {
  16534. var str = "Hello 你好";
  16535. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16536. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16537. var ret = AutoReplyPrintUniModule.CP_Label_DrawPDF417Code(
  16538. hPrinter,
  16539. 10,
  16540. 10,
  16541. 3,
  16542. 3,
  16543. 0,
  16544. 3,
  16545. 0,
  16546. str
  16547. );
  16548. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16549. modal.toast({
  16550. message: ret,
  16551. duration: 1.5
  16552. });
  16553. },
  16554. CP_Label_DrawImageFromFile() {
  16555. uni.chooseImage({
  16556. count: 1,
  16557. //默认9
  16558. sizeType: ["original", "compressed"],
  16559. //可以指定是原图还是压缩图,默认二者都有
  16560. sourceType: ["album"],
  16561. //从相册选择
  16562. success: function(res) {
  16563. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16564. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16565. var ret = AutoReplyPrintUniModule.CP_Label_DrawImageFromFile(
  16566. hPrinter,
  16567. 0,
  16568. 0,
  16569. 384,
  16570. 0,
  16571. res.tempFilePaths[0],
  16572. 2,
  16573. 0
  16574. );
  16575. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16576. modal.toast({
  16577. message: ret,
  16578. duration: 1.5
  16579. });
  16580. }
  16581. });
  16582. },
  16583. CP_Label_DrawImageFromPixels() {
  16584. var image_width = 100;
  16585. var image_height = 100;
  16586. var image_pixels_array = new Uint8Array(image_width * image_height * 4);
  16587. for (let y2 = 0; y2 < image_height; ++y2) {
  16588. for (let x = 0; x < image_width; ++x) {
  16589. var offset = y2 * image_width * 4 + x * 4;
  16590. if (x == y2) {
  16591. image_pixels_array[offset] = 0;
  16592. image_pixels_array[offset + 1] = 0;
  16593. image_pixels_array[offset + 2] = 0;
  16594. image_pixels_array[offset + 3] = 255;
  16595. } else {
  16596. image_pixels_array[offset] = 255;
  16597. image_pixels_array[offset + 1] = 255;
  16598. image_pixels_array[offset + 2] = 255;
  16599. image_pixels_array[offset + 3] = 255;
  16600. }
  16601. }
  16602. }
  16603. var image_pixels_base64 = uni.arrayBufferToBase64(image_pixels_array);
  16604. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16605. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16606. var ret = AutoReplyPrintUniModule.CP_Label_DrawImageFromPixels(
  16607. hPrinter,
  16608. 0,
  16609. 0,
  16610. image_pixels_base64,
  16611. image_width,
  16612. image_height,
  16613. image_width * 4,
  16614. 7,
  16615. 2,
  16616. 0
  16617. );
  16618. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16619. modal.toast({
  16620. message: ret,
  16621. duration: 1.5
  16622. });
  16623. },
  16624. CP_Label_DrawLine() {
  16625. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16626. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16627. var ret = AutoReplyPrintUniModule.CP_Label_DrawLine(hPrinter, 20, 20, 100, 300, 1, 1);
  16628. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16629. modal.toast({
  16630. message: ret,
  16631. duration: 1.5
  16632. });
  16633. },
  16634. CP_Label_DrawRect() {
  16635. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16636. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16637. var ret = AutoReplyPrintUniModule.CP_Label_DrawRect(hPrinter, 20, 20, 200, 10, 1);
  16638. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16639. modal.toast({
  16640. message: ret,
  16641. duration: 1.5
  16642. });
  16643. },
  16644. CP_Label_DrawBox() {
  16645. AutoReplyPrintUniModule.CP_Label_PageBegin(hPrinter, 0, 0, 384, 400, 0);
  16646. AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 0, 0, 383, 399, 1, 1);
  16647. var ret = AutoReplyPrintUniModule.CP_Label_DrawBox(hPrinter, 30, 30, 300, 200, 1, 1);
  16648. AutoReplyPrintUniModule.CP_Label_PagePrint(hPrinter, 1);
  16649. modal.toast({
  16650. message: ret,
  16651. duration: 1.5
  16652. });
  16653. }
  16654. }
  16655. };
  16656. function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
  16657. const _component_uni_data_select = resolveEasycom(vue.resolveDynamicComponent("uni-data-select"), __easycom_0$3);
  16658. return vue.openBlock(), vue.createElementBlock("view", null, [
  16659. vue.createElementVNode(
  16660. "radio-group",
  16661. {
  16662. onChange: _cache[6] || (_cache[6] = (...args) => $options.radioChange && $options.radioChange(...args))
  16663. },
  16664. [
  16665. vue.createElementVNode("label", { class: "uni-list-cell uni-list-cell-pd" }, [
  16666. vue.createElementVNode("label", { class: "radio" }, [
  16667. vue.createElementVNode("radio", {
  16668. value: "rbBT2",
  16669. checked: "true"
  16670. }),
  16671. vue.createTextVNode("BT2.0 ")
  16672. ]),
  16673. vue.createVNode(_component_uni_data_select, {
  16674. modelValue: $data.udsBT2Value,
  16675. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.udsBT2Value = $event),
  16676. localdata: $data.udsBT2Range
  16677. }, null, 8, ["modelValue", "localdata"])
  16678. ]),
  16679. vue.createElementVNode("label", { class: "uni-list-cell uni-list-cell-pd" }, [
  16680. vue.createElementVNode("label", { class: "radio" }, [
  16681. vue.createElementVNode("radio", { value: "rbNET" }),
  16682. vue.createTextVNode("NET ")
  16683. ]),
  16684. vue.createVNode(_component_uni_data_select, {
  16685. modelValue: $data.udsNETValue,
  16686. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.udsNETValue = $event),
  16687. localdata: $data.udsNETRange
  16688. }, null, 8, ["modelValue", "localdata"])
  16689. ]),
  16690. vue.createElementVNode("label", { class: "uni-list-cell uni-list-cell-pd" }, [
  16691. vue.createElementVNode("label", { class: "radio" }, [
  16692. vue.createElementVNode("radio", { value: "rbUSB" }),
  16693. vue.createTextVNode("USB ")
  16694. ]),
  16695. vue.createVNode(_component_uni_data_select, {
  16696. modelValue: $data.udsUSBValue,
  16697. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $data.udsUSBValue = $event),
  16698. localdata: $data.udsUSBRange
  16699. }, null, 8, ["modelValue", "localdata"])
  16700. ]),
  16701. vue.createElementVNode("label", { class: "uni-list-cell uni-list-cell-pd" }, [
  16702. vue.createElementVNode("label", { class: "radio" }, [
  16703. vue.createElementVNode("radio", { value: "rbCOM" }),
  16704. vue.createTextVNode("COM ")
  16705. ]),
  16706. vue.createVNode(_component_uni_data_select, {
  16707. modelValue: $data.udsCOMValue,
  16708. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $data.udsCOMValue = $event),
  16709. localdata: $data.udsCOMRange
  16710. }, null, 8, ["modelValue", "localdata"]),
  16711. vue.createVNode(_component_uni_data_select, {
  16712. modelValue: $data.udsCOMBaudrateValue,
  16713. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $data.udsCOMBaudrateValue = $event),
  16714. localdata: $data.udsCOMBaudrateRange
  16715. }, null, 8, ["modelValue", "localdata"]),
  16716. vue.createVNode(_component_uni_data_select, {
  16717. modelValue: $data.udsCOMFlowControlValue,
  16718. "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $data.udsCOMFlowControlValue = $event),
  16719. localdata: $data.udsCOMFlowControlRange
  16720. }, null, 8, ["modelValue", "localdata"])
  16721. ])
  16722. ],
  16723. 32
  16724. /* NEED_HYDRATION */
  16725. ),
  16726. vue.createElementVNode("view", { class: "uni-flex uni-row" }, [
  16727. vue.createElementVNode("button", {
  16728. type: "default",
  16729. onClick: _cache[7] || (_cache[7] = (...args) => $options.enumPort && $options.enumPort(...args))
  16730. }, "Enum Port"),
  16731. vue.createElementVNode("button", {
  16732. type: "default",
  16733. onClick: _cache[8] || (_cache[8] = (...args) => $options.openPort && $options.openPort(...args)),
  16734. disabled: $data.btnOpenPortDisabled
  16735. }, "Open Port", 8, ["disabled"]),
  16736. vue.createElementVNode("button", {
  16737. type: "default",
  16738. onClick: _cache[9] || (_cache[9] = (...args) => $options.closePort && $options.closePort(...args)),
  16739. disabled: $data.btnClosePortDisabled
  16740. }, "Close Port", 8, ["disabled"])
  16741. ]),
  16742. vue.createElementVNode("view", null, [
  16743. vue.createElementVNode("button", {
  16744. type: "primary",
  16745. onClick: _cache[10] || (_cache[10] = (...args) => $options.Test_Label_SampleTicket_58MM_1 && $options.Test_Label_SampleTicket_58MM_1(...args))
  16746. }, " Test_Label_SampleTicket_58MM_1 "),
  16747. vue.createElementVNode("button", {
  16748. type: "primary",
  16749. onClick: _cache[11] || (_cache[11] = (...args) => $options.Test_Label_SampleTicket_80MM_1 && $options.Test_Label_SampleTicket_80MM_1(...args))
  16750. }, " Test_Label_SampleTicket_80MM_1 "),
  16751. vue.createElementVNode("button", {
  16752. type: "primary",
  16753. onClick: _cache[12] || (_cache[12] = (...args) => $options.GetPrinterResolutionInfo && $options.GetPrinterResolutionInfo(...args))
  16754. }, "GetPrinterResolutionInfo"),
  16755. vue.createElementVNode("button", {
  16756. type: "primary",
  16757. onClick: _cache[13] || (_cache[13] = (...args) => $options.GetPrinterFirmwareVersion && $options.GetPrinterFirmwareVersion(...args))
  16758. }, "GetPrinterFirmwareVersion"),
  16759. vue.createElementVNode("button", {
  16760. type: "primary",
  16761. onClick: _cache[14] || (_cache[14] = (...args) => $options.GetPrinterStatusInfo && $options.GetPrinterStatusInfo(...args))
  16762. }, "GetPrinterStatusInfo"),
  16763. vue.createElementVNode("button", {
  16764. type: "primary",
  16765. onClick: _cache[15] || (_cache[15] = (...args) => $options.CP_Pos_KickOutDrawer && $options.CP_Pos_KickOutDrawer(...args))
  16766. }, "CP_Pos_KickOutDrawer"),
  16767. vue.createElementVNode("button", {
  16768. type: "primary",
  16769. onClick: _cache[16] || (_cache[16] = (...args) => $options.CP_Pos_Beep && $options.CP_Pos_Beep(...args))
  16770. }, "CP_Pos_Beep"),
  16771. vue.createElementVNode("button", {
  16772. type: "primary",
  16773. onClick: _cache[17] || (_cache[17] = (...args) => $options.CP_Pos_PrintSelfTestPage && $options.CP_Pos_PrintSelfTestPage(...args))
  16774. }, "CP_Pos_PrintSelfTestPage"),
  16775. vue.createElementVNode("button", {
  16776. type: "primary",
  16777. onClick: _cache[18] || (_cache[18] = (...args) => $options.CP_Pos_ResetPrinter && $options.CP_Pos_ResetPrinter(...args))
  16778. }, "CP_Pos_ResetPrinter"),
  16779. vue.createElementVNode("button", {
  16780. type: "primary",
  16781. onClick: _cache[19] || (_cache[19] = (...args) => $options.CP_Pos_SetPrintSpeed_100 && $options.CP_Pos_SetPrintSpeed_100(...args))
  16782. }, "CP_Pos_SetPrintSpeed_100"),
  16783. vue.createElementVNode("button", {
  16784. type: "primary",
  16785. onClick: _cache[20] || (_cache[20] = (...args) => $options.CP_Pos_SetPrintSpeed_150 && $options.CP_Pos_SetPrintSpeed_150(...args))
  16786. }, "CP_Pos_SetPrintSpeed_150"),
  16787. vue.createElementVNode("button", {
  16788. type: "primary",
  16789. onClick: _cache[21] || (_cache[21] = (...args) => $options.CP_Pos_SetPrintDensity_7 && $options.CP_Pos_SetPrintDensity_7(...args))
  16790. }, "CP_Pos_SetPrintDensity_7"),
  16791. vue.createElementVNode("button", {
  16792. type: "primary",
  16793. onClick: _cache[22] || (_cache[22] = (...args) => $options.CP_Pos_SetPrintDensity_15 && $options.CP_Pos_SetPrintDensity_15(...args))
  16794. }, "CP_Pos_SetPrintDensity_15"),
  16795. vue.createElementVNode("button", {
  16796. type: "primary",
  16797. onClick: _cache[23] || (_cache[23] = (...args) => $options.CP_Label_EnableLabelMode && $options.CP_Label_EnableLabelMode(...args))
  16798. }, "CP_Label_EnableLabelMode"),
  16799. vue.createElementVNode("button", {
  16800. type: "primary",
  16801. onClick: _cache[24] || (_cache[24] = (...args) => $options.CP_Label_DisableLabelMode && $options.CP_Label_DisableLabelMode(...args))
  16802. }, "CP_Label_DisableLabelMode"),
  16803. vue.createElementVNode("button", {
  16804. type: "primary",
  16805. onClick: _cache[25] || (_cache[25] = (...args) => $options.CP_Label_CalibrateLabel && $options.CP_Label_CalibrateLabel(...args))
  16806. }, "CP_Label_CalibrateLabel"),
  16807. vue.createElementVNode("button", {
  16808. type: "primary",
  16809. onClick: _cache[26] || (_cache[26] = (...args) => $options.CP_Label_FeedLabel && $options.CP_Label_FeedLabel(...args))
  16810. }, "CP_Label_FeedLabel"),
  16811. vue.createElementVNode("button", {
  16812. type: "primary",
  16813. onClick: _cache[27] || (_cache[27] = (...args) => $options.CP_Label_PageBegin && $options.CP_Label_PageBegin(...args))
  16814. }, "CP_Label_PageBegin"),
  16815. vue.createElementVNode("button", {
  16816. type: "primary",
  16817. onClick: _cache[28] || (_cache[28] = (...args) => $options.CP_Label_PagePrint && $options.CP_Label_PagePrint(...args))
  16818. }, "CP_Label_PagePrint"),
  16819. vue.createElementVNode("button", {
  16820. type: "primary",
  16821. onClick: _cache[29] || (_cache[29] = (...args) => $options.CP_Label_DrawText && $options.CP_Label_DrawText(...args))
  16822. }, "CP_Label_DrawText"),
  16823. vue.createElementVNode("button", {
  16824. type: "primary",
  16825. onClick: _cache[30] || (_cache[30] = (...args) => $options.CP_Label_DrawTextInUTF8 && $options.CP_Label_DrawTextInUTF8(...args))
  16826. }, "CP_Label_DrawTextInUTF8"),
  16827. vue.createElementVNode("button", {
  16828. type: "primary",
  16829. onClick: _cache[31] || (_cache[31] = (...args) => $options.CP_Label_DrawTextInGBK && $options.CP_Label_DrawTextInGBK(...args))
  16830. }, "CP_Label_DrawTextInGBK"),
  16831. vue.createElementVNode("button", {
  16832. type: "primary",
  16833. onClick: _cache[32] || (_cache[32] = (...args) => $options.CP_Label_DrawBarcode && $options.CP_Label_DrawBarcode(...args))
  16834. }, "CP_Label_DrawBarcode"),
  16835. vue.createElementVNode("button", {
  16836. type: "primary",
  16837. onClick: _cache[33] || (_cache[33] = (...args) => $options.CP_Label_DrawQRCode && $options.CP_Label_DrawQRCode(...args))
  16838. }, "CP_Label_DrawQRCode"),
  16839. vue.createElementVNode("button", {
  16840. type: "primary",
  16841. onClick: _cache[34] || (_cache[34] = (...args) => $options.CP_Label_DrawPDF417Code && $options.CP_Label_DrawPDF417Code(...args))
  16842. }, "CP_Label_DrawPDF417Code"),
  16843. vue.createElementVNode("button", {
  16844. type: "primary",
  16845. onClick: _cache[35] || (_cache[35] = (...args) => $options.CP_Label_DrawImageFromFile && $options.CP_Label_DrawImageFromFile(...args))
  16846. }, "CP_Label_DrawImageFromFile"),
  16847. vue.createElementVNode("button", {
  16848. type: "primary",
  16849. onClick: _cache[36] || (_cache[36] = (...args) => $options.CP_Label_DrawImageFromPixels && $options.CP_Label_DrawImageFromPixels(...args))
  16850. }, " CP_Label_DrawImageFromPixels "),
  16851. vue.createElementVNode("button", {
  16852. type: "primary",
  16853. onClick: _cache[37] || (_cache[37] = (...args) => $options.CP_Label_DrawLine && $options.CP_Label_DrawLine(...args))
  16854. }, "CP_Label_DrawLine"),
  16855. vue.createElementVNode("button", {
  16856. type: "primary",
  16857. onClick: _cache[38] || (_cache[38] = (...args) => $options.CP_Label_DrawRect && $options.CP_Label_DrawRect(...args))
  16858. }, "CP_Label_DrawRect"),
  16859. vue.createElementVNode("button", {
  16860. type: "primary",
  16861. onClick: _cache[39] || (_cache[39] = (...args) => $options.CP_Label_DrawBox && $options.CP_Label_DrawBox(...args))
  16862. }, "CP_Label_DrawBox")
  16863. ])
  16864. ]);
  16865. }
  16866. const PagesPrinterPrinter = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["render", _sfc_render$q], ["__file", "E:/demo/hmrabbit/src/pages/printer/printer.vue"]]);
  16867. const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
  16868. __name: "logList",
  16869. setup(__props, { expose: __expose }) {
  16870. __expose();
  16871. const printLogHistory = vue.ref([]);
  16872. const getHistory = () => {
  16873. printLogHistory.value = uni.getStorageSync("printLogHistory");
  16874. };
  16875. onLoad(() => {
  16876. getHistory();
  16877. });
  16878. const __returned__ = { printLogHistory, getHistory };
  16879. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  16880. return __returned__;
  16881. }
  16882. });
  16883. function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) {
  16884. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  16885. return vue.openBlock(), vue.createElementBlock("view", { class: "history" }, [
  16886. (vue.openBlock(true), vue.createElementBlock(
  16887. vue.Fragment,
  16888. null,
  16889. vue.renderList($setup.printLogHistory, (item, i2) => {
  16890. return vue.openBlock(), vue.createElementBlock("view", {
  16891. class: "item",
  16892. key: i2
  16893. }, [
  16894. vue.createElementVNode(
  16895. "text",
  16896. {
  16897. class: "code",
  16898. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  16899. },
  16900. vue.toDisplayString(item.type) + " " + vue.toDisplayString(item.order_code),
  16901. 5
  16902. /* TEXT, STYLE */
  16903. ),
  16904. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  16905. key: 0,
  16906. type: "checkmarkempty",
  16907. class: "status",
  16908. size: "16",
  16909. color: "green"
  16910. })) : (vue.openBlock(), vue.createElementBlock("text", {
  16911. key: 1,
  16912. class: "status fail"
  16913. }, "F")),
  16914. vue.createElementVNode(
  16915. "text",
  16916. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  16917. vue.toDisplayString("\r\n" + item.createTime),
  16918. 1
  16919. /* TEXT */
  16920. )
  16921. ]);
  16922. }),
  16923. 128
  16924. /* KEYED_FRAGMENT */
  16925. )),
  16926. $setup.printLogHistory.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  16927. key: 0,
  16928. class: "is-empty"
  16929. }, "暂无历史")) : vue.createCommentVNode("v-if", true)
  16930. ]);
  16931. }
  16932. const PagesPrinterLogList = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$p], ["__scopeId", "data-v-38a3815c"], ["__file", "E:/demo/hmrabbit/src/pages/printer/logList.vue"]]);
  16933. const en$1 = {
  16934. "uni-load-more.contentdown": "Pull up to show more",
  16935. "uni-load-more.contentrefresh": "loading...",
  16936. "uni-load-more.contentnomore": "No more data"
  16937. };
  16938. const zhHans$1 = {
  16939. "uni-load-more.contentdown": "上拉显示更多",
  16940. "uni-load-more.contentrefresh": "正在加载...",
  16941. "uni-load-more.contentnomore": "没有更多数据了"
  16942. };
  16943. const zhHant$1 = {
  16944. "uni-load-more.contentdown": "上拉顯示更多",
  16945. "uni-load-more.contentrefresh": "正在加載...",
  16946. "uni-load-more.contentnomore": "沒有更多數據了"
  16947. };
  16948. const messages$1 = {
  16949. en: en$1,
  16950. "zh-Hans": zhHans$1,
  16951. "zh-Hant": zhHant$1
  16952. };
  16953. let platform;
  16954. setTimeout(() => {
  16955. platform = uni.getSystemInfoSync().platform;
  16956. }, 16);
  16957. const {
  16958. t: t$1
  16959. } = initVueI18n(messages$1);
  16960. const _sfc_main$p = {
  16961. name: "UniLoadMore",
  16962. emits: ["clickLoadMore"],
  16963. props: {
  16964. status: {
  16965. // 上拉的状态:more-loading前;loading-loading中;noMore-没有更多了
  16966. type: String,
  16967. default: "more"
  16968. },
  16969. showIcon: {
  16970. type: Boolean,
  16971. default: true
  16972. },
  16973. iconType: {
  16974. type: String,
  16975. default: "auto"
  16976. },
  16977. iconSize: {
  16978. type: Number,
  16979. default: 24
  16980. },
  16981. color: {
  16982. type: String,
  16983. default: "#777777"
  16984. },
  16985. contentText: {
  16986. type: Object,
  16987. default() {
  16988. return {
  16989. contentdown: "",
  16990. contentrefresh: "",
  16991. contentnomore: ""
  16992. };
  16993. }
  16994. },
  16995. showText: {
  16996. type: Boolean,
  16997. default: true
  16998. }
  16999. },
  17000. data() {
  17001. return {
  17002. webviewHide: false,
  17003. platform,
  17004. imgBase64: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzlBMzU3OTlEOUM0MTFFOUI0NTZDNERBQURBQzI4RkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzlBMzU3OUFEOUM0MTFFOUI0NTZDNERBQURBQzI4RkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDOUEzNTc5N0Q5QzQxMUU5QjQ1NkM0REFBREFDMjhGRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDOUEzNTc5OEQ5QzQxMUU5QjQ1NkM0REFBREFDMjhGRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pt+ALSwAAA6CSURBVHja1FsLkFZV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"
  17005. };
  17006. },
  17007. computed: {
  17008. iconSnowWidth() {
  17009. return (Math.floor(this.iconSize / 24) || 1) * 2;
  17010. },
  17011. contentdownText() {
  17012. return this.contentText.contentdown || t$1("uni-load-more.contentdown");
  17013. },
  17014. contentrefreshText() {
  17015. return this.contentText.contentrefresh || t$1("uni-load-more.contentrefresh");
  17016. },
  17017. contentnomoreText() {
  17018. return this.contentText.contentnomore || t$1("uni-load-more.contentnomore");
  17019. }
  17020. },
  17021. mounted() {
  17022. var pages2 = getCurrentPages();
  17023. var page = pages2[pages2.length - 1];
  17024. var currentWebview = page.$getAppWebview();
  17025. currentWebview.addEventListener("hide", () => {
  17026. this.webviewHide = true;
  17027. });
  17028. currentWebview.addEventListener("show", () => {
  17029. this.webviewHide = false;
  17030. });
  17031. },
  17032. methods: {
  17033. onClick() {
  17034. this.$emit("clickLoadMore", {
  17035. detail: {
  17036. status: this.status
  17037. }
  17038. });
  17039. }
  17040. }
  17041. };
  17042. function _sfc_render$o(_ctx, _cache, $props, $setup, $data, $options) {
  17043. return vue.openBlock(), vue.createElementBlock("view", {
  17044. class: "uni-load-more",
  17045. onClick: _cache[0] || (_cache[0] = (...args) => $options.onClick && $options.onClick(...args))
  17046. }, [
  17047. !$data.webviewHide && ($props.iconType === "circle" || $props.iconType === "auto" && $data.platform === "android") && $props.status === "loading" && $props.showIcon ? (vue.openBlock(), vue.createElementBlock(
  17048. "view",
  17049. {
  17050. key: 0,
  17051. style: vue.normalizeStyle({ width: $props.iconSize + "px", height: $props.iconSize + "px" }),
  17052. class: "uni-load-more__img uni-load-more__img--android-MP"
  17053. },
  17054. [
  17055. vue.createElementVNode(
  17056. "view",
  17057. {
  17058. class: "uni-load-more__img-icon",
  17059. style: vue.normalizeStyle({ borderTopColor: $props.color, borderTopWidth: $props.iconSize / 12 })
  17060. },
  17061. null,
  17062. 4
  17063. /* STYLE */
  17064. ),
  17065. vue.createElementVNode(
  17066. "view",
  17067. {
  17068. class: "uni-load-more__img-icon",
  17069. style: vue.normalizeStyle({ borderTopColor: $props.color, borderTopWidth: $props.iconSize / 12 })
  17070. },
  17071. null,
  17072. 4
  17073. /* STYLE */
  17074. ),
  17075. vue.createElementVNode(
  17076. "view",
  17077. {
  17078. class: "uni-load-more__img-icon",
  17079. style: vue.normalizeStyle({ borderTopColor: $props.color, borderTopWidth: $props.iconSize / 12 })
  17080. },
  17081. null,
  17082. 4
  17083. /* STYLE */
  17084. )
  17085. ],
  17086. 4
  17087. /* STYLE */
  17088. )) : !$data.webviewHide && $props.status === "loading" && $props.showIcon ? (vue.openBlock(), vue.createElementBlock(
  17089. "view",
  17090. {
  17091. key: 1,
  17092. style: vue.normalizeStyle({ width: $props.iconSize + "px", height: $props.iconSize + "px" }),
  17093. class: "uni-load-more__img uni-load-more__img--ios-H5"
  17094. },
  17095. [
  17096. vue.createElementVNode("image", {
  17097. src: $data.imgBase64,
  17098. mode: "widthFix"
  17099. }, null, 8, ["src"])
  17100. ],
  17101. 4
  17102. /* STYLE */
  17103. )) : vue.createCommentVNode("v-if", true),
  17104. $props.showText ? (vue.openBlock(), vue.createElementBlock(
  17105. "text",
  17106. {
  17107. key: 2,
  17108. class: "uni-load-more__text",
  17109. style: vue.normalizeStyle({ color: $props.color })
  17110. },
  17111. vue.toDisplayString($props.status === "more" ? $options.contentdownText : $props.status === "loading" ? $options.contentrefreshText : $options.contentnomoreText),
  17112. 5
  17113. /* TEXT, STYLE */
  17114. )) : vue.createCommentVNode("v-if", true)
  17115. ]);
  17116. }
  17117. const __easycom_0$2 = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render$o], ["__scopeId", "data-v-2c1dd21f"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-load-more/uni-load-more.vue"]]);
  17118. const dataPicker = {
  17119. props: {
  17120. localdata: {
  17121. type: [Array, Object],
  17122. default() {
  17123. return [];
  17124. }
  17125. },
  17126. spaceInfo: {
  17127. type: Object,
  17128. default() {
  17129. return {};
  17130. }
  17131. },
  17132. collection: {
  17133. type: String,
  17134. default: ""
  17135. },
  17136. action: {
  17137. type: String,
  17138. default: ""
  17139. },
  17140. field: {
  17141. type: String,
  17142. default: ""
  17143. },
  17144. orderby: {
  17145. type: String,
  17146. default: ""
  17147. },
  17148. where: {
  17149. type: [String, Object],
  17150. default: ""
  17151. },
  17152. pageData: {
  17153. type: String,
  17154. default: "add"
  17155. },
  17156. pageCurrent: {
  17157. type: Number,
  17158. default: 1
  17159. },
  17160. pageSize: {
  17161. type: Number,
  17162. default: 500
  17163. },
  17164. getcount: {
  17165. type: [Boolean, String],
  17166. default: false
  17167. },
  17168. getone: {
  17169. type: [Boolean, String],
  17170. default: false
  17171. },
  17172. gettree: {
  17173. type: [Boolean, String],
  17174. default: false
  17175. },
  17176. manual: {
  17177. type: Boolean,
  17178. default: false
  17179. },
  17180. value: {
  17181. type: [Array, String, Number],
  17182. default() {
  17183. return [];
  17184. }
  17185. },
  17186. modelValue: {
  17187. type: [Array, String, Number],
  17188. default() {
  17189. return [];
  17190. }
  17191. },
  17192. preload: {
  17193. type: Boolean,
  17194. default: false
  17195. },
  17196. stepSearh: {
  17197. type: Boolean,
  17198. default: true
  17199. },
  17200. selfField: {
  17201. type: String,
  17202. default: ""
  17203. },
  17204. parentField: {
  17205. type: String,
  17206. default: ""
  17207. },
  17208. multiple: {
  17209. type: Boolean,
  17210. default: false
  17211. },
  17212. map: {
  17213. type: Object,
  17214. default() {
  17215. return {
  17216. text: "text",
  17217. value: "value"
  17218. };
  17219. }
  17220. }
  17221. },
  17222. data() {
  17223. return {
  17224. loading: false,
  17225. errorMessage: "",
  17226. loadMore: {
  17227. contentdown: "",
  17228. contentrefresh: "",
  17229. contentnomore: ""
  17230. },
  17231. dataList: [],
  17232. selected: [],
  17233. selectedIndex: 0,
  17234. page: {
  17235. current: this.pageCurrent,
  17236. size: this.pageSize,
  17237. count: 0
  17238. }
  17239. };
  17240. },
  17241. computed: {
  17242. isLocalData() {
  17243. return !this.collection.length;
  17244. },
  17245. isCloudData() {
  17246. return this.collection.length > 0;
  17247. },
  17248. isCloudDataList() {
  17249. return this.isCloudData && (!this.parentField && !this.selfField);
  17250. },
  17251. isCloudDataTree() {
  17252. return this.isCloudData && this.parentField && this.selfField;
  17253. },
  17254. dataValue() {
  17255. let isModelValue = Array.isArray(this.modelValue) ? this.modelValue.length > 0 : this.modelValue !== null || this.modelValue !== void 0;
  17256. return isModelValue ? this.modelValue : this.value;
  17257. },
  17258. hasValue() {
  17259. if (typeof this.dataValue === "number") {
  17260. return true;
  17261. }
  17262. return this.dataValue != null && this.dataValue.length > 0;
  17263. }
  17264. },
  17265. created() {
  17266. this.$watch(() => {
  17267. var al = [];
  17268. [
  17269. "pageCurrent",
  17270. "pageSize",
  17271. "spaceInfo",
  17272. "value",
  17273. "modelValue",
  17274. "localdata",
  17275. "collection",
  17276. "action",
  17277. "field",
  17278. "orderby",
  17279. "where",
  17280. "getont",
  17281. "getcount",
  17282. "gettree"
  17283. ].forEach((key) => {
  17284. al.push(this[key]);
  17285. });
  17286. return al;
  17287. }, (newValue, oldValue) => {
  17288. for (let i2 = 2; i2 < newValue.length; i2++) {
  17289. if (newValue[i2] != oldValue[i2]) {
  17290. break;
  17291. }
  17292. }
  17293. if (newValue[0] != oldValue[0]) {
  17294. this.page.current = this.pageCurrent;
  17295. }
  17296. this.page.size = this.pageSize;
  17297. this.onPropsChange();
  17298. });
  17299. this._treeData = [];
  17300. },
  17301. methods: {
  17302. onPropsChange() {
  17303. this._treeData = [];
  17304. },
  17305. // 填充 pickview 数据
  17306. async loadData() {
  17307. if (this.isLocalData) {
  17308. this.loadLocalData();
  17309. } else if (this.isCloudDataList) {
  17310. this.loadCloudDataList();
  17311. } else if (this.isCloudDataTree) {
  17312. this.loadCloudDataTree();
  17313. }
  17314. },
  17315. // 加载本地数据
  17316. async loadLocalData() {
  17317. this._treeData = [];
  17318. this._extractTree(this.localdata, this._treeData);
  17319. let inputValue = this.dataValue;
  17320. if (inputValue === void 0) {
  17321. return;
  17322. }
  17323. if (Array.isArray(inputValue)) {
  17324. inputValue = inputValue[inputValue.length - 1];
  17325. if (typeof inputValue === "object" && inputValue[this.map.value]) {
  17326. inputValue = inputValue[this.map.value];
  17327. }
  17328. }
  17329. this.selected = this._findNodePath(inputValue, this.localdata);
  17330. },
  17331. // 加载 Cloud 数据 (单列)
  17332. async loadCloudDataList() {
  17333. if (this.loading) {
  17334. return;
  17335. }
  17336. this.loading = true;
  17337. try {
  17338. let response = await this.getCommand();
  17339. let responseData = response.result.data;
  17340. this._treeData = responseData;
  17341. this._updateBindData();
  17342. this._updateSelected();
  17343. this.onDataChange();
  17344. } catch (e2) {
  17345. this.errorMessage = e2;
  17346. } finally {
  17347. this.loading = false;
  17348. }
  17349. },
  17350. // 加载 Cloud 数据 (树形)
  17351. async loadCloudDataTree() {
  17352. if (this.loading) {
  17353. return;
  17354. }
  17355. this.loading = true;
  17356. try {
  17357. let commandOptions = {
  17358. field: this._cloudDataPostField(),
  17359. where: this._cloudDataTreeWhere()
  17360. };
  17361. if (this.gettree) {
  17362. commandOptions.startwith = `${this.selfField}=='${this.dataValue}'`;
  17363. }
  17364. let response = await this.getCommand(commandOptions);
  17365. let responseData = response.result.data;
  17366. this._treeData = responseData;
  17367. this._updateBindData();
  17368. this._updateSelected();
  17369. this.onDataChange();
  17370. } catch (e2) {
  17371. this.errorMessage = e2;
  17372. } finally {
  17373. this.loading = false;
  17374. }
  17375. },
  17376. // 加载 Cloud 数据 (节点)
  17377. async loadCloudDataNode(callback) {
  17378. if (this.loading) {
  17379. return;
  17380. }
  17381. this.loading = true;
  17382. try {
  17383. let commandOptions = {
  17384. field: this._cloudDataPostField(),
  17385. where: this._cloudDataNodeWhere()
  17386. };
  17387. let response = await this.getCommand(commandOptions);
  17388. let responseData = response.result.data;
  17389. callback(responseData);
  17390. } catch (e2) {
  17391. this.errorMessage = e2;
  17392. } finally {
  17393. this.loading = false;
  17394. }
  17395. },
  17396. // 回显 Cloud 数据
  17397. getCloudDataValue() {
  17398. if (this.isCloudDataList) {
  17399. return this.getCloudDataListValue();
  17400. }
  17401. if (this.isCloudDataTree) {
  17402. return this.getCloudDataTreeValue();
  17403. }
  17404. },
  17405. // 回显 Cloud 数据 (单列)
  17406. getCloudDataListValue() {
  17407. let where = [];
  17408. let whereField = this._getForeignKeyByField();
  17409. if (whereField) {
  17410. where.push(`${whereField} == '${this.dataValue}'`);
  17411. }
  17412. where = where.join(" || ");
  17413. if (this.where) {
  17414. where = `(${this.where}) && (${where})`;
  17415. }
  17416. return this.getCommand({
  17417. field: this._cloudDataPostField(),
  17418. where
  17419. }).then((res) => {
  17420. this.selected = res.result.data;
  17421. return res.result.data;
  17422. });
  17423. },
  17424. // 回显 Cloud 数据 (树形)
  17425. getCloudDataTreeValue() {
  17426. return this.getCommand({
  17427. field: this._cloudDataPostField(),
  17428. getTreePath: {
  17429. startWith: `${this.selfField}=='${this.dataValue}'`
  17430. }
  17431. }).then((res) => {
  17432. let treePath = [];
  17433. this._extractTreePath(res.result.data, treePath);
  17434. this.selected = treePath;
  17435. return treePath;
  17436. });
  17437. },
  17438. getCommand(options = {}) {
  17439. let db = Vs.database(this.spaceInfo);
  17440. const action = options.action || this.action;
  17441. if (action) {
  17442. db = db.action(action);
  17443. }
  17444. const collection = options.collection || this.collection;
  17445. db = db.collection(collection);
  17446. const where = options.where || this.where;
  17447. if (!(!where || !Object.keys(where).length)) {
  17448. db = db.where(where);
  17449. }
  17450. const field = options.field || this.field;
  17451. if (field) {
  17452. db = db.field(field);
  17453. }
  17454. const orderby = options.orderby || this.orderby;
  17455. if (orderby) {
  17456. db = db.orderBy(orderby);
  17457. }
  17458. const current = options.pageCurrent !== void 0 ? options.pageCurrent : this.page.current;
  17459. const size = options.pageSize !== void 0 ? options.pageSize : this.page.size;
  17460. const getCount = options.getcount !== void 0 ? options.getcount : this.getcount;
  17461. const getTree = options.gettree !== void 0 ? options.gettree : this.gettree;
  17462. const getOptions = {
  17463. getCount,
  17464. getTree
  17465. };
  17466. if (options.getTreePath) {
  17467. getOptions.getTreePath = options.getTreePath;
  17468. }
  17469. db = db.skip(size * (current - 1)).limit(size).get(getOptions);
  17470. return db;
  17471. },
  17472. _cloudDataPostField() {
  17473. let fields = [this.field];
  17474. if (this.parentField) {
  17475. fields.push(`${this.parentField} as parent_value`);
  17476. }
  17477. return fields.join(",");
  17478. },
  17479. _cloudDataTreeWhere() {
  17480. let result = [];
  17481. let selected = this.selected;
  17482. let parentField = this.parentField;
  17483. if (parentField) {
  17484. result.push(`${parentField} == null || ${parentField} == ""`);
  17485. }
  17486. if (selected.length) {
  17487. for (var i2 = 0; i2 < selected.length - 1; i2++) {
  17488. result.push(`${parentField} == '${selected[i2].value}'`);
  17489. }
  17490. }
  17491. let where = [];
  17492. if (this.where) {
  17493. where.push(`(${this.where})`);
  17494. }
  17495. if (result.length) {
  17496. where.push(`(${result.join(" || ")})`);
  17497. }
  17498. return where.join(" && ");
  17499. },
  17500. _cloudDataNodeWhere() {
  17501. let where = [];
  17502. let selected = this.selected;
  17503. if (selected.length) {
  17504. where.push(`${this.parentField} == '${selected[selected.length - 1].value}'`);
  17505. }
  17506. where = where.join(" || ");
  17507. if (this.where) {
  17508. return `(${this.where}) && (${where})`;
  17509. }
  17510. return where;
  17511. },
  17512. _getWhereByForeignKey() {
  17513. let result = [];
  17514. let whereField = this._getForeignKeyByField();
  17515. if (whereField) {
  17516. result.push(`${whereField} == '${this.dataValue}'`);
  17517. }
  17518. if (this.where) {
  17519. return `(${this.where}) && (${result.join(" || ")})`;
  17520. }
  17521. return result.join(" || ");
  17522. },
  17523. _getForeignKeyByField() {
  17524. let fields = this.field.split(",");
  17525. let whereField = null;
  17526. for (let i2 = 0; i2 < fields.length; i2++) {
  17527. const items = fields[i2].split("as");
  17528. if (items.length < 2) {
  17529. continue;
  17530. }
  17531. if (items[1].trim() === "value") {
  17532. whereField = items[0].trim();
  17533. break;
  17534. }
  17535. }
  17536. return whereField;
  17537. },
  17538. _updateBindData(node) {
  17539. const {
  17540. dataList,
  17541. hasNodes
  17542. } = this._filterData(this._treeData, this.selected);
  17543. let isleaf = this._stepSearh === false && !hasNodes;
  17544. if (node) {
  17545. node.isleaf = isleaf;
  17546. }
  17547. this.dataList = dataList;
  17548. this.selectedIndex = dataList.length - 1;
  17549. if (!isleaf && this.selected.length < dataList.length) {
  17550. this.selected.push({
  17551. value: null,
  17552. text: "请选择"
  17553. });
  17554. }
  17555. return {
  17556. isleaf,
  17557. hasNodes
  17558. };
  17559. },
  17560. _updateSelected() {
  17561. let dl = this.dataList;
  17562. let sl = this.selected;
  17563. let textField = this.map.text;
  17564. let valueField = this.map.value;
  17565. for (let i2 = 0; i2 < sl.length; i2++) {
  17566. let value = sl[i2].value;
  17567. let dl2 = dl[i2];
  17568. for (let j2 = 0; j2 < dl2.length; j2++) {
  17569. let item2 = dl2[j2];
  17570. if (item2[valueField] === value) {
  17571. sl[i2].text = item2[textField];
  17572. break;
  17573. }
  17574. }
  17575. }
  17576. },
  17577. _filterData(data, paths) {
  17578. let dataList = [];
  17579. let hasNodes = true;
  17580. dataList.push(data.filter((item) => {
  17581. return item.parent_value === null || item.parent_value === void 0 || item.parent_value === "";
  17582. }));
  17583. for (let i2 = 0; i2 < paths.length; i2++) {
  17584. let value = paths[i2].value;
  17585. let nodes = data.filter((item) => {
  17586. return item.parent_value === value;
  17587. });
  17588. if (nodes.length) {
  17589. dataList.push(nodes);
  17590. } else {
  17591. hasNodes = false;
  17592. }
  17593. }
  17594. return {
  17595. dataList,
  17596. hasNodes
  17597. };
  17598. },
  17599. _extractTree(nodes, result, parent_value) {
  17600. let valueField = this.map.value;
  17601. for (let i2 = 0; i2 < nodes.length; i2++) {
  17602. let node = nodes[i2];
  17603. let child = {};
  17604. for (let key in node) {
  17605. if (key !== "children") {
  17606. child[key] = node[key];
  17607. }
  17608. }
  17609. if (parent_value !== null && parent_value !== void 0 && parent_value !== "") {
  17610. child.parent_value = parent_value;
  17611. }
  17612. result.push(child);
  17613. let children = node.children;
  17614. if (children) {
  17615. this._extractTree(children, result, node[valueField]);
  17616. }
  17617. }
  17618. },
  17619. _extractTreePath(nodes, result) {
  17620. for (let i2 = 0; i2 < nodes.length; i2++) {
  17621. let node = nodes[i2];
  17622. let child = {};
  17623. for (let key in node) {
  17624. if (key !== "children") {
  17625. child[key] = node[key];
  17626. }
  17627. }
  17628. result.push(child);
  17629. let children = node.children;
  17630. if (children) {
  17631. this._extractTreePath(children, result);
  17632. }
  17633. }
  17634. },
  17635. _findNodePath(key, nodes, path = []) {
  17636. let textField = this.map.text;
  17637. let valueField = this.map.value;
  17638. for (let i2 = 0; i2 < nodes.length; i2++) {
  17639. let node = nodes[i2];
  17640. let children = node.children;
  17641. let text = node[textField];
  17642. let value = node[valueField];
  17643. path.push({
  17644. value,
  17645. text
  17646. });
  17647. if (value === key) {
  17648. return path;
  17649. }
  17650. if (children) {
  17651. const p2 = this._findNodePath(key, children, path);
  17652. if (p2.length) {
  17653. return p2;
  17654. }
  17655. }
  17656. path.pop();
  17657. }
  17658. return [];
  17659. }
  17660. }
  17661. };
  17662. const _sfc_main$o = {
  17663. name: "UniDataPickerView",
  17664. emits: ["nodeclick", "change", "datachange", "update:modelValue"],
  17665. mixins: [dataPicker],
  17666. props: {
  17667. managedMode: {
  17668. type: Boolean,
  17669. default: false
  17670. },
  17671. ellipsis: {
  17672. type: Boolean,
  17673. default: true
  17674. }
  17675. },
  17676. created() {
  17677. if (!this.managedMode) {
  17678. this.$nextTick(() => {
  17679. this.loadData();
  17680. });
  17681. }
  17682. },
  17683. methods: {
  17684. onPropsChange() {
  17685. this._treeData = [];
  17686. this.selectedIndex = 0;
  17687. this.$nextTick(() => {
  17688. this.loadData();
  17689. });
  17690. },
  17691. handleSelect(index) {
  17692. this.selectedIndex = index;
  17693. },
  17694. handleNodeClick(item, i2, j2) {
  17695. if (item.disable) {
  17696. return;
  17697. }
  17698. const node = this.dataList[i2][j2];
  17699. const text = node[this.map.text];
  17700. const value = node[this.map.value];
  17701. if (i2 < this.selected.length - 1) {
  17702. this.selected.splice(i2, this.selected.length - i2);
  17703. this.selected.push({
  17704. text,
  17705. value
  17706. });
  17707. } else if (i2 === this.selected.length - 1) {
  17708. this.selected.splice(i2, 1, {
  17709. text,
  17710. value
  17711. });
  17712. }
  17713. if (node.isleaf) {
  17714. this.onSelectedChange(node, node.isleaf);
  17715. return;
  17716. }
  17717. const {
  17718. isleaf,
  17719. hasNodes
  17720. } = this._updateBindData();
  17721. if (this.isLocalData) {
  17722. this.onSelectedChange(node, !hasNodes || isleaf);
  17723. } else if (this.isCloudDataList) {
  17724. this.onSelectedChange(node, true);
  17725. } else if (this.isCloudDataTree) {
  17726. if (isleaf) {
  17727. this.onSelectedChange(node, node.isleaf);
  17728. } else if (!hasNodes) {
  17729. this.loadCloudDataNode((data) => {
  17730. if (!data.length) {
  17731. node.isleaf = true;
  17732. } else {
  17733. this._treeData.push(...data);
  17734. this._updateBindData(node);
  17735. }
  17736. this.onSelectedChange(node, node.isleaf);
  17737. });
  17738. }
  17739. }
  17740. },
  17741. updateData(data) {
  17742. this._treeData = data.treeData;
  17743. this.selected = data.selected;
  17744. if (!this._treeData.length) {
  17745. this.loadData();
  17746. } else {
  17747. this._updateBindData();
  17748. }
  17749. },
  17750. onDataChange() {
  17751. this.$emit("datachange");
  17752. },
  17753. onSelectedChange(node, isleaf) {
  17754. if (isleaf) {
  17755. this._dispatchEvent();
  17756. }
  17757. if (node) {
  17758. this.$emit("nodeclick", node);
  17759. }
  17760. },
  17761. _dispatchEvent() {
  17762. this.$emit("change", this.selected.slice(0));
  17763. }
  17764. }
  17765. };
  17766. function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) {
  17767. const _component_uni_load_more = resolveEasycom(vue.resolveDynamicComponent("uni-load-more"), __easycom_0$2);
  17768. return vue.openBlock(), vue.createElementBlock("view", { class: "uni-data-pickerview" }, [
  17769. !_ctx.isCloudDataList ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  17770. key: 0,
  17771. class: "selected-area",
  17772. "scroll-x": "true"
  17773. }, [
  17774. vue.createElementVNode("view", { class: "selected-list" }, [
  17775. (vue.openBlock(true), vue.createElementBlock(
  17776. vue.Fragment,
  17777. null,
  17778. vue.renderList(_ctx.selected, (item, index) => {
  17779. return vue.openBlock(), vue.createElementBlock(
  17780. vue.Fragment,
  17781. null,
  17782. [
  17783. item.text ? (vue.openBlock(), vue.createElementBlock("view", {
  17784. key: 0,
  17785. class: vue.normalizeClass(["selected-item", { "selected-item-active": index == _ctx.selectedIndex }]),
  17786. onClick: ($event) => $options.handleSelect(index)
  17787. }, [
  17788. vue.createElementVNode(
  17789. "text",
  17790. null,
  17791. vue.toDisplayString(item.text),
  17792. 1
  17793. /* TEXT */
  17794. )
  17795. ], 10, ["onClick"])) : vue.createCommentVNode("v-if", true)
  17796. ],
  17797. 64
  17798. /* STABLE_FRAGMENT */
  17799. );
  17800. }),
  17801. 256
  17802. /* UNKEYED_FRAGMENT */
  17803. ))
  17804. ])
  17805. ])) : vue.createCommentVNode("v-if", true),
  17806. vue.createElementVNode("view", { class: "tab-c" }, [
  17807. (vue.openBlock(true), vue.createElementBlock(
  17808. vue.Fragment,
  17809. null,
  17810. vue.renderList(_ctx.dataList, (child, i2) => {
  17811. return vue.openBlock(), vue.createElementBlock(
  17812. vue.Fragment,
  17813. null,
  17814. [
  17815. i2 == _ctx.selectedIndex ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  17816. class: "list",
  17817. key: i2,
  17818. "scroll-y": true
  17819. }, [
  17820. (vue.openBlock(true), vue.createElementBlock(
  17821. vue.Fragment,
  17822. null,
  17823. vue.renderList(child, (item, j2) => {
  17824. return vue.openBlock(), vue.createElementBlock("view", {
  17825. class: vue.normalizeClass(["item", { "is-disabled": !!item.disable }]),
  17826. onClick: ($event) => $options.handleNodeClick(item, i2, j2)
  17827. }, [
  17828. vue.createElementVNode(
  17829. "text",
  17830. { class: "item-text" },
  17831. vue.toDisplayString(item[_ctx.map.text]),
  17832. 1
  17833. /* TEXT */
  17834. ),
  17835. _ctx.selected.length > i2 && item[_ctx.map.value] == _ctx.selected[i2].value ? (vue.openBlock(), vue.createElementBlock("view", {
  17836. key: 0,
  17837. class: "check"
  17838. })) : vue.createCommentVNode("v-if", true)
  17839. ], 10, ["onClick"]);
  17840. }),
  17841. 256
  17842. /* UNKEYED_FRAGMENT */
  17843. ))
  17844. ])) : vue.createCommentVNode("v-if", true)
  17845. ],
  17846. 64
  17847. /* STABLE_FRAGMENT */
  17848. );
  17849. }),
  17850. 256
  17851. /* UNKEYED_FRAGMENT */
  17852. )),
  17853. _ctx.loading ? (vue.openBlock(), vue.createElementBlock("view", {
  17854. key: 0,
  17855. class: "loading-cover"
  17856. }, [
  17857. vue.createVNode(_component_uni_load_more, {
  17858. class: "load-more",
  17859. contentText: _ctx.loadMore,
  17860. status: "loading"
  17861. }, null, 8, ["contentText"])
  17862. ])) : vue.createCommentVNode("v-if", true),
  17863. _ctx.errorMessage ? (vue.openBlock(), vue.createElementBlock("view", {
  17864. key: 1,
  17865. class: "error-message"
  17866. }, [
  17867. vue.createElementVNode(
  17868. "text",
  17869. { class: "error-text" },
  17870. vue.toDisplayString(_ctx.errorMessage),
  17871. 1
  17872. /* TEXT */
  17873. )
  17874. ])) : vue.createCommentVNode("v-if", true)
  17875. ])
  17876. ]);
  17877. }
  17878. const DataPickerView = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render$n], ["__scopeId", "data-v-9bf6d4b8"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-data-pickerview/uni-data-pickerview.vue"]]);
  17879. const _sfc_main$n = {
  17880. name: "UniDataPicker",
  17881. emits: ["popupopened", "popupclosed", "nodeclick", "input", "change", "update:modelValue"],
  17882. mixins: [dataPicker],
  17883. components: {
  17884. DataPickerView
  17885. },
  17886. props: {
  17887. options: {
  17888. type: [Object, Array],
  17889. default() {
  17890. return {};
  17891. }
  17892. },
  17893. popupTitle: {
  17894. type: String,
  17895. default: "请选择"
  17896. },
  17897. placeholder: {
  17898. type: String,
  17899. default: "请选择"
  17900. },
  17901. heightMobile: {
  17902. type: String,
  17903. default: ""
  17904. },
  17905. readonly: {
  17906. type: Boolean,
  17907. default: false
  17908. },
  17909. clearIcon: {
  17910. type: Boolean,
  17911. default: true
  17912. },
  17913. border: {
  17914. type: Boolean,
  17915. default: true
  17916. },
  17917. split: {
  17918. type: String,
  17919. default: "/"
  17920. },
  17921. ellipsis: {
  17922. type: Boolean,
  17923. default: true
  17924. }
  17925. },
  17926. data() {
  17927. return {
  17928. isOpened: false,
  17929. inputSelected: []
  17930. };
  17931. },
  17932. created() {
  17933. this.$nextTick(() => {
  17934. this.load();
  17935. });
  17936. },
  17937. methods: {
  17938. clear() {
  17939. this.modelValue = null;
  17940. this._dispatchEvent([]);
  17941. },
  17942. onPropsChange() {
  17943. this._treeData = [];
  17944. this.selectedIndex = 0;
  17945. this.load();
  17946. },
  17947. load() {
  17948. if (this.readonly) {
  17949. this._processReadonly(this.localdata, this.dataValue);
  17950. return;
  17951. }
  17952. if (!this.hasValue) {
  17953. return;
  17954. }
  17955. if (this.isLocalData) {
  17956. this.loadData();
  17957. this.inputSelected = this.selected.slice(0);
  17958. } else if (this.isCloudDataList || this.isCloudDataTree) {
  17959. this.loading = true;
  17960. this.getCloudDataValue().then((res) => {
  17961. this.loading = false;
  17962. this.inputSelected = res;
  17963. }).catch((err) => {
  17964. this.loading = false;
  17965. this.errorMessage = err;
  17966. });
  17967. }
  17968. },
  17969. show() {
  17970. this.isOpened = true;
  17971. setTimeout(() => {
  17972. this.$refs.pickerView.updateData({
  17973. treeData: this._treeData,
  17974. selected: this.selected,
  17975. selectedIndex: this.selectedIndex
  17976. });
  17977. }, 200);
  17978. this.$emit("popupopened");
  17979. },
  17980. hide() {
  17981. this.isOpened = false;
  17982. this.$emit("popupclosed");
  17983. },
  17984. handleInput() {
  17985. if (this.readonly) {
  17986. return;
  17987. }
  17988. this.show();
  17989. },
  17990. handleClose(e2) {
  17991. this.hide();
  17992. },
  17993. onnodeclick(e2) {
  17994. this.$emit("nodeclick", e2);
  17995. },
  17996. ondatachange(e2) {
  17997. this._treeData = this.$refs.pickerView._treeData;
  17998. },
  17999. onchange(e2) {
  18000. this.hide();
  18001. this.$nextTick(() => {
  18002. this.inputSelected = e2;
  18003. });
  18004. this._dispatchEvent(e2);
  18005. },
  18006. _processReadonly(dataList, value) {
  18007. var isTree = dataList.findIndex((item2) => {
  18008. return item2.children;
  18009. });
  18010. if (isTree > -1) {
  18011. let inputValue;
  18012. if (Array.isArray(value)) {
  18013. inputValue = value[value.length - 1];
  18014. if (typeof inputValue === "object" && inputValue.value) {
  18015. inputValue = inputValue.value;
  18016. }
  18017. } else {
  18018. inputValue = value;
  18019. }
  18020. this.inputSelected = this._findNodePath(inputValue, this.localdata);
  18021. return;
  18022. }
  18023. if (!this.hasValue) {
  18024. this.inputSelected = [];
  18025. return;
  18026. }
  18027. let result = [];
  18028. for (let i2 = 0; i2 < value.length; i2++) {
  18029. var val = value[i2];
  18030. var item = dataList.find((v2) => {
  18031. return v2.value == val;
  18032. });
  18033. if (item) {
  18034. result.push(item);
  18035. }
  18036. }
  18037. if (result.length) {
  18038. this.inputSelected = result;
  18039. }
  18040. },
  18041. _filterForArray(data, valueArray) {
  18042. var result = [];
  18043. for (let i2 = 0; i2 < valueArray.length; i2++) {
  18044. var value = valueArray[i2];
  18045. var found = data.find((item) => {
  18046. return item.value == value;
  18047. });
  18048. if (found) {
  18049. result.push(found);
  18050. }
  18051. }
  18052. return result;
  18053. },
  18054. _dispatchEvent(selected) {
  18055. let item = {};
  18056. if (selected.length) {
  18057. var value = new Array(selected.length);
  18058. for (var i2 = 0; i2 < selected.length; i2++) {
  18059. value[i2] = selected[i2].value;
  18060. }
  18061. item = selected[selected.length - 1];
  18062. } else {
  18063. item.value = "";
  18064. }
  18065. if (this.formItem) {
  18066. this.formItem.setValue(item.value);
  18067. }
  18068. this.$emit("input", item.value);
  18069. this.$emit("update:modelValue", item.value);
  18070. this.$emit("change", {
  18071. detail: {
  18072. value: selected
  18073. }
  18074. });
  18075. }
  18076. }
  18077. };
  18078. function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) {
  18079. const _component_uni_load_more = resolveEasycom(vue.resolveDynamicComponent("uni-load-more"), __easycom_0$2);
  18080. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  18081. const _component_data_picker_view = vue.resolveComponent("data-picker-view");
  18082. return vue.openBlock(), vue.createElementBlock("view", { class: "uni-data-tree" }, [
  18083. vue.createElementVNode("view", {
  18084. class: "uni-data-tree-input",
  18085. onClick: _cache[1] || (_cache[1] = (...args) => $options.handleInput && $options.handleInput(...args))
  18086. }, [
  18087. vue.renderSlot(_ctx.$slots, "default", {
  18088. options: $props.options,
  18089. data: $data.inputSelected,
  18090. error: _ctx.errorMessage
  18091. }, () => [
  18092. vue.createElementVNode(
  18093. "view",
  18094. {
  18095. class: vue.normalizeClass(["input-value", { "input-value-border": $props.border }])
  18096. },
  18097. [
  18098. _ctx.errorMessage ? (vue.openBlock(), vue.createElementBlock(
  18099. "text",
  18100. {
  18101. key: 0,
  18102. class: "selected-area error-text"
  18103. },
  18104. vue.toDisplayString(_ctx.errorMessage),
  18105. 1
  18106. /* TEXT */
  18107. )) : _ctx.loading && !$data.isOpened ? (vue.openBlock(), vue.createElementBlock("view", {
  18108. key: 1,
  18109. class: "selected-area"
  18110. }, [
  18111. vue.createVNode(_component_uni_load_more, {
  18112. class: "load-more",
  18113. contentText: _ctx.loadMore,
  18114. status: "loading"
  18115. }, null, 8, ["contentText"])
  18116. ])) : $data.inputSelected.length ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  18117. key: 2,
  18118. class: "selected-area",
  18119. "scroll-x": "true"
  18120. }, [
  18121. vue.createElementVNode("view", { class: "selected-list" }, [
  18122. (vue.openBlock(true), vue.createElementBlock(
  18123. vue.Fragment,
  18124. null,
  18125. vue.renderList($data.inputSelected, (item, index) => {
  18126. return vue.openBlock(), vue.createElementBlock("view", {
  18127. class: "selected-item",
  18128. key: index
  18129. }, [
  18130. vue.createElementVNode(
  18131. "text",
  18132. { class: "text-color" },
  18133. vue.toDisplayString(item.text),
  18134. 1
  18135. /* TEXT */
  18136. ),
  18137. index < $data.inputSelected.length - 1 ? (vue.openBlock(), vue.createElementBlock(
  18138. "text",
  18139. {
  18140. key: 0,
  18141. class: "input-split-line"
  18142. },
  18143. vue.toDisplayString($props.split),
  18144. 1
  18145. /* TEXT */
  18146. )) : vue.createCommentVNode("v-if", true)
  18147. ]);
  18148. }),
  18149. 128
  18150. /* KEYED_FRAGMENT */
  18151. ))
  18152. ])
  18153. ])) : (vue.openBlock(), vue.createElementBlock(
  18154. "text",
  18155. {
  18156. key: 3,
  18157. class: "selected-area placeholder"
  18158. },
  18159. vue.toDisplayString($props.placeholder),
  18160. 1
  18161. /* TEXT */
  18162. )),
  18163. $props.clearIcon && !$props.readonly && $data.inputSelected.length ? (vue.openBlock(), vue.createElementBlock("view", {
  18164. key: 4,
  18165. class: "icon-clear",
  18166. onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.clear && $options.clear(...args), ["stop"]))
  18167. }, [
  18168. vue.createVNode(_component_uni_icons, {
  18169. type: "clear",
  18170. color: "#c0c4cc",
  18171. size: "24"
  18172. })
  18173. ])) : vue.createCommentVNode("v-if", true),
  18174. (!$props.clearIcon || !$data.inputSelected.length) && !$props.readonly ? (vue.openBlock(), vue.createElementBlock("view", {
  18175. key: 5,
  18176. class: "arrow-area"
  18177. }, [
  18178. vue.createElementVNode("view", { class: "input-arrow" })
  18179. ])) : vue.createCommentVNode("v-if", true)
  18180. ],
  18181. 2
  18182. /* CLASS */
  18183. )
  18184. ], true)
  18185. ]),
  18186. $data.isOpened ? (vue.openBlock(), vue.createElementBlock("view", {
  18187. key: 0,
  18188. class: "uni-data-tree-cover",
  18189. onClick: _cache[2] || (_cache[2] = (...args) => $options.handleClose && $options.handleClose(...args))
  18190. })) : vue.createCommentVNode("v-if", true),
  18191. $data.isOpened ? (vue.openBlock(), vue.createElementBlock("view", {
  18192. key: 1,
  18193. class: "uni-data-tree-dialog"
  18194. }, [
  18195. vue.createElementVNode("view", { class: "uni-popper__arrow" }),
  18196. vue.createElementVNode("view", { class: "dialog-caption" }, [
  18197. vue.createElementVNode("view", { class: "title-area" }, [
  18198. vue.createElementVNode(
  18199. "text",
  18200. { class: "dialog-title" },
  18201. vue.toDisplayString($props.popupTitle),
  18202. 1
  18203. /* TEXT */
  18204. )
  18205. ]),
  18206. vue.createElementVNode("view", {
  18207. class: "dialog-close",
  18208. onClick: _cache[3] || (_cache[3] = (...args) => $options.handleClose && $options.handleClose(...args))
  18209. }, [
  18210. vue.createElementVNode("view", {
  18211. class: "dialog-close-plus",
  18212. "data-id": "close"
  18213. }),
  18214. vue.createElementVNode("view", {
  18215. class: "dialog-close-plus dialog-close-rotate",
  18216. "data-id": "close"
  18217. })
  18218. ])
  18219. ]),
  18220. vue.createVNode(_component_data_picker_view, {
  18221. class: "picker-view",
  18222. ref: "pickerView",
  18223. modelValue: _ctx.dataValue,
  18224. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => _ctx.dataValue = $event),
  18225. localdata: _ctx.localdata,
  18226. preload: _ctx.preload,
  18227. collection: _ctx.collection,
  18228. field: _ctx.field,
  18229. orderby: _ctx.orderby,
  18230. where: _ctx.where,
  18231. "step-searh": _ctx.stepSearh,
  18232. "self-field": _ctx.selfField,
  18233. "parent-field": _ctx.parentField,
  18234. "managed-mode": true,
  18235. map: _ctx.map,
  18236. ellipsis: $props.ellipsis,
  18237. onChange: $options.onchange,
  18238. onDatachange: $options.ondatachange,
  18239. onNodeclick: $options.onnodeclick
  18240. }, null, 8, ["modelValue", "localdata", "preload", "collection", "field", "orderby", "where", "step-searh", "self-field", "parent-field", "map", "ellipsis", "onChange", "onDatachange", "onNodeclick"])
  18241. ])) : vue.createCommentVNode("v-if", true)
  18242. ]);
  18243. }
  18244. const __easycom_1 = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["render", _sfc_render$m], ["__scopeId", "data-v-e10759db"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-data-picker/uni-data-picker.vue"]]);
  18245. const getBindParams = () => {
  18246. return http({
  18247. method: "GET",
  18248. url: "/admin/order.scanOrder/getBindParams"
  18249. });
  18250. };
  18251. const bindShipping = (data) => {
  18252. return http({
  18253. method: "POST",
  18254. url: "/admin/order.scanOrder/bindShipping",
  18255. data
  18256. });
  18257. };
  18258. const getWaybills = (data) => {
  18259. return http({
  18260. method: "POST",
  18261. url: "/admin/order.scanOrder/getWaybills",
  18262. data
  18263. });
  18264. };
  18265. const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
  18266. __name: "scanLotno",
  18267. setup(__props, { expose: __expose }) {
  18268. __expose();
  18269. const valiFormRef = vue.ref();
  18270. const loading = vue.ref(false);
  18271. const hidePage = vue.ref(false);
  18272. const focusType = vue.ref(true);
  18273. const editBatchNum = vue.ref(false);
  18274. const editPalletNum = vue.ref(false);
  18275. const scanLotnoHistory = vue.ref([]);
  18276. const messageRef = vue.ref();
  18277. const messageType = vue.ref();
  18278. const messageText = vue.ref();
  18279. let st2;
  18280. const valiFormData = vue.ref({
  18281. orderNum: "",
  18282. weight: "",
  18283. batchNum: "",
  18284. palletNum: "0"
  18285. });
  18286. const rules = vue.reactive({
  18287. orderNum: {
  18288. rules: [
  18289. {
  18290. required: true,
  18291. errorMessage: "单号不能为空"
  18292. }
  18293. ]
  18294. }
  18295. });
  18296. const options = vue.reactive({
  18297. batch: [],
  18298. pallet: []
  18299. });
  18300. const scanInput = async () => {
  18301. let status = await checkPermission();
  18302. if (status !== 1) {
  18303. return;
  18304. }
  18305. uni.scanCode({
  18306. success: (res) => {
  18307. valiFormData.value.orderNum = res.result;
  18308. onsubmit();
  18309. },
  18310. fail: (err) => {
  18311. }
  18312. });
  18313. };
  18314. const reset = () => {
  18315. loading.value = false;
  18316. valiFormData.value.orderNum = "";
  18317. valiFormData.value.weight = "";
  18318. };
  18319. const submitBatchNum = () => {
  18320. if (valiFormData.value.batchNum) {
  18321. editBatchNum.value = true;
  18322. } else {
  18323. messageType.value = "error";
  18324. messageText.value = "请选择批次号";
  18325. messageRef.value.open();
  18326. }
  18327. };
  18328. const batchNum = vue.computed(() => {
  18329. const res = options.batch.find((item) => item.value === valiFormData.value.batchNum);
  18330. return res == null ? void 0 : res.text;
  18331. });
  18332. const submitPalletNum = () => {
  18333. if (valiFormData.value.palletNum) {
  18334. editPalletNum.value = true;
  18335. } else {
  18336. messageType.value = "error";
  18337. messageText.value = "请选择托盘号";
  18338. messageRef.value.open();
  18339. }
  18340. };
  18341. const palletNum = vue.computed(() => {
  18342. function findTextByValue(arr, targetValue) {
  18343. for (let item of arr) {
  18344. if (item.value === targetValue) {
  18345. return item.text;
  18346. }
  18347. if (item.children && item.children.length > 0) {
  18348. const result = findTextByValue(item.children, targetValue);
  18349. if (result) {
  18350. return `${item.text}/${result}`;
  18351. }
  18352. }
  18353. }
  18354. return null;
  18355. }
  18356. const textPath = findTextByValue(options.pallet, valiFormData.value.palletNum);
  18357. return textPath;
  18358. });
  18359. const checkOrder = async () => {
  18360. loading.value = true;
  18361. uni.setStorageSync("waybills", []);
  18362. const res = await getWaybills({
  18363. order_no: valiFormData.value.orderNum,
  18364. batch_number: valiFormData.value.batchNum,
  18365. pallet_number: valiFormData.value.palletNum ? findPalletNumIdByValue(options.pallet, valiFormData.value.palletNum) : ""
  18366. });
  18367. loading.value = false;
  18368. if (res.code == 1) {
  18369. messageType.value = "success";
  18370. messageText.value = res.msg;
  18371. messageRef.value.open();
  18372. uni.setStorageSync("waybills", res.data.waybills);
  18373. uni.navigateTo({
  18374. url: "/pages/scanLotno/waybillsList"
  18375. });
  18376. } else {
  18377. messageType.value = "error";
  18378. messageText.value = res.msg;
  18379. messageRef.value.open();
  18380. }
  18381. };
  18382. const findPalletNumIdByValue = (data, targetValue) => {
  18383. for (let i2 = 0; i2 < data.length; i2++) {
  18384. const item = data[i2];
  18385. if (item.id === targetValue || item.value === targetValue) {
  18386. return [item.id];
  18387. } else if (item.children && item.children.length > 0) {
  18388. const childId = findPalletNumIdByValue(item.children, targetValue);
  18389. if (childId !== null) {
  18390. return childId;
  18391. }
  18392. }
  18393. }
  18394. return null;
  18395. };
  18396. const onsubmit = async () => {
  18397. st2 && clearTimeout(st2);
  18398. loading.value = true;
  18399. const res = await bindShipping({
  18400. order_no: valiFormData.value.orderNum,
  18401. reweighting: valiFormData.value.weight,
  18402. batch_number: valiFormData.value.batchNum,
  18403. pallet_number: valiFormData.value.palletNum ? findPalletNumIdByValue(options.pallet, valiFormData.value.palletNum) : ""
  18404. });
  18405. loading.value = false;
  18406. if (res.code == 1) {
  18407. messageType.value = "success";
  18408. messageText.value = res.msg;
  18409. messageRef.value.open();
  18410. if (res.data.labels && res.data.labels.length > 0) {
  18411. formatAppLog("log", "at pages/scanLotno/scanLotno.vue:288", "有打印面单");
  18412. }
  18413. const historyItem = {
  18414. orderNum: valiFormData.value.orderNum,
  18415. createTime: /* @__PURE__ */ new Date(),
  18416. type: valiFormData.value.batchNum ? "绑定批次" : "绑定托盘",
  18417. status: true
  18418. };
  18419. formatAppLog("log", "at pages/scanLotno/scanLotno.vue:300", "scanLotnoHistory--", scanLotnoHistory);
  18420. scanLotnoHistory.value.unshift(historyItem);
  18421. uni.setStorageSync("scanLotnoHistory", scanLotnoHistory.value);
  18422. getHistory();
  18423. } else {
  18424. messageType.value = "error";
  18425. messageText.value = res.msg;
  18426. messageRef.value.open();
  18427. const historyItem = {
  18428. orderNum: valiFormData.value.orderNum,
  18429. createTime: /* @__PURE__ */ new Date(),
  18430. type: valiFormData.value.batchNum ? "绑定批次" : "绑定托盘",
  18431. status: false
  18432. };
  18433. scanLotnoHistory.value.unshift(historyItem);
  18434. uni.setStorageSync("scanLotnoHistory", scanLotnoHistory.value);
  18435. getHistory();
  18436. }
  18437. st2 = setTimeout(() => {
  18438. reset();
  18439. setFocus();
  18440. st2 && clearTimeout(st2);
  18441. }, 1e3);
  18442. };
  18443. const getHistory = () => {
  18444. scanLotnoHistory.value = uni.getStorageSync("scanLotnoHistory") || [];
  18445. };
  18446. const keypress = (e2) => {
  18447. if (e2.keyCode === 102 || e2.keyCode === 103 || e2.keyCode === 104)
  18448. ;
  18449. if (e2.keyCode == 66) {
  18450. onsubmit();
  18451. }
  18452. };
  18453. onLoad(() => {
  18454. plus.key.addEventListener("keyup", keypress);
  18455. });
  18456. onUnload(() => {
  18457. plus.key.removeEventListener("keyup", keypress);
  18458. });
  18459. onHide(() => {
  18460. hidePage.value = true;
  18461. plus.key.removeEventListener("keyup", keypress);
  18462. });
  18463. onBackPress(() => {
  18464. plus.key.removeEventListener("keyup", keypress);
  18465. });
  18466. onShow(() => {
  18467. hidePage.value = false;
  18468. _getBindParams();
  18469. getHistory();
  18470. });
  18471. const setFocus = () => {
  18472. if (hidePage.value) {
  18473. return;
  18474. }
  18475. focusType.value = false;
  18476. vue.nextTick(() => {
  18477. focusType.value = true;
  18478. });
  18479. };
  18480. const _getBindParams = async () => {
  18481. const res = await getBindParams();
  18482. if (res.code === 1) {
  18483. let transformData = function(data) {
  18484. return data.map((item) => {
  18485. const { id, value, label, ...rest } = item;
  18486. return {
  18487. id: id || value,
  18488. value,
  18489. text: label,
  18490. ...rest,
  18491. children: item.children ? transformData(item.children) : []
  18492. };
  18493. });
  18494. };
  18495. options.batch = res.data.batch_number.map((item) => {
  18496. return { text: item.name, value: item.id };
  18497. });
  18498. const shipping = transformData(res.data.shipping);
  18499. formatAppLog("log", "at pages/scanLotno/scanLotno.vue:412", "shipping", shipping);
  18500. options.pallet = shipping;
  18501. }
  18502. };
  18503. onNavigationBarButtonTap((event) => {
  18504. if (event.index === 0) {
  18505. uni.navigateTo({
  18506. url: "/pages/scanLotno/logList"
  18507. });
  18508. }
  18509. });
  18510. const __returned__ = { valiFormRef, loading, hidePage, focusType, editBatchNum, editPalletNum, scanLotnoHistory, messageRef, messageType, messageText, get st() {
  18511. return st2;
  18512. }, set st(v2) {
  18513. st2 = v2;
  18514. }, valiFormData, rules, options, scanInput, reset, submitBatchNum, batchNum, submitPalletNum, palletNum, checkOrder, findPalletNumIdByValue, onsubmit, getHistory, keypress, setFocus, _getBindParams };
  18515. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  18516. return __returned__;
  18517. }
  18518. });
  18519. function _sfc_render$l(_ctx, _cache, $props, $setup, $data, $options) {
  18520. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  18521. const _component_uni_forms_item = resolveEasycom(vue.resolveDynamicComponent("uni-forms-item"), __easycom_0$4);
  18522. const _component_uni_data_select = resolveEasycom(vue.resolveDynamicComponent("uni-data-select"), __easycom_0$3);
  18523. const _component_uni_data_picker = resolveEasycom(vue.resolveDynamicComponent("uni-data-picker"), __easycom_1);
  18524. const _component_uni_forms = resolveEasycom(vue.resolveDynamicComponent("uni-forms"), __easycom_2$1);
  18525. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  18526. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  18527. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  18528. return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
  18529. vue.createVNode(_component_uni_forms, {
  18530. ref: "valiFormRef",
  18531. "label-align": "right",
  18532. "label-width": 80,
  18533. rules: $setup.rules,
  18534. modelValue: $setup.valiFormData
  18535. }, {
  18536. default: vue.withCtx(() => [
  18537. vue.createVNode(_component_uni_forms_item, {
  18538. label: "运单号码",
  18539. required: "",
  18540. name: "orderNum"
  18541. }, {
  18542. default: vue.withCtx(() => [
  18543. vue.createVNode(_component_uni_easyinput, {
  18544. modelValue: $setup.valiFormData.orderNum,
  18545. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.valiFormData.orderNum = $event),
  18546. placeholder: "请输入单号",
  18547. suffixIcon: "scan",
  18548. focus: $setup.focusType,
  18549. onIconClick: $setup.scanInput
  18550. }, null, 8, ["modelValue", "focus"])
  18551. ]),
  18552. _: 1
  18553. /* STABLE */
  18554. }),
  18555. vue.createVNode(_component_uni_forms_item, {
  18556. label: "复称重量",
  18557. name: "weight"
  18558. }, {
  18559. default: vue.withCtx(() => [
  18560. vue.createVNode(_component_uni_easyinput, {
  18561. modelValue: $setup.valiFormData.weight,
  18562. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.valiFormData.weight = $event),
  18563. placeholder: "请输入复称重量",
  18564. oninput: "value=value.replace(/[^\\d.]/g,'').replace(/^\\./g, '').replace(/\\.{2,}/g, '').replace('.', '$#$').replace(/\\./g, '').replace('$#$', '.').match(/^\\d*(\\.?\\d{0,2})/g)[0] || null"
  18565. }, {
  18566. right: vue.withCtx(() => [
  18567. vue.createElementVNode("view", { class: "weight-right" }, "KG")
  18568. ]),
  18569. _: 1
  18570. /* STABLE */
  18571. }, 8, ["modelValue"])
  18572. ]),
  18573. _: 1
  18574. /* STABLE */
  18575. }),
  18576. vue.createCommentVNode(" <text class='weight-tip'>复称重量作用是确保句惠完整,防止工作人员计费称車后进行的其他操作引起的物品丢失问题</text> "),
  18577. vue.createVNode(_component_uni_forms_item, {
  18578. label: "绑定批次号",
  18579. name: "batchNum",
  18580. class: "select-item"
  18581. }, {
  18582. default: vue.withCtx(() => [
  18583. !$setup.editBatchNum ? (vue.openBlock(), vue.createBlock(_component_uni_data_select, {
  18584. key: 0,
  18585. modelValue: $setup.valiFormData.batchNum,
  18586. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.valiFormData.batchNum = $event),
  18587. placeholder: "请选择批次号",
  18588. localdata: $setup.options.batch,
  18589. clear: false
  18590. }, null, 8, ["modelValue", "localdata"])) : vue.createCommentVNode("v-if", true),
  18591. $setup.editBatchNum ? (vue.openBlock(), vue.createBlock(_component_uni_easyinput, {
  18592. key: 1,
  18593. value: $setup.batchNum,
  18594. disabled: $setup.editBatchNum
  18595. }, null, 8, ["value", "disabled"])) : vue.createCommentVNode("v-if", true),
  18596. !$setup.editBatchNum ? (vue.openBlock(), vue.createElementBlock("button", {
  18597. key: 2,
  18598. type: "primary",
  18599. onClick: $setup.submitBatchNum
  18600. }, "确认")) : vue.createCommentVNode("v-if", true),
  18601. $setup.editBatchNum ? (vue.openBlock(), vue.createElementBlock("button", {
  18602. key: 3,
  18603. type: "primary",
  18604. onClick: _cache[3] || (_cache[3] = ($event) => $setup.editBatchNum = false)
  18605. }, "修改")) : vue.createCommentVNode("v-if", true)
  18606. ]),
  18607. _: 1
  18608. /* STABLE */
  18609. }),
  18610. vue.createVNode(_component_uni_forms_item, {
  18611. label: "绑定托盘号",
  18612. name: "palletNum",
  18613. class: "select-item"
  18614. }, {
  18615. default: vue.withCtx(() => [
  18616. !$setup.editPalletNum ? (vue.openBlock(), vue.createBlock(_component_uni_data_picker, {
  18617. key: 0,
  18618. placeholder: "请选择托盘号",
  18619. "popup-title": "绑定托盘号",
  18620. localdata: $setup.options.pallet,
  18621. modelValue: $setup.valiFormData.palletNum,
  18622. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.valiFormData.palletNum = $event),
  18623. "clear-icon": false
  18624. }, null, 8, ["localdata", "modelValue"])) : vue.createCommentVNode("v-if", true),
  18625. $setup.editPalletNum ? (vue.openBlock(), vue.createBlock(_component_uni_easyinput, {
  18626. key: 1,
  18627. value: $setup.palletNum,
  18628. disabled: $setup.editPalletNum
  18629. }, null, 8, ["value", "disabled"])) : vue.createCommentVNode("v-if", true),
  18630. !$setup.editPalletNum ? (vue.openBlock(), vue.createElementBlock("button", {
  18631. key: 2,
  18632. type: "primary",
  18633. onClick: $setup.submitPalletNum
  18634. }, "确认")) : vue.createCommentVNode("v-if", true),
  18635. $setup.editPalletNum ? (vue.openBlock(), vue.createElementBlock("button", {
  18636. key: 3,
  18637. type: "primary",
  18638. onClick: _cache[5] || (_cache[5] = ($event) => $setup.editPalletNum = false)
  18639. }, "修改")) : vue.createCommentVNode("v-if", true)
  18640. ]),
  18641. _: 1
  18642. /* STABLE */
  18643. })
  18644. ]),
  18645. _: 1
  18646. /* STABLE */
  18647. }, 8, ["rules", "modelValue"]),
  18648. vue.createElementVNode("view", { class: "button-group" }, [
  18649. vue.createElementVNode("button", {
  18650. type: "default",
  18651. onClick: $setup.reset
  18652. }, "重置"),
  18653. vue.createElementVNode("button", {
  18654. type: "default",
  18655. onClick: $setup.checkOrder,
  18656. loading: $setup.loading
  18657. }, [
  18658. !$setup.loading ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  18659. key: 0,
  18660. type: "search",
  18661. size: "18"
  18662. })) : vue.createCommentVNode("v-if", true),
  18663. vue.createTextVNode(" 查看运单 ")
  18664. ], 8, ["loading"]),
  18665. vue.createElementVNode("button", {
  18666. type: "primary",
  18667. onClick: $setup.onsubmit,
  18668. loading: $setup.loading
  18669. }, [
  18670. !$setup.loading ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  18671. key: 0,
  18672. type: "checkmarkempty",
  18673. size: "18",
  18674. color: "white"
  18675. })) : vue.createCommentVNode("v-if", true),
  18676. vue.createTextVNode(" 提交 ")
  18677. ], 8, ["loading"])
  18678. ]),
  18679. $setup.scanLotnoHistory.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  18680. key: 0,
  18681. class: "history"
  18682. }, [
  18683. vue.createElementVNode("text", { class: "title" }, "记录(最近5条)")
  18684. ])) : vue.createCommentVNode("v-if", true),
  18685. vue.createElementVNode("view", { class: "history" }, [
  18686. (vue.openBlock(true), vue.createElementBlock(
  18687. vue.Fragment,
  18688. null,
  18689. vue.renderList($setup.scanLotnoHistory.slice(0, 5), (item, i2) => {
  18690. return vue.openBlock(), vue.createElementBlock("view", {
  18691. class: "item",
  18692. key: i2
  18693. }, [
  18694. vue.createElementVNode(
  18695. "text",
  18696. { class: "type" },
  18697. vue.toDisplayString(item.type),
  18698. 1
  18699. /* TEXT */
  18700. ),
  18701. vue.createElementVNode(
  18702. "text",
  18703. {
  18704. class: "code",
  18705. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  18706. },
  18707. vue.toDisplayString(item.orderNum),
  18708. 5
  18709. /* TEXT, STYLE */
  18710. ),
  18711. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  18712. key: 0,
  18713. type: "checkmarkempty",
  18714. class: "status",
  18715. size: "16",
  18716. color: "green"
  18717. })) : (vue.openBlock(), vue.createElementBlock("text", {
  18718. key: 1,
  18719. class: "status fail"
  18720. }, "F")),
  18721. vue.createElementVNode(
  18722. "text",
  18723. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  18724. vue.toDisplayString("\r\n" + item.createTime),
  18725. 1
  18726. /* TEXT */
  18727. )
  18728. ]);
  18729. }),
  18730. 128
  18731. /* KEYED_FRAGMENT */
  18732. ))
  18733. ]),
  18734. vue.createVNode(
  18735. _component_uni_popup,
  18736. {
  18737. ref: "messageRef",
  18738. type: "message"
  18739. },
  18740. {
  18741. default: vue.withCtx(() => [
  18742. vue.createVNode(_component_uni_popup_message, {
  18743. type: $setup.messageType,
  18744. message: $setup.messageText,
  18745. duration: 2e3
  18746. }, null, 8, ["type", "message"])
  18747. ]),
  18748. _: 1
  18749. /* STABLE */
  18750. },
  18751. 512
  18752. /* NEED_PATCH */
  18753. )
  18754. ]);
  18755. }
  18756. const PagesScanLotnoScanLotno = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["render", _sfc_render$l], ["__file", "E:/demo/hmrabbit/src/pages/scanLotno/scanLotno.vue"]]);
  18757. const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
  18758. __name: "logList",
  18759. setup(__props, { expose: __expose }) {
  18760. __expose();
  18761. const scanLotnoHistory = vue.ref([]);
  18762. const getHistory = () => {
  18763. scanLotnoHistory.value = uni.getStorageSync("scanLotnoHistory");
  18764. };
  18765. onLoad(() => {
  18766. getHistory();
  18767. });
  18768. const __returned__ = { scanLotnoHistory, getHistory };
  18769. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  18770. return __returned__;
  18771. }
  18772. });
  18773. function _sfc_render$k(_ctx, _cache, $props, $setup, $data, $options) {
  18774. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  18775. return vue.openBlock(), vue.createElementBlock("view", { class: "history" }, [
  18776. (vue.openBlock(true), vue.createElementBlock(
  18777. vue.Fragment,
  18778. null,
  18779. vue.renderList($setup.scanLotnoHistory, (item, i2) => {
  18780. return vue.openBlock(), vue.createElementBlock("view", {
  18781. class: "item",
  18782. key: i2
  18783. }, [
  18784. vue.createElementVNode(
  18785. "text",
  18786. { class: "type" },
  18787. vue.toDisplayString(item.type),
  18788. 1
  18789. /* TEXT */
  18790. ),
  18791. vue.createElementVNode(
  18792. "text",
  18793. {
  18794. class: "code",
  18795. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  18796. },
  18797. vue.toDisplayString(item.orderNum),
  18798. 5
  18799. /* TEXT, STYLE */
  18800. ),
  18801. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  18802. key: 0,
  18803. type: "checkmarkempty",
  18804. class: "status",
  18805. size: "16",
  18806. color: "green"
  18807. })) : (vue.openBlock(), vue.createElementBlock("text", {
  18808. key: 1,
  18809. class: "status fail"
  18810. }, "F")),
  18811. vue.createElementVNode(
  18812. "text",
  18813. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  18814. vue.toDisplayString("\r\n" + item.createTime),
  18815. 1
  18816. /* TEXT */
  18817. )
  18818. ]);
  18819. }),
  18820. 128
  18821. /* KEYED_FRAGMENT */
  18822. )),
  18823. $setup.scanLotnoHistory.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  18824. key: 0,
  18825. class: "is-empty"
  18826. }, "暂无历史")) : vue.createCommentVNode("v-if", true)
  18827. ]);
  18828. }
  18829. const PagesScanLotnoLogList = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$k], ["__scopeId", "data-v-01599952"], ["__file", "E:/demo/hmrabbit/src/pages/scanLotno/logList.vue"]]);
  18830. const _sfc_main$k = {
  18831. name: "UniSection",
  18832. emits: ["click"],
  18833. props: {
  18834. type: {
  18835. type: String,
  18836. default: ""
  18837. },
  18838. title: {
  18839. type: String,
  18840. required: true,
  18841. default: ""
  18842. },
  18843. titleFontSize: {
  18844. type: String,
  18845. default: "14px"
  18846. },
  18847. titleColor: {
  18848. type: String,
  18849. default: "#333"
  18850. },
  18851. subTitle: {
  18852. type: String,
  18853. default: ""
  18854. },
  18855. subTitleFontSize: {
  18856. type: String,
  18857. default: "12px"
  18858. },
  18859. subTitleColor: {
  18860. type: String,
  18861. default: "#999"
  18862. },
  18863. padding: {
  18864. type: [Boolean, String],
  18865. default: false
  18866. }
  18867. },
  18868. computed: {
  18869. _padding() {
  18870. if (typeof this.padding === "string") {
  18871. return this.padding;
  18872. }
  18873. return this.padding ? "10px" : "";
  18874. }
  18875. },
  18876. watch: {
  18877. title(newVal) {
  18878. if (uni.report && newVal !== "") {
  18879. uni.report("title", newVal);
  18880. }
  18881. }
  18882. },
  18883. methods: {
  18884. onClick() {
  18885. this.$emit("click");
  18886. }
  18887. }
  18888. };
  18889. function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) {
  18890. return vue.openBlock(), vue.createElementBlock("view", { class: "uni-section" }, [
  18891. vue.createElementVNode("view", {
  18892. class: "uni-section-header",
  18893. onClick: _cache[0] || (_cache[0] = (...args) => $options.onClick && $options.onClick(...args))
  18894. }, [
  18895. $props.type ? (vue.openBlock(), vue.createElementBlock(
  18896. "view",
  18897. {
  18898. key: 0,
  18899. class: vue.normalizeClass(["uni-section-header__decoration", $props.type])
  18900. },
  18901. null,
  18902. 2
  18903. /* CLASS */
  18904. )) : vue.renderSlot(_ctx.$slots, "decoration", { key: 1 }, void 0, true),
  18905. vue.createElementVNode("view", { class: "uni-section-header__content" }, [
  18906. vue.createElementVNode(
  18907. "text",
  18908. {
  18909. style: vue.normalizeStyle({ "font-size": $props.titleFontSize, "color": $props.titleColor }),
  18910. class: vue.normalizeClass(["uni-section__content-title", { "distraction": !$props.subTitle }])
  18911. },
  18912. vue.toDisplayString($props.title),
  18913. 7
  18914. /* TEXT, CLASS, STYLE */
  18915. ),
  18916. $props.subTitle ? (vue.openBlock(), vue.createElementBlock(
  18917. "text",
  18918. {
  18919. key: 0,
  18920. style: vue.normalizeStyle({ "font-size": $props.subTitleFontSize, "color": $props.subTitleColor }),
  18921. class: "uni-section-header__content-sub"
  18922. },
  18923. vue.toDisplayString($props.subTitle),
  18924. 5
  18925. /* TEXT, STYLE */
  18926. )) : vue.createCommentVNode("v-if", true)
  18927. ]),
  18928. vue.createElementVNode("view", { class: "uni-section-header__slot-right" }, [
  18929. vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
  18930. ])
  18931. ]),
  18932. vue.createElementVNode(
  18933. "view",
  18934. {
  18935. class: "uni-section-content",
  18936. style: vue.normalizeStyle({ padding: $options._padding })
  18937. },
  18938. [
  18939. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  18940. ],
  18941. 4
  18942. /* STYLE */
  18943. )
  18944. ]);
  18945. }
  18946. const __easycom_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["render", _sfc_render$j], ["__scopeId", "data-v-17c33c2a"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-section/uni-section.vue"]]);
  18947. const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
  18948. __name: "waybillsList",
  18949. setup(__props, { expose: __expose }) {
  18950. __expose();
  18951. const waybills = vue.ref([]);
  18952. const getHistory = () => {
  18953. waybills.value = uni.getStorageSync("waybills");
  18954. };
  18955. onLoad(() => {
  18956. getHistory();
  18957. });
  18958. const __returned__ = { waybills, getHistory };
  18959. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  18960. return __returned__;
  18961. }
  18962. });
  18963. function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
  18964. const _component_uni_section = resolveEasycom(vue.resolveDynamicComponent("uni-section"), __easycom_0$1);
  18965. return vue.openBlock(), vue.createElementBlock("view", { class: "history" }, [
  18966. vue.createVNode(_component_uni_section, {
  18967. title: "数量: " + $setup.waybills.length
  18968. }, null, 8, ["title"]),
  18969. (vue.openBlock(true), vue.createElementBlock(
  18970. vue.Fragment,
  18971. null,
  18972. vue.renderList($setup.waybills, (item, i2) => {
  18973. return vue.openBlock(), vue.createElementBlock("view", {
  18974. class: "item",
  18975. key: i2
  18976. }, [
  18977. vue.createElementVNode(
  18978. "text",
  18979. {
  18980. class: "code",
  18981. style: { color: "#666" }
  18982. },
  18983. vue.toDisplayString(item.order_box_no),
  18984. 1
  18985. /* TEXT */
  18986. ),
  18987. vue.createElementVNode(
  18988. "text",
  18989. { class: "type" },
  18990. "重量: " + vue.toDisplayString(item.weight) + "KG",
  18991. 1
  18992. /* TEXT */
  18993. ),
  18994. vue.createElementVNode("view", { class: "sub-items" }, [
  18995. vue.createElementVNode("view", { class: "sub-item" }, [
  18996. vue.createElementVNode("text", { class: "type" }, "批次/船航/托盘"),
  18997. vue.createElementVNode(
  18998. "text",
  18999. { class: "type" },
  19000. vue.toDisplayString(item.batch_shipping_pallet),
  19001. 1
  19002. /* TEXT */
  19003. )
  19004. ]),
  19005. vue.createElementVNode("view", { class: "sub-item" }, [
  19006. vue.createElementVNode("text", { class: "type" }, "末公里运单号"),
  19007. vue.createElementVNode(
  19008. "text",
  19009. { class: "type" },
  19010. vue.toDisplayString(item.tracking_number || "无"),
  19011. 1
  19012. /* TEXT */
  19013. )
  19014. ])
  19015. ])
  19016. ]);
  19017. }),
  19018. 128
  19019. /* KEYED_FRAGMENT */
  19020. )),
  19021. $setup.waybills.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  19022. key: 0,
  19023. class: "is-empty"
  19024. }, "暂无运单")) : vue.createCommentVNode("v-if", true)
  19025. ]);
  19026. }
  19027. const PagesScanLotnoWaybillsList = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$i], ["__scopeId", "data-v-9aaaa5da"], ["__file", "E:/demo/hmrabbit/src/pages/scanLotno/waybillsList.vue"]]);
  19028. const waybillNoOptions = () => {
  19029. return http({
  19030. method: "GET",
  19031. url: "/admin/warehouse.waybillNo/getOptions"
  19032. });
  19033. };
  19034. const addWaybillNo = (data) => {
  19035. return http({
  19036. method: "POST",
  19037. url: "/admin/warehouse.waybillNo/add",
  19038. data
  19039. });
  19040. };
  19041. const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
  19042. __name: "waybillNo",
  19043. setup(__props, { expose: __expose }) {
  19044. __expose();
  19045. const editSpaceNo = vue.ref(false);
  19046. const loading = vue.ref(false);
  19047. const hidePage = vue.ref(false);
  19048. const focusType = vue.ref(true);
  19049. const waybillNoHistory = vue.ref([]);
  19050. const messageRef = vue.ref();
  19051. const messageType = vue.ref();
  19052. const messageText = vue.ref();
  19053. let st2;
  19054. const valiFormData = vue.ref({
  19055. code: "",
  19056. space_id: ""
  19057. });
  19058. const rules = vue.reactive({
  19059. code: {
  19060. rules: [
  19061. {
  19062. required: true,
  19063. errorMessage: "单号不能为空"
  19064. }
  19065. ]
  19066. }
  19067. });
  19068. const options = vue.reactive({
  19069. space: []
  19070. });
  19071. const scanInput = async () => {
  19072. let status = await checkPermission();
  19073. if (status !== 1) {
  19074. return;
  19075. }
  19076. uni.scanCode({
  19077. success: (res) => {
  19078. valiFormData.value.code = res.result;
  19079. },
  19080. fail: (err) => {
  19081. }
  19082. });
  19083. };
  19084. const reset = () => {
  19085. loading.value = false;
  19086. valiFormData.value.code = "";
  19087. };
  19088. const submitSpace = () => {
  19089. if (valiFormData.value.space_id) {
  19090. editSpaceNo.value = true;
  19091. setFocus();
  19092. } else {
  19093. messageType.value = "error";
  19094. messageText.value = "请选择库位";
  19095. messageRef.value.open();
  19096. }
  19097. };
  19098. const space = vue.computed(() => {
  19099. const res = options.space.find((item) => item.value === valiFormData.value.space_id);
  19100. return res == null ? void 0 : res.text;
  19101. });
  19102. const findPalletNumIdByValue = (data, targetValue) => {
  19103. for (let i2 = 0; i2 < data.length; i2++) {
  19104. const item = data[i2];
  19105. if (item.id === targetValue || item.value === targetValue) {
  19106. return [item.id];
  19107. } else if (item.children && item.children.length > 0) {
  19108. const childId = findPalletNumIdByValue(item.children, targetValue);
  19109. if (childId !== null) {
  19110. return childId;
  19111. }
  19112. }
  19113. }
  19114. return null;
  19115. };
  19116. const onsubmit = async () => {
  19117. if (valiFormData.value.space_id && valiFormData.value.code) {
  19118. st2 && clearTimeout(st2);
  19119. loading.value = true;
  19120. const res = await addWaybillNo({
  19121. code: valiFormData.value.code,
  19122. space_id: valiFormData.value.space_id
  19123. });
  19124. loading.value = false;
  19125. const space2 = options.space.find((item) => item.value === valiFormData.value.space_id);
  19126. if (res.code == 1) {
  19127. messageType.value = "success";
  19128. messageText.value = res.msg;
  19129. messageRef.value.open();
  19130. const historyItem = {
  19131. code: valiFormData.value.code,
  19132. createTime: /* @__PURE__ */ new Date(),
  19133. type: "运单号",
  19134. space: space2.text,
  19135. status: true
  19136. };
  19137. waybillNoHistory.value.unshift(historyItem);
  19138. uni.setStorageSync("waybillNoHistory", waybillNoHistory.value);
  19139. getHistory();
  19140. } else {
  19141. messageType.value = "error";
  19142. messageText.value = res.msg;
  19143. messageRef.value.open();
  19144. const historyItem = {
  19145. code: valiFormData.value.code,
  19146. createTime: /* @__PURE__ */ new Date(),
  19147. type: "运单号",
  19148. space: space2.text,
  19149. status: false
  19150. };
  19151. waybillNoHistory.value.unshift(historyItem);
  19152. uni.setStorageSync("waybillNoHistory", waybillNoHistory.value);
  19153. getHistory();
  19154. }
  19155. st2 = setTimeout(() => {
  19156. reset();
  19157. setFocus();
  19158. st2 && clearTimeout(st2);
  19159. }, 1e3);
  19160. } else {
  19161. if (!valiFormData.value.space_id) {
  19162. messageType.value = "error";
  19163. messageText.value = "请选择库位";
  19164. messageRef.value.open();
  19165. }
  19166. if (!valiFormData.value.code) {
  19167. messageType.value = "error";
  19168. messageText.value = "请填写运单号";
  19169. messageRef.value.open();
  19170. }
  19171. }
  19172. };
  19173. const getHistory = () => {
  19174. waybillNoHistory.value = uni.getStorageSync("waybillNoHistory") || [];
  19175. };
  19176. const keypress = (e2) => {
  19177. if (e2.keyCode === 102 || e2.keyCode === 103 || e2.keyCode === 104)
  19178. ;
  19179. if (e2.keyCode == 66) {
  19180. onsubmit();
  19181. }
  19182. };
  19183. onLoad(() => {
  19184. plus.key.addEventListener("keyup", keypress);
  19185. });
  19186. onUnload(() => {
  19187. plus.key.removeEventListener("keyup", keypress);
  19188. });
  19189. onHide(() => {
  19190. hidePage.value = true;
  19191. plus.key.removeEventListener("keyup", keypress);
  19192. });
  19193. onBackPress(() => {
  19194. plus.key.removeEventListener("keyup", keypress);
  19195. });
  19196. onShow(() => {
  19197. hidePage.value = false;
  19198. getOptions();
  19199. getHistory();
  19200. });
  19201. const getOptions = async () => {
  19202. const res = await waybillNoOptions();
  19203. if (res.code === 1) {
  19204. for (let key in res.data.space_id) {
  19205. if (res.data.space_id.hasOwnProperty(key)) {
  19206. options.space.push({ text: res.data.space_id[key], value: key });
  19207. }
  19208. }
  19209. }
  19210. };
  19211. const setFocus = () => {
  19212. if (hidePage.value) {
  19213. return;
  19214. }
  19215. focusType.value = false;
  19216. vue.nextTick(() => {
  19217. focusType.value = true;
  19218. });
  19219. };
  19220. onNavigationBarButtonTap((event) => {
  19221. if (event.index === 0) {
  19222. uni.navigateTo({
  19223. url: "/pages/waybillNo/logList"
  19224. });
  19225. }
  19226. });
  19227. const __returned__ = { editSpaceNo, loading, hidePage, focusType, waybillNoHistory, messageRef, messageType, messageText, get st() {
  19228. return st2;
  19229. }, set st(v2) {
  19230. st2 = v2;
  19231. }, valiFormData, rules, options, scanInput, reset, submitSpace, space, findPalletNumIdByValue, onsubmit, getHistory, keypress, getOptions, setFocus };
  19232. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  19233. return __returned__;
  19234. }
  19235. });
  19236. function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
  19237. const _component_uni_data_select = resolveEasycom(vue.resolveDynamicComponent("uni-data-select"), __easycom_0$3);
  19238. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  19239. const _component_uni_forms = resolveEasycom(vue.resolveDynamicComponent("uni-forms"), __easycom_2$1);
  19240. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  19241. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  19242. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  19243. return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
  19244. vue.createVNode(_component_uni_forms, {
  19245. ref: "valiForm",
  19246. "label-align": "right",
  19247. "label-width": 80,
  19248. rules: $setup.rules,
  19249. modelValue: $setup.valiFormData
  19250. }, {
  19251. default: vue.withCtx(() => [
  19252. vue.createElementVNode("view", { class: "space-select" }, [
  19253. !$setup.editSpaceNo ? (vue.openBlock(), vue.createBlock(_component_uni_data_select, {
  19254. key: 0,
  19255. modelValue: $setup.valiFormData.space_id,
  19256. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.valiFormData.space_id = $event),
  19257. placeholder: "请选择库位",
  19258. localdata: $setup.options.space,
  19259. clear: false
  19260. }, null, 8, ["modelValue", "localdata"])) : vue.createCommentVNode("v-if", true),
  19261. $setup.editSpaceNo ? (vue.openBlock(), vue.createBlock(_component_uni_easyinput, {
  19262. key: 1,
  19263. value: $setup.space,
  19264. disabled: $setup.editSpaceNo
  19265. }, null, 8, ["value", "disabled"])) : vue.createCommentVNode("v-if", true),
  19266. !$setup.editSpaceNo ? (vue.openBlock(), vue.createElementBlock("button", {
  19267. key: 2,
  19268. type: "primary",
  19269. onClick: $setup.submitSpace
  19270. }, "确认")) : vue.createCommentVNode("v-if", true),
  19271. $setup.editSpaceNo ? (vue.openBlock(), vue.createElementBlock("button", {
  19272. key: 3,
  19273. type: "primary",
  19274. onClick: _cache[1] || (_cache[1] = ($event) => $setup.editSpaceNo = false)
  19275. }, "修改")) : vue.createCommentVNode("v-if", true)
  19276. ]),
  19277. vue.createElementVNode("view", null, [
  19278. vue.createVNode(_component_uni_easyinput, {
  19279. modelValue: $setup.valiFormData.code,
  19280. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.valiFormData.code = $event),
  19281. placeholder: "请输入运单号",
  19282. suffixIcon: "scan",
  19283. focus: $setup.focusType,
  19284. onIconClick: $setup.scanInput
  19285. }, null, 8, ["modelValue", "focus"])
  19286. ])
  19287. ]),
  19288. _: 1
  19289. /* STABLE */
  19290. }, 8, ["rules", "modelValue"]),
  19291. vue.createElementVNode("view", { class: "button-group" }, [
  19292. vue.createElementVNode("button", {
  19293. type: "default",
  19294. onClick: $setup.reset
  19295. }, "重置"),
  19296. vue.createElementVNode("button", {
  19297. type: "primary",
  19298. onClick: $setup.onsubmit,
  19299. loading: $setup.loading
  19300. }, [
  19301. !$setup.loading ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  19302. key: 0,
  19303. type: "checkmarkempty",
  19304. size: "18",
  19305. color: "white"
  19306. })) : vue.createCommentVNode("v-if", true),
  19307. vue.createTextVNode(" 提交 ")
  19308. ], 8, ["loading"])
  19309. ]),
  19310. $setup.waybillNoHistory.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  19311. key: 0,
  19312. class: "history"
  19313. }, [
  19314. vue.createElementVNode("text", { class: "title" }, "记录(最近5条)")
  19315. ])) : vue.createCommentVNode("v-if", true),
  19316. vue.createElementVNode("view", { class: "history" }, [
  19317. (vue.openBlock(true), vue.createElementBlock(
  19318. vue.Fragment,
  19319. null,
  19320. vue.renderList($setup.waybillNoHistory.slice(0, 5), (item, i2) => {
  19321. return vue.openBlock(), vue.createElementBlock("view", {
  19322. class: "item",
  19323. key: i2
  19324. }, [
  19325. vue.createElementVNode("view", null, [
  19326. vue.createElementVNode("view", null, [
  19327. vue.createElementVNode("text", { class: "type" }, "库位"),
  19328. vue.createElementVNode(
  19329. "text",
  19330. {
  19331. class: "code",
  19332. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  19333. },
  19334. vue.toDisplayString(item.space),
  19335. 5
  19336. /* TEXT, STYLE */
  19337. )
  19338. ]),
  19339. vue.createElementVNode("view", null, [
  19340. vue.createElementVNode("text", { class: "type" }, "单号"),
  19341. vue.createElementVNode(
  19342. "text",
  19343. {
  19344. class: "code",
  19345. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  19346. },
  19347. vue.toDisplayString(item.code),
  19348. 5
  19349. /* TEXT, STYLE */
  19350. )
  19351. ]),
  19352. vue.createElementVNode("view", { class: "space-time" }, [
  19353. vue.createElementVNode(
  19354. "text",
  19355. null,
  19356. vue.toDisplayString(item.createTime),
  19357. 1
  19358. /* TEXT */
  19359. )
  19360. ])
  19361. ]),
  19362. vue.createElementVNode("view", null, [
  19363. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  19364. key: 0,
  19365. type: "checkmarkempty",
  19366. class: "status",
  19367. size: "16",
  19368. color: "green"
  19369. })) : (vue.openBlock(), vue.createElementBlock("text", {
  19370. key: 1,
  19371. class: "status fail"
  19372. }, "F"))
  19373. ])
  19374. ]);
  19375. }),
  19376. 128
  19377. /* KEYED_FRAGMENT */
  19378. ))
  19379. ]),
  19380. vue.createVNode(
  19381. _component_uni_popup,
  19382. {
  19383. ref: "messageRef",
  19384. type: "message"
  19385. },
  19386. {
  19387. default: vue.withCtx(() => [
  19388. vue.createVNode(_component_uni_popup_message, {
  19389. type: $setup.messageType,
  19390. message: $setup.messageText,
  19391. duration: 2e3
  19392. }, null, 8, ["type", "message"])
  19393. ]),
  19394. _: 1
  19395. /* STABLE */
  19396. },
  19397. 512
  19398. /* NEED_PATCH */
  19399. )
  19400. ]);
  19401. }
  19402. const PagesWaybillNoWaybillNo = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$h], ["__file", "E:/demo/hmrabbit/src/pages/waybillNo/waybillNo.vue"]]);
  19403. const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
  19404. __name: "logList",
  19405. setup(__props, { expose: __expose }) {
  19406. __expose();
  19407. const waybillNoHistory = vue.ref([]);
  19408. const getHistory = async () => {
  19409. waybillNoHistory.value = uni.getStorageSync("waybillNoHistory");
  19410. };
  19411. onLoad(async () => {
  19412. await getHistory();
  19413. });
  19414. const __returned__ = { waybillNoHistory, getHistory };
  19415. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  19416. return __returned__;
  19417. }
  19418. });
  19419. function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
  19420. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  19421. return vue.openBlock(), vue.createElementBlock("view", { class: "history" }, [
  19422. (vue.openBlock(true), vue.createElementBlock(
  19423. vue.Fragment,
  19424. null,
  19425. vue.renderList($setup.waybillNoHistory, (item, i2) => {
  19426. return vue.openBlock(), vue.createElementBlock("view", {
  19427. class: "item",
  19428. key: i2
  19429. }, [
  19430. vue.createCommentVNode(` <text class="type">库位</text>\r
  19431. <text clsaa="code" :style="{ color: item.status ? 'green' : '#666' }">{{ item.space }}</text>\r
  19432. <view>\r
  19433. <text class="type">单号</text>\r
  19434. <text class="code" ;style="{color : item.status ? 'green' : '#666'}">{{ item.code }}</text>\r
  19435. </view>\r
  19436. <view class="space-time">\r
  19437. <text>\r
  19438. {{ item.createTime }}\r
  19439. </text>\r
  19440. </view>\r
  19441. </view>\r
  19442. </view>\r
  19443. \r
  19444. <view v-if="waybillNoHistory.length === 0" class="is-empty">暂无历史</view>\r
  19445. <view class="history">\r
  19446. <view class="title">历史运单号</view>\r
  19447. <view v-for="(item, index) in waybillNoHistory" :key="index" class="item">\r
  19448. <view class="type">运单号:</view>\r
  19449. <view class="code">{{ item }}</view>\r
  19450. <view class="status">\r
  19451. <text class="fail">已失效</text>\r
  19452. </view>-`),
  19453. vue.createElementVNode(
  19454. "text",
  19455. {
  19456. class: "code",
  19457. style: vue.normalizeStyle({ color: item.status ? "green" : "#666" })
  19458. },
  19459. [
  19460. vue.createTextVNode(
  19461. vue.toDisplayString(item.orderNum) + " ",
  19462. 1
  19463. /* TEXT */
  19464. ),
  19465. item.batch_text ? (vue.openBlock(), vue.createElementBlock(
  19466. "text",
  19467. { key: 0 },
  19468. " 单号 " + vue.toDisplayString(item.batch_text),
  19469. 1
  19470. /* TEXT */
  19471. )) : vue.createCommentVNode("v-if", true),
  19472. item.space ? (vue.openBlock(), vue.createElementBlock(
  19473. "text",
  19474. { key: 1 },
  19475. " 库位 " + vue.toDisplayString(item.space),
  19476. 1
  19477. /* TEXT */
  19478. )) : vue.createCommentVNode("v-if", true),
  19479. vue.createTextVNode(
  19480. " " + vue.toDisplayString(item.type),
  19481. 1
  19482. /* TEXT */
  19483. )
  19484. ],
  19485. 4
  19486. /* STYLE */
  19487. ),
  19488. item.status ? (vue.openBlock(), vue.createBlock(_component_uni_icons, {
  19489. key: 0,
  19490. type: "checkmarkempty",
  19491. class: "status",
  19492. size: "16",
  19493. color: "green"
  19494. })) : (vue.openBlock(), vue.createElementBlock("text", {
  19495. key: 1,
  19496. class: "status fail"
  19497. }, "F")),
  19498. vue.createElementVNode(
  19499. "text",
  19500. { style: { "margin-left": "10rpx", "font-weight": "300" } },
  19501. vue.toDisplayString("\r\n" + item.createTime),
  19502. 1
  19503. /* TEXT */
  19504. )
  19505. ]);
  19506. }),
  19507. 128
  19508. /* KEYED_FRAGMENT */
  19509. )),
  19510. $setup.waybillNoHistory.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  19511. key: 0,
  19512. class: "is-empty"
  19513. }, "暂无历史")) : vue.createCommentVNode("v-if", true)
  19514. ]);
  19515. }
  19516. const PagesWaybillNoLogList = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$g], ["__scopeId", "data-v-c93ee9b5"], ["__file", "E:/demo/hmrabbit/src/pages/waybillNo/logList.vue"]]);
  19517. const waybillPickUpOrders = (params) => {
  19518. return http({
  19519. method: "GET",
  19520. url: "/admin/pickup.waybillPickUpOrder/index",
  19521. data: params
  19522. });
  19523. };
  19524. const getPickUpById = (pick_up_order_id) => {
  19525. return http({
  19526. method: "GET",
  19527. url: "/admin/pickup.waybillPickUpOrder/detail",
  19528. data: { pick_up_order_id }
  19529. });
  19530. };
  19531. const getPickUpByWaybillNo = (waybill_no) => {
  19532. return http({
  19533. method: "GET",
  19534. url: "/admin/pickup.waybillPickUpOrder/getByWaybillNo",
  19535. data: { waybill_no }
  19536. });
  19537. };
  19538. const startOff = (data) => {
  19539. return http({
  19540. method: "POST",
  19541. url: "/admin/pickup.waybillPickUpOrder/startOff",
  19542. data
  19543. });
  19544. };
  19545. function collect(data) {
  19546. return http({
  19547. method: "POST",
  19548. url: "/admin/pickup.waybillPickUpOrder/collect",
  19549. data
  19550. });
  19551. }
  19552. function pickupDelivered(data) {
  19553. return http({
  19554. method: "POST",
  19555. url: "/admin/pickup.waybillPickUpOrder/delivered",
  19556. data
  19557. });
  19558. }
  19559. function deliveryToTheCourierPoint(data) {
  19560. return http({
  19561. method: "POST",
  19562. url: "/admin/pickup.waybillPickUpOrder/deliveryToTheCourierPoint",
  19563. data
  19564. });
  19565. }
  19566. const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
  19567. __name: "waybillPickUpOrder",
  19568. setup(__props, { expose: __expose }) {
  19569. __expose();
  19570. let sendOutURL = "";
  19571. let deliveredURL = "";
  19572. let refuseURL = "";
  19573. let createTrackPodURL = "";
  19574. let cancelFedExPickUpURL = "";
  19575. const loading = vue.ref(false);
  19576. const loadingBtn = vue.ref(false);
  19577. const searchValue = vue.ref();
  19578. const waybillDelivery = vue.ref([]);
  19579. const total = vue.ref();
  19580. const messageType = vue.ref();
  19581. const messageText = vue.ref();
  19582. const messageRef = vue.ref();
  19583. const showRightRef = vue.ref();
  19584. const params = vue.reactive({
  19585. page: 1,
  19586. limit: 10
  19587. });
  19588. const scrollLeft = vue.ref(0);
  19589. const contentScrollW = vue.ref(0);
  19590. const activeIndex = vue.ref(0);
  19591. const statusItems = vue.ref([
  19592. {
  19593. id: 1,
  19594. title: "全部",
  19595. value: 0
  19596. },
  19597. {
  19598. id: 2,
  19599. title: "待取件",
  19600. value: 2
  19601. },
  19602. {
  19603. id: 3,
  19604. title: "取件中",
  19605. value: 3
  19606. },
  19607. {
  19608. id: 4,
  19609. title: "部分取件",
  19610. value: 4
  19611. },
  19612. {
  19613. id: 5,
  19614. title: "全部取件",
  19615. value: 5
  19616. },
  19617. {
  19618. id: 6,
  19619. title: "部分投递",
  19620. value: 6
  19621. },
  19622. {
  19623. id: 7,
  19624. title: "全部投递",
  19625. value: 7
  19626. }
  19627. ]);
  19628. const changeMenu = (index) => {
  19629. activeIndex.value = index;
  19630. scrollLeft.value = statusItems.value[index].left - contentScrollW.value / 2 + statusItems.value[index].width / 2;
  19631. };
  19632. const resetForm = () => {
  19633. };
  19634. const confirmForm = () => {
  19635. showRightRef.value.close();
  19636. };
  19637. const copyOrderNo = (order_no) => {
  19638. uni.setClipboardData({
  19639. data: order_no,
  19640. success: function() {
  19641. uni.showToast({
  19642. title: "复制成功",
  19643. icon: "success",
  19644. duration: 2e3
  19645. });
  19646. },
  19647. fail: function() {
  19648. formatAppLog("log", "at pages/pickup/waybillPickUpOrder.vue:188", "复制失败");
  19649. }
  19650. });
  19651. };
  19652. const callPhone = (phoneNumber) => {
  19653. formatAppLog("log", "at pages/pickup/waybillPickUpOrder.vue:194", phoneNumber);
  19654. uni.makePhoneCall({
  19655. phoneNumber,
  19656. success: function() {
  19657. formatAppLog("log", "at pages/pickup/waybillPickUpOrder.vue:199", "拨打电话成功!");
  19658. },
  19659. fail: function() {
  19660. formatAppLog("log", "at pages/pickup/waybillPickUpOrder.vue:202", "拨打电话失败!");
  19661. }
  19662. });
  19663. };
  19664. const scanInput = async () => {
  19665. let status = await checkPermission();
  19666. if (status !== 1) {
  19667. return;
  19668. }
  19669. uni.scanCode({
  19670. success: (res) => {
  19671. formatAppLog("log", "at pages/pickup/waybillPickUpOrder.vue:229", "res---", res.result);
  19672. },
  19673. fail: (err) => {
  19674. }
  19675. });
  19676. };
  19677. const getList = async () => {
  19678. loading.value = true;
  19679. params.page = 1;
  19680. const res = await waybillPickUpOrders(params);
  19681. loading.value = false;
  19682. if (res.code == 1) {
  19683. waybillDelivery.value = res.data.list;
  19684. total.value = res.data.total;
  19685. } else {
  19686. messageType.value = "error";
  19687. messageText.value = res.msg;
  19688. messageRef.value.open();
  19689. }
  19690. };
  19691. onShow(() => {
  19692. getList();
  19693. });
  19694. vue.onMounted(() => {
  19695. getScrollW();
  19696. });
  19697. onNavigationBarButtonTap(async (event) => {
  19698. if (event.index === 0) {
  19699. const res = await getPickUpByWaybillNo("YTSEA2412080001GB01");
  19700. if (res.code == 1 && res.data.id) {
  19701. uni.navigateTo({
  19702. url: `/pages/pickup/waybillPickUpDetail?waybill_no=${res.data.waybill_no}`
  19703. });
  19704. } else {
  19705. messageType.value = "error";
  19706. messageText.value = "面单不存在";
  19707. messageRef.value.open();
  19708. }
  19709. }
  19710. });
  19711. const getScrollW = () => {
  19712. const instance = vue.getCurrentInstance();
  19713. const query = uni.createSelectorQuery().in(instance.proxy);
  19714. query.select(".scroll-view").boundingClientRect((data) => {
  19715. contentScrollW.value = data.width;
  19716. }).exec();
  19717. query.selectAll(".scroll-item").boundingClientRect((data) => {
  19718. let dataLen = data.length - 1;
  19719. for (let i2 = 0; i2 < dataLen; i2++) {
  19720. statusItems.value[i2].left = data[i2].left || 0;
  19721. statusItems.value[i2].width = data[i2].width;
  19722. }
  19723. }).exec();
  19724. };
  19725. const onScrolltolower = async () => {
  19726. if (waybillDelivery.value.length < total.value) {
  19727. params.page++;
  19728. } else {
  19729. return uni.showToast({ icon: "none", title: "没有更多数据了~" });
  19730. }
  19731. const res = await waybillPickUpOrders(params);
  19732. if (res.code == 1) {
  19733. waybillDelivery.value.push(...res.data.list);
  19734. total.value = res.data.total;
  19735. }
  19736. };
  19737. const __returned__ = { get sendOutURL() {
  19738. return sendOutURL;
  19739. }, set sendOutURL(v2) {
  19740. sendOutURL = v2;
  19741. }, get deliveredURL() {
  19742. return deliveredURL;
  19743. }, set deliveredURL(v2) {
  19744. deliveredURL = v2;
  19745. }, get refuseURL() {
  19746. return refuseURL;
  19747. }, set refuseURL(v2) {
  19748. refuseURL = v2;
  19749. }, get createTrackPodURL() {
  19750. return createTrackPodURL;
  19751. }, set createTrackPodURL(v2) {
  19752. createTrackPodURL = v2;
  19753. }, get cancelFedExPickUpURL() {
  19754. return cancelFedExPickUpURL;
  19755. }, set cancelFedExPickUpURL(v2) {
  19756. cancelFedExPickUpURL = v2;
  19757. }, loading, loadingBtn, searchValue, waybillDelivery, total, messageType, messageText, messageRef, showRightRef, params, scrollLeft, contentScrollW, activeIndex, statusItems, changeMenu, resetForm, confirmForm, copyOrderNo, callPhone, scanInput, getList, getScrollW, onScrolltolower };
  19758. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  19759. return __returned__;
  19760. }
  19761. });
  19762. function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
  19763. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  19764. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  19765. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  19766. return vue.openBlock(), vue.createElementBlock("view", { class: "viewport" }, [
  19767. vue.createCommentVNode(" 输入框和筛选按钮 "),
  19768. vue.createElementVNode("view", { class: "inputfilter" }, [
  19769. vue.createVNode(_component_uni_easyinput, {
  19770. modelValue: $setup.searchValue,
  19771. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchValue = $event),
  19772. placeholder: "请输入单号",
  19773. inputBorder: false
  19774. }, null, 8, ["modelValue"]),
  19775. vue.createElementVNode("view", { class: "filter" }, [
  19776. vue.createElementVNode("text", null, "筛选")
  19777. ])
  19778. ]),
  19779. vue.createCommentVNode(" 状态选项 "),
  19780. vue.createElementVNode("view", { class: "center-cut-menu" }, [
  19781. vue.createElementVNode("scroll-view", {
  19782. "scroll-x": true,
  19783. "scroll-with-animation": true,
  19784. "show-scrollbar": false,
  19785. class: "scroll-view",
  19786. "scroll-left": $setup.scrollLeft
  19787. }, [
  19788. vue.createElementVNode("view", { class: "scroll-item" }, [
  19789. (vue.openBlock(true), vue.createElementBlock(
  19790. vue.Fragment,
  19791. null,
  19792. vue.renderList($setup.statusItems, (item, index) => {
  19793. return vue.openBlock(), vue.createElementBlock("view", {
  19794. class: "scroll-item",
  19795. key: item.id,
  19796. onClick: ($event) => $setup.changeMenu(index)
  19797. }, [
  19798. vue.createElementVNode(
  19799. "text",
  19800. {
  19801. class: vue.normalizeClass(["item-text", $setup.activeIndex == index ? "active" : ""])
  19802. },
  19803. vue.toDisplayString(item.title),
  19804. 3
  19805. /* TEXT, CLASS */
  19806. )
  19807. ], 8, ["onClick"]);
  19808. }),
  19809. 128
  19810. /* KEYED_FRAGMENT */
  19811. ))
  19812. ])
  19813. ], 8, ["scroll-left"])
  19814. ]),
  19815. vue.createCommentVNode(" 列表 "),
  19816. vue.createElementVNode(
  19817. "scroll-view",
  19818. {
  19819. "enable-back-to-top": "",
  19820. "scroll-y": "",
  19821. class: "scroll-view",
  19822. onScrolltolower: $setup.onScrolltolower
  19823. },
  19824. [
  19825. vue.createElementVNode("view", { class: "orders" }, [
  19826. (vue.openBlock(true), vue.createElementBlock(
  19827. vue.Fragment,
  19828. null,
  19829. vue.renderList($setup.waybillDelivery, (item, i2) => {
  19830. var _a, _b, _c, _d, _e2, _f;
  19831. return vue.openBlock(), vue.createElementBlock("navigator", {
  19832. "hover-class": "none",
  19833. class: "navigator",
  19834. key: i2,
  19835. url: `/pages/pickup/waybillPickUpDetails?id=${item.id}`
  19836. }, [
  19837. vue.createElementVNode("view", { class: "order_no_state" }, [
  19838. vue.createElementVNode("view", { class: "order_no" }, [
  19839. vue.createElementVNode("text", { class: "title" }, "订单号"),
  19840. vue.createElementVNode(
  19841. "text",
  19842. { class: "content" },
  19843. vue.toDisplayString(item.order_no),
  19844. 1
  19845. /* TEXT */
  19846. )
  19847. ]),
  19848. vue.createElementVNode("view", { class: "order_state" }, [
  19849. vue.createElementVNode(
  19850. "text",
  19851. {
  19852. class: vue.normalizeClass(`state-${item.status}`)
  19853. },
  19854. vue.toDisplayString(item.status_text),
  19855. 3
  19856. /* TEXT, CLASS */
  19857. )
  19858. ])
  19859. ]),
  19860. vue.createElementVNode("view", { class: "pick_up_date" }, [
  19861. vue.createElementVNode(
  19862. "text",
  19863. null,
  19864. vue.toDisplayString(item.pick_up_date),
  19865. 1
  19866. /* TEXT */
  19867. )
  19868. ]),
  19869. vue.createElementVNode("view", { class: "segmentation-line" }),
  19870. vue.createElementVNode("view", { class: "address" }, [
  19871. vue.createElementVNode("view", { class: "user-info" }, [
  19872. vue.createElementVNode(
  19873. "text",
  19874. { class: "user" },
  19875. vue.toDisplayString(((_a = item.address) == null ? void 0 : _a.first_name) + " " + ((_b = item.address) == null ? void 0 : _b.last_name)),
  19876. 1
  19877. /* TEXT */
  19878. ),
  19879. vue.createElementVNode(
  19880. "text",
  19881. { class: "mobile" },
  19882. "+" + vue.toDisplayString(((_c = item.address) == null ? void 0 : _c.mobile_code) + " " + ((_d = item.address) == null ? void 0 : _d.mobile)),
  19883. 1
  19884. /* TEXT */
  19885. )
  19886. ]),
  19887. vue.createElementVNode("view", { class: "address-info" }, [
  19888. vue.createElementVNode(
  19889. "text",
  19890. null,
  19891. vue.toDisplayString((_e2 = item.address) == null ? void 0 : _e2.city),
  19892. 1
  19893. /* TEXT */
  19894. ),
  19895. vue.createElementVNode(
  19896. "text",
  19897. null,
  19898. vue.toDisplayString((_f = item.address) == null ? void 0 : _f.zip_code),
  19899. 1
  19900. /* TEXT */
  19901. )
  19902. ])
  19903. ]),
  19904. vue.createElementVNode("view", null, [
  19905. (vue.openBlock(true), vue.createElementBlock(
  19906. vue.Fragment,
  19907. null,
  19908. vue.renderList(item.goods, (good) => {
  19909. return vue.openBlock(), vue.createElementBlock("view", {
  19910. key: good.id,
  19911. class: "goods"
  19912. }, [
  19913. vue.createElementVNode("text", { class: "item" }, [
  19914. vue.createTextVNode(
  19915. vue.toDisplayString(good.name) + " ",
  19916. 1
  19917. /* TEXT */
  19918. ),
  19919. vue.createElementVNode(
  19920. "text",
  19921. { class: "qty" },
  19922. " x" + vue.toDisplayString(good.qty),
  19923. 1
  19924. /* TEXT */
  19925. )
  19926. ])
  19927. ]);
  19928. }),
  19929. 128
  19930. /* KEYED_FRAGMENT */
  19931. ))
  19932. ])
  19933. ], 8, ["url"]);
  19934. }),
  19935. 128
  19936. /* KEYED_FRAGMENT */
  19937. ))
  19938. ]),
  19939. vue.createElementVNode(
  19940. "view",
  19941. { class: "loading-text" },
  19942. vue.toDisplayString($setup.total === $setup.waybillDelivery.length ? "没有更多数据了~" : "正在加载..."),
  19943. 1
  19944. /* TEXT */
  19945. )
  19946. ],
  19947. 32
  19948. /* NEED_HYDRATION */
  19949. ),
  19950. vue.createVNode(
  19951. _component_uni_popup,
  19952. {
  19953. ref: "messageRef",
  19954. type: "message"
  19955. },
  19956. {
  19957. default: vue.withCtx(() => [
  19958. vue.createVNode(_component_uni_popup_message, {
  19959. type: $setup.messageType,
  19960. message: $setup.messageText,
  19961. duration: 2e3
  19962. }, null, 8, ["type", "message"])
  19963. ]),
  19964. _: 1
  19965. /* STABLE */
  19966. },
  19967. 512
  19968. /* NEED_PATCH */
  19969. )
  19970. ]);
  19971. }
  19972. const PagesPickupWaybillPickUpOrder = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$f], ["__scopeId", "data-v-cb3c2bb0"], ["__file", "E:/demo/hmrabbit/src/pages/pickup/waybillPickUpOrder.vue"]]);
  19973. const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
  19974. __name: "waybillPickUpDetails",
  19975. props: {
  19976. id: { type: String, required: true }
  19977. },
  19978. setup(__props, { expose: __expose }) {
  19979. __expose();
  19980. const { safeAreaInsets } = uni.getSystemInfoSync();
  19981. const query = __props;
  19982. const messageRef = vue.ref();
  19983. const message = vue.ref({
  19984. type: "success",
  19985. text: ""
  19986. });
  19987. const details = vue.ref();
  19988. const getOrderByIdData = async () => {
  19989. const res = await getPickUpById(query.id);
  19990. details.value = res.data.details;
  19991. };
  19992. onShow(() => {
  19993. getOrderByIdData();
  19994. });
  19995. const onTapImage = (url) => {
  19996. uni.previewImage({
  19997. current: url,
  19998. urls: goods.value.mainPictures
  19999. });
  20000. };
  20001. const onButtonClick = async (id, value) => {
  20002. switch (value) {
  20003. case "start_off":
  20004. startOff({ id }).then((res) => {
  20005. getOrderByIdData();
  20006. message.value.text = "发出成功";
  20007. message.value.type = "success";
  20008. messageRef.value.open();
  20009. }).catch(() => {
  20010. message.value.text = "发出失败,请稍后重试";
  20011. message.value.type = "error";
  20012. messageRef.value.open();
  20013. });
  20014. break;
  20015. case "collect":
  20016. collect({ id }).then((res) => {
  20017. getOrderByIdData();
  20018. message.value.text = "揽收成功";
  20019. message.value.type = "success";
  20020. messageRef.value.open();
  20021. }).catch(() => {
  20022. message.value.text = "揽收失败,请稍后重试";
  20023. message.value.type = "error";
  20024. messageRef.value.open();
  20025. });
  20026. break;
  20027. case "arrive":
  20028. pickupDelivered({ id }).then((res) => {
  20029. getOrderByIdData();
  20030. message.value.text = "修改成功";
  20031. message.value.type = "success";
  20032. messageRef.value.open();
  20033. }).catch(() => {
  20034. message.value.text = "修改失败,请稍后重试";
  20035. message.value.type = "error";
  20036. messageRef.value.open();
  20037. });
  20038. break;
  20039. case "delivery_to_the_courier_point":
  20040. deliveryToTheCourierPoint({ id, courier_point: "", images: [""] }).then((res) => {
  20041. getOrderByIdData();
  20042. message.value.text = "修改成功";
  20043. message.value.type = "success";
  20044. messageRef.value.open();
  20045. }).catch(() => {
  20046. message.value.text = "修改失败,请稍后重试";
  20047. message.value.type = "error";
  20048. messageRef.value.open();
  20049. });
  20050. break;
  20051. }
  20052. };
  20053. const contactClient = () => {
  20054. uni.makePhoneCall({
  20055. phoneNumber: "13200000000"
  20056. });
  20057. };
  20058. const __returned__ = { safeAreaInsets, query, messageRef, message, details, getOrderByIdData, onTapImage, onButtonClick, contactClient };
  20059. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  20060. return __returned__;
  20061. }
  20062. });
  20063. function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
  20064. var _a;
  20065. const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$8);
  20066. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  20067. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  20068. return vue.openBlock(), vue.createElementBlock(
  20069. vue.Fragment,
  20070. null,
  20071. [
  20072. vue.createElementVNode("scroll-view", {
  20073. "enable-back-to-top": "",
  20074. "scroll-y": "",
  20075. class: "viewport"
  20076. }, [
  20077. vue.createElementVNode("view", { class: "detail panel" }, [
  20078. vue.createElementVNode("view", { class: "title" }, [
  20079. vue.createElementVNode("text", null, "运单列表")
  20080. ]),
  20081. vue.createElementVNode("view", { class: "content" }, [
  20082. vue.createElementVNode("view", { class: "properties" }, [
  20083. (vue.openBlock(true), vue.createElementBlock(
  20084. vue.Fragment,
  20085. null,
  20086. vue.renderList($setup.details, (item) => {
  20087. return vue.openBlock(), vue.createElementBlock("view", {
  20088. key: item.id,
  20089. class: "item"
  20090. }, [
  20091. vue.createElementVNode("navigator", {
  20092. url: `/pages/pickup/waybillPickUpDetail?waybill_no=${item.waybill_no}`
  20093. }, [
  20094. vue.createElementVNode("view", { class: "order_no_state" }, [
  20095. vue.createElementVNode("view", null, [
  20096. vue.createElementVNode(
  20097. "text",
  20098. null,
  20099. vue.toDisplayString(item.waybill_no),
  20100. 1
  20101. /* TEXT */
  20102. )
  20103. ]),
  20104. vue.createElementVNode("view", { class: "order_state" }, [
  20105. vue.createElementVNode(
  20106. "text",
  20107. {
  20108. class: vue.normalizeClass("state-" + item.status)
  20109. },
  20110. vue.toDisplayString(item.status_text),
  20111. 3
  20112. /* TEXT, CLASS */
  20113. )
  20114. ])
  20115. ])
  20116. ], 8, ["url"]),
  20117. vue.createElementVNode("view", { class: "info" }, [
  20118. vue.createElementVNode("view", null, [
  20119. vue.createTextVNode(" 预估重量: "),
  20120. vue.createElementVNode(
  20121. "text",
  20122. null,
  20123. vue.toDisplayString(item.estimated_weight) + "KG",
  20124. 1
  20125. /* TEXT */
  20126. )
  20127. ]),
  20128. vue.createElementVNode("view", null, [
  20129. vue.createTextVNode(" Ups 取件码: "),
  20130. vue.createElementVNode(
  20131. "text",
  20132. null,
  20133. vue.toDisplayString(item.ups_prn || "无"),
  20134. 1
  20135. /* TEXT */
  20136. )
  20137. ]),
  20138. vue.createElementVNode("view", null, [
  20139. vue.createTextVNode(" Ups 准备时间: "),
  20140. vue.createElementVNode(
  20141. "text",
  20142. null,
  20143. vue.toDisplayString(item.ups_ready_time || "无"),
  20144. 1
  20145. /* TEXT */
  20146. )
  20147. ]),
  20148. vue.createElementVNode("view", null, [
  20149. vue.createTextVNode(" Ups 截止时间: "),
  20150. vue.createElementVNode(
  20151. "text",
  20152. null,
  20153. vue.toDisplayString(item.ups_close_time || "无"),
  20154. 1
  20155. /* TEXT */
  20156. )
  20157. ]),
  20158. vue.createElementVNode("view", { class: "label-info" }, [
  20159. vue.createElementVNode("text", null, "面单"),
  20160. item.labels.length === 0 ? (vue.openBlock(), vue.createElementBlock("text", {
  20161. key: 0,
  20162. class: "empty"
  20163. }, "暂未生成")) : (vue.openBlock(), vue.createElementBlock("text", { key: 1 }, [
  20164. vue.createTextVNode(
  20165. "(" + vue.toDisplayString(item.labels.length) + ") ",
  20166. 1
  20167. /* TEXT */
  20168. ),
  20169. vue.createVNode(_component_uni_icons, {
  20170. type: "search",
  20171. size: "16",
  20172. color: "#007bff"
  20173. })
  20174. ]))
  20175. ])
  20176. ]),
  20177. vue.createCommentVNode(" 操作按钮 "),
  20178. vue.createElementVNode("view", { class: "operations" }, [
  20179. (vue.openBlock(true), vue.createElementBlock(
  20180. vue.Fragment,
  20181. null,
  20182. vue.renderList(item.operations, (operation) => {
  20183. return vue.openBlock(), vue.createElementBlock("view", {
  20184. key: operation.value
  20185. }, [
  20186. vue.createElementVNode("button", {
  20187. class: "mini-btn",
  20188. type: "primary",
  20189. size: "mini",
  20190. onClick: ($event) => $setup.onButtonClick(item.id, operation.value)
  20191. }, vue.toDisplayString(operation.text), 9, ["onClick"])
  20192. ]);
  20193. }),
  20194. 128
  20195. /* KEYED_FRAGMENT */
  20196. ))
  20197. ]),
  20198. vue.createElementVNode("view", { class: "title label" }, [
  20199. vue.createElementVNode("text", null, [
  20200. vue.createTextVNode("物品清单 "),
  20201. !item.goods.length ? (vue.openBlock(), vue.createElementBlock("text", {
  20202. key: 0,
  20203. class: "bln"
  20204. }, "无")) : vue.createCommentVNode("v-if", true)
  20205. ])
  20206. ]),
  20207. (vue.openBlock(true), vue.createElementBlock(
  20208. vue.Fragment,
  20209. null,
  20210. vue.renderList(item.goods, (good, g2) => {
  20211. return vue.openBlock(), vue.createElementBlock("view", {
  20212. key: g2,
  20213. class: "goods"
  20214. }, [
  20215. vue.createElementVNode("view", null, [
  20216. vue.createTextVNode("类型: "),
  20217. vue.createElementVNode(
  20218. "text",
  20219. null,
  20220. vue.toDisplayString(good.category_name),
  20221. 1
  20222. /* TEXT */
  20223. )
  20224. ]),
  20225. vue.createElementVNode("view", null, [
  20226. vue.createTextVNode("名称: "),
  20227. vue.createElementVNode(
  20228. "text",
  20229. null,
  20230. vue.toDisplayString(good.goods_name),
  20231. 1
  20232. /* TEXT */
  20233. ),
  20234. vue.createElementVNode(
  20235. "text",
  20236. { style: { "color": "#666666", "font-size": "22rpx" } },
  20237. vue.toDisplayString(" x" + good.qty),
  20238. 1
  20239. /* TEXT */
  20240. )
  20241. ]),
  20242. vue.createElementVNode("view", null, [
  20243. vue.createTextVNode("价格: "),
  20244. vue.createElementVNode(
  20245. "text",
  20246. null,
  20247. "£" + vue.toDisplayString(good.price),
  20248. 1
  20249. /* TEXT */
  20250. )
  20251. ]),
  20252. vue.createElementVNode("view", null, [
  20253. vue.createTextVNode("合计: "),
  20254. vue.createElementVNode(
  20255. "text",
  20256. null,
  20257. "£" + vue.toDisplayString(good.amount),
  20258. 1
  20259. /* TEXT */
  20260. )
  20261. ]),
  20262. vue.createCommentVNode(' <image\r\n class="image"\r\n v-for="item in good.images"\r\n :key="item"\r\n mode="widthFix"\r\n :src="item"\r\n ></image> ')
  20263. ]);
  20264. }),
  20265. 128
  20266. /* KEYED_FRAGMENT */
  20267. ))
  20268. ]);
  20269. }),
  20270. 128
  20271. /* KEYED_FRAGMENT */
  20272. ))
  20273. ]),
  20274. vue.createCommentVNode(" 图片详情 ")
  20275. ]),
  20276. vue.createVNode(
  20277. _component_uni_popup,
  20278. {
  20279. ref: "messageRef",
  20280. type: "message"
  20281. },
  20282. {
  20283. default: vue.withCtx(() => [
  20284. vue.createVNode(_component_uni_popup_message, {
  20285. type: $setup.message.type,
  20286. message: $setup.message.text,
  20287. duration: 2e3
  20288. }, null, 8, ["type", "message"])
  20289. ]),
  20290. _: 1
  20291. /* STABLE */
  20292. },
  20293. 512
  20294. /* NEED_PATCH */
  20295. )
  20296. ])
  20297. ]),
  20298. vue.createCommentVNode(" 用户操作 "),
  20299. $setup.details ? (vue.openBlock(), vue.createElementBlock(
  20300. "view",
  20301. {
  20302. key: 0,
  20303. class: "contact-client",
  20304. style: vue.normalizeStyle({ paddingBottom: ((_a = $setup.safeAreaInsets) == null ? void 0 : _a.bottom) + "px" })
  20305. },
  20306. [
  20307. vue.createElementVNode("view", { class: "buttons" }, [
  20308. vue.createElementVNode("view", {
  20309. onClick: $setup.contactClient,
  20310. class: "payment"
  20311. }, " 联系客户 ")
  20312. ])
  20313. ],
  20314. 4
  20315. /* STYLE */
  20316. )) : vue.createCommentVNode("v-if", true)
  20317. ],
  20318. 64
  20319. /* STABLE_FRAGMENT */
  20320. );
  20321. }
  20322. const PagesPickupWaybillPickUpDetails = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$e], ["__file", "E:/demo/hmrabbit/src/pages/pickup/waybillPickUpDetails.vue"]]);
  20323. const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
  20324. __name: "waybillPickUpDetail",
  20325. props: {
  20326. waybill_no: { type: String, required: true }
  20327. },
  20328. setup(__props, { expose: __expose }) {
  20329. __expose();
  20330. const { safeAreaInsets } = uni.getSystemInfoSync();
  20331. const query = __props;
  20332. const detail = vue.ref();
  20333. const getOrderByIdData = async () => {
  20334. const res = await getPickUpByWaybillNo(query.waybill_no);
  20335. detail.value = res.data;
  20336. };
  20337. onLoad(() => {
  20338. getOrderByIdData();
  20339. });
  20340. const onTapImage = (url) => {
  20341. uni.previewImage({
  20342. current: url,
  20343. urls: goods.value.mainPictures
  20344. });
  20345. };
  20346. const contactClient = () => {
  20347. uni.makePhoneCall({
  20348. phoneNumber: "13200000000"
  20349. });
  20350. };
  20351. const __returned__ = { safeAreaInsets, query, detail, getOrderByIdData, onTapImage, contactClient };
  20352. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  20353. return __returned__;
  20354. }
  20355. });
  20356. function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
  20357. var _a;
  20358. return vue.openBlock(), vue.createElementBlock(
  20359. vue.Fragment,
  20360. null,
  20361. [
  20362. vue.createElementVNode("scroll-view", {
  20363. "enable-back-to-top": "",
  20364. "scroll-y": "",
  20365. class: "viewport"
  20366. }, [
  20367. vue.createElementVNode("view", { class: "detail panel" }, [
  20368. vue.createElementVNode("view", { class: "content" }, [
  20369. vue.createElementVNode("view", { class: "properties" }, [
  20370. $setup.detail ? (vue.openBlock(), vue.createElementBlock("view", {
  20371. key: 0,
  20372. class: "item"
  20373. }, [
  20374. vue.createElementVNode("view", { class: "order_no_state" }, [
  20375. vue.createElementVNode("view", null, [
  20376. vue.createElementVNode(
  20377. "text",
  20378. null,
  20379. vue.toDisplayString($setup.detail.waybill_no),
  20380. 1
  20381. /* TEXT */
  20382. )
  20383. ]),
  20384. vue.createElementVNode("view", { class: "order_state" }, [
  20385. vue.createElementVNode(
  20386. "text",
  20387. {
  20388. class: vue.normalizeClass("state-" + $setup.detail.status)
  20389. },
  20390. vue.toDisplayString($setup.detail.status_text),
  20391. 3
  20392. /* TEXT, CLASS */
  20393. )
  20394. ])
  20395. ]),
  20396. vue.createElementVNode("view", { class: "info" }, [
  20397. vue.createElementVNode("view", null, [
  20398. vue.createTextVNode(" 预估重量: "),
  20399. vue.createElementVNode(
  20400. "text",
  20401. null,
  20402. vue.toDisplayString($setup.detail.estimated_weight) + "KG",
  20403. 1
  20404. /* TEXT */
  20405. )
  20406. ]),
  20407. vue.createElementVNode("view", null, [
  20408. vue.createTextVNode(" Ups 取件码: "),
  20409. vue.createElementVNode(
  20410. "text",
  20411. null,
  20412. vue.toDisplayString($setup.detail.ups_prn || "无"),
  20413. 1
  20414. /* TEXT */
  20415. )
  20416. ]),
  20417. vue.createElementVNode("view", null, [
  20418. vue.createTextVNode(" Ups 准备时间: "),
  20419. vue.createElementVNode(
  20420. "text",
  20421. null,
  20422. vue.toDisplayString($setup.detail.ups_ready_time || "无"),
  20423. 1
  20424. /* TEXT */
  20425. )
  20426. ]),
  20427. vue.createElementVNode("view", null, [
  20428. vue.createTextVNode(" Ups 截止时间: "),
  20429. vue.createElementVNode(
  20430. "text",
  20431. null,
  20432. vue.toDisplayString($setup.detail.ups_close_time || "无"),
  20433. 1
  20434. /* TEXT */
  20435. )
  20436. ]),
  20437. vue.createElementVNode("view", null, " 面单 ")
  20438. ]),
  20439. vue.createElementVNode("view", { class: "title label" }, [
  20440. vue.createElementVNode("text", null, [
  20441. vue.createTextVNode("物品清单 "),
  20442. !$setup.detail.goods.length ? (vue.openBlock(), vue.createElementBlock("text", {
  20443. key: 0,
  20444. class: "bln"
  20445. }, "无")) : vue.createCommentVNode("v-if", true)
  20446. ])
  20447. ]),
  20448. (vue.openBlock(true), vue.createElementBlock(
  20449. vue.Fragment,
  20450. null,
  20451. vue.renderList($setup.detail.goods, (good, g2) => {
  20452. return vue.openBlock(), vue.createElementBlock("view", {
  20453. key: g2,
  20454. class: "goods"
  20455. }, [
  20456. vue.createElementVNode("view", null, [
  20457. vue.createTextVNode("类型: "),
  20458. vue.createElementVNode(
  20459. "text",
  20460. null,
  20461. vue.toDisplayString(good.category_name),
  20462. 1
  20463. /* TEXT */
  20464. )
  20465. ]),
  20466. vue.createElementVNode("view", null, [
  20467. vue.createTextVNode("名称: "),
  20468. vue.createElementVNode(
  20469. "text",
  20470. null,
  20471. vue.toDisplayString(good.goods_name),
  20472. 1
  20473. /* TEXT */
  20474. ),
  20475. vue.createElementVNode(
  20476. "text",
  20477. { style: { "color": "#666666", "font-size": "22rpx" } },
  20478. vue.toDisplayString(" x" + good.qty),
  20479. 1
  20480. /* TEXT */
  20481. )
  20482. ]),
  20483. vue.createElementVNode("view", null, [
  20484. vue.createTextVNode("价格: "),
  20485. vue.createElementVNode(
  20486. "text",
  20487. null,
  20488. "£" + vue.toDisplayString(good.price),
  20489. 1
  20490. /* TEXT */
  20491. )
  20492. ]),
  20493. vue.createElementVNode("view", null, [
  20494. vue.createTextVNode("合计: "),
  20495. vue.createElementVNode(
  20496. "text",
  20497. null,
  20498. "£" + vue.toDisplayString(good.amount),
  20499. 1
  20500. /* TEXT */
  20501. )
  20502. ]),
  20503. vue.createCommentVNode(' <image\r\n class="image"\r\n v-for="item in good.images"\r\n :key="item"\r\n mode="widthFix"\r\n :src="item"\r\n ></image> ')
  20504. ]);
  20505. }),
  20506. 128
  20507. /* KEYED_FRAGMENT */
  20508. ))
  20509. ])) : vue.createCommentVNode("v-if", true)
  20510. ]),
  20511. vue.createCommentVNode(" 图片详情 ")
  20512. ])
  20513. ])
  20514. ]),
  20515. vue.createCommentVNode(" 用户操作 "),
  20516. _ctx.details ? (vue.openBlock(), vue.createElementBlock(
  20517. "view",
  20518. {
  20519. key: 0,
  20520. class: "contact-client",
  20521. style: vue.normalizeStyle({ paddingBottom: ((_a = $setup.safeAreaInsets) == null ? void 0 : _a.bottom) + "px" })
  20522. },
  20523. [
  20524. vue.createElementVNode("view", { class: "buttons" }, [
  20525. vue.createElementVNode("view", {
  20526. onClick: $setup.contactClient,
  20527. class: "payment"
  20528. }, " 联系客户 ")
  20529. ])
  20530. ],
  20531. 4
  20532. /* STYLE */
  20533. )) : vue.createCommentVNode("v-if", true)
  20534. ],
  20535. 64
  20536. /* STABLE_FRAGMENT */
  20537. );
  20538. }
  20539. const PagesPickupWaybillPickUpDetail = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$d], ["__file", "E:/demo/hmrabbit/src/pages/pickup/waybillPickUpDetail.vue"]]);
  20540. const _sfc_main$d = {
  20541. name: "UniDrawer",
  20542. components: {},
  20543. emits: ["change"],
  20544. props: {
  20545. /**
  20546. * 显示模式(左、右),只在初始化生效
  20547. */
  20548. mode: {
  20549. type: String,
  20550. default: ""
  20551. },
  20552. /**
  20553. * 蒙层显示状态
  20554. */
  20555. mask: {
  20556. type: Boolean,
  20557. default: true
  20558. },
  20559. /**
  20560. * 遮罩是否可点击关闭
  20561. */
  20562. maskClick: {
  20563. type: Boolean,
  20564. default: true
  20565. },
  20566. /**
  20567. * 抽屉宽度
  20568. */
  20569. width: {
  20570. type: Number,
  20571. default: 220
  20572. }
  20573. },
  20574. data() {
  20575. return {
  20576. visibleSync: false,
  20577. showDrawer: false,
  20578. rightMode: false,
  20579. watchTimer: null,
  20580. drawerWidth: 220
  20581. };
  20582. },
  20583. created() {
  20584. this.drawerWidth = this.width;
  20585. this.rightMode = this.mode === "right";
  20586. },
  20587. methods: {
  20588. clear() {
  20589. },
  20590. close(type) {
  20591. if (type === "mask" && !this.maskClick || !this.visibleSync)
  20592. return;
  20593. this._change("showDrawer", "visibleSync", false);
  20594. },
  20595. open() {
  20596. if (this.visibleSync)
  20597. return;
  20598. this._change("visibleSync", "showDrawer", true);
  20599. },
  20600. _change(param1, param2, status) {
  20601. this[param1] = status;
  20602. if (this.watchTimer) {
  20603. clearTimeout(this.watchTimer);
  20604. }
  20605. this.watchTimer = setTimeout(() => {
  20606. this[param2] = status;
  20607. this.$emit("change", status);
  20608. }, status ? 50 : 300);
  20609. }
  20610. }
  20611. };
  20612. function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
  20613. return $data.visibleSync ? (vue.openBlock(), vue.createElementBlock(
  20614. "view",
  20615. {
  20616. key: 0,
  20617. class: vue.normalizeClass([{ "uni-drawer--visible": $data.showDrawer }, "uni-drawer"]),
  20618. onTouchmove: _cache[1] || (_cache[1] = vue.withModifiers((...args) => $options.clear && $options.clear(...args), ["stop", "prevent"]))
  20619. },
  20620. [
  20621. vue.createElementVNode(
  20622. "view",
  20623. {
  20624. class: vue.normalizeClass(["uni-drawer__mask", { "uni-drawer__mask--visible": $data.showDrawer && $props.mask }]),
  20625. onClick: _cache[0] || (_cache[0] = ($event) => $options.close("mask"))
  20626. },
  20627. null,
  20628. 2
  20629. /* CLASS */
  20630. ),
  20631. vue.createElementVNode(
  20632. "view",
  20633. {
  20634. class: vue.normalizeClass(["uni-drawer__content", { "uni-drawer--right": $data.rightMode, "uni-drawer--left": !$data.rightMode, "uni-drawer__content--visible": $data.showDrawer }]),
  20635. style: vue.normalizeStyle({ width: $data.drawerWidth + "px" })
  20636. },
  20637. [
  20638. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  20639. ],
  20640. 6
  20641. /* CLASS, STYLE */
  20642. )
  20643. ],
  20644. 34
  20645. /* CLASS, NEED_HYDRATION */
  20646. )) : vue.createCommentVNode("v-if", true);
  20647. }
  20648. const __easycom_3 = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$c], ["__scopeId", "data-v-183a7e94"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-drawer/uni-drawer.vue"]]);
  20649. const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
  20650. __name: "waybillDeliveryOrder",
  20651. setup(__props, { expose: __expose }) {
  20652. __expose();
  20653. let pickupWaybillDeliveryOrderURL = "";
  20654. let sendOutURL = "";
  20655. let deliveredURL = "";
  20656. let refuseURL = "";
  20657. let createTrackPodURL = "";
  20658. let cancelFedExPickUpURL = "";
  20659. const loading = vue.ref(false);
  20660. const loadingBtn = vue.ref(false);
  20661. const token = vue.ref();
  20662. const searchValue = vue.ref();
  20663. const waybillDelivery = vue.ref([]);
  20664. const messageType = vue.ref();
  20665. const messageText = vue.ref();
  20666. const messageRef = vue.ref();
  20667. const showRightRef = vue.ref();
  20668. const resetForm = () => {
  20669. };
  20670. const confirmForm = () => {
  20671. showRightRef.value.close();
  20672. };
  20673. const copyOrderNo = (order_no) => {
  20674. uni.setClipboardData({
  20675. data: order_no,
  20676. success: function() {
  20677. uni.showToast({
  20678. title: "复制成功",
  20679. icon: "success",
  20680. duration: 2e3
  20681. });
  20682. },
  20683. fail: function() {
  20684. formatAppLog("log", "at pages/waybillDeliveryOrder/waybillDeliveryOrder.vue:121", "复制失败");
  20685. }
  20686. });
  20687. };
  20688. const callPhone = (phoneNumber) => {
  20689. formatAppLog("log", "at pages/waybillDeliveryOrder/waybillDeliveryOrder.vue:127", phoneNumber);
  20690. uni.makePhoneCall({
  20691. phoneNumber,
  20692. success: function() {
  20693. formatAppLog("log", "at pages/waybillDeliveryOrder/waybillDeliveryOrder.vue:132", "拨打电话成功!");
  20694. },
  20695. fail: function() {
  20696. formatAppLog("log", "at pages/waybillDeliveryOrder/waybillDeliveryOrder.vue:135", "拨打电话失败!");
  20697. }
  20698. });
  20699. };
  20700. const scanInput = async () => {
  20701. let status = await checkPermission();
  20702. if (status !== 1) {
  20703. return;
  20704. }
  20705. uni.scanCode({
  20706. success: (res) => {
  20707. },
  20708. fail: (err) => {
  20709. }
  20710. });
  20711. };
  20712. const itemClick = (item) => {
  20713. uni.setStorageSync("selectItem", item);
  20714. uni.navigateTo({
  20715. url: "/pages/waybillDeliveryOrder/orderInfo?id=" + item.id
  20716. });
  20717. };
  20718. const onButtonClick = async (row, value) => {
  20719. if (value === "send_out") {
  20720. sendOut({ id: row.id });
  20721. } else if (value === "delivered") {
  20722. updateDelivered({ id: row.id });
  20723. } else if (value === "refuse") {
  20724. updateRefuse({ id: row.id });
  20725. } else if (value === "create_track_pod") {
  20726. createTrackPod({ id: row.id });
  20727. } else if (value === "edit")
  20728. ;
  20729. else if (value === "generate_label")
  20730. ;
  20731. else if (value === "fedex_appointment_pick_up")
  20732. ;
  20733. else if (value === "print_get_back_label")
  20734. ;
  20735. else if (value === "fedex_cancel_pick_up") {
  20736. cancelFedExPickUp({ id: row.id });
  20737. }
  20738. };
  20739. const sendOut = (data) => {
  20740. loadingBtn.value = true;
  20741. uni.request({
  20742. url: sendOutURL,
  20743. method: "POST",
  20744. header: {
  20745. batoken: token.value
  20746. },
  20747. data,
  20748. success: ({ data: data2 }) => {
  20749. loadingBtn.value = false;
  20750. messageType.value = "success";
  20751. messageText.value = "发出成功";
  20752. messageRef.value.open();
  20753. },
  20754. fail: (err) => {
  20755. loadingBtn.value = false;
  20756. messageType.value = "error";
  20757. messageText.value = "发出失败,请稍后重试";
  20758. messageRef.value.open();
  20759. }
  20760. });
  20761. };
  20762. const updateDelivered = (data) => {
  20763. loadingBtn.value = true;
  20764. uni.request({
  20765. url: deliveredURL,
  20766. method: "POST",
  20767. header: {
  20768. batoken: token.value
  20769. },
  20770. data,
  20771. success: ({ data: data2 }) => {
  20772. loadingBtn.value = false;
  20773. messageType.value = "success";
  20774. messageText.value = "确认送达成功";
  20775. messageRef.value.open();
  20776. },
  20777. fail: (err) => {
  20778. loadingBtn.value = false;
  20779. messageType.value = "error";
  20780. messageText.value = "确认送达失败,请稍后重试";
  20781. messageRef.value.open();
  20782. }
  20783. });
  20784. };
  20785. const updateRefuse = (data) => {
  20786. loadingBtn.value = true;
  20787. uni.request({
  20788. url: refuseURL,
  20789. method: "POST",
  20790. header: {
  20791. batoken: token.value
  20792. },
  20793. data,
  20794. success: ({ data: data2 }) => {
  20795. loadingBtn.value = false;
  20796. messageType.value = "success";
  20797. messageText.value = "已拒绝签收";
  20798. messageRef.value.open();
  20799. },
  20800. fail: (err) => {
  20801. loadingBtn.value = false;
  20802. messageType.value = "error";
  20803. messageText.value = "修改失败,请稍后重试";
  20804. messageRef.value.open();
  20805. }
  20806. });
  20807. };
  20808. const createTrackPod = (data) => {
  20809. loadingBtn.value = true;
  20810. uni.request({
  20811. url: createTrackPodURL,
  20812. method: "POST",
  20813. header: {
  20814. batoken: token.value
  20815. },
  20816. data,
  20817. success: ({ data: data2 }) => {
  20818. loadingBtn.value = false;
  20819. messageType.value = "success";
  20820. messageText.value = "同步成功";
  20821. messageRef.value.open();
  20822. },
  20823. fail: (err) => {
  20824. loadingBtn.value = false;
  20825. messageType.value = "error";
  20826. messageText.value = "同步失败,请稍后重试";
  20827. messageRef.value.open();
  20828. }
  20829. });
  20830. };
  20831. const cancelFedExPickUp = (data) => {
  20832. loadingBtn.value = true;
  20833. uni.request({
  20834. url: cancelFedExPickUpURL,
  20835. method: "POST",
  20836. header: {
  20837. batoken: token.value
  20838. },
  20839. data,
  20840. success: ({ data: data2 }) => {
  20841. loadingBtn.value = false;
  20842. messageType.value = "success";
  20843. messageText.value = "操作成功";
  20844. messageRef.value.open();
  20845. },
  20846. fail: (err) => {
  20847. loadingBtn.value = false;
  20848. messageType.value = "error";
  20849. messageText.value = "操作失败,请稍后重试";
  20850. messageRef.value.open();
  20851. }
  20852. });
  20853. };
  20854. const getList = () => {
  20855. loading.value = true;
  20856. uni.request({
  20857. url: pickupWaybillDeliveryOrderURL + "/index",
  20858. method: "GET",
  20859. header: {
  20860. batoken: token.value
  20861. },
  20862. success: ({ data }) => {
  20863. loading.value = false;
  20864. formatAppLog("log", "at pages/waybillDeliveryOrder/waybillDeliveryOrder.vue:336", data);
  20865. if (data.code == 1) {
  20866. waybillDelivery.value = data.data.list;
  20867. } else {
  20868. messageType.value = "error";
  20869. messageText.value = data.msg;
  20870. messageRef.value.open();
  20871. }
  20872. },
  20873. fail: (err) => {
  20874. loading.value = false;
  20875. }
  20876. });
  20877. };
  20878. onLoad(() => {
  20879. token.value = uni.getStorageSync("token");
  20880. getList();
  20881. });
  20882. onNavigationBarButtonTap((event) => {
  20883. if (event.index === 0) {
  20884. showRightRef.value.open();
  20885. }
  20886. });
  20887. const __returned__ = { get pickupWaybillDeliveryOrderURL() {
  20888. return pickupWaybillDeliveryOrderURL;
  20889. }, set pickupWaybillDeliveryOrderURL(v2) {
  20890. pickupWaybillDeliveryOrderURL = v2;
  20891. }, get sendOutURL() {
  20892. return sendOutURL;
  20893. }, set sendOutURL(v2) {
  20894. sendOutURL = v2;
  20895. }, get deliveredURL() {
  20896. return deliveredURL;
  20897. }, set deliveredURL(v2) {
  20898. deliveredURL = v2;
  20899. }, get refuseURL() {
  20900. return refuseURL;
  20901. }, set refuseURL(v2) {
  20902. refuseURL = v2;
  20903. }, get createTrackPodURL() {
  20904. return createTrackPodURL;
  20905. }, set createTrackPodURL(v2) {
  20906. createTrackPodURL = v2;
  20907. }, get cancelFedExPickUpURL() {
  20908. return cancelFedExPickUpURL;
  20909. }, set cancelFedExPickUpURL(v2) {
  20910. cancelFedExPickUpURL = v2;
  20911. }, loading, loadingBtn, token, searchValue, waybillDelivery, messageType, messageText, messageRef, showRightRef, resetForm, confirmForm, copyOrderNo, callPhone, scanInput, itemClick, onButtonClick, sendOut, updateDelivered, updateRefuse, createTrackPod, cancelFedExPickUp, getList };
  20912. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  20913. return __returned__;
  20914. }
  20915. });
  20916. const _imports_0 = "/static/copy.png";
  20917. const _imports_1 = "/static/call.png";
  20918. function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
  20919. const _component_uni_easyinput = resolveEasycom(vue.resolveDynamicComponent("uni-easyinput"), __easycom_0$7);
  20920. const _component_uni_popup_message = resolveEasycom(vue.resolveDynamicComponent("uni-popup-message"), __easycom_1$1);
  20921. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  20922. const _component_uni_drawer = resolveEasycom(vue.resolveDynamicComponent("uni-drawer"), __easycom_3);
  20923. return vue.openBlock(), vue.createElementBlock("view", { class: "list" }, [
  20924. vue.createCommentVNode(' <uni-search-bar @confirm="search" :focus="true" v-model="searchValue" @blur="blur" @focus="focus" @input="input" @cancel="cancel" @clear="clear"></uni-search-bar> '),
  20925. vue.createVNode(_component_uni_easyinput, {
  20926. modelValue: $setup.searchValue,
  20927. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchValue = $event),
  20928. placeholder: "请输入单号",
  20929. suffixIcon: "scan",
  20930. onIconClick: $setup.scanInput
  20931. }, null, 8, ["modelValue"]),
  20932. (vue.openBlock(true), vue.createElementBlock(
  20933. vue.Fragment,
  20934. null,
  20935. vue.renderList($setup.waybillDelivery, (item, i2) => {
  20936. return vue.openBlock(), vue.createElementBlock("view", {
  20937. class: "item",
  20938. key: i2,
  20939. onClick: ($event) => $setup.itemClick(item)
  20940. }, [
  20941. vue.createElementVNode("view", { class: "order-no" }, [
  20942. vue.createElementVNode(
  20943. "text",
  20944. null,
  20945. " 派送单号: " + vue.toDisplayString(item.order_no),
  20946. 1
  20947. /* TEXT */
  20948. ),
  20949. vue.createElementVNode("image", {
  20950. onClick: ($event) => $setup.copyOrderNo(item.order_no),
  20951. class: "icon",
  20952. src: _imports_0,
  20953. mode: "aspectFill"
  20954. }, null, 8, ["onClick"])
  20955. ]),
  20956. vue.createElementVNode("view", { class: "address-info" }, [
  20957. vue.createElementVNode("view", { class: "info" }, [
  20958. vue.createElementVNode("view", { class: "user" }, [
  20959. vue.createElementVNode(
  20960. "text",
  20961. null,
  20962. vue.toDisplayString(item.address.first_name + " " + item.address.last_name) + " " + vue.toDisplayString("+" + item.address.mobile_code + " " + item.address.mobile),
  20963. 1
  20964. /* TEXT */
  20965. ),
  20966. vue.createElementVNode("image", {
  20967. onClick: ($event) => $setup.callPhone(item.address.mobile_code + " " + item.address.mobile),
  20968. class: "icon",
  20969. src: _imports_1,
  20970. mode: "aspectFill"
  20971. }, null, 8, ["onClick"])
  20972. ]),
  20973. vue.createElementVNode("view", null, [
  20974. vue.createElementVNode("text", { class: "address" }, [
  20975. vue.createElementVNode(
  20976. "text",
  20977. { class: "city" },
  20978. vue.toDisplayString(item.address.city),
  20979. 1
  20980. /* TEXT */
  20981. ),
  20982. vue.createTextVNode(
  20983. " " + vue.toDisplayString(item.address.zip_code),
  20984. 1
  20985. /* TEXT */
  20986. )
  20987. ]),
  20988. vue.createElementVNode("image", {
  20989. onClick: ($event) => $setup.copyOrderNo(item.address.zip_code),
  20990. class: "icon",
  20991. src: _imports_0,
  20992. mode: "aspectFill"
  20993. }, null, 8, ["onClick"])
  20994. ])
  20995. ]),
  20996. vue.createElementVNode("view", { class: "info" })
  20997. ]),
  20998. vue.createElementVNode("view"),
  20999. vue.createElementVNode("view", { class: "operations" }, [
  21000. (vue.openBlock(true), vue.createElementBlock(
  21001. vue.Fragment,
  21002. null,
  21003. vue.renderList(item.operations, (operation, i22) => {
  21004. return vue.openBlock(), vue.createElementBlock("button", {
  21005. key: i22,
  21006. onClick: ($event) => $setup.onButtonClick(item, operation.value),
  21007. type: "info",
  21008. size: "mini"
  21009. }, vue.toDisplayString(operation.text), 9, ["onClick"]);
  21010. }),
  21011. 128
  21012. /* KEYED_FRAGMENT */
  21013. ))
  21014. ])
  21015. ], 8, ["onClick"]);
  21016. }),
  21017. 128
  21018. /* KEYED_FRAGMENT */
  21019. )),
  21020. $setup.waybillDelivery.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  21021. key: 0,
  21022. class: "is-empty"
  21023. }, "暂无派送单")) : vue.createCommentVNode("v-if", true),
  21024. vue.createVNode(
  21025. _component_uni_popup,
  21026. {
  21027. ref: "messageRef",
  21028. type: "message"
  21029. },
  21030. {
  21031. default: vue.withCtx(() => [
  21032. vue.createVNode(_component_uni_popup_message, {
  21033. type: $setup.messageType,
  21034. message: $setup.messageText,
  21035. duration: 2e3
  21036. }, null, 8, ["type", "message"])
  21037. ]),
  21038. _: 1
  21039. /* STABLE */
  21040. },
  21041. 512
  21042. /* NEED_PATCH */
  21043. ),
  21044. vue.createVNode(
  21045. _component_uni_drawer,
  21046. {
  21047. ref: "showRightRef",
  21048. mode: "right",
  21049. "mask-click": true
  21050. },
  21051. {
  21052. default: vue.withCtx(() => [
  21053. vue.createElementVNode("scroll-view", {
  21054. style: { "height": "100%" },
  21055. "scroll-y": "true"
  21056. }, [
  21057. vue.createElementVNode("view", { class: "button-group" }, [
  21058. vue.createElementVNode("button", {
  21059. onClick: $setup.resetForm,
  21060. type: "info"
  21061. }, "重置"),
  21062. vue.createElementVNode("button", {
  21063. onClick: $setup.confirmForm,
  21064. type: "primary"
  21065. }, "确认")
  21066. ])
  21067. ])
  21068. ]),
  21069. _: 1
  21070. /* STABLE */
  21071. },
  21072. 512
  21073. /* NEED_PATCH */
  21074. )
  21075. ]);
  21076. }
  21077. const PagesWaybillDeliveryOrderWaybillDeliveryOrder = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$b], ["__scopeId", "data-v-b53c540c"], ["__file", "E:/demo/hmrabbit/src/pages/waybillDeliveryOrder/waybillDeliveryOrder.vue"]]);
  21078. const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
  21079. __name: "settings",
  21080. setup(__props, { expose: __expose }) {
  21081. __expose();
  21082. const memberStore = useMemberStore();
  21083. const onLogout = () => {
  21084. uni.showModal({
  21085. content: "是否退出登录?",
  21086. confirmColor: "#27BA9B",
  21087. success: (res) => {
  21088. if (res.confirm) {
  21089. memberStore.clearProfile();
  21090. uni.navigateBack();
  21091. }
  21092. }
  21093. });
  21094. };
  21095. const __returned__ = { memberStore, onLogout };
  21096. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  21097. return __returned__;
  21098. }
  21099. });
  21100. function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
  21101. return vue.openBlock(), vue.createElementBlock("view", { class: "viewport" }, [
  21102. vue.createCommentVNode(" 列表1 "),
  21103. $setup.memberStore.profile ? (vue.openBlock(), vue.createElementBlock("view", {
  21104. key: 0,
  21105. class: "list"
  21106. }, [
  21107. vue.createElementVNode("navigator", {
  21108. url: "/pagesMember/address/address",
  21109. "hover-class": "none",
  21110. class: "item arrow"
  21111. }, " 我的收货地址 ")
  21112. ])) : vue.createCommentVNode("v-if", true),
  21113. vue.createCommentVNode(" 列表3 "),
  21114. vue.createElementVNode("view", { class: "list" }, [
  21115. vue.createElementVNode("button", {
  21116. "hover-class": "none",
  21117. class: "item arrow"
  21118. }, "关于英途仓库")
  21119. ]),
  21120. vue.createCommentVNode(" 操作按钮 "),
  21121. $setup.memberStore.profile ? (vue.openBlock(), vue.createElementBlock("view", {
  21122. key: 1,
  21123. class: "action"
  21124. }, [
  21125. vue.createElementVNode("view", {
  21126. onClick: $setup.onLogout,
  21127. class: "button"
  21128. }, "退出登录")
  21129. ])) : vue.createCommentVNode("v-if", true)
  21130. ]);
  21131. }
  21132. const PagesMemberSettingsSettings = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$a], ["__file", "E:/demo/hmrabbit/src/pagesMember/settings/settings.vue"]]);
  21133. const getMemberProfileAPI = () => {
  21134. return http({
  21135. method: "GET",
  21136. url: "/member/profile"
  21137. });
  21138. };
  21139. const putMemberProfileAPI = (data) => {
  21140. return http({
  21141. method: "PUT",
  21142. url: "/member/profile",
  21143. data
  21144. });
  21145. };
  21146. const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
  21147. __name: "profile",
  21148. setup(__props, { expose: __expose }) {
  21149. __expose();
  21150. const { safeAreaInsets } = uni.getSystemInfoSync();
  21151. const profile = vue.ref({});
  21152. const getMemberProfileData = async () => {
  21153. const res = await getMemberProfileAPI();
  21154. profile.value = res.result;
  21155. memberStore.profile.avatar = res.result.avatar;
  21156. memberStore.profile.nickname = res.result.nickname;
  21157. };
  21158. onLoad(() => {
  21159. getMemberProfileData();
  21160. });
  21161. const memberStore = useMemberStore();
  21162. const onAvatarChange = () => {
  21163. uni.chooseImage({
  21164. count: 1,
  21165. success: (res) => {
  21166. const tempFilePaths = res.tempFilePaths;
  21167. uploadFile(tempFilePaths[0]);
  21168. }
  21169. });
  21170. };
  21171. const uploadFile = (file) => {
  21172. uni.uploadFile({
  21173. url: "/member/profile/avatar",
  21174. name: "file",
  21175. filePath: file,
  21176. success: (res) => {
  21177. if (res.statusCode === 200) {
  21178. const avatar = JSON.parse(res.data).result.avatar;
  21179. profile.value.avatar = avatar;
  21180. memberStore.profile.avatar = avatar;
  21181. uni.showToast({ icon: "success", title: "更新成功" });
  21182. } else {
  21183. uni.showToast({ icon: "error", title: "出现错误" });
  21184. }
  21185. }
  21186. });
  21187. };
  21188. const onGenderChange = (ev) => {
  21189. profile.value.gender = ev.detail.value;
  21190. };
  21191. const onBirthdayChange = (ev) => {
  21192. profile.value.birthday = ev.detail.value;
  21193. };
  21194. let fullLocationCode = ["", "", ""];
  21195. const onFullLocationChange = (ev) => {
  21196. profile.value.fullLocation = ev.detail.value.join(" ");
  21197. fullLocationCode = ev.detail.code;
  21198. };
  21199. const onSubmit = async () => {
  21200. const { nickname, gender, birthday } = profile.value;
  21201. const res = await putMemberProfileAPI({
  21202. nickname,
  21203. gender,
  21204. birthday,
  21205. provinceCode: fullLocationCode[0],
  21206. cityCode: fullLocationCode[1],
  21207. countyCode: fullLocationCode[2]
  21208. });
  21209. memberStore.profile.nickname = res.result.nickname;
  21210. uni.showToast({ icon: "success", title: "保存成功" });
  21211. setTimeout(() => {
  21212. uni.navigateBack();
  21213. }, 400);
  21214. };
  21215. const __returned__ = { safeAreaInsets, profile, getMemberProfileData, memberStore, onAvatarChange, uploadFile, onGenderChange, onBirthdayChange, get fullLocationCode() {
  21216. return fullLocationCode;
  21217. }, set fullLocationCode(v2) {
  21218. fullLocationCode = v2;
  21219. }, onFullLocationChange, onSubmit, get formatDate() {
  21220. return formatDate;
  21221. } };
  21222. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  21223. return __returned__;
  21224. }
  21225. });
  21226. function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
  21227. var _a, _b, _c, _d, _e2, _f, _g, _h, _i;
  21228. return vue.openBlock(), vue.createElementBlock("view", { class: "viewport" }, [
  21229. vue.createCommentVNode(" 导航栏 "),
  21230. vue.createElementVNode(
  21231. "view",
  21232. {
  21233. class: "navbar",
  21234. style: vue.normalizeStyle({ paddingTop: ((_a = $setup.safeAreaInsets) == null ? void 0 : _a.top) + "px" })
  21235. },
  21236. [
  21237. vue.createElementVNode("navigator", {
  21238. "open-type": "navigateBack",
  21239. class: "back icon-left",
  21240. "hover-class": "none"
  21241. }),
  21242. vue.createElementVNode("view", { class: "title" }, "个人信息")
  21243. ],
  21244. 4
  21245. /* STYLE */
  21246. ),
  21247. vue.createCommentVNode(" 头像 "),
  21248. vue.createElementVNode("view", { class: "avatar" }, [
  21249. vue.createElementVNode("view", {
  21250. onClick: $setup.onAvatarChange,
  21251. class: "avatar-content"
  21252. }, [
  21253. vue.createElementVNode("image", {
  21254. class: "image",
  21255. src: (_b = $setup.profile) == null ? void 0 : _b.avatar,
  21256. mode: "aspectFill"
  21257. }, null, 8, ["src"]),
  21258. vue.createElementVNode("text", { class: "text" }, "点击修改头像")
  21259. ])
  21260. ]),
  21261. vue.createCommentVNode(" 表单 "),
  21262. vue.createElementVNode("view", { class: "form" }, [
  21263. vue.createCommentVNode(" 表单内容 "),
  21264. vue.createElementVNode("view", { class: "form-content" }, [
  21265. vue.createElementVNode("view", { class: "form-item" }, [
  21266. vue.createElementVNode("text", { class: "label" }, "账号"),
  21267. vue.createElementVNode(
  21268. "text",
  21269. { class: "account placeholder" },
  21270. vue.toDisplayString((_c = $setup.profile) == null ? void 0 : _c.account),
  21271. 1
  21272. /* TEXT */
  21273. )
  21274. ]),
  21275. vue.createElementVNode("view", { class: "form-item" }, [
  21276. vue.createElementVNode("text", { class: "label" }, "昵称"),
  21277. vue.withDirectives(vue.createElementVNode(
  21278. "input",
  21279. {
  21280. class: "input",
  21281. type: "text",
  21282. placeholder: "请填写昵称",
  21283. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.profile.nickname = $event)
  21284. },
  21285. null,
  21286. 512
  21287. /* NEED_PATCH */
  21288. ), [
  21289. [vue.vModelText, $setup.profile.nickname]
  21290. ])
  21291. ]),
  21292. vue.createElementVNode("view", { class: "form-item" }, [
  21293. vue.createElementVNode("text", { class: "label" }, "性别"),
  21294. vue.createElementVNode(
  21295. "radio-group",
  21296. { onChange: $setup.onGenderChange },
  21297. [
  21298. vue.createElementVNode("label", { class: "radio" }, [
  21299. vue.createElementVNode("radio", {
  21300. value: "男",
  21301. color: "#27ba9b",
  21302. checked: ((_d = $setup.profile) == null ? void 0 : _d.gender) === "男"
  21303. }, null, 8, ["checked"]),
  21304. vue.createTextVNode(" 男 ")
  21305. ]),
  21306. vue.createElementVNode("label", { class: "radio" }, [
  21307. vue.createElementVNode("radio", {
  21308. value: "女",
  21309. color: "#27ba9b",
  21310. checked: ((_e2 = $setup.profile) == null ? void 0 : _e2.gender) === "女"
  21311. }, null, 8, ["checked"]),
  21312. vue.createTextVNode(" 女 ")
  21313. ])
  21314. ],
  21315. 32
  21316. /* NEED_HYDRATION */
  21317. )
  21318. ]),
  21319. vue.createElementVNode("view", { class: "form-item" }, [
  21320. vue.createElementVNode("text", { class: "label" }, "生日"),
  21321. vue.createElementVNode("picker", {
  21322. onChange: $setup.onBirthdayChange,
  21323. mode: "date",
  21324. class: "picker",
  21325. value: (_f = $setup.profile) == null ? void 0 : _f.birthday,
  21326. start: "1900-01-01",
  21327. end: $setup.formatDate(/* @__PURE__ */ new Date())
  21328. }, [
  21329. ((_g = $setup.profile) == null ? void 0 : _g.birthday) ? (vue.openBlock(), vue.createElementBlock(
  21330. "view",
  21331. { key: 0 },
  21332. vue.toDisplayString((_h = $setup.profile) == null ? void 0 : _h.birthday),
  21333. 1
  21334. /* TEXT */
  21335. )) : (vue.openBlock(), vue.createElementBlock("view", {
  21336. key: 1,
  21337. class: "placeholder"
  21338. }, "请选择日期"))
  21339. ], 40, ["value", "end"])
  21340. ]),
  21341. vue.createCommentVNode(" 只有微信小程序端内置了省市区数据 "),
  21342. vue.createElementVNode("view", { class: "form-item" }, [
  21343. vue.createElementVNode("text", { class: "label" }, "职业"),
  21344. vue.createElementVNode("input", {
  21345. class: "input",
  21346. type: "text",
  21347. placeholder: "请填写职业",
  21348. value: (_i = $setup.profile) == null ? void 0 : _i.profession
  21349. }, null, 8, ["value"])
  21350. ])
  21351. ]),
  21352. vue.createCommentVNode(" 提交按钮 "),
  21353. vue.createElementVNode("button", {
  21354. onClick: $setup.onSubmit,
  21355. class: "form-button"
  21356. }, "保 存")
  21357. ])
  21358. ]);
  21359. }
  21360. const PagesMemberProfileProfile = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$9], ["__file", "E:/demo/hmrabbit/src/pagesMember/profile/profile.vue"]]);
  21361. const postMemberAddressAPI = (data) => {
  21362. return http({
  21363. method: "POST",
  21364. url: "/member/address",
  21365. data
  21366. });
  21367. };
  21368. const getMemberAddressAPI = () => {
  21369. return http({
  21370. method: "GET",
  21371. url: "/member/address"
  21372. });
  21373. };
  21374. const getMemberAddressByIdAPI = (id) => {
  21375. return http({
  21376. method: "GET",
  21377. url: `/member/address/${id}`
  21378. });
  21379. };
  21380. const putMemberAddressByIdAPI = (id, data) => {
  21381. return http({
  21382. method: "PUT",
  21383. url: `/member/address/${id}`,
  21384. data
  21385. });
  21386. };
  21387. const deleteMemberAddressByIdAPI = (id) => {
  21388. return http({
  21389. method: "DELETE",
  21390. url: `/member/address/${id}`
  21391. });
  21392. };
  21393. const useAddressStore = defineStore("address", () => {
  21394. const selectedAddress = vue.ref();
  21395. const changeSelectedAddress = (val) => {
  21396. selectedAddress.value = val;
  21397. };
  21398. return {
  21399. selectedAddress,
  21400. changeSelectedAddress
  21401. };
  21402. });
  21403. const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
  21404. __name: "address",
  21405. setup(__props, { expose: __expose }) {
  21406. __expose();
  21407. const addressList = vue.ref([]);
  21408. const getMemberAddressData = async () => {
  21409. const res = await getMemberAddressAPI();
  21410. addressList.value = res.result;
  21411. };
  21412. onShow(() => {
  21413. getMemberAddressData();
  21414. });
  21415. const onDeleteAddress = (id) => {
  21416. uni.showModal({
  21417. content: "删除地址?",
  21418. confirmColor: "#27BA9B",
  21419. success: async (res) => {
  21420. if (res.confirm) {
  21421. await deleteMemberAddressByIdAPI(id);
  21422. getMemberAddressData();
  21423. }
  21424. }
  21425. });
  21426. };
  21427. const onChangeAddress = (item) => {
  21428. const addressStore = useAddressStore();
  21429. addressStore.changeSelectedAddress(item);
  21430. uni.navigateBack();
  21431. };
  21432. const __returned__ = { addressList, getMemberAddressData, onDeleteAddress, onChangeAddress };
  21433. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  21434. return __returned__;
  21435. }
  21436. });
  21437. function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
  21438. const _component_uni_swipe_action_item = resolveEasycom(vue.resolveDynamicComponent("uni-swipe-action-item"), __easycom_0$a);
  21439. const _component_uni_swipe_action = resolveEasycom(vue.resolveDynamicComponent("uni-swipe-action"), __easycom_1$2);
  21440. return vue.openBlock(), vue.createElementBlock("view", { class: "viewport" }, [
  21441. vue.createCommentVNode(" 地址列表 "),
  21442. vue.createElementVNode("scroll-view", {
  21443. "enable-back-to-top": "",
  21444. class: "scroll-view",
  21445. "scroll-y": ""
  21446. }, [
  21447. $setup.addressList.length ? (vue.openBlock(), vue.createElementBlock("view", {
  21448. key: 0,
  21449. class: "address"
  21450. }, [
  21451. vue.createVNode(_component_uni_swipe_action, { class: "address-list" }, {
  21452. default: vue.withCtx(() => [
  21453. vue.createCommentVNode(" 收货地址项 "),
  21454. (vue.openBlock(true), vue.createElementBlock(
  21455. vue.Fragment,
  21456. null,
  21457. vue.renderList($setup.addressList, (item) => {
  21458. return vue.openBlock(), vue.createBlock(
  21459. _component_uni_swipe_action_item,
  21460. {
  21461. class: "item",
  21462. key: item.id
  21463. },
  21464. {
  21465. right: vue.withCtx(() => [
  21466. vue.createElementVNode("button", {
  21467. onClick: ($event) => $setup.onDeleteAddress(item.id),
  21468. class: "delete-button"
  21469. }, "删除", 8, ["onClick"])
  21470. ]),
  21471. default: vue.withCtx(() => [
  21472. vue.createElementVNode("view", {
  21473. class: "item-content",
  21474. onClick: ($event) => $setup.onChangeAddress(item)
  21475. }, [
  21476. vue.createElementVNode("view", { class: "user" }, [
  21477. vue.createTextVNode(
  21478. vue.toDisplayString(item.receiver) + " ",
  21479. 1
  21480. /* TEXT */
  21481. ),
  21482. vue.createElementVNode(
  21483. "text",
  21484. { class: "contact" },
  21485. vue.toDisplayString(item.contact),
  21486. 1
  21487. /* TEXT */
  21488. ),
  21489. item.isDefault ? (vue.openBlock(), vue.createElementBlock("text", {
  21490. key: 0,
  21491. class: "badge"
  21492. }, "默认")) : vue.createCommentVNode("v-if", true)
  21493. ]),
  21494. vue.createElementVNode(
  21495. "view",
  21496. { class: "locate" },
  21497. vue.toDisplayString(item.fullLocation) + " " + vue.toDisplayString(item.address),
  21498. 1
  21499. /* TEXT */
  21500. ),
  21501. vue.createCommentVNode(" H5 端需添加 .prevent 阻止链接的默认行为 "),
  21502. vue.createElementVNode("navigator", {
  21503. class: "edit",
  21504. "hover-class": "none",
  21505. url: `/pagesMember/address-form/address-form?id=${item.id}`,
  21506. onClick: [
  21507. vue.withModifiers(() => {
  21508. }, ["stop"]),
  21509. vue.withModifiers(() => {
  21510. }, ["prevent"])
  21511. ]
  21512. }, " 修改 ", 8, ["url"])
  21513. ], 8, ["onClick"])
  21514. ]),
  21515. _: 2
  21516. /* DYNAMIC */
  21517. },
  21518. 1024
  21519. /* DYNAMIC_SLOTS */
  21520. );
  21521. }),
  21522. 128
  21523. /* KEYED_FRAGMENT */
  21524. ))
  21525. ]),
  21526. _: 1
  21527. /* STABLE */
  21528. })
  21529. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  21530. key: 1,
  21531. class: "blank"
  21532. }, "暂无收货地址"))
  21533. ]),
  21534. vue.createCommentVNode(" 添加按钮 "),
  21535. vue.createElementVNode("view", { class: "add-btn" }, [
  21536. vue.createElementVNode("navigator", {
  21537. "hover-class": "none",
  21538. url: "/pagesMember/address-form/address-form"
  21539. }, " 新建地址 ")
  21540. ])
  21541. ]);
  21542. }
  21543. const PagesMemberAddressAddress = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$8], ["__file", "E:/demo/hmrabbit/src/pagesMember/address/address.vue"]]);
  21544. const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
  21545. __name: "address-form",
  21546. props: {
  21547. id: { type: String, required: false }
  21548. },
  21549. setup(__props, { expose: __expose }) {
  21550. __expose();
  21551. const form = vue.ref({
  21552. receiver: "",
  21553. // 收货人
  21554. contact: "",
  21555. // 联系方式
  21556. fullLocation: "",
  21557. // 省市区(前端展示)
  21558. provinceCode: "",
  21559. // 省份编码(后端参数)
  21560. cityCode: "",
  21561. // 城市编码(后端参数)
  21562. countyCode: "",
  21563. // 区/县编码(后端参数)
  21564. address: "",
  21565. // 详细地址
  21566. isDefault: 0
  21567. // 默认地址,1为是,0为否
  21568. });
  21569. const query = __props;
  21570. const getMemberAddressByIdData = async () => {
  21571. if (query.id) {
  21572. const res = await getMemberAddressByIdAPI(query.id);
  21573. Object.assign(form.value, res.result);
  21574. }
  21575. };
  21576. onLoad(() => {
  21577. getMemberAddressByIdData();
  21578. });
  21579. uni.setNavigationBarTitle({ title: query.id ? "修改地址" : "新建地址" });
  21580. const onRegionChange = (ev) => {
  21581. form.value.fullLocation = ev.detail.value.join(" ");
  21582. const [provinceCode, cityCode, countyCode] = ev.detail.code;
  21583. Object.assign(form.value, { provinceCode, cityCode, countyCode });
  21584. };
  21585. const onSwitchChange = (ev) => {
  21586. form.value.isDefault = ev.detail.value ? 1 : 0;
  21587. };
  21588. const rules = {
  21589. receiver: {
  21590. rules: [{ required: true, errorMessage: "请输入收货人姓名" }]
  21591. },
  21592. contact: {
  21593. rules: [
  21594. { required: true, errorMessage: "请输入联系方式" },
  21595. { pattern: /^1[3-9]\d{9}$/, errorMessage: "手机号格式不正确" }
  21596. ]
  21597. },
  21598. countyCode: {
  21599. rules: [{ required: true, errorMessage: "请选择所在地区" }]
  21600. },
  21601. address: {
  21602. rules: [{ required: true, errorMessage: "请选择详细地址" }]
  21603. }
  21604. };
  21605. const formRef = vue.ref();
  21606. const onSubmit = async () => {
  21607. var _a, _b;
  21608. try {
  21609. await ((_b = (_a = formRef.value) == null ? void 0 : _a.validate) == null ? void 0 : _b.call(_a));
  21610. if (query.id) {
  21611. await putMemberAddressByIdAPI(query.id, form.value);
  21612. } else {
  21613. await postMemberAddressAPI(form.value);
  21614. }
  21615. uni.showToast({ icon: "success", title: query.id ? "修改成功" : "添加成功" });
  21616. setTimeout(() => {
  21617. uni.navigateBack();
  21618. }, 400);
  21619. } catch (error) {
  21620. uni.showToast({ icon: "error", title: "请填写完整信息" });
  21621. }
  21622. };
  21623. const onCityChange = (ev) => {
  21624. const [province, city, county] = ev.detail.value;
  21625. Object.assign(form.value, {
  21626. provinceCode: province.value,
  21627. cityCode: city.value,
  21628. countyCode: county.value
  21629. });
  21630. };
  21631. const __returned__ = { form, query, getMemberAddressByIdData, onRegionChange, onSwitchChange, rules, formRef, onSubmit, onCityChange };
  21632. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  21633. return __returned__;
  21634. }
  21635. });
  21636. function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
  21637. const _component_uni_forms_item = resolveEasycom(vue.resolveDynamicComponent("uni-forms-item"), __easycom_0$4);
  21638. const _component_uni_data_picker = resolveEasycom(vue.resolveDynamicComponent("uni-data-picker"), __easycom_1);
  21639. const _component_uni_forms = resolveEasycom(vue.resolveDynamicComponent("uni-forms"), __easycom_2$1);
  21640. return vue.openBlock(), vue.createElementBlock(
  21641. vue.Fragment,
  21642. null,
  21643. [
  21644. vue.createElementVNode("view", { class: "content" }, [
  21645. vue.createVNode(_component_uni_forms, {
  21646. rules: $setup.rules,
  21647. model: $setup.form,
  21648. ref: "formRef"
  21649. }, {
  21650. default: vue.withCtx(() => [
  21651. vue.createCommentVNode(" 表单内容 "),
  21652. vue.createVNode(_component_uni_forms_item, {
  21653. name: "receiver",
  21654. class: "form-item"
  21655. }, {
  21656. default: vue.withCtx(() => [
  21657. vue.createElementVNode("text", { class: "label" }, "收货人"),
  21658. vue.withDirectives(vue.createElementVNode(
  21659. "input",
  21660. {
  21661. class: "input",
  21662. placeholder: "请填写收货人姓名",
  21663. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.receiver = $event)
  21664. },
  21665. null,
  21666. 512
  21667. /* NEED_PATCH */
  21668. ), [
  21669. [vue.vModelText, $setup.form.receiver]
  21670. ])
  21671. ]),
  21672. _: 1
  21673. /* STABLE */
  21674. }),
  21675. vue.createVNode(_component_uni_forms_item, {
  21676. name: "contact",
  21677. class: "form-item"
  21678. }, {
  21679. default: vue.withCtx(() => [
  21680. vue.createElementVNode("text", { class: "label" }, "手机号码"),
  21681. vue.withDirectives(vue.createElementVNode(
  21682. "input",
  21683. {
  21684. class: "input",
  21685. placeholder: "请填写收货人手机号码",
  21686. maxlength: 11,
  21687. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.contact = $event)
  21688. },
  21689. null,
  21690. 512
  21691. /* NEED_PATCH */
  21692. ), [
  21693. [vue.vModelText, $setup.form.contact]
  21694. ])
  21695. ]),
  21696. _: 1
  21697. /* STABLE */
  21698. }),
  21699. vue.createVNode(_component_uni_forms_item, {
  21700. name: "countyCode",
  21701. class: "form-item"
  21702. }, {
  21703. default: vue.withCtx(() => [
  21704. vue.createElementVNode("text", { class: "label" }, "所在地区"),
  21705. vue.createVNode(_component_uni_data_picker, {
  21706. placeholder: "请选择地址",
  21707. "popup-title": "请选择城市",
  21708. collection: "opendb-city-china",
  21709. field: "code as value, name as text",
  21710. orderby: "value asc",
  21711. "step-searh": true,
  21712. "self-field": "code",
  21713. "parent-field": "parent_code",
  21714. onChange: $setup.onCityChange,
  21715. "clear-icon": false,
  21716. modelValue: $setup.form.countyCode,
  21717. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.form.countyCode = $event)
  21718. }, null, 8, ["modelValue"])
  21719. ]),
  21720. _: 1
  21721. /* STABLE */
  21722. }),
  21723. vue.createVNode(_component_uni_forms_item, {
  21724. name: "address",
  21725. class: "form-item"
  21726. }, {
  21727. default: vue.withCtx(() => [
  21728. vue.createElementVNode("text", { class: "label" }, "详细地址"),
  21729. vue.withDirectives(vue.createElementVNode(
  21730. "input",
  21731. {
  21732. class: "input",
  21733. placeholder: "街道、楼牌号等信息",
  21734. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.form.address = $event)
  21735. },
  21736. null,
  21737. 512
  21738. /* NEED_PATCH */
  21739. ), [
  21740. [vue.vModelText, $setup.form.address]
  21741. ])
  21742. ]),
  21743. _: 1
  21744. /* STABLE */
  21745. }),
  21746. vue.createElementVNode("view", { class: "form-item" }, [
  21747. vue.createElementVNode("label", { class: "label" }, "设为默认地址"),
  21748. vue.createElementVNode("switch", {
  21749. onChange: $setup.onSwitchChange,
  21750. class: "switch",
  21751. color: "#27ba9b",
  21752. checked: $setup.form.isDefault === 1
  21753. }, null, 40, ["checked"])
  21754. ])
  21755. ]),
  21756. _: 1
  21757. /* STABLE */
  21758. }, 8, ["model"])
  21759. ]),
  21760. vue.createCommentVNode(" 提交按钮 "),
  21761. vue.createElementVNode("button", {
  21762. onClick: $setup.onSubmit,
  21763. class: "button"
  21764. }, "保存并使用")
  21765. ],
  21766. 64
  21767. /* STABLE_FRAGMENT */
  21768. );
  21769. }
  21770. const PagesMemberAddressFormAddressForm = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$7], ["__file", "E:/demo/hmrabbit/src/pagesMember/address-form/address-form.vue"]]);
  21771. const getMemberOrderPreAPI = () => {
  21772. return http({
  21773. method: "GET",
  21774. url: "/member/order/pre"
  21775. });
  21776. };
  21777. const getMemberOrderPreNowAPI = (data) => {
  21778. return http({
  21779. method: "GET",
  21780. url: "/member/order/pre/now",
  21781. data
  21782. });
  21783. };
  21784. const getMemberOrderRepurchaseByIdAPI = (id) => {
  21785. return http({
  21786. method: "GET",
  21787. url: `/member/order/repurchase/${id}`
  21788. });
  21789. };
  21790. const postMemberOrderAPI = (data) => {
  21791. return http({
  21792. method: "POST",
  21793. url: "/member/order",
  21794. data
  21795. });
  21796. };
  21797. const getMemberOrderByIdAPI = (id) => {
  21798. return http({
  21799. method: "GET",
  21800. url: `/member/order/${id}`
  21801. });
  21802. };
  21803. const getMemberOrderConsignmentByIdAPI = (id) => {
  21804. return http({
  21805. method: "GET",
  21806. url: `/member/order/consignment/${id}`
  21807. });
  21808. };
  21809. const putMemberOrderReceiptByIdAPI = (id) => {
  21810. return http({
  21811. method: "PUT",
  21812. url: `/member/order/${id}/receipt`
  21813. });
  21814. };
  21815. const getMemberOrderLogisticsByIdAPI = (id) => {
  21816. return http({
  21817. method: "GET",
  21818. url: `/member/order/${id}/logistics`
  21819. });
  21820. };
  21821. const deleteMemberOrderAPI = (data) => {
  21822. return http({
  21823. method: "DELETE",
  21824. url: `/member/order`,
  21825. data
  21826. });
  21827. };
  21828. const getMemberOrderCancelByIdAPI = (id, data) => {
  21829. return http({
  21830. method: "PUT",
  21831. url: `/member/order/${id}/cancel`,
  21832. data
  21833. });
  21834. };
  21835. const getMemberOrderAPI = (data) => {
  21836. return http({
  21837. method: "GET",
  21838. url: `/member/order`,
  21839. data
  21840. });
  21841. };
  21842. const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
  21843. __name: "create",
  21844. props: {
  21845. skuId: { type: String, required: false },
  21846. count: { type: String, required: false },
  21847. orderId: { type: String, required: false }
  21848. },
  21849. setup(__props, { expose: __expose }) {
  21850. __expose();
  21851. const { safeAreaInsets } = uni.getSystemInfoSync();
  21852. const buyerMessage = vue.ref("");
  21853. const deliveryList = vue.ref([
  21854. { type: 1, text: "时间不限 (周一至周日)" },
  21855. { type: 2, text: "工作日送 (周一至周五)" },
  21856. { type: 3, text: "周末配送 (周六至周日)" }
  21857. ]);
  21858. const activeIndex = vue.ref(0);
  21859. const activeDelivery = vue.computed(() => deliveryList.value[activeIndex.value]);
  21860. const onChangeDelivery = (ev) => {
  21861. activeIndex.value = ev.detail.value;
  21862. };
  21863. const query = __props;
  21864. const orderPre = vue.ref();
  21865. const getMemberOrderPreData = async () => {
  21866. if (query.count && query.skuId) {
  21867. const res = await getMemberOrderPreNowAPI({
  21868. count: query.count,
  21869. skuId: query.skuId
  21870. });
  21871. orderPre.value = res.result;
  21872. } else if (query.orderId) {
  21873. const res = await getMemberOrderRepurchaseByIdAPI(query.orderId);
  21874. orderPre.value = res.result;
  21875. } else {
  21876. const res = await getMemberOrderPreAPI();
  21877. orderPre.value = res.result;
  21878. }
  21879. };
  21880. onLoad(() => {
  21881. getMemberOrderPreData();
  21882. });
  21883. const addressStore = useAddressStore();
  21884. const selecteAddress = vue.computed(() => {
  21885. var _a;
  21886. return addressStore.selectedAddress || ((_a = orderPre.value) == null ? void 0 : _a.userAddresses.find((v2) => v2.isDefault));
  21887. });
  21888. const onOrderSubmit = async () => {
  21889. var _a, _b;
  21890. if (!((_a = selecteAddress.value) == null ? void 0 : _a.id)) {
  21891. return uni.showToast({ icon: "none", title: "请选择收货地址" });
  21892. }
  21893. const res = await postMemberOrderAPI({
  21894. addressId: (_b = selecteAddress.value) == null ? void 0 : _b.id,
  21895. buyerMessage: buyerMessage.value,
  21896. deliveryTimeType: activeDelivery.value.type,
  21897. goods: orderPre.value.goods.map((v2) => ({ count: v2.count, skuId: v2.skuId })),
  21898. payChannel: 2,
  21899. payType: 1
  21900. });
  21901. uni.redirectTo({ url: `/pagesOrder/detail/detail?id=${res.result.id}` });
  21902. };
  21903. const __returned__ = { safeAreaInsets, buyerMessage, deliveryList, activeIndex, activeDelivery, onChangeDelivery, query, orderPre, getMemberOrderPreData, addressStore, selecteAddress, onOrderSubmit };
  21904. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  21905. return __returned__;
  21906. }
  21907. });
  21908. function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
  21909. var _a, _b, _c, _d, _e2, _f;
  21910. return vue.openBlock(), vue.createElementBlock(
  21911. vue.Fragment,
  21912. null,
  21913. [
  21914. vue.createElementVNode("scroll-view", {
  21915. "enable-back-to-top": "",
  21916. "scroll-y": "",
  21917. class: "viewport"
  21918. }, [
  21919. vue.createCommentVNode(" 收货地址 "),
  21920. $setup.selecteAddress ? (vue.openBlock(), vue.createElementBlock("navigator", {
  21921. key: 0,
  21922. class: "shipment",
  21923. "hover-class": "none",
  21924. url: "/pagesMember/address/address?from=order"
  21925. }, [
  21926. vue.createElementVNode(
  21927. "view",
  21928. { class: "user" },
  21929. vue.toDisplayString($setup.selecteAddress.receiver) + " " + vue.toDisplayString($setup.selecteAddress.contact),
  21930. 1
  21931. /* TEXT */
  21932. ),
  21933. vue.createElementVNode(
  21934. "view",
  21935. { class: "address" },
  21936. vue.toDisplayString($setup.selecteAddress.fullLocation) + " " + vue.toDisplayString($setup.selecteAddress.address),
  21937. 1
  21938. /* TEXT */
  21939. ),
  21940. vue.createElementVNode("text", { class: "icon icon-right" })
  21941. ])) : (vue.openBlock(), vue.createElementBlock("navigator", {
  21942. key: 1,
  21943. class: "shipment",
  21944. "hover-class": "none",
  21945. url: "/pagesMember/address/address?from=order"
  21946. }, [
  21947. vue.createElementVNode("view", { class: "address" }, " 请选择收货地址 "),
  21948. vue.createElementVNode("text", { class: "icon icon-right" })
  21949. ])),
  21950. vue.createCommentVNode(" 商品信息 "),
  21951. vue.createElementVNode("view", { class: "goods" }, [
  21952. (vue.openBlock(true), vue.createElementBlock(
  21953. vue.Fragment,
  21954. null,
  21955. vue.renderList((_a = $setup.orderPre) == null ? void 0 : _a.goods, (item) => {
  21956. return vue.openBlock(), vue.createElementBlock("navigator", {
  21957. key: item.skuId,
  21958. url: `/pages/goods/goods?id=${item.id}`,
  21959. class: "item",
  21960. "hover-class": "none"
  21961. }, [
  21962. vue.createElementVNode("image", {
  21963. class: "picture",
  21964. src: item.picture
  21965. }, null, 8, ["src"]),
  21966. vue.createElementVNode("view", { class: "meta" }, [
  21967. vue.createElementVNode(
  21968. "view",
  21969. { class: "name ellipsis" },
  21970. vue.toDisplayString(item.name),
  21971. 1
  21972. /* TEXT */
  21973. ),
  21974. vue.createElementVNode(
  21975. "view",
  21976. { class: "attrs" },
  21977. vue.toDisplayString(item.attrsText),
  21978. 1
  21979. /* TEXT */
  21980. ),
  21981. vue.createElementVNode("view", { class: "prices" }, [
  21982. vue.createElementVNode(
  21983. "view",
  21984. { class: "pay-price symbol" },
  21985. vue.toDisplayString(item.payPrice),
  21986. 1
  21987. /* TEXT */
  21988. ),
  21989. vue.createElementVNode(
  21990. "view",
  21991. { class: "price symbol" },
  21992. vue.toDisplayString(item.price),
  21993. 1
  21994. /* TEXT */
  21995. )
  21996. ]),
  21997. vue.createElementVNode(
  21998. "view",
  21999. { class: "count" },
  22000. "x" + vue.toDisplayString(item.count),
  22001. 1
  22002. /* TEXT */
  22003. )
  22004. ])
  22005. ], 8, ["url"]);
  22006. }),
  22007. 128
  22008. /* KEYED_FRAGMENT */
  22009. ))
  22010. ]),
  22011. vue.createCommentVNode(" 配送及支付方式 "),
  22012. vue.createElementVNode("view", { class: "related" }, [
  22013. vue.createElementVNode("view", { class: "item" }, [
  22014. vue.createElementVNode("text", { class: "text" }, "配送时间"),
  22015. vue.createElementVNode("picker", {
  22016. range: $setup.deliveryList,
  22017. "range-key": "text",
  22018. onChange: $setup.onChangeDelivery
  22019. }, [
  22020. vue.createElementVNode(
  22021. "view",
  22022. { class: "icon-fonts picker" },
  22023. vue.toDisplayString($setup.activeDelivery.text),
  22024. 1
  22025. /* TEXT */
  22026. )
  22027. ], 40, ["range"])
  22028. ]),
  22029. vue.createElementVNode("view", { class: "item" }, [
  22030. vue.createElementVNode("text", { class: "text" }, "订单备注"),
  22031. vue.withDirectives(vue.createElementVNode(
  22032. "input",
  22033. {
  22034. class: "input",
  22035. "cursor-spacing": 30,
  22036. placeholder: "选题,建议留言前先与商家沟通确认",
  22037. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.buyerMessage = $event)
  22038. },
  22039. null,
  22040. 512
  22041. /* NEED_PATCH */
  22042. ), [
  22043. [vue.vModelText, $setup.buyerMessage]
  22044. ])
  22045. ])
  22046. ]),
  22047. vue.createCommentVNode(" 支付金额 "),
  22048. vue.createElementVNode("view", { class: "settlement" }, [
  22049. vue.createElementVNode("view", { class: "item" }, [
  22050. vue.createElementVNode("text", { class: "text" }, "商品总价: "),
  22051. vue.createElementVNode(
  22052. "text",
  22053. { class: "number symbol" },
  22054. vue.toDisplayString((_b = $setup.orderPre) == null ? void 0 : _b.summary.totalPrice.toFixed(2)),
  22055. 1
  22056. /* TEXT */
  22057. )
  22058. ]),
  22059. vue.createElementVNode("view", { class: "item" }, [
  22060. vue.createElementVNode("text", { class: "text" }, "运费: "),
  22061. vue.createElementVNode(
  22062. "text",
  22063. { class: "number symbol" },
  22064. vue.toDisplayString((_c = $setup.orderPre) == null ? void 0 : _c.summary.postFee.toFixed(2)),
  22065. 1
  22066. /* TEXT */
  22067. )
  22068. ])
  22069. ])
  22070. ]),
  22071. vue.createCommentVNode(" 吸底工具栏 "),
  22072. vue.createElementVNode(
  22073. "view",
  22074. {
  22075. class: "toolbar",
  22076. style: vue.normalizeStyle({ paddingBottom: ((_d = $setup.safeAreaInsets) == null ? void 0 : _d.bottom) + "px" })
  22077. },
  22078. [
  22079. vue.createElementVNode("view", { class: "total-pay symbol" }, [
  22080. vue.createElementVNode(
  22081. "text",
  22082. { class: "number" },
  22083. vue.toDisplayString((_e2 = $setup.orderPre) == null ? void 0 : _e2.summary.totalPayPrice.toFixed(2)),
  22084. 1
  22085. /* TEXT */
  22086. )
  22087. ]),
  22088. vue.createElementVNode(
  22089. "view",
  22090. {
  22091. class: vue.normalizeClass(["button", { disabled: !((_f = $setup.selecteAddress) == null ? void 0 : _f.id) }]),
  22092. onClick: $setup.onOrderSubmit
  22093. },
  22094. " 提交订单 ",
  22095. 2
  22096. /* CLASS */
  22097. )
  22098. ],
  22099. 4
  22100. /* STYLE */
  22101. )
  22102. ],
  22103. 64
  22104. /* STABLE_FRAGMENT */
  22105. );
  22106. }
  22107. const PagesOrderCreateCreate = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$6], ["__file", "E:/demo/hmrabbit/src/pagesOrder/create/create.vue"]]);
  22108. const en = {
  22109. "uni-countdown.day": "day",
  22110. "uni-countdown.h": "h",
  22111. "uni-countdown.m": "m",
  22112. "uni-countdown.s": "s"
  22113. };
  22114. const zhHans = {
  22115. "uni-countdown.day": "天",
  22116. "uni-countdown.h": "时",
  22117. "uni-countdown.m": "分",
  22118. "uni-countdown.s": "秒"
  22119. };
  22120. const zhHant = {
  22121. "uni-countdown.day": "天",
  22122. "uni-countdown.h": "時",
  22123. "uni-countdown.m": "分",
  22124. "uni-countdown.s": "秒"
  22125. };
  22126. const messages = {
  22127. en,
  22128. "zh-Hans": zhHans,
  22129. "zh-Hant": zhHant
  22130. };
  22131. const {
  22132. t
  22133. } = initVueI18n(messages);
  22134. const _sfc_main$6 = {
  22135. name: "UniCountdown",
  22136. emits: ["timeup"],
  22137. props: {
  22138. showDay: {
  22139. type: Boolean,
  22140. default: true
  22141. },
  22142. showColon: {
  22143. type: Boolean,
  22144. default: true
  22145. },
  22146. start: {
  22147. type: Boolean,
  22148. default: true
  22149. },
  22150. backgroundColor: {
  22151. type: String,
  22152. default: ""
  22153. },
  22154. color: {
  22155. type: String,
  22156. default: "#333"
  22157. },
  22158. fontSize: {
  22159. type: Number,
  22160. default: 14
  22161. },
  22162. splitorColor: {
  22163. type: String,
  22164. default: "#333"
  22165. },
  22166. day: {
  22167. type: Number,
  22168. default: 0
  22169. },
  22170. hour: {
  22171. type: Number,
  22172. default: 0
  22173. },
  22174. minute: {
  22175. type: Number,
  22176. default: 0
  22177. },
  22178. second: {
  22179. type: Number,
  22180. default: 0
  22181. },
  22182. timestamp: {
  22183. type: Number,
  22184. default: 0
  22185. }
  22186. },
  22187. data() {
  22188. return {
  22189. timer: null,
  22190. syncFlag: false,
  22191. d: "00",
  22192. h: "00",
  22193. i: "00",
  22194. s: "00",
  22195. leftTime: 0,
  22196. seconds: 0
  22197. };
  22198. },
  22199. computed: {
  22200. dayText() {
  22201. return t("uni-countdown.day");
  22202. },
  22203. hourText(val) {
  22204. return t("uni-countdown.h");
  22205. },
  22206. minuteText(val) {
  22207. return t("uni-countdown.m");
  22208. },
  22209. secondText(val) {
  22210. return t("uni-countdown.s");
  22211. },
  22212. timeStyle() {
  22213. const {
  22214. color,
  22215. backgroundColor,
  22216. fontSize
  22217. } = this;
  22218. return {
  22219. color,
  22220. backgroundColor,
  22221. fontSize: `${fontSize}px`,
  22222. width: `${fontSize * 22 / 14}px`,
  22223. // 按字体大小为 14px 时的比例缩放
  22224. lineHeight: `${fontSize * 20 / 14}px`,
  22225. borderRadius: `${fontSize * 3 / 14}px`
  22226. };
  22227. },
  22228. splitorStyle() {
  22229. const { splitorColor, fontSize, backgroundColor } = this;
  22230. return {
  22231. color: splitorColor,
  22232. fontSize: `${fontSize * 12 / 14}px`,
  22233. margin: backgroundColor ? `${fontSize * 4 / 14}px` : ""
  22234. };
  22235. }
  22236. },
  22237. watch: {
  22238. day(val) {
  22239. this.changeFlag();
  22240. },
  22241. hour(val) {
  22242. this.changeFlag();
  22243. },
  22244. minute(val) {
  22245. this.changeFlag();
  22246. },
  22247. second(val) {
  22248. this.changeFlag();
  22249. },
  22250. start: {
  22251. immediate: true,
  22252. handler(newVal, oldVal) {
  22253. if (newVal) {
  22254. this.startData();
  22255. } else {
  22256. if (!oldVal)
  22257. return;
  22258. clearInterval(this.timer);
  22259. }
  22260. }
  22261. }
  22262. },
  22263. created: function(e2) {
  22264. this.seconds = this.toSeconds(this.timestamp, this.day, this.hour, this.minute, this.second);
  22265. this.countDown();
  22266. },
  22267. unmounted() {
  22268. clearInterval(this.timer);
  22269. },
  22270. methods: {
  22271. toSeconds(timestamp, day, hours, minutes, seconds) {
  22272. if (timestamp) {
  22273. return timestamp - parseInt((/* @__PURE__ */ new Date()).getTime() / 1e3, 10);
  22274. }
  22275. return day * 60 * 60 * 24 + hours * 60 * 60 + minutes * 60 + seconds;
  22276. },
  22277. timeUp() {
  22278. clearInterval(this.timer);
  22279. this.$emit("timeup");
  22280. },
  22281. countDown() {
  22282. let seconds = this.seconds;
  22283. let [day, hour, minute, second] = [0, 0, 0, 0];
  22284. if (seconds > 0) {
  22285. day = Math.floor(seconds / (60 * 60 * 24));
  22286. hour = Math.floor(seconds / (60 * 60)) - day * 24;
  22287. minute = Math.floor(seconds / 60) - day * 24 * 60 - hour * 60;
  22288. second = Math.floor(seconds) - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60;
  22289. } else {
  22290. this.timeUp();
  22291. }
  22292. if (day < 10) {
  22293. day = "0" + day;
  22294. }
  22295. if (hour < 10) {
  22296. hour = "0" + hour;
  22297. }
  22298. if (minute < 10) {
  22299. minute = "0" + minute;
  22300. }
  22301. if (second < 10) {
  22302. second = "0" + second;
  22303. }
  22304. this.d = day;
  22305. this.h = hour;
  22306. this.i = minute;
  22307. this.s = second;
  22308. },
  22309. startData() {
  22310. this.seconds = this.toSeconds(this.timestamp, this.day, this.hour, this.minute, this.second);
  22311. if (this.seconds <= 0) {
  22312. this.seconds = this.toSeconds(0, 0, 0, 0, 0);
  22313. this.countDown();
  22314. return;
  22315. }
  22316. clearInterval(this.timer);
  22317. this.countDown();
  22318. this.timer = setInterval(() => {
  22319. this.seconds--;
  22320. if (this.seconds < 0) {
  22321. this.timeUp();
  22322. return;
  22323. }
  22324. this.countDown();
  22325. }, 1e3);
  22326. },
  22327. update() {
  22328. this.startData();
  22329. },
  22330. changeFlag() {
  22331. if (!this.syncFlag) {
  22332. this.seconds = this.toSeconds(this.timestamp, this.day, this.hour, this.minute, this.second);
  22333. this.startData();
  22334. this.syncFlag = true;
  22335. }
  22336. }
  22337. }
  22338. };
  22339. function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
  22340. return vue.openBlock(), vue.createElementBlock("view", { class: "uni-countdown" }, [
  22341. $props.showDay ? (vue.openBlock(), vue.createElementBlock(
  22342. "text",
  22343. {
  22344. key: 0,
  22345. style: vue.normalizeStyle([$options.timeStyle]),
  22346. class: "uni-countdown__number"
  22347. },
  22348. vue.toDisplayString($data.d),
  22349. 5
  22350. /* TEXT, STYLE */
  22351. )) : vue.createCommentVNode("v-if", true),
  22352. $props.showDay ? (vue.openBlock(), vue.createElementBlock(
  22353. "text",
  22354. {
  22355. key: 1,
  22356. style: vue.normalizeStyle([$options.splitorStyle]),
  22357. class: "uni-countdown__splitor"
  22358. },
  22359. vue.toDisplayString($options.dayText),
  22360. 5
  22361. /* TEXT, STYLE */
  22362. )) : vue.createCommentVNode("v-if", true),
  22363. vue.createElementVNode(
  22364. "text",
  22365. {
  22366. style: vue.normalizeStyle([$options.timeStyle]),
  22367. class: "uni-countdown__number"
  22368. },
  22369. vue.toDisplayString($data.h),
  22370. 5
  22371. /* TEXT, STYLE */
  22372. ),
  22373. vue.createElementVNode(
  22374. "text",
  22375. {
  22376. style: vue.normalizeStyle([$options.splitorStyle]),
  22377. class: "uni-countdown__splitor"
  22378. },
  22379. vue.toDisplayString($props.showColon ? ":" : $options.hourText),
  22380. 5
  22381. /* TEXT, STYLE */
  22382. ),
  22383. vue.createElementVNode(
  22384. "text",
  22385. {
  22386. style: vue.normalizeStyle([$options.timeStyle]),
  22387. class: "uni-countdown__number"
  22388. },
  22389. vue.toDisplayString($data.i),
  22390. 5
  22391. /* TEXT, STYLE */
  22392. ),
  22393. vue.createElementVNode(
  22394. "text",
  22395. {
  22396. style: vue.normalizeStyle([$options.splitorStyle]),
  22397. class: "uni-countdown__splitor"
  22398. },
  22399. vue.toDisplayString($props.showColon ? ":" : $options.minuteText),
  22400. 5
  22401. /* TEXT, STYLE */
  22402. ),
  22403. vue.createElementVNode(
  22404. "text",
  22405. {
  22406. style: vue.normalizeStyle([$options.timeStyle]),
  22407. class: "uni-countdown__number"
  22408. },
  22409. vue.toDisplayString($data.s),
  22410. 5
  22411. /* TEXT, STYLE */
  22412. ),
  22413. !$props.showColon ? (vue.openBlock(), vue.createElementBlock(
  22414. "text",
  22415. {
  22416. key: 2,
  22417. style: vue.normalizeStyle([$options.splitorStyle]),
  22418. class: "uni-countdown__splitor"
  22419. },
  22420. vue.toDisplayString($options.secondText),
  22421. 5
  22422. /* TEXT, STYLE */
  22423. )) : vue.createCommentVNode("v-if", true)
  22424. ]);
  22425. }
  22426. const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$5], ["__scopeId", "data-v-342c352a"], ["__file", "E:/demo/hmrabbit/node_modules/@dcloudio/uni-ui/lib/uni-countdown/uni-countdown.vue"]]);
  22427. var OrderState = /* @__PURE__ */ ((OrderState2) => {
  22428. OrderState2[OrderState2["DaiFuKuan"] = 1] = "DaiFuKuan";
  22429. OrderState2[OrderState2["DaiFaHuo"] = 2] = "DaiFaHuo";
  22430. OrderState2[OrderState2["DaiShouHuo"] = 3] = "DaiShouHuo";
  22431. OrderState2[OrderState2["DaiPingJia"] = 4] = "DaiPingJia";
  22432. OrderState2[OrderState2["YiWanCheng"] = 5] = "YiWanCheng";
  22433. OrderState2[OrderState2["YiQuXiao"] = 6] = "YiQuXiao";
  22434. return OrderState2;
  22435. })(OrderState || {});
  22436. const orderStateList = [
  22437. { id: 0, text: "" },
  22438. { id: 1, text: "待付款" },
  22439. { id: 2, text: "待发货" },
  22440. { id: 3, text: "待收货" },
  22441. { id: 4, text: "待评价" },
  22442. { id: 5, text: "已完成" },
  22443. { id: 6, text: "已取消" }
  22444. ];
  22445. const _sfc_main$5 = {};
  22446. function _sfc_render$4(_ctx, _cache) {
  22447. return vue.openBlock(), vue.createElementBlock("view", { class: "sk-container" }, [
  22448. vue.createElementVNode("scroll-view", {
  22449. "scroll-y": true,
  22450. class: "viewport sk-transparent",
  22451. id: "scroller",
  22452. "enable-back-to-top": true
  22453. }, [
  22454. vue.createElementVNode("view", {
  22455. class: "overview sk-image",
  22456. style: { "padding-top": "64px" }
  22457. }, [
  22458. vue.createElementVNode("view", { class: "status sk-transparent sk-text-0-0000-826 sk-text" }, "待收货")
  22459. ]),
  22460. vue.createElementVNode("view", { class: "shipment" }, [
  22461. vue.createElementVNode("navigator", {
  22462. class: "logistics sk-image sk-pseudo sk-pseudo-circle",
  22463. "hover-class": "none"
  22464. }, [
  22465. vue.createElementVNode("view", { class: "message sk-transparent sk-text-14-2857-512 sk-text" }, "小兔兔到了小福家里,请签收"),
  22466. vue.createElementVNode("view", { class: "date sk-transparent sk-text-14-2857-990 sk-text" }, "2023-04-15 23:23:04")
  22467. ]),
  22468. vue.createElementVNode("view", { class: "locate sk-image" }, [
  22469. vue.createElementVNode("view", { class: "user sk-transparent sk-text-14-2857-630 sk-text" }, "苏东坡 13633336666"),
  22470. vue.createElementVNode("view", { class: "address sk-transparent sk-text-14-2857-606 sk-text" }, "广东省 广州市 天河区吉山幼儿园")
  22471. ])
  22472. ]),
  22473. vue.createElementVNode("view", { class: "goods" }, [
  22474. vue.createElementVNode("view", { class: "item" }, [
  22475. vue.createElementVNode("navigator", {
  22476. class: "navigator",
  22477. "hover-class": "none"
  22478. }, [
  22479. vue.createElementVNode("image", { class: "cover sk-image" }),
  22480. vue.createElementVNode("view", { class: "meta" }, [
  22481. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-474 sk-text" }, "厚厚一按就干爽,埃及进口长绒棉毛巾"),
  22482. vue.createElementVNode("view", { class: "type sk-transparent sk-text-22-2222-237 sk-text" }, "超值4条装(灰蓝色+粉色+银灰+嫩黄)"),
  22483. vue.createElementVNode("view", { class: "price" }, [
  22484. vue.createElementVNode("view", { class: "actual" }, [
  22485. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  22486. vue.createElementVNode("text", { class: "sk-transparent sk-text-14-2857-102 sk-text" }, "68")
  22487. ])
  22488. ]),
  22489. vue.createElementVNode("view", { class: "quantity sk-transparent sk-opacity" }, "x1")
  22490. ])
  22491. ]),
  22492. vue.createElementVNode("navigator", {
  22493. class: "navigator",
  22494. "hover-class": "none"
  22495. }, [
  22496. vue.createElementVNode("image", { class: "cover sk-image" }),
  22497. vue.createElementVNode("view", { class: "meta" }, [
  22498. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-969 sk-text" }, "KJE金属色系轻量电动车骑行盔男女通用"),
  22499. vue.createElementVNode("view", { class: "type sk-transparent sk-text-22-2222-510 sk-text" }, "玫瑰金L"),
  22500. vue.createElementVNode("view", { class: "price" }, [
  22501. vue.createElementVNode("view", { class: "actual" }, [
  22502. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  22503. vue.createElementVNode("text", { class: "sk-transparent sk-text-14-2857-431 sk-text" }, "120")
  22504. ])
  22505. ]),
  22506. vue.createElementVNode("view", { class: "quantity sk-transparent sk-opacity" }, "x1")
  22507. ])
  22508. ]),
  22509. vue.createElementVNode("navigator", {
  22510. class: "navigator",
  22511. "hover-class": "none"
  22512. }, [
  22513. vue.createElementVNode("image", { class: "cover sk-image" }),
  22514. vue.createElementVNode("view", { class: "meta" }, [
  22515. vue.createElementVNode("view", { class: "name ellipsis sk-transparent sk-text-14-2857-130 sk-text" }, "源自澳洲进口羊毛,儿童奢暖羊毛被升级款"),
  22516. vue.createElementVNode("view", { class: "type sk-transparent sk-text-22-2222-110 sk-text" }, "春秋款, 100%羊毛款:150x200cm,适合1.2米/1.35米床"),
  22517. vue.createElementVNode("view", { class: "price" }, [
  22518. vue.createElementVNode("view", { class: "actual" }, [
  22519. vue.createElementVNode("text", { class: "symbol sk-transparent sk-opacity" }, "¥"),
  22520. vue.createElementVNode("text", { class: "sk-transparent sk-text-14-2857-273 sk-text" }, "289")
  22521. ])
  22522. ]),
  22523. vue.createElementVNode("view", { class: "quantity sk-transparent sk-opacity" }, "x1")
  22524. ])
  22525. ])
  22526. ]),
  22527. vue.createElementVNode("view", { class: "total" }, [
  22528. vue.createElementVNode("view", { class: "row" }, [
  22529. vue.createElementVNode("view", { class: "text sk-transparent sk-text-0-0000-302 sk-text" }, "商品总价: "),
  22530. vue.createElementVNode("view", { class: "symbol sk-transparent sk-text-0-0000-998 sk-text sk-pseudo sk-pseudo-circle" }, "477")
  22531. ]),
  22532. vue.createElementVNode("view", { class: "row" }, [
  22533. vue.createElementVNode("view", { class: "text sk-transparent sk-text-0-0000-912 sk-text" }, "运费: "),
  22534. vue.createElementVNode("view", { class: "symbol sk-transparent sk-text-0-0000-208 sk-text sk-pseudo sk-pseudo-circle" }, "2")
  22535. ]),
  22536. vue.createElementVNode("view", { class: "row" }, [
  22537. vue.createElementVNode("view", { class: "text sk-transparent sk-text-0-0000-538 sk-text" }, "应付金额: "),
  22538. vue.createElementVNode("view", { class: "symbol primary sk-transparent sk-text-0-0000-858 sk-text sk-pseudo sk-pseudo-circle" }, "479")
  22539. ])
  22540. ])
  22541. ]),
  22542. vue.createElementVNode("view", { class: "detail" }, [
  22543. vue.createElementVNode("view", { class: "title sk-transparent sk-text-0-0000-66 sk-text" }, "订单信息"),
  22544. vue.createElementVNode("view", { class: "row" }, [
  22545. vue.createElementVNode("view", { class: "item sk-transparent" }, [
  22546. vue.createTextVNode(" 订单编号: 1645809639951962113 "),
  22547. vue.createElementVNode("text", { class: "copy sk-transparent sk-text-0-0000-522 sk-text" }, "复制")
  22548. ]),
  22549. vue.createElementVNode("view", { class: "item sk-transparent sk-text-0-0000-353 sk-text" }, "下单时间: 2023-04-11 23:22:50")
  22550. ])
  22551. ]),
  22552. vue.createElementVNode("view", {
  22553. class: "toolbar",
  22554. style: { "padding-bottom": "34px" }
  22555. }, [
  22556. vue.createElementVNode("view", {
  22557. class: "button primary sk-transparent sk-text-31-9444-411 sk-text",
  22558. style: { "background-position-x": "50%" }
  22559. }, "再次购买")
  22560. ])
  22561. ])
  22562. ]);
  22563. }
  22564. const PageSkeleton = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__scopeId", "data-v-b1ebad5e"], ["__file", "E:/demo/hmrabbit/src/pagesOrder/detail/components/PageSkeleton.vue"]]);
  22565. const getPayMockAPI = (data) => {
  22566. return http({
  22567. method: "GET",
  22568. url: "/pay/mock",
  22569. data
  22570. });
  22571. };
  22572. const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
  22573. __name: "detail",
  22574. props: {
  22575. id: { type: String, required: true }
  22576. },
  22577. setup(__props, { expose: __expose }) {
  22578. __expose();
  22579. const { safeAreaInsets } = uni.getSystemInfoSync();
  22580. const { guessRef, onScrolltolower } = useGuessList();
  22581. const popup2 = vue.ref();
  22582. const reasonList = vue.ref([
  22583. "商品无货",
  22584. "不想要了",
  22585. "商品信息填错了",
  22586. "地址信息填写错误",
  22587. "商品降价",
  22588. "其它"
  22589. ]);
  22590. const reason = vue.ref("");
  22591. const onCopy = (id) => {
  22592. uni.setClipboardData({ data: id });
  22593. };
  22594. const query = __props;
  22595. const pages2 = getCurrentPages();
  22596. const order = vue.ref();
  22597. const getMemberOrderByIdData = async () => {
  22598. const res = await getMemberOrderByIdAPI(query.id);
  22599. order.value = res.result;
  22600. if ([OrderState.DaiShouHuo, OrderState.DaiPingJia, OrderState.YiWanCheng].includes(
  22601. order.value.orderState
  22602. )) {
  22603. getMemberOrderLogisticsByIdData();
  22604. }
  22605. };
  22606. const logisticList = vue.ref([]);
  22607. const getMemberOrderLogisticsByIdData = async () => {
  22608. const res = await getMemberOrderLogisticsByIdAPI(query.id);
  22609. logisticList.value = res.result.list;
  22610. };
  22611. onLoad(() => {
  22612. getMemberOrderByIdData();
  22613. });
  22614. const onTimeup = () => {
  22615. order.value.orderState = OrderState.YiQuXiao;
  22616. };
  22617. const onOrderPay = async () => {
  22618. {
  22619. await getPayMockAPI({ orderId: query.id });
  22620. }
  22621. uni.redirectTo({ url: `/pagesOrder/payment/payment?id=${query.id}` });
  22622. };
  22623. const isDev = true;
  22624. const onOrderSend = async () => {
  22625. {
  22626. await getMemberOrderConsignmentByIdAPI(query.id);
  22627. uni.showToast({ icon: "success", title: "模拟发货完成" });
  22628. order.value.orderState = OrderState.DaiShouHuo;
  22629. }
  22630. };
  22631. const onOrderConfirm = () => {
  22632. uni.showModal({
  22633. content: "为保障您的权益,请收到货并确认无误后,再确认收货",
  22634. confirmColor: "#27BA9B",
  22635. success: async (success) => {
  22636. if (success.confirm) {
  22637. const res = await putMemberOrderReceiptByIdAPI(query.id);
  22638. order.value = res.result;
  22639. }
  22640. }
  22641. });
  22642. };
  22643. const onOrderDelete = () => {
  22644. uni.showModal({
  22645. content: "是否删除订单",
  22646. confirmColor: "#27BA9B",
  22647. success: async (success) => {
  22648. if (success.confirm) {
  22649. await deleteMemberOrderAPI({ ids: [query.id] });
  22650. uni.redirectTo({ url: "/pagesOrder/list/list" });
  22651. }
  22652. }
  22653. });
  22654. };
  22655. const onOrderCancel = async () => {
  22656. var _a;
  22657. const res = await getMemberOrderCancelByIdAPI(query.id, { cancelReason: reason.value });
  22658. order.value = res.result;
  22659. (_a = popup2.value) == null ? void 0 : _a.close();
  22660. uni.showToast({ icon: "none", title: "订单取消成功" });
  22661. };
  22662. const __returned__ = { safeAreaInsets, guessRef, onScrolltolower, popup: popup2, reasonList, reason, onCopy, query, pages: pages2, order, getMemberOrderByIdData, logisticList, getMemberOrderLogisticsByIdData, onTimeup, onOrderPay, isDev, onOrderSend, onOrderConfirm, onOrderDelete, onOrderCancel, get OrderState() {
  22663. return OrderState;
  22664. }, get orderStateList() {
  22665. return orderStateList;
  22666. }, PageSkeleton };
  22667. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  22668. return __returned__;
  22669. }
  22670. });
  22671. function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
  22672. var _a, _b, _c;
  22673. const _component_uni_countdown = resolveEasycom(vue.resolveDynamicComponent("uni-countdown"), __easycom_0);
  22674. const _component_XtxGuess = resolveEasycom(vue.resolveDynamicComponent("XtxGuess"), __easycom_0$9);
  22675. const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_2);
  22676. return vue.openBlock(), vue.createElementBlock(
  22677. vue.Fragment,
  22678. null,
  22679. [
  22680. vue.createCommentVNode(" 自定义导航栏: 默认透明不可见, scroll-view 滚动到 50 时展示 "),
  22681. vue.createElementVNode(
  22682. "view",
  22683. {
  22684. class: "navbar",
  22685. style: vue.normalizeStyle({ paddingTop: ((_a = $setup.safeAreaInsets) == null ? void 0 : _a.top) + "px" })
  22686. },
  22687. [
  22688. vue.createElementVNode("view", { class: "wrap" }, [
  22689. $setup.pages.length > 1 ? (vue.openBlock(), vue.createElementBlock("navigator", {
  22690. key: 0,
  22691. "open-type": "navigateBack",
  22692. class: "back icon-left"
  22693. })) : (vue.openBlock(), vue.createElementBlock("navigator", {
  22694. key: 1,
  22695. url: "/pages/index/index",
  22696. "open-type": "switchTab",
  22697. class: "back icon-home"
  22698. })),
  22699. vue.createElementVNode("view", { class: "title" }, "订单详情")
  22700. ])
  22701. ],
  22702. 4
  22703. /* STYLE */
  22704. ),
  22705. vue.createElementVNode(
  22706. "scroll-view",
  22707. {
  22708. "enable-back-to-top": "",
  22709. "scroll-y": "",
  22710. class: "viewport",
  22711. id: "scroller",
  22712. onScrolltolower: _cache[2] || (_cache[2] = (...args) => $setup.onScrolltolower && $setup.onScrolltolower(...args))
  22713. },
  22714. [
  22715. $setup.order ? (vue.openBlock(), vue.createElementBlock(
  22716. vue.Fragment,
  22717. { key: 0 },
  22718. [
  22719. vue.createCommentVNode(" 订单状态 "),
  22720. vue.createElementVNode(
  22721. "view",
  22722. {
  22723. class: "overview",
  22724. style: vue.normalizeStyle({ paddingTop: $setup.safeAreaInsets.top + 20 + "px" })
  22725. },
  22726. [
  22727. vue.createCommentVNode(" 待付款状态:展示倒计时 "),
  22728. $setup.order.orderState === $setup.OrderState.DaiFuKuan ? (vue.openBlock(), vue.createElementBlock(
  22729. vue.Fragment,
  22730. { key: 0 },
  22731. [
  22732. vue.createElementVNode("view", { class: "status icon-clock" }, "等待付款"),
  22733. vue.createElementVNode("view", { class: "tips" }, [
  22734. vue.createElementVNode(
  22735. "text",
  22736. { class: "money" },
  22737. "应付金额: ¥ " + vue.toDisplayString($setup.order.payMoney),
  22738. 1
  22739. /* TEXT */
  22740. ),
  22741. vue.createElementVNode("text", { class: "time" }, "支付剩余"),
  22742. vue.createVNode(_component_uni_countdown, {
  22743. second: $setup.order.countdown,
  22744. color: "#fff",
  22745. "splitor-color": "#fff",
  22746. "show-day": false,
  22747. "show-colon": false,
  22748. onTimeup: $setup.onTimeup
  22749. }, null, 8, ["second"])
  22750. ]),
  22751. vue.createElementVNode("view", {
  22752. class: "button",
  22753. onClick: $setup.onOrderPay
  22754. }, "去支付")
  22755. ],
  22756. 64
  22757. /* STABLE_FRAGMENT */
  22758. )) : (vue.openBlock(), vue.createElementBlock(
  22759. vue.Fragment,
  22760. { key: 1 },
  22761. [
  22762. vue.createCommentVNode(" 其他订单状态:展示再次购买按钮 "),
  22763. vue.createCommentVNode(" 订单状态文字 "),
  22764. vue.createElementVNode(
  22765. "view",
  22766. { class: "status" },
  22767. vue.toDisplayString($setup.orderStateList[$setup.order.orderState].text),
  22768. 1
  22769. /* TEXT */
  22770. ),
  22771. vue.createElementVNode("view", { class: "button-group" }, [
  22772. vue.createElementVNode("navigator", {
  22773. class: "button",
  22774. url: `/pagesOrder/create/create?orderId=${$setup.query.id}`,
  22775. "hover-class": "none"
  22776. }, " 再次购买 ", 8, ["url"]),
  22777. vue.createCommentVNode(" 待发货状态:模拟发货,开发期间使用,用于修改订单状态为已发货 "),
  22778. $setup.isDev && $setup.order.orderState == $setup.OrderState.DaiFaHuo ? (vue.openBlock(), vue.createElementBlock("view", {
  22779. key: 0,
  22780. onClick: $setup.onOrderSend,
  22781. class: "button"
  22782. }, " 模拟发货 ")) : vue.createCommentVNode("v-if", true),
  22783. vue.createCommentVNode(" 待收货状态: 展示确认收货按钮 "),
  22784. $setup.order.orderState === $setup.OrderState.DaiShouHuo ? (vue.openBlock(), vue.createElementBlock("view", {
  22785. key: 1,
  22786. onClick: $setup.onOrderConfirm,
  22787. class: "button"
  22788. }, " 确认收货 ")) : vue.createCommentVNode("v-if", true)
  22789. ])
  22790. ],
  22791. 64
  22792. /* STABLE_FRAGMENT */
  22793. ))
  22794. ],
  22795. 4
  22796. /* STYLE */
  22797. ),
  22798. vue.createCommentVNode(" 配送状态 "),
  22799. vue.createElementVNode("view", { class: "shipment" }, [
  22800. vue.createCommentVNode(" 订单物流信息 "),
  22801. (vue.openBlock(true), vue.createElementBlock(
  22802. vue.Fragment,
  22803. null,
  22804. vue.renderList($setup.logisticList, (item) => {
  22805. return vue.openBlock(), vue.createElementBlock("view", {
  22806. key: item.id,
  22807. class: "item"
  22808. }, [
  22809. vue.createElementVNode(
  22810. "view",
  22811. { class: "message" },
  22812. vue.toDisplayString(item.text),
  22813. 1
  22814. /* TEXT */
  22815. ),
  22816. vue.createElementVNode(
  22817. "view",
  22818. { class: "date" },
  22819. vue.toDisplayString(item.time),
  22820. 1
  22821. /* TEXT */
  22822. )
  22823. ]);
  22824. }),
  22825. 128
  22826. /* KEYED_FRAGMENT */
  22827. )),
  22828. vue.createCommentVNode(" 用户收货地址 "),
  22829. vue.createElementVNode("view", { class: "locate" }, [
  22830. vue.createElementVNode(
  22831. "view",
  22832. { class: "user" },
  22833. vue.toDisplayString($setup.order.receiverContact) + " " + vue.toDisplayString($setup.order.receiverMobile),
  22834. 1
  22835. /* TEXT */
  22836. ),
  22837. vue.createElementVNode(
  22838. "view",
  22839. { class: "address" },
  22840. vue.toDisplayString($setup.order.receiverAddress),
  22841. 1
  22842. /* TEXT */
  22843. )
  22844. ])
  22845. ]),
  22846. vue.createCommentVNode(" 商品信息 "),
  22847. vue.createElementVNode("view", { class: "goods" }, [
  22848. vue.createElementVNode("view", { class: "item" }, [
  22849. (vue.openBlock(true), vue.createElementBlock(
  22850. vue.Fragment,
  22851. null,
  22852. vue.renderList($setup.order.skus, (item) => {
  22853. return vue.openBlock(), vue.createElementBlock("navigator", {
  22854. class: "navigator",
  22855. key: item.id,
  22856. url: `/pages/goods/goods?id=${item.spuId}`,
  22857. "hover-class": "none"
  22858. }, [
  22859. vue.createElementVNode("image", {
  22860. class: "cover",
  22861. src: item.image
  22862. }, null, 8, ["src"]),
  22863. vue.createElementVNode("view", { class: "meta" }, [
  22864. vue.createElementVNode(
  22865. "view",
  22866. { class: "name ellipsis" },
  22867. vue.toDisplayString(item.name),
  22868. 1
  22869. /* TEXT */
  22870. ),
  22871. vue.createElementVNode(
  22872. "view",
  22873. { class: "type" },
  22874. vue.toDisplayString(item.attrsText),
  22875. 1
  22876. /* TEXT */
  22877. ),
  22878. vue.createElementVNode("view", { class: "price" }, [
  22879. vue.createElementVNode("view", { class: "actual" }, [
  22880. vue.createElementVNode("text", { class: "symbol" }, "¥"),
  22881. vue.createElementVNode(
  22882. "text",
  22883. null,
  22884. vue.toDisplayString(item.curPrice),
  22885. 1
  22886. /* TEXT */
  22887. )
  22888. ])
  22889. ]),
  22890. vue.createElementVNode(
  22891. "view",
  22892. { class: "quantity" },
  22893. "x" + vue.toDisplayString(item.quantity),
  22894. 1
  22895. /* TEXT */
  22896. )
  22897. ])
  22898. ], 8, ["url"]);
  22899. }),
  22900. 128
  22901. /* KEYED_FRAGMENT */
  22902. )),
  22903. vue.createCommentVNode(" 待评价状态:展示按钮 "),
  22904. $setup.order.orderState === $setup.OrderState.DaiPingJia ? (vue.openBlock(), vue.createElementBlock("view", {
  22905. key: 0,
  22906. class: "action"
  22907. }, [
  22908. vue.createElementVNode("view", { class: "button primary" }, "申请售后"),
  22909. vue.createElementVNode("navigator", {
  22910. url: "",
  22911. class: "button"
  22912. }, " 去评价 ")
  22913. ])) : vue.createCommentVNode("v-if", true)
  22914. ]),
  22915. vue.createCommentVNode(" 合计 "),
  22916. vue.createElementVNode("view", { class: "total" }, [
  22917. vue.createElementVNode("view", { class: "row" }, [
  22918. vue.createElementVNode("view", { class: "text" }, "商品总价: "),
  22919. vue.createElementVNode(
  22920. "view",
  22921. { class: "symbol" },
  22922. vue.toDisplayString($setup.order.totalMoney),
  22923. 1
  22924. /* TEXT */
  22925. )
  22926. ]),
  22927. vue.createElementVNode("view", { class: "row" }, [
  22928. vue.createElementVNode("view", { class: "text" }, "运费: "),
  22929. vue.createElementVNode(
  22930. "view",
  22931. { class: "symbol" },
  22932. vue.toDisplayString($setup.order.postFee),
  22933. 1
  22934. /* TEXT */
  22935. )
  22936. ]),
  22937. vue.createElementVNode("view", { class: "row" }, [
  22938. vue.createElementVNode("view", { class: "text" }, "应付金额: "),
  22939. vue.createElementVNode(
  22940. "view",
  22941. { class: "symbol primary" },
  22942. vue.toDisplayString($setup.order.payMoney),
  22943. 1
  22944. /* TEXT */
  22945. )
  22946. ])
  22947. ])
  22948. ]),
  22949. vue.createCommentVNode(" 订单信息 "),
  22950. vue.createElementVNode("view", { class: "detail" }, [
  22951. vue.createElementVNode("view", { class: "title" }, "订单信息"),
  22952. vue.createElementVNode("view", { class: "row" }, [
  22953. vue.createElementVNode("view", { class: "item" }, [
  22954. vue.createTextVNode(
  22955. " 订单编号: " + vue.toDisplayString($setup.query.id) + " ",
  22956. 1
  22957. /* TEXT */
  22958. ),
  22959. vue.createElementVNode("text", {
  22960. class: "copy",
  22961. onClick: _cache[0] || (_cache[0] = ($event) => $setup.onCopy($setup.query.id))
  22962. }, "复制")
  22963. ]),
  22964. vue.createElementVNode(
  22965. "view",
  22966. { class: "item" },
  22967. "下单时间: " + vue.toDisplayString($setup.order.createTime),
  22968. 1
  22969. /* TEXT */
  22970. )
  22971. ])
  22972. ]),
  22973. vue.createCommentVNode(" 猜你喜欢 "),
  22974. vue.createVNode(
  22975. _component_XtxGuess,
  22976. { ref: "guessRef" },
  22977. null,
  22978. 512
  22979. /* NEED_PATCH */
  22980. ),
  22981. vue.createCommentVNode(" 底部操作栏 "),
  22982. vue.createElementVNode(
  22983. "view",
  22984. {
  22985. class: "toolbar-height",
  22986. style: vue.normalizeStyle({ paddingBottom: ((_b = $setup.safeAreaInsets) == null ? void 0 : _b.bottom) + "px" })
  22987. },
  22988. null,
  22989. 4
  22990. /* STYLE */
  22991. ),
  22992. vue.createElementVNode(
  22993. "view",
  22994. {
  22995. class: "toolbar",
  22996. style: vue.normalizeStyle({ paddingBottom: ((_c = $setup.safeAreaInsets) == null ? void 0 : _c.bottom) + "px" })
  22997. },
  22998. [
  22999. vue.createCommentVNode(" 待付款状态:展示支付按钮 "),
  23000. $setup.order.orderState === $setup.OrderState.DaiFuKuan ? (vue.openBlock(), vue.createElementBlock(
  23001. vue.Fragment,
  23002. { key: 0 },
  23003. [
  23004. vue.createElementVNode("view", {
  23005. class: "button primary",
  23006. onClick: $setup.onOrderPay
  23007. }, " 去支付 "),
  23008. vue.createElementVNode("view", {
  23009. class: "button",
  23010. onClick: _cache[1] || (_cache[1] = ($event) => {
  23011. var _a2, _b2;
  23012. return (_b2 = (_a2 = $setup.popup) == null ? void 0 : _a2.open) == null ? void 0 : _b2.call(_a2);
  23013. })
  23014. }, " 取消订单 ")
  23015. ],
  23016. 64
  23017. /* STABLE_FRAGMENT */
  23018. )) : (vue.openBlock(), vue.createElementBlock(
  23019. vue.Fragment,
  23020. { key: 1 },
  23021. [
  23022. vue.createCommentVNode(" 其他订单状态:按需展示按钮 "),
  23023. vue.createElementVNode("navigator", {
  23024. class: "button secondary",
  23025. url: `/pagesOrder/create/create?orderId=${$setup.query.id}`,
  23026. "hover-class": "none"
  23027. }, " 再次购买 ", 8, ["url"]),
  23028. vue.createCommentVNode(" 待收货状态: 展示确认收货 "),
  23029. $setup.order.orderState === $setup.OrderState.DaiShouHuo ? (vue.openBlock(), vue.createElementBlock("view", {
  23030. key: 0,
  23031. class: "button primary",
  23032. onClick: $setup.onOrderConfirm
  23033. }, " 确认收货 ")) : vue.createCommentVNode("v-if", true),
  23034. vue.createCommentVNode(" 待评价状态: 展示去评价 "),
  23035. $setup.order.orderState === $setup.OrderState.DaiPingJia ? (vue.openBlock(), vue.createElementBlock("view", {
  23036. key: 1,
  23037. class: "button"
  23038. }, " 去评价 ")) : vue.createCommentVNode("v-if", true),
  23039. vue.createCommentVNode(" 待评价/已完成/已取消 状态: 展示删除订单 "),
  23040. $setup.order.orderState >= $setup.OrderState.DaiPingJia ? (vue.openBlock(), vue.createElementBlock("view", {
  23041. key: 2,
  23042. class: "button delete",
  23043. onClick: $setup.onOrderDelete
  23044. }, " 删除订单 ")) : vue.createCommentVNode("v-if", true)
  23045. ],
  23046. 64
  23047. /* STABLE_FRAGMENT */
  23048. ))
  23049. ],
  23050. 4
  23051. /* STYLE */
  23052. )
  23053. ],
  23054. 64
  23055. /* STABLE_FRAGMENT */
  23056. )) : (vue.openBlock(), vue.createElementBlock(
  23057. vue.Fragment,
  23058. { key: 1 },
  23059. [
  23060. vue.createCommentVNode(" 骨架屏组件 "),
  23061. vue.createVNode($setup["PageSkeleton"])
  23062. ],
  23063. 64
  23064. /* STABLE_FRAGMENT */
  23065. ))
  23066. ],
  23067. 32
  23068. /* NEED_HYDRATION */
  23069. ),
  23070. vue.createCommentVNode(" 取消订单弹窗 "),
  23071. vue.createVNode(
  23072. _component_uni_popup,
  23073. {
  23074. ref: "popup",
  23075. type: "bottom",
  23076. "background-color": "#fff"
  23077. },
  23078. {
  23079. default: vue.withCtx(() => [
  23080. vue.createElementVNode("view", { class: "popup-root" }, [
  23081. vue.createElementVNode("view", { class: "title" }, "订单取消"),
  23082. vue.createElementVNode("view", { class: "description" }, [
  23083. vue.createElementVNode("view", { class: "tips" }, "请选择取消订单的原因:"),
  23084. (vue.openBlock(true), vue.createElementBlock(
  23085. vue.Fragment,
  23086. null,
  23087. vue.renderList($setup.reasonList, (item) => {
  23088. return vue.openBlock(), vue.createElementBlock("view", {
  23089. class: "cell",
  23090. key: item,
  23091. onClick: ($event) => $setup.reason = item
  23092. }, [
  23093. vue.createElementVNode(
  23094. "text",
  23095. { class: "text" },
  23096. vue.toDisplayString(item),
  23097. 1
  23098. /* TEXT */
  23099. ),
  23100. vue.createElementVNode(
  23101. "text",
  23102. {
  23103. class: vue.normalizeClass(["icon", { checked: item === $setup.reason }])
  23104. },
  23105. null,
  23106. 2
  23107. /* CLASS */
  23108. )
  23109. ], 8, ["onClick"]);
  23110. }),
  23111. 128
  23112. /* KEYED_FRAGMENT */
  23113. ))
  23114. ]),
  23115. vue.createElementVNode("view", { class: "footer" }, [
  23116. vue.createElementVNode("view", {
  23117. class: "button",
  23118. onClick: _cache[3] || (_cache[3] = ($event) => {
  23119. var _a2, _b2;
  23120. return (_b2 = (_a2 = $setup.popup) == null ? void 0 : _a2.close) == null ? void 0 : _b2.call(_a2);
  23121. })
  23122. }, "取消"),
  23123. vue.createElementVNode("view", {
  23124. class: "button primary",
  23125. onClick: $setup.onOrderCancel
  23126. }, "确认")
  23127. ])
  23128. ])
  23129. ]),
  23130. _: 1
  23131. /* STABLE */
  23132. },
  23133. 512
  23134. /* NEED_PATCH */
  23135. )
  23136. ],
  23137. 64
  23138. /* STABLE_FRAGMENT */
  23139. );
  23140. }
  23141. const PagesOrderDetailDetail = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__file", "E:/demo/hmrabbit/src/pagesOrder/detail/detail.vue"]]);
  23142. const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
  23143. __name: "payment",
  23144. props: {
  23145. id: { type: String, required: true }
  23146. },
  23147. setup(__props, { expose: __expose }) {
  23148. __expose();
  23149. const query = __props;
  23150. const { guessRef, onScrolltolower } = useGuessList();
  23151. const __returned__ = { query, guessRef, onScrolltolower };
  23152. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  23153. return __returned__;
  23154. }
  23155. });
  23156. function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
  23157. const _component_XtxGuess = resolveEasycom(vue.resolveDynamicComponent("XtxGuess"), __easycom_0$9);
  23158. return vue.openBlock(), vue.createElementBlock(
  23159. "scroll-view",
  23160. {
  23161. "enable-back-to-top": "",
  23162. class: "viewport",
  23163. "scroll-y": "",
  23164. onScrolltolower: _cache[0] || (_cache[0] = (...args) => $setup.onScrolltolower && $setup.onScrolltolower(...args))
  23165. },
  23166. [
  23167. vue.createCommentVNode(" 订单状态 "),
  23168. vue.createElementVNode("view", { class: "overview" }, [
  23169. vue.createElementVNode("view", { class: "status icon-checked" }, "支付成功"),
  23170. vue.createElementVNode("view", { class: "buttons" }, [
  23171. vue.createElementVNode("navigator", {
  23172. "hover-class": "none",
  23173. class: "button navigator",
  23174. url: "/pages/index/index",
  23175. "open-type": "switchTab"
  23176. }, " 返回首页 "),
  23177. vue.createElementVNode("navigator", {
  23178. "hover-class": "none",
  23179. class: "button navigator",
  23180. url: `/pagesOrder/detail/detail?id=${$setup.query.id}`,
  23181. "open-type": "redirect"
  23182. }, " 查看订单 ", 8, ["url"])
  23183. ])
  23184. ]),
  23185. vue.createCommentVNode(" 猜你喜欢 "),
  23186. vue.createVNode(
  23187. _component_XtxGuess,
  23188. { ref: "guessRef" },
  23189. null,
  23190. 512
  23191. /* NEED_PATCH */
  23192. )
  23193. ],
  23194. 32
  23195. /* NEED_HYDRATION */
  23196. );
  23197. }
  23198. const PagesOrderPaymentPayment = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__file", "E:/demo/hmrabbit/src/pagesOrder/payment/payment.vue"]]);
  23199. const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
  23200. __name: "OrderList",
  23201. props: {
  23202. orderState: { type: Number, required: true }
  23203. },
  23204. setup(__props, { expose: __expose }) {
  23205. __expose();
  23206. const { safeAreaInsets } = uni.getSystemInfoSync();
  23207. const props = __props;
  23208. const queryParams = {
  23209. page: 1,
  23210. pageSize: 5,
  23211. orderState: props.orderState
  23212. };
  23213. const orderList = vue.ref([]);
  23214. const isLoading = vue.ref(false);
  23215. const getMemberOrderData = async () => {
  23216. if (isLoading.value)
  23217. return;
  23218. if (isFinish.value === true) {
  23219. return uni.showToast({ icon: "none", title: "没有更多数据~" });
  23220. }
  23221. isLoading.value = true;
  23222. const res = await getMemberOrderAPI(queryParams);
  23223. isLoading.value = false;
  23224. orderList.value.push(...res.result.items);
  23225. if (queryParams.page < res.result.pages) {
  23226. queryParams.page++;
  23227. } else {
  23228. isFinish.value = true;
  23229. }
  23230. };
  23231. vue.onMounted(() => {
  23232. getMemberOrderData();
  23233. });
  23234. const onOrderPay = async (id) => {
  23235. {
  23236. await getPayMockAPI({ orderId: id });
  23237. }
  23238. uni.showToast({ title: "支付成功" });
  23239. const order = orderList.value.find((v2) => v2.id === id);
  23240. order.orderState = OrderState.DaiFaHuo;
  23241. };
  23242. const onOrderConfirm = (id) => {
  23243. uni.showModal({
  23244. content: "为保障您的权益,请收到货并确认无误后,再确认收货",
  23245. confirmColor: "#27BA9B",
  23246. success: async (res) => {
  23247. if (res.confirm) {
  23248. await putMemberOrderReceiptByIdAPI(id);
  23249. uni.showToast({ icon: "success", title: "确认收货成功" });
  23250. const order = orderList.value.find((v2) => v2.id === id);
  23251. order.orderState = OrderState.DaiPingJia;
  23252. }
  23253. }
  23254. });
  23255. };
  23256. const onOrderDelete = (id) => {
  23257. uni.showModal({
  23258. content: "你确定要删除该订单?",
  23259. confirmColor: "#27BA9B",
  23260. success: async (res) => {
  23261. if (res.confirm) {
  23262. await deleteMemberOrderAPI({ ids: [id] });
  23263. const index = orderList.value.findIndex((v2) => v2.id === id);
  23264. orderList.value.splice(index, 1);
  23265. }
  23266. }
  23267. });
  23268. };
  23269. const isFinish = vue.ref(false);
  23270. const isTriggered = vue.ref(false);
  23271. const onRefresherrefresh = async () => {
  23272. isTriggered.value = true;
  23273. queryParams.page = 1;
  23274. orderList.value = [];
  23275. isFinish.value = false;
  23276. await getMemberOrderData();
  23277. isTriggered.value = false;
  23278. };
  23279. const __returned__ = { safeAreaInsets, props, queryParams, orderList, isLoading, getMemberOrderData, onOrderPay, onOrderConfirm, onOrderDelete, isFinish, isTriggered, onRefresherrefresh, get OrderState() {
  23280. return OrderState;
  23281. }, get orderStateList() {
  23282. return orderStateList;
  23283. } };
  23284. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  23285. return __returned__;
  23286. }
  23287. });
  23288. function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
  23289. var _a;
  23290. return vue.openBlock(), vue.createElementBlock("scroll-view", {
  23291. "enable-back-to-top": "",
  23292. "scroll-y": "",
  23293. class: "orders",
  23294. "refresher-enabled": "",
  23295. "refresher-triggered": $setup.isTriggered,
  23296. onRefresherrefresh: $setup.onRefresherrefresh,
  23297. onScrolltolower: $setup.getMemberOrderData
  23298. }, [
  23299. (vue.openBlock(true), vue.createElementBlock(
  23300. vue.Fragment,
  23301. null,
  23302. vue.renderList($setup.orderList, (order) => {
  23303. return vue.openBlock(), vue.createElementBlock("view", {
  23304. class: "card",
  23305. key: order.id
  23306. }, [
  23307. vue.createCommentVNode(" 订单信息 "),
  23308. vue.createElementVNode("view", { class: "status" }, [
  23309. vue.createElementVNode(
  23310. "text",
  23311. { class: "date" },
  23312. vue.toDisplayString(order.createTime),
  23313. 1
  23314. /* TEXT */
  23315. ),
  23316. vue.createCommentVNode(" 订单状态文字 "),
  23317. vue.createElementVNode(
  23318. "text",
  23319. null,
  23320. vue.toDisplayString($setup.orderStateList[order.orderState].text),
  23321. 1
  23322. /* TEXT */
  23323. ),
  23324. vue.createCommentVNode(" 待评价/已完成/已取消 状态: 展示删除订单 "),
  23325. order.orderState >= $setup.OrderState.DaiPingJia ? (vue.openBlock(), vue.createElementBlock("text", {
  23326. key: 0,
  23327. class: "icon-delete",
  23328. onClick: ($event) => $setup.onOrderDelete(order.id)
  23329. }, null, 8, ["onClick"])) : vue.createCommentVNode("v-if", true)
  23330. ]),
  23331. vue.createCommentVNode(" 商品信息,点击商品跳转到订单详情,不是商品详情 "),
  23332. (vue.openBlock(true), vue.createElementBlock(
  23333. vue.Fragment,
  23334. null,
  23335. vue.renderList(order.skus, (item) => {
  23336. return vue.openBlock(), vue.createElementBlock("navigator", {
  23337. key: item.id,
  23338. class: "goods",
  23339. url: `/pagesOrder/detail/detail?id=${order.id}`,
  23340. "hover-class": "none"
  23341. }, [
  23342. vue.createElementVNode("view", { class: "cover" }, [
  23343. vue.createElementVNode("image", {
  23344. class: "image",
  23345. mode: "aspectFit",
  23346. src: item.image
  23347. }, null, 8, ["src"])
  23348. ]),
  23349. vue.createElementVNode("view", { class: "meta" }, [
  23350. vue.createElementVNode(
  23351. "view",
  23352. { class: "name ellipsis" },
  23353. vue.toDisplayString(item.name),
  23354. 1
  23355. /* TEXT */
  23356. ),
  23357. vue.createElementVNode(
  23358. "view",
  23359. { class: "type" },
  23360. vue.toDisplayString(item.attrsText),
  23361. 1
  23362. /* TEXT */
  23363. )
  23364. ])
  23365. ], 8, ["url"]);
  23366. }),
  23367. 128
  23368. /* KEYED_FRAGMENT */
  23369. )),
  23370. vue.createCommentVNode(" 支付信息 "),
  23371. vue.createElementVNode("view", { class: "payment" }, [
  23372. vue.createElementVNode(
  23373. "text",
  23374. { class: "quantity" },
  23375. "共" + vue.toDisplayString(order.totalNum) + "件商品",
  23376. 1
  23377. /* TEXT */
  23378. ),
  23379. vue.createElementVNode("text", null, "实付"),
  23380. vue.createElementVNode("text", { class: "amount" }, [
  23381. vue.createElementVNode("text", { class: "symbol" }, "¥"),
  23382. vue.createTextVNode(
  23383. vue.toDisplayString(order.payMoney),
  23384. 1
  23385. /* TEXT */
  23386. )
  23387. ])
  23388. ]),
  23389. vue.createCommentVNode(" 订单操作按钮 "),
  23390. vue.createElementVNode("view", { class: "action" }, [
  23391. vue.createCommentVNode(" 待付款状态:显示去支付按钮 "),
  23392. order.orderState === $setup.OrderState.DaiFuKuan ? (vue.openBlock(), vue.createElementBlock("view", {
  23393. key: 0,
  23394. class: "button primary",
  23395. onClick: ($event) => $setup.onOrderPay(order.id)
  23396. }, "去支付", 8, ["onClick"])) : (vue.openBlock(), vue.createElementBlock(
  23397. vue.Fragment,
  23398. { key: 1 },
  23399. [
  23400. vue.createElementVNode("navigator", {
  23401. class: "button secondary",
  23402. url: `/pagesOrder/create/create?orderId=${order.id}`,
  23403. "hover-class": "none"
  23404. }, " 再次购买 ", 8, ["url"]),
  23405. vue.createCommentVNode(" 待收货状态: 展示确认收货 "),
  23406. order.orderState === $setup.OrderState.DaiShouHuo ? (vue.openBlock(), vue.createElementBlock("view", {
  23407. key: 0,
  23408. class: "button primary",
  23409. onClick: ($event) => $setup.onOrderConfirm(order.id)
  23410. }, " 确认收货 ", 8, ["onClick"])) : vue.createCommentVNode("v-if", true)
  23411. ],
  23412. 64
  23413. /* STABLE_FRAGMENT */
  23414. ))
  23415. ])
  23416. ]);
  23417. }),
  23418. 128
  23419. /* KEYED_FRAGMENT */
  23420. )),
  23421. vue.createCommentVNode(" 底部提示文字 "),
  23422. vue.createElementVNode(
  23423. "view",
  23424. {
  23425. class: "loading-text",
  23426. style: vue.normalizeStyle({ paddingBottom: ((_a = $setup.safeAreaInsets) == null ? void 0 : _a.bottom) + "px" })
  23427. },
  23428. vue.toDisplayString($setup.isFinish ? "没有更多数据~" : "正在加载..."),
  23429. 5
  23430. /* TEXT, STYLE */
  23431. )
  23432. ], 40, ["refresher-triggered"]);
  23433. }
  23434. const OrderList = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__scopeId", "data-v-52fbdc30"], ["__file", "E:/demo/hmrabbit/src/pagesOrder/list/components/OrderList.vue"]]);
  23435. const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
  23436. __name: "list",
  23437. props: {
  23438. type: { type: String, required: true }
  23439. },
  23440. setup(__props, { expose: __expose }) {
  23441. __expose();
  23442. const query = __props;
  23443. const orderTabs = vue.ref([
  23444. { orderState: 0, title: "全部", isRender: false },
  23445. { orderState: 1, title: "待付款", isRender: false },
  23446. { orderState: 2, title: "待发货", isRender: false },
  23447. { orderState: 3, title: "待收货", isRender: false },
  23448. { orderState: 4, title: "待评价", isRender: false }
  23449. ]);
  23450. const activeIndex = vue.ref(orderTabs.value.findIndex((v2) => v2.orderState === Number(query.type)));
  23451. orderTabs.value[activeIndex.value].isRender = true;
  23452. const __returned__ = { query, orderTabs, activeIndex, OrderList };
  23453. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  23454. return __returned__;
  23455. }
  23456. });
  23457. function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
  23458. return vue.openBlock(), vue.createElementBlock("view", { class: "viewport" }, [
  23459. vue.createCommentVNode(" tabs "),
  23460. vue.createElementVNode("view", { class: "tabs" }, [
  23461. (vue.openBlock(true), vue.createElementBlock(
  23462. vue.Fragment,
  23463. null,
  23464. vue.renderList($setup.orderTabs, (item, index) => {
  23465. return vue.openBlock(), vue.createElementBlock("text", {
  23466. class: "item",
  23467. key: item.title,
  23468. onClick: () => {
  23469. $setup.activeIndex = index;
  23470. item.isRender = true;
  23471. }
  23472. }, vue.toDisplayString(item.title), 9, ["onClick"]);
  23473. }),
  23474. 128
  23475. /* KEYED_FRAGMENT */
  23476. )),
  23477. vue.createCommentVNode(" 游标 "),
  23478. vue.createElementVNode(
  23479. "view",
  23480. {
  23481. class: "cursor",
  23482. style: vue.normalizeStyle({ left: $setup.activeIndex * 20 + "%" })
  23483. },
  23484. null,
  23485. 4
  23486. /* STYLE */
  23487. )
  23488. ]),
  23489. vue.createCommentVNode(" 滑动容器 "),
  23490. vue.createElementVNode("swiper", {
  23491. class: "swiper",
  23492. current: $setup.activeIndex,
  23493. onChange: _cache[0] || (_cache[0] = ($event) => $setup.activeIndex = $event.detail.current)
  23494. }, [
  23495. vue.createCommentVNode(" 滑动项 "),
  23496. (vue.openBlock(true), vue.createElementBlock(
  23497. vue.Fragment,
  23498. null,
  23499. vue.renderList($setup.orderTabs, (item) => {
  23500. return vue.openBlock(), vue.createElementBlock("swiper-item", {
  23501. key: item.title
  23502. }, [
  23503. vue.createCommentVNode(" 订单列表 "),
  23504. item.isRender ? (vue.openBlock(), vue.createBlock($setup["OrderList"], {
  23505. key: 0,
  23506. "order-state": item.orderState
  23507. }, null, 8, ["order-state"])) : vue.createCommentVNode("v-if", true)
  23508. ]);
  23509. }),
  23510. 128
  23511. /* KEYED_FRAGMENT */
  23512. ))
  23513. ], 40, ["current"])
  23514. ]);
  23515. }
  23516. const PagesOrderListList = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "E:/demo/hmrabbit/src/pagesOrder/list/list.vue"]]);
  23517. __definePage("pages/index/index", PagesIndexIndex);
  23518. __definePage("pages/category/category", PagesCategoryCategory);
  23519. __definePage("pages/cart/cart", PagesCartCart);
  23520. __definePage("pages/cart/cart2", PagesCartCart2);
  23521. __definePage("pages/my/my", PagesMyMy);
  23522. __definePage("pages/login/login", PagesLoginLogin);
  23523. __definePage("pages/hot/hot", PagesHotHot);
  23524. __definePage("pages/goods/goods", PagesGoodsGoods);
  23525. __definePage("pages/inbound/inbound", PagesInboundInbound);
  23526. __definePage("pages/inbound/logList", PagesInboundLogList);
  23527. __definePage("pages/weigh/weigh", PagesWeighWeigh);
  23528. __definePage("pages/weigh/logList", PagesWeighLogList);
  23529. __definePage("pages/outbound/outbound", PagesOutboundOutbound);
  23530. __definePage("pages/outbound/logList", PagesOutboundLogList);
  23531. __definePage("pages/warehouseScan/warehouseScan", PagesWarehouseScanWarehouseScan);
  23532. __definePage("pages/warehouseScan/logList", PagesWarehouseScanLogList);
  23533. __definePage("pages/printer/printer", PagesPrinterPrinter);
  23534. __definePage("pages/printer/logList", PagesPrinterLogList);
  23535. __definePage("pages/scanLotno/scanLotno", PagesScanLotnoScanLotno);
  23536. __definePage("pages/scanLotno/logList", PagesScanLotnoLogList);
  23537. __definePage("pages/scanLotno/waybillsList", PagesScanLotnoWaybillsList);
  23538. __definePage("pages/waybillNo/waybillNo", PagesWaybillNoWaybillNo);
  23539. __definePage("pages/waybillNo/logList", PagesWaybillNoLogList);
  23540. __definePage("pages/pickup/waybillPickUpOrder", PagesPickupWaybillPickUpOrder);
  23541. __definePage("pages/pickup/waybillPickUpDetails", PagesPickupWaybillPickUpDetails);
  23542. __definePage("pages/pickup/waybillPickUpDetail", PagesPickupWaybillPickUpDetail);
  23543. __definePage("pages/waybillDeliveryOrder/waybillDeliveryOrder", PagesWaybillDeliveryOrderWaybillDeliveryOrder);
  23544. __definePage("pagesMember/settings/settings", PagesMemberSettingsSettings);
  23545. __definePage("pagesMember/profile/profile", PagesMemberProfileProfile);
  23546. __definePage("pagesMember/address/address", PagesMemberAddressAddress);
  23547. __definePage("pagesMember/address-form/address-form", PagesMemberAddressFormAddressForm);
  23548. __definePage("pagesOrder/create/create", PagesOrderCreateCreate);
  23549. __definePage("pagesOrder/detail/detail", PagesOrderDetailDetail);
  23550. __definePage("pagesOrder/payment/payment", PagesOrderPaymentPayment);
  23551. __definePage("pagesOrder/list/list", PagesOrderListList);
  23552. const _sfc_main = /* @__PURE__ */ vue.defineComponent({
  23553. __name: "App",
  23554. setup(__props, { expose: __expose }) {
  23555. __expose();
  23556. onLaunch(() => {
  23557. formatAppLog("log", "at App.vue:5", "App Launch");
  23558. });
  23559. onShow(() => {
  23560. formatAppLog("log", "at App.vue:8", "App Show");
  23561. });
  23562. onHide(() => {
  23563. formatAppLog("log", "at App.vue:11", "App Hide");
  23564. });
  23565. const __returned__ = { get onLaunch() {
  23566. return onLaunch;
  23567. }, get onShow() {
  23568. return onShow;
  23569. }, get onHide() {
  23570. return onHide;
  23571. } };
  23572. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  23573. return __returned__;
  23574. }
  23575. });
  23576. const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "E:/demo/hmrabbit/src/App.vue"]]);
  23577. function createApp() {
  23578. const app = vue.createVueApp(App);
  23579. app.use(pinia);
  23580. return {
  23581. app
  23582. };
  23583. }
  23584. const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp();
  23585. uni.Vuex = __Vuex__;
  23586. uni.Pinia = __Pinia__;
  23587. __app__.provide("__globalStyles", __uniConfig.styles);
  23588. __app__._component.mpType = "app";
  23589. __app__._component.render = () => {
  23590. };
  23591. __app__.mount("#app");
  23592. })(Vue);
  23593. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlcnZpY2UuanMiLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgvY29tcG9uZW50cy9DdXN0b21OYXZiYXIudnVlIiwidW5pLWFwcDovLy9zdGF0aWMvaW1hZ2VzL2xvZ28ucG5nIiwidW5pLWFwcDovLy9wYWdlcy9pbmRleC9jb21wb25lbnRzL0N1c3RvbU5hdmJhci52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL2luZGV4L2NvbXBvbmVudHMvQ2F0ZWdvcnlQYW5lbC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL2luZGV4L2luZGV4LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvaW5kZXgvaW5kZXgudnVlIiwidW5pLWFwcDovLy9jb21wb25lbnRzL1h0eFN3aXBlci52dWUiLCJ1bmktYXBwOi8vL2NvbXBvbmVudHMvWHR4U3dpcGVyLnZ1ZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInVuaS1hcHA6Ly8vc3RvcmVzL21vZHVsZXMvbWVtYmVyLnRzIiwidW5pLWFwcDovLy9zdG9yZXMvaW5kZXgudHMiLCJ1bmktYXBwOi8vL3V0aWxzL2h0dHAudHMiLCJ1bmktYXBwOi8vL3NlcnZpY2VzL2NhdGVnb3J5LnRzIiwidW5pLWFwcDovLy9zZXJ2aWNlcy9ob21lLnRzIiwidW5pLWFwcDovLy9wYWdlcy9jYXRlZ29yeS9jb21wb25lbnRzL1BhZ2VTa2VsZXRvbi52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL2NhdGVnb3J5L2NhdGVnb3J5LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvY2F0ZWdvcnkvY2F0ZWdvcnkudnVlIiwidW5pLWFwcDovLy9jb21wb25lbnRzL3ZrLWRhdGEtaW5wdXQtbnVtYmVyLWJveC92ay1kYXRhLWlucHV0LW51bWJlci1ib3gudnVlIiwiIiwiIiwiIiwiIiwiIiwidW5pLWFwcDovLy9jb21wb25lbnRzL1h0eEd1ZXNzLnZ1ZSIsInVuaS1hcHA6Ly8vY29tcG9uZW50cy9YdHhHdWVzcy52dWUiLCJ1bmktYXBwOi8vL2NvbXBvc2FibGVzL2luZGV4LnRzIiwidW5pLWFwcDovLy9zZXJ2aWNlcy9jYXJ0LnRzIiwidW5pLWFwcDovLy9wYWdlcy9jYXJ0L2NvbXBvbmVudHMvQ2FydE1haW4udnVlIiwiIiwidW5pLWFwcDovLy9wYWdlcy9jYXJ0L2NvbXBvbmVudHMvQ2FydE1haW4udnVlIiwidW5pLWFwcDovLy9wYWdlcy9jYXJ0L2NhcnQyLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvbXkvbXkudnVlIiwidW5pLWFwcDovLy9wYWdlcy9teS9teS52dWUiLCIiLCIiLCIiLCIiLCIiLCIiLCJ1bmktYXBwOi8vL3NlcnZpY2VzL2xvZ2luLnRzIiwidW5pLWFwcDovLy9wYWdlcy9sb2dpbi9sb2dpbi52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL2xvZ2luL2xvZ2luLnZ1ZSIsInVuaS1hcHA6Ly8vc2VydmljZXMvaG90LnRzIiwidW5pLWFwcDovLy9wYWdlcy9ob3QvaG90LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvaG90L2hvdC52dWUiLCJ1bmktYXBwOi8vL2NvbXBvbmVudHMvdmstZGF0YS1nb29kcy1za3UtcG9wdXAvdmstZGF0YS1nb29kcy1za3UtcG9wdXAudnVlIiwiIiwiIiwiIiwidW5pLWFwcDovLy9zZXJ2aWNlcy9nb29kcy50cyIsInVuaS1hcHA6Ly8vcGFnZXMvZ29vZHMvY29tcG9uZW50cy9BZGRyZXNzUGFuZWwudnVlIiwidW5pLWFwcDovLy9wYWdlcy9nb29kcy9jb21wb25lbnRzL1NlcnZpY2VQYW5lbC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL2dvb2RzL2NvbXBvbmVudHMvU2VydmljZVBhbmVsLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvZ29vZHMvZ29vZHMudnVlIiwidW5pLWFwcDovLy9wYWdlcy9nb29kcy9nb29kcy52dWUiLCIiLCIiLCIiLCIiLCIiLCIiLCJ1bmktYXBwOi8vL3V0aWxzL3Blcm1pc3Npb24uanMiLCJ1bmktYXBwOi8vL3V0aWxzL2luZGV4LnRzIiwidW5pLWFwcDovLy9zZXJ2aWNlcy93ZWlnaC50cyIsInVuaS1hcHA6Ly8vdXRpbHMvcmFuZG9tLnRzIiwidW5pLWFwcDovLy9wYWdlcy9pbmJvdW5kL2luYm91bmQudnVlIiwidW5pLWFwcDovLy9wYWdlcy9pbmJvdW5kL2luYm91bmQudnVlIiwidW5pLWFwcDovLy9wYWdlcy9pbmJvdW5kL2xvZ0xpc3QudnVlIiwidW5pLWFwcDovLy9wYWdlcy9pbmJvdW5kL2xvZ0xpc3QudnVlIiwiIiwiIiwiIiwidW5pLWFwcDovLy9wYWdlcy93ZWlnaC93ZWlnaC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL3dlaWdoL3dlaWdoLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvd2VpZ2gvbG9nTGlzdC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL3dlaWdoL2xvZ0xpc3QudnVlIiwidW5pLWFwcDovLy9zZXJ2aWNlcy9leHByZXNzQ29tcGFueS50cyIsInVuaS1hcHA6Ly8vcGFnZXMvb3V0Ym91bmQvb3V0Ym91bmQudnVlIiwidW5pLWFwcDovLy9wYWdlcy9vdXRib3VuZC9vdXRib3VuZC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL291dGJvdW5kL2xvZ0xpc3QudnVlIiwidW5pLWFwcDovLy9wYWdlcy9vdXRib3VuZC9sb2dMaXN0LnZ1ZSIsInVuaS1hcHA6Ly8vc2VydmljZXMvd2FyZWhvdXNlU2Nhbi50cyIsInVuaS1hcHA6Ly8vcGFnZXMvd2FyZWhvdXNlU2Nhbi93YXJlaG91c2VTY2FuLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvd2FyZWhvdXNlU2Nhbi93YXJlaG91c2VTY2FuLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvd2FyZWhvdXNlU2Nhbi9sb2dMaXN0LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvd2FyZWhvdXNlU2Nhbi9sb2dMaXN0LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvcHJpbnRlci9wcmludGVyLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvcHJpbnRlci9sb2dMaXN0LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvcHJpbnRlci9sb2dMaXN0LnZ1ZSIsIiIsIiIsIiIsIiIsIiIsInVuaS1hcHA6Ly8vc2VydmljZXMvc2NhbkxvdG5vLnRzIiwidW5pLWFwcDovLy9wYWdlcy9zY2FuTG90bm8vc2NhbkxvdG5vLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvc2NhbkxvdG5vL3NjYW5Mb3Ruby52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL3NjYW5Mb3Ruby9sb2dMaXN0LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvc2NhbkxvdG5vL2xvZ0xpc3QudnVlIiwiIiwidW5pLWFwcDovLy9wYWdlcy9zY2FuTG90bm8vd2F5YmlsbHNMaXN0LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvc2NhbkxvdG5vL3dheWJpbGxzTGlzdC52dWUiLCJ1bmktYXBwOi8vL3NlcnZpY2VzL3dheWJpbGxOby50cyIsInVuaS1hcHA6Ly8vcGFnZXMvd2F5YmlsbE5vL3dheWJpbGxOby52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL3dheWJpbGxOby93YXliaWxsTm8udnVlIiwidW5pLWFwcDovLy9wYWdlcy93YXliaWxsTm8vbG9nTGlzdC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL3dheWJpbGxOby9sb2dMaXN0LnZ1ZSIsInVuaS1hcHA6Ly8vc2VydmljZXMvd2F5YmlsbFBpY2tVcE9yZGVyLnRzIiwidW5pLWFwcDovLy9wYWdlcy9waWNrdXAvd2F5YmlsbFBpY2tVcE9yZGVyLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvcGlja3VwL3dheWJpbGxQaWNrVXBPcmRlci52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwRGV0YWlscy52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwRGV0YWlscy52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwRGV0YWlsLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXMvcGlja3VwL3dheWJpbGxQaWNrVXBEZXRhaWwudnVlIiwiIiwidW5pLWFwcDovLy9wYWdlcy93YXliaWxsRGVsaXZlcnlPcmRlci93YXliaWxsRGVsaXZlcnlPcmRlci52dWUiLCIiLCIiLCJ1bmktYXBwOi8vL3BhZ2VzL3dheWJpbGxEZWxpdmVyeU9yZGVyL3dheWJpbGxEZWxpdmVyeU9yZGVyLnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXNNZW1iZXIvc2V0dGluZ3Mvc2V0dGluZ3MudnVlIiwidW5pLWFwcDovLy9wYWdlc01lbWJlci9zZXR0aW5ncy9zZXR0aW5ncy52dWUiLCJ1bmktYXBwOi8vL3NlcnZpY2VzL3Byb2ZpbGUudHMiLCJ1bmktYXBwOi8vL3BhZ2VzTWVtYmVyL3Byb2ZpbGUvcHJvZmlsZS52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzTWVtYmVyL3Byb2ZpbGUvcHJvZmlsZS52dWUiLCJ1bmktYXBwOi8vL3NlcnZpY2VzL2FkZHJlc3MudHMiLCJ1bmktYXBwOi8vL3N0b3Jlcy9tb2R1bGVzL2FkZHJlc3MudHMiLCJ1bmktYXBwOi8vL3BhZ2VzTWVtYmVyL2FkZHJlc3MvYWRkcmVzcy52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzTWVtYmVyL2FkZHJlc3MvYWRkcmVzcy52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzTWVtYmVyL2FkZHJlc3MtZm9ybS9hZGRyZXNzLWZvcm0udnVlIiwidW5pLWFwcDovLy9wYWdlc01lbWJlci9hZGRyZXNzLWZvcm0vYWRkcmVzcy1mb3JtLnZ1ZSIsInVuaS1hcHA6Ly8vc2VydmljZXMvb3JkZXIudHMiLCJ1bmktYXBwOi8vL3BhZ2VzT3JkZXIvY3JlYXRlL2NyZWF0ZS52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzT3JkZXIvY3JlYXRlL2NyZWF0ZS52dWUiLCIiLCIiLCJ1bmktYXBwOi8vL3NlcnZpY2VzL2NvbnN0YW50cy50cyIsInVuaS1hcHA6Ly8vcGFnZXNPcmRlci9kZXRhaWwvY29tcG9uZW50cy9QYWdlU2tlbGV0b24udnVlIiwidW5pLWFwcDovLy9zZXJ2aWNlcy9wYXkudHMiLCJ1bmktYXBwOi8vL3BhZ2VzT3JkZXIvZGV0YWlsL2RldGFpbC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzT3JkZXIvZGV0YWlsL2RldGFpbC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzT3JkZXIvcGF5bWVudC9wYXltZW50LnZ1ZSIsInVuaS1hcHA6Ly8vcGFnZXNPcmRlci9wYXltZW50L3BheW1lbnQudnVlIiwidW5pLWFwcDovLy9wYWdlc09yZGVyL2xpc3QvY29tcG9uZW50cy9PcmRlckxpc3QudnVlIiwidW5pLWFwcDovLy9wYWdlc09yZGVyL2xpc3QvY29tcG9uZW50cy9PcmRlckxpc3QudnVlIiwidW5pLWFwcDovLy9wYWdlc09yZGVyL2xpc3QvbGlzdC52dWUiLCJ1bmktYXBwOi8vL3BhZ2VzT3JkZXIvbGlzdC9saXN0LnZ1ZSIsInVuaS1hcHA6Ly8vQXBwLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJuYXZiYXJcIiA6c3R5bGU9XCJ7IHBhZGRpbmdUb3A6IHNhZmVBcmVhSW5zZXRzIS50b3AgKyAxMCArICdweCcgfVwiPlxyXG4gICAgPCEtLSBsb2dv5paH5a2XIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJsb2dvXCI+XHJcbiAgICAgIDxpbWFnZSBjbGFzcz1cImxvZ28taW1hZ2VcIiBzcmM9XCJAL3N0YXRpYy9pbWFnZXMvbG9nby5wbmdcIj48L2ltYWdlPlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLyog6Ieq5a6a5LmJ5a+86Iiq5p2hICovXHJcbi5uYXZiYXIge1xyXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBwYWRkaW5nLXRvcDogMjBweDtcclxuICAubG9nbyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDogNjRycHg7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcnB4O1xyXG4gICAgLmxvZ28taW1hZ2Uge1xyXG4gICAgICB3aWR0aDogMTYwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDYwcnB4O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCJleHBvcnQgZGVmYXVsdCBcIl9fVklURV9BU1NFVF9fM2M4MTk4MjJfX1wiIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuLy8g6I635Y+W5bGP5bmV6L6555WM5Yiw5a6J5YWo5Yy65Z+f6Led56a7XHJcbmNvbnN0IHsgc2FmZUFyZWFJbnNldHMgfSA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpXHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwibmF2YmFyXCIgOnN0eWxlPVwieyBwYWRkaW5nVG9wOiBzYWZlQXJlYUluc2V0cyEudG9wICsgMTAgKyAncHgnIH1cIj5cclxuICAgIDwhLS0gbG9nb+aWh+WtlyAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwibG9nb1wiPlxyXG4gICAgICA8aW1hZ2UgY2xhc3M9XCJsb2dvLWltYWdlXCIgc3JjPVwiQC9zdGF0aWMvaW1hZ2VzL2xvZ28ucG5nXCI+PC9pbWFnZT5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLyog6Ieq5a6a5LmJ5a+86Iiq5p2hICovXHJcbi5uYXZiYXIge1xyXG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBwYWRkaW5nLXRvcDogMjBweDtcclxuICAubG9nbyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDogNjRycHg7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcnB4O1xyXG4gICAgLmxvZ28taW1hZ2Uge1xyXG4gICAgICB3aWR0aDogMTYwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDYwcnB4O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUl0ZW0gfSBmcm9tICdAL3R5cGVzL2hvbWUnXG5cbi8vIOWumuS5iSBwcm9wcyDmjqXmlLbmlbDmja5cbmRlZmluZVByb3BzPHtcbiAgbGlzdDogQ2F0ZWdvcnlJdGVtW11cbn0+KClcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDx2aWV3IGNsYXNzPVwiY2F0ZWdvcnlcIj5cbiAgICA8bmF2aWdhdG9yXG4gICAgICBjbGFzcz1cImNhdGVnb3J5LWl0ZW1cIlxuICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcbiAgICAgIDp1cmw9XCJpdGVtLnRhcmdldFwiXG4gICAgICB2LWZvcj1cIml0ZW0gaW4gbGlzdFwiXG4gICAgICA6a2V5PVwiaXRlbS5pZFwiXG4gICAgPlxuICAgICAgPHZpZXdcbiAgICAgICAgY2xhc3M9XCJpY29uXCJcbiAgICAgICAgOnN0eWxlPVwie1xuICAgICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJzogYGxpbmVhci1ncmFkaWVudCg0NWRlZywgJHtpdGVtLmNvbG9yc1swXX0gMCUsICR7aXRlbS5jb2xvcnNbMV19IDk5JSwgJHtpdGVtLmNvbG9yc1swXX0gMTAwJSlgLFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGltYWdlIGNsYXNzPVwiXCIgOnNyYz1cIml0ZW0uaWNvblwiPjwvaW1hZ2U+XG4gICAgICA8L3ZpZXc+XG4gICAgICA8dGV4dCBjbGFzcz1cInRleHRcIj57eyBpdGVtLm5hbWUgfX08L3RleHQ+XG4gICAgPC9uYXZpZ2F0b3I+XG4gIDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL2NhdGVnb3J5LnNjc3MnO1xuPC9zdHlsZT5cbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJdGVtIH0gZnJvbSAnQC90eXBlcy9ob21lJ1xyXG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnXHJcbmltcG9ydCBDdXN0b21OYXZiYXIgZnJvbSAnLi9jb21wb25lbnRzL0N1c3RvbU5hdmJhci52dWUnXHJcbmltcG9ydCBDYXRlZ29yeVBhbmVsIGZyb20gJy4vY29tcG9uZW50cy9DYXRlZ29yeVBhbmVsLnZ1ZSdcclxuXHJcbi8vIOiOt+WPluWJjeWPsOWIhuexu+aVsOaNrlxyXG5jb25zdCBjYXRlZ29yeUxpc3QgPSByZWY8Q2F0ZWdvcnlJdGVtW10+KFtcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzRmYWNmZScsICcjMDBmMmZlJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvaW5ib3VuZC9pbmJvdW5kJyxcclxuICAgIGljb246ICcvc3RhdGljL2hvbWUvaW5ib3VuZC5wbmcnLFxyXG4gICAgbmFtZTogJ+WFpeW6kycsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzY5OTFjNycsICcjYTNiZGVkJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvd2VpZ2gvd2VpZ2gnLFxyXG4gICAgaWNvbjogJy9zdGF0aWMvaG9tZS93ZWlnaC5wbmcnLFxyXG4gICAgbmFtZTogJ+ensOmHjScsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzAwNWJlYScsICcjMDBjNmZiJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvb3V0Ym91bmQvb3V0Ym91bmQnLFxyXG4gICAgaWNvbjogJy9zdGF0aWMvaG9tZS9vdXRib3VuZC5wbmcnLFxyXG4gICAgbmFtZTogJ+WHuuW6kycsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzY2N2VlYScsICcjNzY0YmEyJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvd2FyZWhvdXNlU2Nhbi93YXJlaG91c2VTY2FuJyxcclxuICAgIGljb246ICcvc3RhdGljL2hvbWUvaG91c2Nhbi5wbmcnLFxyXG4gICAgbmFtZTogJ+S7k+W6k+aJq+aPjycsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnI2Y4MzYwMCcsICcjZjlkNDIzJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvcHJpbnRlci9wcmludGVyJyxcclxuICAgIGljb246ICcvc3RhdGljL2hvbWUvaG91c2Nhbi5wbmcnLFxyXG4gICAgbmFtZTogJ+aJk+WNsCcsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnI2ZmMDg0NCcsICcjZmZiMTk5J10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvc2NhbkxvdG5vL3NjYW5Mb3RubycsXHJcbiAgICBpY29uOiAnL3N0YXRpYy9ob21lL2xpbmsucG5nJyxcclxuICAgIG5hbWU6ICfmiZjnm5gv5om55qyhJyxcclxuICB9LFxyXG4gIHtcclxuICAgIGNvbG9yczogWycjMjkzMjNjJywgJyM0ODU1NjMnXSxcclxuICAgIHRhcmdldDogJy9wYWdlcy93YXliaWxsTm8vd2F5YmlsbE5vJyxcclxuICAgIGljb246ICcvc3RhdGljL2hvbWUvbGluay5wbmcnLFxyXG4gICAgbmFtZTogJ+W6k+S9jee7keWumicsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzJhZjU5OCcsICcjMDA5ZWZkJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvcGlja3VwL3dheWJpbGxQaWNrVXBPcmRlcicsXHJcbiAgICBpY29uOiAnL3N0YXRpYy9ob21lL3BpY2t1cC5wbmcnLFxyXG4gICAgbmFtZTogJ+WPluS7tuWNlScsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzRmYWNmZScsICcjMDBmMmZlJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvd2F5YmlsbERlbGl2ZXJ5T3JkZXIvd2F5YmlsbERlbGl2ZXJ5T3JkZXInLFxyXG4gICAgaWNvbjogJy9zdGF0aWMvaG9tZS9kaXNwYXRjaC5wbmcnLFxyXG4gICAgbmFtZTogJ+a0vumAgeWNlScsXHJcbiAgfSxcclxuXSlcclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPCEtLSDoh6rlrprkuYnlr7zoiKrmoI8gLS0+XHJcbiAgICA8Q3VzdG9tTmF2YmFyIC8+XHJcbiAgICA8IS0tIOa7muWKqOWuueWZqCAtLT5cclxuICAgIDxzY3JvbGwtdmlldyBlbmFibGUtYmFjay10by10b3AgOnJlZnJlc2hlci1lbmFibGVkPVwiZmFsc2VcIiBjbGFzcz1cInNjcm9sbC12aWV3XCIgc2Nyb2xsLXk+XHJcbiAgICAgIDwhLS0g5YiG57G76Z2i5p2/IC0tPlxyXG4gICAgICA8Q2F0ZWdvcnlQYW5lbCA6bGlzdD1cImNhdGVnb3J5TGlzdFwiIC8+XHJcbiAgICA8L3Njcm9sbC12aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbn1cclxuXHJcbi5zY3JvbGwtdmlldyB7XHJcbiAgZmxleDogMTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJdGVtIH0gZnJvbSAnQC90eXBlcy9ob21lJ1xyXG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnXHJcbmltcG9ydCBDdXN0b21OYXZiYXIgZnJvbSAnLi9jb21wb25lbnRzL0N1c3RvbU5hdmJhci52dWUnXHJcbmltcG9ydCBDYXRlZ29yeVBhbmVsIGZyb20gJy4vY29tcG9uZW50cy9DYXRlZ29yeVBhbmVsLnZ1ZSdcclxuXHJcbi8vIOiOt+WPluWJjeWPsOWIhuexu+aVsOaNrlxyXG5jb25zdCBjYXRlZ29yeUxpc3QgPSByZWY8Q2F0ZWdvcnlJdGVtW10+KFtcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzRmYWNmZScsICcjMDBmMmZlJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvaW5ib3VuZC9pbmJvdW5kJyxcclxuICAgIGljb246ICcvc3RhdGljL2hvbWUvaW5ib3VuZC5wbmcnLFxyXG4gICAgbmFtZTogJ+WFpeW6kycsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzY5OTFjNycsICcjYTNiZGVkJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvd2VpZ2gvd2VpZ2gnLFxyXG4gICAgaWNvbjogJy9zdGF0aWMvaG9tZS93ZWlnaC5wbmcnLFxyXG4gICAgbmFtZTogJ+ensOmHjScsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzAwNWJlYScsICcjMDBjNmZiJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvb3V0Ym91bmQvb3V0Ym91bmQnLFxyXG4gICAgaWNvbjogJy9zdGF0aWMvaG9tZS9vdXRib3VuZC5wbmcnLFxyXG4gICAgbmFtZTogJ+WHuuW6kycsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzY2N2VlYScsICcjNzY0YmEyJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvd2FyZWhvdXNlU2Nhbi93YXJlaG91c2VTY2FuJyxcclxuICAgIGljb246ICcvc3RhdGljL2hvbWUvaG91c2Nhbi5wbmcnLFxyXG4gICAgbmFtZTogJ+S7k+W6k+aJq+aPjycsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnI2Y4MzYwMCcsICcjZjlkNDIzJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvcHJpbnRlci9wcmludGVyJyxcclxuICAgIGljb246ICcvc3RhdGljL2hvbWUvaG91c2Nhbi5wbmcnLFxyXG4gICAgbmFtZTogJ+aJk+WNsCcsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnI2ZmMDg0NCcsICcjZmZiMTk5J10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvc2NhbkxvdG5vL3NjYW5Mb3RubycsXHJcbiAgICBpY29uOiAnL3N0YXRpYy9ob21lL2xpbmsucG5nJyxcclxuICAgIG5hbWU6ICfmiZjnm5gv5om55qyhJyxcclxuICB9LFxyXG4gIHtcclxuICAgIGNvbG9yczogWycjMjkzMjNjJywgJyM0ODU1NjMnXSxcclxuICAgIHRhcmdldDogJy9wYWdlcy93YXliaWxsTm8vd2F5YmlsbE5vJyxcclxuICAgIGljb246ICcvc3RhdGljL2hvbWUvbGluay5wbmcnLFxyXG4gICAgbmFtZTogJ+W6k+S9jee7keWumicsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzJhZjU5OCcsICcjMDA5ZWZkJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvcGlja3VwL3dheWJpbGxQaWNrVXBPcmRlcicsXHJcbiAgICBpY29uOiAnL3N0YXRpYy9ob21lL3BpY2t1cC5wbmcnLFxyXG4gICAgbmFtZTogJ+WPluS7tuWNlScsXHJcbiAgfSxcclxuICB7XHJcbiAgICBjb2xvcnM6IFsnIzRmYWNmZScsICcjMDBmMmZlJ10sXHJcbiAgICB0YXJnZXQ6ICcvcGFnZXMvd2F5YmlsbERlbGl2ZXJ5T3JkZXIvd2F5YmlsbERlbGl2ZXJ5T3JkZXInLFxyXG4gICAgaWNvbjogJy9zdGF0aWMvaG9tZS9kaXNwYXRjaC5wbmcnLFxyXG4gICAgbmFtZTogJ+a0vumAgeWNlScsXHJcbiAgfSxcclxuXSlcclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPCEtLSDoh6rlrprkuYnlr7zoiKrmoI8gLS0+XHJcbiAgICA8Q3VzdG9tTmF2YmFyIC8+XHJcbiAgICA8IS0tIOa7muWKqOWuueWZqCAtLT5cclxuICAgIDxzY3JvbGwtdmlldyBlbmFibGUtYmFjay10by10b3AgOnJlZnJlc2hlci1lbmFibGVkPVwiZmFsc2VcIiBjbGFzcz1cInNjcm9sbC12aWV3XCIgc2Nyb2xsLXk+XHJcbiAgICAgIDwhLS0g5YiG57G76Z2i5p2/IC0tPlxyXG4gICAgICA8Q2F0ZWdvcnlQYW5lbCA6bGlzdD1cImNhdGVnb3J5TGlzdFwiIC8+XHJcbiAgICA8L3Njcm9sbC12aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbn1cclxuXHJcbi5zY3JvbGwtdmlldyB7XHJcbiAgZmxleDogMTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgQmFubmVySXRlbSB9IGZyb20gJ0AvdHlwZXMvaG9tZSdcclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuY29uc3QgYWN0aXZlSW5kZXggPSByZWYoMClcclxuXHJcbi8vIOW9kyBzd2lwZXIg5LiL5qCH5Y+R55Sf5Y+Y5YyW5pe26Kem5Y+RXHJcbmNvbnN0IG9uQ2hhbmdlOiBVbmlIZWxwZXIuU3dpcGVyT25DaGFuZ2UgPSAoZXYpID0+IHtcclxuICBhY3RpdmVJbmRleC52YWx1ZSA9IGV2LmRldGFpbC5jdXJyZW50XHJcbn1cclxuLy8g5a6a5LmJIHByb3BzIOaOpeaUtlxyXG5kZWZpbmVQcm9wczx7XHJcbiAgbGlzdDogQmFubmVySXRlbVtdXHJcbn0+KClcclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJjYXJvdXNlbFwiPlxyXG4gICAgPHN3aXBlciA6Y2lyY3VsYXI9XCJ0cnVlXCIgOmF1dG9wbGF5PVwiZmFsc2VcIiA6aW50ZXJ2YWw9XCIzMDAwXCIgQGNoYW5nZT1cIm9uQ2hhbmdlXCI+XHJcbiAgICAgIDxzd2lwZXItaXRlbSB2LWZvcj1cIml0ZW0gaW4gbGlzdFwiIDprZXk9XCJpdGVtLmlkXCI+XHJcbiAgICAgICAgPG5hdmlnYXRvciB1cmw9XCIvcGFnZXMvaW5kZXgvaW5kZXhcIiBob3Zlci1jbGFzcz1cIm5vbmVcIiBjbGFzcz1cIm5hdmlnYXRvclwiPlxyXG4gICAgICAgICAgPGltYWdlIG1vZGU9XCJhc3BlY3RGaWxsXCIgY2xhc3M9XCJpbWFnZVwiIDpzcmM9XCJpdGVtLmltZ1VybFwiPjwvaW1hZ2U+XHJcbiAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgIDwvc3dpcGVyLWl0ZW0+XHJcbiAgICA8L3N3aXBlcj5cclxuICAgIDwhLS0g5oyH56S654K5IC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJpbmRpY2F0b3JcIj5cclxuICAgICAgPHRleHRcclxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gbGlzdFwiXHJcbiAgICAgICAgOmtleT1cIml0ZW0uaWRcIlxyXG4gICAgICAgIGNsYXNzPVwiZG90XCJcclxuICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogaW5kZXggPT09IGFjdGl2ZUluZGV4IH1cIlxyXG4gICAgICA+PC90ZXh0PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLy8gQGltcG9ydCAnLi9zdHlsZXMvWHR4U3dpcGVyLnNjc3MnO1xyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgdHlwZSB7IEJhbm5lckl0ZW0gfSBmcm9tICdAL3R5cGVzL2hvbWUnXHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbmNvbnN0IGFjdGl2ZUluZGV4ID0gcmVmKDApXHJcblxyXG4vLyDlvZMgc3dpcGVyIOS4i+agh+WPkeeUn+WPmOWMluaXtuinpuWPkVxyXG5jb25zdCBvbkNoYW5nZTogVW5pSGVscGVyLlN3aXBlck9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgYWN0aXZlSW5kZXgudmFsdWUgPSBldi5kZXRhaWwuY3VycmVudFxyXG59XHJcbi8vIOWumuS5iSBwcm9wcyDmjqXmlLZcclxuZGVmaW5lUHJvcHM8e1xyXG4gIGxpc3Q6IEJhbm5lckl0ZW1bXVxyXG59PigpXHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiY2Fyb3VzZWxcIj5cclxuICAgIDxzd2lwZXIgOmNpcmN1bGFyPVwidHJ1ZVwiIDphdXRvcGxheT1cImZhbHNlXCIgOmludGVydmFsPVwiMzAwMFwiIEBjaGFuZ2U9XCJvbkNoYW5nZVwiPlxyXG4gICAgICA8c3dpcGVyLWl0ZW0gdi1mb3I9XCJpdGVtIGluIGxpc3RcIiA6a2V5PVwiaXRlbS5pZFwiPlxyXG4gICAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzL2luZGV4L2luZGV4XCIgaG92ZXItY2xhc3M9XCJub25lXCIgY2xhc3M9XCJuYXZpZ2F0b3JcIj5cclxuICAgICAgICAgIDxpbWFnZSBtb2RlPVwiYXNwZWN0RmlsbFwiIGNsYXNzPVwiaW1hZ2VcIiA6c3JjPVwiaXRlbS5pbWdVcmxcIj48L2ltYWdlPlxyXG4gICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICA8L3N3aXBlci1pdGVtPlxyXG4gICAgPC9zd2lwZXI+XHJcbiAgICA8IS0tIOaMh+ekuueCuSAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiaW5kaWNhdG9yXCI+XHJcbiAgICAgIDx0ZXh0XHJcbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGxpc3RcIlxyXG4gICAgICAgIDprZXk9XCJpdGVtLmlkXCJcclxuICAgICAgICBjbGFzcz1cImRvdFwiXHJcbiAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IGluZGV4ID09PSBhY3RpdmVJbmRleCB9XCJcclxuICAgICAgPjwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLy8gQGltcG9ydCAnLi9zdHlsZXMvWHR4U3dpcGVyLnNjc3MnO1xyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgeyBpc0hUTUxUYWcsIGlzU1ZHVGFnLCBoeXBoZW5hdGUsIGNhbWVsaXplLCBub3JtYWxpemVTdHlsZSBhcyBub3JtYWxpemVTdHlsZSQxLCBpc1N0cmluZywgcGFyc2VTdHJpbmdTdHlsZSwgaXNBcnJheSwgbm9ybWFsaXplQ2xhc3MgYXMgbm9ybWFsaXplQ2xhc3MkMSwgaXNGdW5jdGlvbiwgaXNQbGFpbk9iamVjdCwgZXh0ZW5kLCBjYXBpdGFsaXplIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuXG5jb25zdCBCVUlMVF9JTl9UQUdfTkFNRVMgPSBbXG4gICAgJ2FkJyxcbiAgICAnYWQtY29udGVudC1wYWdlJyxcbiAgICAnYWQtZHJhdycsXG4gICAgJ2F1ZGlvJyxcbiAgICAnYnV0dG9uJyxcbiAgICAnY2FtZXJhJyxcbiAgICAnY2FudmFzJyxcbiAgICAnY2hlY2tib3gnLFxuICAgICdjaGVja2JveC1ncm91cCcsXG4gICAgJ2NvdmVyLWltYWdlJyxcbiAgICAnY292ZXItdmlldycsXG4gICAgJ2VkaXRvcicsXG4gICAgJ2Zvcm0nLFxuICAgICdmdW5jdGlvbmFsLXBhZ2UtbmF2aWdhdG9yJyxcbiAgICAnaWNvbicsXG4gICAgJ2ltYWdlJyxcbiAgICAnaW5wdXQnLFxuICAgICdsYWJlbCcsXG4gICAgJ2xpdmUtcGxheWVyJyxcbiAgICAnbGl2ZS1wdXNoZXInLFxuICAgICdtYXAnLFxuICAgICdtb3ZhYmxlLWFyZWEnLFxuICAgICdtb3ZhYmxlLXZpZXcnLFxuICAgICduYXZpZ2F0b3InLFxuICAgICdvZmZpY2lhbC1hY2NvdW50JyxcbiAgICAnb3Blbi1kYXRhJyxcbiAgICAncGlja2VyJyxcbiAgICAncGlja2VyLXZpZXcnLFxuICAgICdwaWNrZXItdmlldy1jb2x1bW4nLFxuICAgICdwcm9ncmVzcycsXG4gICAgJ3JhZGlvJyxcbiAgICAncmFkaW8tZ3JvdXAnLFxuICAgICdyaWNoLXRleHQnLFxuICAgICdzY3JvbGwtdmlldycsXG4gICAgJ3NsaWRlcicsXG4gICAgJ3N3aXBlcicsXG4gICAgJ3N3aXBlci1pdGVtJyxcbiAgICAnc3dpdGNoJyxcbiAgICAndGV4dCcsXG4gICAgJ3RleHRhcmVhJyxcbiAgICAndmlkZW8nLFxuICAgICd2aWV3JyxcbiAgICAnd2ViLXZpZXcnLFxuXTtcbmNvbnN0IEJVSUxUX0lOX1RBR1MgPSBCVUlMVF9JTl9UQUdfTkFNRVMubWFwKCh0YWcpID0+ICd1bmktJyArIHRhZyk7XG5jb25zdCBUQUdTID0gW1xuICAgICdhcHAnLFxuICAgICdsYXlvdXQnLFxuICAgICdjb250ZW50JyxcbiAgICAnbWFpbicsXG4gICAgJ3RvcC13aW5kb3cnLFxuICAgICdsZWZ0LXdpbmRvdycsXG4gICAgJ3JpZ2h0LXdpbmRvdycsXG4gICAgJ3RhYmJhcicsXG4gICAgJ3BhZ2UnLFxuICAgICdwYWdlLWhlYWQnLFxuICAgICdwYWdlLXdyYXBwZXInLFxuICAgICdwYWdlLWJvZHknLFxuICAgICdwYWdlLXJlZnJlc2gnLFxuICAgICdhY3Rpb25zaGVldCcsXG4gICAgJ21vZGFsJyxcbiAgICAndG9hc3QnLFxuICAgICdyZXNpemUtc2Vuc29yJyxcbiAgICAnc2hhZG93LXJvb3QnLFxuXS5tYXAoKHRhZykgPT4gJ3VuaS0nICsgdGFnKTtcbmNvbnN0IE5WVUVfQlVJTFRfSU5fVEFHUyA9IFtcbiAgICAnc3ZnJyxcbiAgICAndmlldycsXG4gICAgJ2EnLFxuICAgICdkaXYnLFxuICAgICdpbWcnLFxuICAgICdpbWFnZScsXG4gICAgJ3RleHQnLFxuICAgICdzcGFuJyxcbiAgICAnaW5wdXQnLFxuICAgICd0ZXh0YXJlYScsXG4gICAgJ3NwaW5uZXInLFxuICAgICdzZWxlY3QnLFxuICAgIC8vIHNsaWRlciDooqvoh6rlrprkuYkgdS1zbGlkZXIg5pu/5LujXG4gICAgLy8gJ3NsaWRlcicsXG4gICAgJ3NsaWRlci1uZWlnaGJvcicsXG4gICAgJ2luZGljYXRvcicsXG4gICAgJ2NhbnZhcycsXG4gICAgJ2xpc3QnLFxuICAgICdjZWxsJyxcbiAgICAnaGVhZGVyJyxcbiAgICAnbG9hZGluZycsXG4gICAgJ2xvYWRpbmctaW5kaWNhdG9yJyxcbiAgICAncmVmcmVzaCcsXG4gICAgJ3Njcm9sbGFibGUnLFxuICAgICdzY3JvbGxlcicsXG4gICAgJ3ZpZGVvJyxcbiAgICAnd2ViJyxcbiAgICAnZW1iZWQnLFxuICAgICd0YWJiYXInLFxuICAgICd0YWJoZWFkZXInLFxuICAgICdkYXRlcGlja2VyJyxcbiAgICAndGltZXBpY2tlcicsXG4gICAgJ21hcnF1ZWUnLFxuICAgICdjb3VudGRvd24nLFxuICAgICdkYy1zd2l0Y2gnLFxuICAgICd3YXRlcmZhbGwnLFxuICAgICdyaWNodGV4dCcsXG4gICAgJ3JlY3ljbGUtbGlzdCcsXG4gICAgJ3Utc2NhbGFibGUnLFxuICAgICdiYXJjb2RlJyxcbiAgICAnZ2NhbnZhcycsXG5dO1xuY29uc3QgVVZVRV9CVUlMVF9JTl9UQUdTID0gW1xuICAgICdsb2FkaW5nLWluZGljYXRvcicsXG4gICAgJ2xpc3QtdmlldycsXG4gICAgJ2xpc3QtaXRlbScsXG4gICAgJ3N3aXBlcicsXG4gICAgJ3N3aXBlci1pdGVtJyxcbiAgICAncmljaC10ZXh0JyxcbiAgICAnc3RpY2t5LXZpZXcnLFxuICAgICdzdGlja3ktaGVhZGVyJyxcbiAgICAnc3RpY2t5LXNlY3Rpb24nLFxuICAgIC8vIOiHquWumuS5iVxuICAgICd1bmktc2xpZGVyJyxcbiAgICAvLyDljp/nlJ/lrp7njrBcbiAgICAnYnV0dG9uJyxcbiAgICAnbmVzdGVkLXNjcm9sbC1oZWFkZXInLFxuICAgICduZXN0ZWQtc2Nyb2xsLWJvZHknLFxuXTtcbmNvbnN0IFVWVUVfV0VCX0JVSUxUX0lOX1RBR1MgPSBbXG4gICAgJ2xpc3QtdmlldycsXG4gICAgJ2xpc3QtaXRlbScsXG4gICAgJ3N0aWNreS1zZWN0aW9uJyxcbiAgICAnc3RpY2t5LWhlYWRlcicsXG4gICAgJ2Nsb3VkLWRiLWVsZW1lbnQnLFxuXS5tYXAoKHRhZykgPT4gJ3VuaS0nICsgdGFnKTtcbmNvbnN0IFVWVUVfSU9TX0JVSUxUX0lOX1RBR1MgPSBbXG4gICAgJ3Njcm9sbC12aWV3JyxcbiAgICAnd2ViLXZpZXcnLFxuICAgICdzbGlkZXInLFxuICAgICdmb3JtJyxcbiAgICAnc3dpdGNoJyxcbl07XG5jb25zdCBOVlVFX1VfQlVJTFRfSU5fVEFHUyA9IFtcbiAgICAndS10ZXh0JyxcbiAgICAndS1pbWFnZScsXG4gICAgJ3UtaW5wdXQnLFxuICAgICd1LXRleHRhcmVhJyxcbiAgICAndS12aWRlbycsXG4gICAgJ3Utd2ViLXZpZXcnLFxuICAgICd1LXNsaWRlcicsXG4gICAgJ3UtYWQnLFxuICAgICd1LWFkLWRyYXcnLFxuICAgICd1LXJpY2gtdGV4dCcsXG5dO1xuY29uc3QgVU5JX1VJX0NPTkZMSUNUX1RBR1MgPSBbJ2xpc3QtaXRlbSddLm1hcCgodGFnKSA9PiAndW5pLScgKyB0YWcpO1xuZnVuY3Rpb24gaXNCdWlsdEluQ29tcG9uZW50KHRhZykge1xuICAgIGlmIChVTklfVUlfQ09ORkxJQ1RfVEFHUy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gaDUg5bmz5Y+w5Lya6KKr6L2s5o2i5Li6IHYtdW5pLVxuICAgIGNvbnN0IHJlYWxUYWcgPSAndW5pLScgKyB0YWcucmVwbGFjZSgndi11bmktJywgJycpO1xuICAgIC8vIFRPRE8g5Yy65YiGeOWSjOmdnnhcbiAgICByZXR1cm4gKEJVSUxUX0lOX1RBR1MuaW5kZXhPZihyZWFsVGFnKSAhPT0gLTEgfHxcbiAgICAgICAgVVZVRV9XRUJfQlVJTFRfSU5fVEFHUy5pbmRleE9mKHJlYWxUYWcpICE9PSAtMSk7XG59XG5mdW5jdGlvbiBpc0g1Q3VzdG9tRWxlbWVudCh0YWcsIGlzWCA9IGZhbHNlKSB7XG4gICAgaWYgKGlzWCAmJiBVVlVFX1dFQl9CVUlMVF9JTl9UQUdTLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBUQUdTLmluZGV4T2YodGFnKSAhPT0gLTEgfHwgQlVJTFRfSU5fVEFHUy5pbmRleE9mKHRhZykgIT09IC0xO1xufVxuZnVuY3Rpb24gaXNVbmlYRWxlbWVudChuYW1lKSB7XG4gICAgcmV0dXJuIC9eST9VbmkuKkVsZW1lbnQoPzpJbXBsKT8kLy50ZXN0KG5hbWUpO1xufVxuZnVuY3Rpb24gaXNINU5hdGl2ZVRhZyh0YWcpIHtcbiAgICByZXR1cm4gKHRhZyAhPT0gJ2hlYWQnICYmXG4gICAgICAgIChpc0hUTUxUYWcodGFnKSB8fCBpc1NWR1RhZyh0YWcpKSAmJlxuICAgICAgICAhaXNCdWlsdEluQ29tcG9uZW50KHRhZykpO1xufVxuZnVuY3Rpb24gaXNBcHBOYXRpdmVUYWcodGFnKSB7XG4gICAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHVGFnKHRhZykgfHwgaXNCdWlsdEluQ29tcG9uZW50KHRhZyk7XG59XG5jb25zdCBOVlVFX0NVU1RPTV9DT01QT05FTlRTID0gW1xuICAgICdhZCcsXG4gICAgJ2FkLWRyYXcnLFxuICAgICdidXR0b24nLFxuICAgICdjaGVja2JveC1ncm91cCcsXG4gICAgJ2NoZWNrYm94JyxcbiAgICAnZm9ybScsXG4gICAgJ2ljb24nLFxuICAgICdsYWJlbCcsXG4gICAgJ21vdmFibGUtYXJlYScsXG4gICAgJ21vdmFibGUtdmlldycsXG4gICAgJ25hdmlnYXRvcicsXG4gICAgJ3BpY2tlcicsXG4gICAgJ3Byb2dyZXNzJyxcbiAgICAncmFkaW8tZ3JvdXAnLFxuICAgICdyYWRpbycsXG4gICAgJ3JpY2gtdGV4dCcsXG4gICAgJ3N3aXBlci1pdGVtJyxcbiAgICAnc3dpcGVyJyxcbiAgICAnc3dpdGNoJyxcbiAgICAnc2xpZGVyJyxcbiAgICAncGlja2VyLXZpZXcnLFxuICAgICdwaWNrZXItdmlldy1jb2x1bW4nLFxuXTtcbmZ1bmN0aW9uIGlzQXBwVVZ1ZU5hdGl2ZVRhZyh0YWcpIHtcbiAgICAvLyDliY3nq6/lrp7njrDnmoTlhoXnva7nu4Tku7bpg73kvJrms6jlhozkuIDkuKrmoLnnu4Tku7ZcbiAgICBpZiAodGFnLnN0YXJ0c1dpdGgoJ3VuaS0nKSAmJiB0YWcuZW5kc1dpdGgoJy1lbGVtZW50JykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChVVlVFX0JVSUxUX0lOX1RBR1MuaW5jbHVkZXModGFnKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKE5WVUVfQ1VTVE9NX0NPTVBPTkVOVFMuaW5jbHVkZXModGFnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpc0J1aWx0SW5Db21wb25lbnQodGFnKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gdS10ZXh0LHUtdmlkZW8uLi5cbiAgICBpZiAoTlZVRV9VX0JVSUxUX0lOX1RBR1MuaW5jbHVkZXModGFnKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNBcHBJT1NVVnVlTmF0aXZlVGFnKHRhZykge1xuICAgIC8vIOWJjeerr+WunueOsOeahOWGhee9rue7hOS7tumDveS8muazqOWGjOS4gOS4quaguee7hOS7tlxuICAgIGlmICh0YWcuc3RhcnRzV2l0aCgndW5pLScpICYmIHRhZy5lbmRzV2l0aCgnLWVsZW1lbnQnKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKE5WVUVfQlVJTFRfSU5fVEFHUy5pbmNsdWRlcyh0YWcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoVVZVRV9CVUlMVF9JTl9UQUdTLmluY2x1ZGVzKHRhZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChVVlVFX0lPU19CVUlMVF9JTl9UQUdTLmluY2x1ZGVzKHRhZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQXBwTlZ1ZU5hdGl2ZVRhZyh0YWcpIHtcbiAgICBpZiAoTlZVRV9CVUlMVF9JTl9UQUdTLmluY2x1ZGVzKHRhZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChOVlVFX0NVU1RPTV9DT01QT05FTlRTLmluY2x1ZGVzKHRhZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXNCdWlsdEluQ29tcG9uZW50KHRhZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIHUtdGV4dCx1LXZpZGVvLi4uXG4gICAgaWYgKE5WVUVfVV9CVUlMVF9JTl9UQUdTLmluY2x1ZGVzKHRhZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzTWluaVByb2dyYW1OYXRpdmVUYWcodGFnKSB7XG4gICAgcmV0dXJuIGlzQnVpbHRJbkNvbXBvbmVudCh0YWcpO1xufVxuZnVuY3Rpb24gY3JlYXRlSXNDdXN0b21FbGVtZW50KHRhZ3MgPSBbXSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc0N1c3RvbUVsZW1lbnQodGFnKSB7XG4gICAgICAgIHJldHVybiB0YWdzLmluY2x1ZGVzKHRhZyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGlzQ29tcG9uZW50VGFnKHRhZykge1xuICAgIHJldHVybiB0YWdbMF0udG9Mb3dlckNhc2UoKSArIHRhZy5zbGljZSgxKSA9PT0gJ2NvbXBvbmVudCc7XG59XG5jb25zdCBDT01QT05FTlRfU0VMRUNUT1JfUFJFRklYID0gJ3VuaS0nO1xuY29uc3QgQ09NUE9ORU5UX1BSRUZJWCA9ICd2LScgKyBDT01QT05FTlRfU0VMRUNUT1JfUFJFRklYO1xuXG5jb25zdCBMSU5FRkVFRCA9ICdcXG4nO1xuY29uc3QgTkFWQkFSX0hFSUdIVCA9IDQ0O1xuY29uc3QgVEFCQkFSX0hFSUdIVCA9IDUwO1xuY29uc3QgT05fUkVBQ0hfQk9UVE9NX0RJU1RBTkNFID0gNTA7XG5jb25zdCBSRVNQT05TSVZFX01JTl9XSURUSCA9IDc2ODtcbmNvbnN0IFVOSV9TVE9SQUdFX0xPQ0FMRSA9ICdVTklfTE9DQUxFJztcbi8vIHF1aWNrYXBwLXdlYnZpZXcg5LiN6IO95L2/55SoIGRlZmF1bHQg5L2c5Li65o+S5qe95ZCN56ewXG5jb25zdCBTTE9UX0RFRkFVTFRfTkFNRSA9ICdkJztcbmNvbnN0IENPTVBPTkVOVF9OQU1FX1BSRUZJWCA9ICdWVW5pJztcbmNvbnN0IEkxOE5fSlNPTl9ERUxJTUlURVJTID0gWyclJywgJyUnXTtcbmNvbnN0IFBSSU1BUllfQ09MT1IgPSAnIzAwN2FmZic7XG5jb25zdCBTRUxFQ1RFRF9DT0xPUiA9ICcjMDA2MmNjJzsgLy8g6YCJ5Lit55qE6aKc6Imy77yM5aaC6YCJ6aG55Y2h6buY6K6k55qE6YCJ5Lit6aKc6ImyXG5jb25zdCBCQUNLR1JPVU5EX0NPTE9SID0gJyNmN2Y3ZjcnOyAvLyDog4zmma/oibLvvIzlpoLmoIfpopjmoI/pu5jorqTog4zmma/oibJcbmNvbnN0IFVOSV9TU1IgPSAnX191bmlTU1InO1xuY29uc3QgVU5JX1NTUl9USVRMRSA9ICd0aXRsZSc7XG5jb25zdCBVTklfU1NSX1NUT1JFID0gJ3N0b3JlJztcbmNvbnN0IFVOSV9TU1JfREFUQSA9ICdkYXRhJztcbmNvbnN0IFVOSV9TU1JfR0xPQkFMX0RBVEEgPSAnZ2xvYmFsRGF0YSc7XG5jb25zdCBTQ0hFTUVfUkUgPSAvXihbYS16LV0rOik/XFwvXFwvL2k7XG5jb25zdCBEQVRBX1JFID0gL15kYXRhOi4qLC4qLztcbmNvbnN0IFdFQl9JTlZPS0VfQVBQU0VSVklDRSA9ICdXRUJfSU5WT0tFX0FQUFNFUlZJQ0UnO1xuY29uc3QgV1hTX1BST1RPQ09MID0gJ3d4czovLyc7XG5jb25zdCBKU09OX1BST1RPQ09MID0gJ2pzb246Ly8nO1xuY29uc3QgV1hTX01PRFVMRVMgPSAnd3hzTW9kdWxlcyc7XG5jb25zdCBSRU5ERVJKU19NT0RVTEVTID0gJ3JlbmRlcmpzTW9kdWxlcyc7XG4vLyBsaWZlY3ljbGVcbi8vIEFwcCBhbmQgUGFnZVxuY29uc3QgT05fU0hPVyA9ICdvblNob3cnO1xuY29uc3QgT05fSElERSA9ICdvbkhpZGUnO1xuLy9BcHBcbmNvbnN0IE9OX0xBVU5DSCA9ICdvbkxhdW5jaCc7XG5jb25zdCBPTl9FUlJPUiA9ICdvbkVycm9yJztcbmNvbnN0IE9OX1RIRU1FX0NIQU5HRSA9ICdvblRoZW1lQ2hhbmdlJztcbmNvbnN0IE9GRl9USEVNRV9DSEFOR0UgPSAnb2ZmVGhlbWVDaGFuZ2UnO1xuY29uc3QgT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSA9ICdvbktleWJvYXJkSGVpZ2h0Q2hhbmdlJztcbmNvbnN0IE9OX1BBR0VfTk9UX0ZPVU5EID0gJ29uUGFnZU5vdEZvdW5kJztcbmNvbnN0IE9OX1VOSEFORExFX1JFSkVDVElPTiA9ICdvblVuaGFuZGxlZFJlamVjdGlvbic7XG5jb25zdCBPTl9FWElUID0gJ29uRXhpdCc7XG4vL1BhZ2VcbmNvbnN0IE9OX0xPQUQgPSAnb25Mb2FkJztcbmNvbnN0IE9OX1JFQURZID0gJ29uUmVhZHknO1xuY29uc3QgT05fVU5MT0FEID0gJ29uVW5sb2FkJztcbi8vIOeZvuW6pueJueaciVxuY29uc3QgT05fSU5JVCA9ICdvbkluaXQnO1xuLy8g5b6u5L+h54m55pyJXG5jb25zdCBPTl9TQVZFX0VYSVRfU1RBVEUgPSAnb25TYXZlRXhpdFN0YXRlJztcbmNvbnN0IE9OX1JFU0laRSA9ICdvblJlc2l6ZSc7XG5jb25zdCBPTl9CQUNLX1BSRVNTID0gJ29uQmFja1ByZXNzJztcbmNvbnN0IE9OX1BBR0VfU0NST0xMID0gJ29uUGFnZVNjcm9sbCc7XG5jb25zdCBPTl9UQUJfSVRFTV9UQVAgPSAnb25UYWJJdGVtVGFwJztcbmNvbnN0IE9OX1JFQUNIX0JPVFRPTSA9ICdvblJlYWNoQm90dG9tJztcbmNvbnN0IE9OX1BVTExfRE9XTl9SRUZSRVNIID0gJ29uUHVsbERvd25SZWZyZXNoJztcbmNvbnN0IE9OX1NIQVJFX1RJTUVMSU5FID0gJ29uU2hhcmVUaW1lbGluZSc7XG5jb25zdCBPTl9BRERfVE9fRkFWT1JJVEVTID0gJ29uQWRkVG9GYXZvcml0ZXMnO1xuY29uc3QgT05fU0hBUkVfQVBQX01FU1NBR0UgPSAnb25TaGFyZUFwcE1lc3NhZ2UnO1xuLy8gbmF2aWdhdGlvbkJhclxuY29uc3QgT05fTkFWSUdBVElPTl9CQVJfQlVUVE9OX1RBUCA9ICdvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAnO1xuY29uc3QgT05fTkFWSUdBVElPTl9CQVJfQ0hBTkdFID0gJ29uTmF2aWdhdGlvbkJhckNoYW5nZSc7XG5jb25zdCBPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ0xJQ0tFRCA9ICdvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENsaWNrZWQnO1xuY29uc3QgT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NIQU5HRUQgPSAnb25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRDaGFuZ2VkJztcbmNvbnN0IE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DT05GSVJNRUQgPSAnb25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRDb25maXJtZWQnO1xuY29uc3QgT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0ZPQ1VTX0NIQU5HRUQgPSAnb25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRGb2N1c0NoYW5nZWQnO1xuLy8gZnJhbWV3b3JrXG5jb25zdCBPTl9BUFBfRU5URVJfRk9SRUdST1VORCA9ICdvbkFwcEVudGVyRm9yZWdyb3VuZCc7XG5jb25zdCBPTl9BUFBfRU5URVJfQkFDS0dST1VORCA9ICdvbkFwcEVudGVyQmFja2dyb3VuZCc7XG5jb25zdCBPTl9XRUJfSU5WT0tFX0FQUF9TRVJWSUNFID0gJ29uV2ViSW52b2tlQXBwU2VydmljZSc7XG5jb25zdCBPTl9XWFNfSU5WT0tFX0NBTExfTUVUSE9EID0gJ29uV3hzSW52b2tlQ2FsbE1ldGhvZCc7XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50SW50ZXJuYWxJbnN0YW5jZSh2bSkge1xuICAgIHJldHVybiAhIXZtLmFwcENvbnRleHQ7XG59XG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gKGluc3RhbmNlICYmXG4gICAgICAgIChpc0NvbXBvbmVudEludGVybmFsSW5zdGFuY2UoaW5zdGFuY2UpID8gaW5zdGFuY2UucHJveHkgOiBpbnN0YW5jZSkpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZU93bmVyVm0odm0pIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNvbXBvbmVudE5hbWUgPSB2bS50eXBlLm5hbWU7XG4gICAgd2hpbGUgKGNvbXBvbmVudE5hbWUgJiYgaXNCdWlsdEluQ29tcG9uZW50KGh5cGhlbmF0ZShjb21wb25lbnROYW1lKSkpIHtcbiAgICAgICAgLy8gb3duZXJJbnN0YW5jZSDlhoXnva7nu4Tku7bpnIDopoHkvb/nlKjniLYgdm1cbiAgICAgICAgdm0gPSB2bS5wYXJlbnQ7XG4gICAgICAgIGNvbXBvbmVudE5hbWUgPSB2bS50eXBlLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiB2bS5wcm94eTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChlbCkge1xuICAgIC8vIEVsZW1lbnRcbiAgICByZXR1cm4gZWwubm9kZVR5cGUgPT09IDE7XG59XG5mdW5jdGlvbiByZXNvbHZlT3duZXJFbChpbnN0YW5jZSwgbXVsdGkgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdm5vZGUgfSA9IGluc3RhbmNlO1xuICAgIGlmIChpc0VsZW1lbnQodm5vZGUuZWwpKSB7XG4gICAgICAgIHJldHVybiBtdWx0aSA/ICh2bm9kZS5lbCA/IFt2bm9kZS5lbF0gOiBbXSkgOiB2bm9kZS5lbDtcbiAgICB9XG4gICAgY29uc3QgeyBzdWJUcmVlIH0gPSBpbnN0YW5jZTtcbiAgICAvLyBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOID0gMTw8NFxuICAgIGlmIChzdWJUcmVlLnNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICAgIGNvbnN0IGVsZW1WTm9kZXMgPSBzdWJUcmVlLmNoaWxkcmVuLmZpbHRlcigodm5vZGUpID0+IHZub2RlLmVsICYmIGlzRWxlbWVudCh2bm9kZS5lbCkpO1xuICAgICAgICBpZiAoZWxlbVZOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAobXVsdGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbVZOb2Rlcy5tYXAoKG5vZGUpID0+IG5vZGUuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1WTm9kZXNbMF0uZWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG11bHRpID8gKHZub2RlLmVsID8gW3Zub2RlLmVsXSA6IFtdKSA6IHZub2RlLmVsO1xufVxuZnVuY3Rpb24gZHluYW1pY1Nsb3ROYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2RlZmF1bHQnID8gU0xPVF9ERUZBVUxUX05BTUUgOiBuYW1lO1xufVxuY29uc3QgY3VzdG9taXplUkUgPSAvOi9nO1xuZnVuY3Rpb24gY3VzdG9taXplRXZlbnQoc3RyKSB7XG4gICAgcmV0dXJuIGNhbWVsaXplKHN0ci5yZXBsYWNlKGN1c3RvbWl6ZVJFLCAnLScpKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqZWN0ID0ge307XG4gICAgICAgIHZhbHVlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHN0eWxlT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVTdHlsZSQxKHN0eWxlT2JqZWN0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVN0cmluZ1N0eWxlKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcmVzID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZVtpXTtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBpc1N0cmluZyhpdGVtKVxuICAgICAgICAgICAgICAgID8gcGFyc2VTdHJpbmdTdHlsZShpdGVtKVxuICAgICAgICAgICAgICAgIDogbm9ybWFsaXplU3R5bGUoaXRlbSk7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBub3JtYWxpemVkW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplU3R5bGUkMSh2YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3ModmFsdWUpIHtcbiAgICBsZXQgcmVzID0gJyc7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlcyArPSBrZXkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQ2xhc3ModmFsdWVbaV0pO1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICByZXMgKz0gbm9ybWFsaXplZCArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzID0gbm9ybWFsaXplQ2xhc3MkMSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXMudHJpbSgpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplUHJvcHMocHJvcHMpIHtcbiAgICBpZiAoIXByb3BzKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgeyBjbGFzczoga2xhc3MsIHN0eWxlIH0gPSBwcm9wcztcbiAgICBpZiAoa2xhc3MgJiYgIWlzU3RyaW5nKGtsYXNzKSkge1xuICAgICAgICBwcm9wcy5jbGFzcyA9IG5vcm1hbGl6ZUNsYXNzKGtsYXNzKTtcbiAgICB9XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICAgIHByb3BzLnN0eWxlID0gbm9ybWFsaXplU3R5bGUoc3R5bGUpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcHM7XG59XG5cbmxldCBsYXN0TG9nVGltZSA9IDA7XG5mdW5jdGlvbiBmb3JtYXRMb2cobW9kdWxlLCAuLi5hcmdzKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkaWZmID0gbGFzdExvZ1RpbWUgPyBub3cgLSBsYXN0TG9nVGltZSA6IDA7XG4gICAgbGFzdExvZ1RpbWUgPSBub3c7XG4gICAgcmV0dXJuIGBbJHtub3d9XVske2RpZmZ9bXNdWyR7bW9kdWxlfV3vvJoke2FyZ3NcbiAgICAgICAgLm1hcCgoYXJnKSA9PiBKU09OLnN0cmluZ2lmeShhcmcpKVxuICAgICAgICAuam9pbignICcpfWA7XG59XG5cbmZ1bmN0aW9uIGNhY2hlKGZuKSB7XG4gICAgY29uc3QgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJldHVybiAoc3RyKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpdCA9IGNhY2hlW3N0cl07XG4gICAgICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gY2FjaGVTdHJpbmdGdW5jdGlvbihmbikge1xuICAgIHJldHVybiBjYWNoZShmbik7XG59XG5mdW5jdGlvbiBnZXRMZW4oc3RyID0gJycpIHtcbiAgICByZXR1cm4gKCcnICsgc3RyKS5yZXBsYWNlKC9bXlxceDAwLVxceGZmXS9nLCAnKionKS5sZW5ndGg7XG59XG5mdW5jdGlvbiBoYXNMZWFkaW5nU2xhc2goc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKCcvJykgPT09IDA7XG59XG5mdW5jdGlvbiBhZGRMZWFkaW5nU2xhc2goc3RyKSB7XG4gICAgcmV0dXJuIGhhc0xlYWRpbmdTbGFzaChzdHIpID8gc3RyIDogJy8nICsgc3RyO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGVhZGluZ1NsYXNoKHN0cikge1xuICAgIHJldHVybiBoYXNMZWFkaW5nU2xhc2goc3RyKSA/IHN0ci5zbGljZSgxKSA6IHN0cjtcbn1cbmNvbnN0IGludm9rZUFycmF5Rm5zID0gKGZucywgYXJnKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZucy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXQgPSBmbnNbaV0oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5mdW5jdGlvbiB1cGRhdGVFbGVtZW50U3R5bGUoZWxlbWVudCwgc3R5bGVzKSB7XG4gICAgZm9yIChjb25zdCBhdHRyTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZVthdHRyTmFtZV0gPSBzdHlsZXNbYXR0ck5hbWVdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG9uY2UoZm4sIGN0eCA9IG51bGwpIHtcbiAgICBsZXQgcmVzO1xuICAgIHJldHVybiAoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgICByZXMgPSBmbi5hcHBseShjdHgsIGFyZ3MpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG59XG5jb25zdCBzYW5pdGlzZSA9ICh2YWwpID0+ICh2YWwgJiYgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWwpKSkgfHwgdmFsO1xuY29uc3QgX2NvbXBsZXRlVmFsdWUgPSAodmFsdWUpID0+ICh2YWx1ZSA+IDkgPyB2YWx1ZSA6ICcwJyArIHZhbHVlKTtcbmZ1bmN0aW9uIGZvcm1hdERhdGVUaW1lKHsgZGF0ZSA9IG5ldyBEYXRlKCksIG1vZGUgPSAnZGF0ZScgfSkge1xuICAgIGlmIChtb2RlID09PSAndGltZScpIHtcbiAgICAgICAgcmV0dXJuIChfY29tcGxldGVWYWx1ZShkYXRlLmdldEhvdXJzKCkpICsgJzonICsgX2NvbXBsZXRlVmFsdWUoZGF0ZS5nZXRNaW51dGVzKCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAoZGF0ZS5nZXRGdWxsWWVhcigpICtcbiAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICBfY29tcGxldGVWYWx1ZShkYXRlLmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgX2NvbXBsZXRlVmFsdWUoZGF0ZS5nZXREYXRlKCkpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjYWxsT3B0aW9ucyhvcHRpb25zLCBkYXRhKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKGlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICBlcnJNc2c6IGRhdGEsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICgvOm9rJC8udGVzdChkYXRhLmVyck1zZykpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob3B0aW9ucy5zdWNjZXNzKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdWNjZXNzKGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zLmZhaWwpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZhaWwoZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24ob3B0aW9ucy5jb21wbGV0ZSkpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wbGV0ZShkYXRhKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRWYWx1ZUJ5RGF0YVBhdGgob2JqLCBwYXRoKSB7XG4gICAgaWYgKCFpc1N0cmluZyhwYXRoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXGQrKVxcXS9nLCAnLiQxJyk7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgbGV0IGtleSA9IHBhcnRzWzBdO1xuICAgIGlmICghb2JqKSB7XG4gICAgICAgIG9iaiA9IHt9O1xuICAgIH1cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFZhbHVlQnlEYXRhUGF0aChvYmpba2V5XSwgcGFydHMuc2xpY2UoMSkuam9pbignLicpKTtcbn1cbmZ1bmN0aW9uIHNvcnRPYmplY3Qob2JqKSB7XG4gICAgbGV0IHNvcnRPYmogPSB7fTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChvYmopKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IF9rZXkgPSBrZXk7XG4gICAgICAgICAgICBzb3J0T2JqW19rZXldID0gb2JqW19rZXldO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhzb3J0T2JqKSA/IG9iaiA6IHNvcnRPYmo7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEtleShrZXkpIHtcbiAgICByZXR1cm4gY2FtZWxpemUoa2V5LnN1YnN0cmluZyg1KSk7XG59XG4vLyBxdWVzdGlvbi8xMzkxODHvvIzlop7liqDlia/kvZznlKjvvIzpgb/lhY0gaW5pdEN1c3RvbURhdGFzZXQg5ZyoIGJ1aWxkIOS4i+iiqyB0cmVlLXNoYWtpbmdcbmNvbnN0IGluaXRDdXN0b21EYXRhc2V0T25jZSA9IC8qI19fUFVSRV9fKi8gb25jZSgoKSA9PiB7XG4gICAgY29uc3QgcHJvdG90eXBlID0gSFRNTEVsZW1lbnQucHJvdG90eXBlO1xuICAgIGNvbnN0IHNldEF0dHJpYnV0ZSA9IHByb3RvdHlwZS5zZXRBdHRyaWJ1dGU7XG4gICAgcHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnZGF0YS0nKSAmJiB0aGlzLnRhZ05hbWUuc3RhcnRzV2l0aCgnVU5JLScpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5fX3VuaURhdGFzZXQgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5fX3VuaURhdGFzZXQgPSB7fSk7XG4gICAgICAgICAgICBkYXRhc2V0W2Zvcm1hdEtleShrZXkpXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlQXR0cmlidXRlID0gcHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZTtcbiAgICBwcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAodGhpcy5fX3VuaURhdGFzZXQgJiZcbiAgICAgICAgICAgIGtleS5zdGFydHNXaXRoKCdkYXRhLScpICYmXG4gICAgICAgICAgICB0aGlzLnRhZ05hbWUuc3RhcnRzV2l0aCgnVU5JLScpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fX3VuaURhdGFzZXRbZm9ybWF0S2V5KGtleSldO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZUF0dHJpYnV0ZS5jYWxsKHRoaXMsIGtleSk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gZ2V0Q3VzdG9tRGF0YXNldChlbCkge1xuICAgIHJldHVybiBleHRlbmQoe30sIGVsLmRhdGFzZXQsIGVsLl9fdW5pRGF0YXNldCk7XG59XG5cbmNvbnN0IHVuaXRSRSA9IG5ldyBSZWdFeHAoYFwiW15cIl0rXCJ8J1teJ10rJ3x1cmxcXFxcKFteKV0rXFxcXCl8KFxcXFxkKlxcXFwuP1xcXFxkKylbcnx1XXB4YCwgJ2cnKTtcbmZ1bmN0aW9uIHRvRml4ZWQobnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiArIDEpO1xuICAgIGNvbnN0IHdob2xlTnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIgKiBtdWx0aXBsaWVyKTtcbiAgICByZXR1cm4gKE1hdGgucm91bmQod2hvbGVOdW1iZXIgLyAxMCkgKiAxMCkgLyBtdWx0aXBsaWVyO1xufVxuY29uc3QgZGVmYXVsdFJweDJVbml0ID0ge1xuICAgIHVuaXQ6ICdyZW0nLFxuICAgIHVuaXRSYXRpbzogMTAgLyAzMjAsXG4gICAgdW5pdFByZWNpc2lvbjogNSxcbn07XG5jb25zdCBkZWZhdWx0TWluaVByb2dyYW1ScHgyVW5pdCA9IHtcbiAgICB1bml0OiAncnB4JyxcbiAgICB1bml0UmF0aW86IDEsXG4gICAgdW5pdFByZWNpc2lvbjogMSxcbn07XG5jb25zdCBkZWZhdWx0TlZ1ZVJweDJVbml0ID0gZGVmYXVsdE1pbmlQcm9ncmFtUnB4MlVuaXQ7XG5mdW5jdGlvbiBjcmVhdGVScHgyVW5pdCh1bml0LCB1bml0UmF0aW8sIHVuaXRQcmVjaXNpb24pIHtcbiAgICAvLyBpZ25vcmU6IHJweENhbGNJbmNsdWRlV2lkdGhcbiAgICByZXR1cm4gKHZhbCkgPT4gdmFsLnJlcGxhY2UodW5pdFJFLCAobSwgJDEpID0+IHtcbiAgICAgICAgaWYgKCEkMSkge1xuICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaXRSYXRpbyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAkeyQxfSR7dW5pdH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdG9GaXhlZChwYXJzZUZsb2F0KCQxKSAqIHVuaXRSYXRpbywgdW5pdFByZWNpc2lvbik7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/ICcwJyA6IGAke3ZhbHVlfSR7dW5pdH1gO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBwYXNzaXZlKHBhc3NpdmUpIHtcbiAgICByZXR1cm4geyBwYXNzaXZlIH07XG59XG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0KGVsKSB7XG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVsLmRhdGFzZXQgfHwge30pKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRhcmdldChlbCkge1xuICAgIGNvbnN0IHsgaWQsIG9mZnNldFRvcCwgb2Zmc2V0TGVmdCB9ID0gZWw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGRhdGFzZXQ6IGdldEN1c3RvbURhdGFzZXQoZWwpLFxuICAgICAgICBvZmZzZXRUb3AsXG4gICAgICAgIG9mZnNldExlZnQsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGFkZEZvbnQoZmFtaWx5LCBzb3VyY2UsIGRlc2MpIHtcbiAgICBjb25zdCBmb250cyA9IGRvY3VtZW50LmZvbnRzO1xuICAgIGlmIChmb250cykge1xuICAgICAgICBjb25zdCBmb250RmFjZSA9IG5ldyBGb250RmFjZShmYW1pbHksIHNvdXJjZSwgZGVzYyk7XG4gICAgICAgIHJldHVybiBmb250RmFjZS5sb2FkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBmb250cy5hZGQgJiYgZm9udHMuYWRkKGZvbnRGYWNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAoZGVzYykge1xuICAgICAgICAgICAgY29uc3QgeyBzdHlsZSwgd2VpZ2h0LCBzdHJldGNoLCB1bmljb2RlUmFuZ2UsIHZhcmlhbnQsIGZlYXR1cmVTZXR0aW5ncyB9ID0gZGVzYztcbiAgICAgICAgICAgIHN0eWxlICYmIHZhbHVlcy5wdXNoKGBmb250LXN0eWxlOiR7c3R5bGV9YCk7XG4gICAgICAgICAgICB3ZWlnaHQgJiYgdmFsdWVzLnB1c2goYGZvbnQtd2VpZ2h0OiR7d2VpZ2h0fWApO1xuICAgICAgICAgICAgc3RyZXRjaCAmJiB2YWx1ZXMucHVzaChgZm9udC1zdHJldGNoOiR7c3RyZXRjaH1gKTtcbiAgICAgICAgICAgIHVuaWNvZGVSYW5nZSAmJiB2YWx1ZXMucHVzaChgdW5pY29kZS1yYW5nZToke3VuaWNvZGVSYW5nZX1gKTtcbiAgICAgICAgICAgIHZhcmlhbnQgJiYgdmFsdWVzLnB1c2goYGZvbnQtdmFyaWFudDoke3ZhcmlhbnR9YCk7XG4gICAgICAgICAgICBmZWF0dXJlU2V0dGluZ3MgJiYgdmFsdWVzLnB1c2goYGZvbnQtZmVhdHVyZS1zZXR0aW5nczoke2ZlYXR1cmVTZXR0aW5nc31gKTtcbiAgICAgICAgfVxuICAgICAgICBzdHlsZS5pbm5lclRleHQgPSBgQGZvbnQtZmFjZXtmb250LWZhbWlseTpcIiR7ZmFtaWx5fVwiO3NyYzoke3NvdXJjZX07JHt2YWx1ZXMuam9pbignOycpfX1gO1xuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc2Nyb2xsVG8oc2Nyb2xsVG9wLCBkdXJhdGlvbiwgaXNINSkge1xuICAgIGlmIChpc1N0cmluZyhzY3JvbGxUb3ApKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzY3JvbGxUb3ApO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdG9wIH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IHRvcCArIHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgICAgICAgIC8vIOWmguaenOWtmOWcqO+8jOWHj+WOuyA8dW5pLXBhZ2UtaGVhZD4g6auY5bqmXG4gICAgICAgICAgICBjb25zdCBwYWdlSGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndW5pLXBhZ2UtaGVhZCcpO1xuICAgICAgICAgICAgaWYgKHBhZ2VIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxUb3AgLT0gcGFnZUhlYWRlci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNjcm9sbFRvcCA8IDApIHtcbiAgICAgICAgc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gICAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGNvbnN0IHsgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQgfSA9IGRvY3VtZW50RWxlbWVudDtcbiAgICBzY3JvbGxUb3AgPSBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCk7XG4gICAgaWYgKGR1cmF0aW9uID09PSAwKSB7XG4gICAgICAgIC8vIOmDqOWIhua1j+iniOWZqO+8iOavlOWmguW+ruS/oe+8ieS4rSBzY3JvbGxUb3Ag55qE5YC86ZyA6KaB6YCa6L+HIGRvY3VtZW50LmJvZHkg5p2l5o6n5Yi2XG4gICAgICAgIGRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAod2luZG93LnNjcm9sbFkgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjcm9sbFRvID0gKGR1cmF0aW9uKSA9PiB7XG4gICAgICAgIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgc2Nyb2xsVG9wKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXN0YWluY2UgPSBzY3JvbGxUb3AgLSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB3aW5kb3cuc2Nyb2xsWSArIChkaXN0YWluY2UgLyBkdXJhdGlvbikgKiAxMCk7XG4gICAgICAgICAgICBzY3JvbGxUbyhkdXJhdGlvbiAtIDEwKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzY3JvbGxUbyhkdXJhdGlvbik7XG59XG5cbmNvbnN0IGVuY29kZSA9IGVuY29kZVVSSUNvbXBvbmVudDtcbmZ1bmN0aW9uIHN0cmluZ2lmeVF1ZXJ5KG9iaiwgZW5jb2RlU3RyID0gZW5jb2RlKSB7XG4gICAgY29uc3QgcmVzID0gb2JqXG4gICAgICAgID8gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhbCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVTdHIoa2V5KSArICc9JyArIGVuY29kZVN0cih2YWwpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLmpvaW4oJyYnKVxuICAgICAgICA6IG51bGw7XG4gICAgcmV0dXJuIHJlcyA/IGA/JHtyZXN9YCA6ICcnO1xufVxuLyoqXG4gKiBEZWNvZGUgdGV4dCB1c2luZyBgZGVjb2RlVVJJQ29tcG9uZW50YC4gUmV0dXJucyB0aGUgb3JpZ2luYWwgdGV4dCBpZiBpdFxuICogZmFpbHMuXG4gKlxuICogQHBhcmFtIHRleHQgLSBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAcmV0dXJucyBkZWNvZGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGUodGV4dCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoJycgKyB0ZXh0KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikgeyB9XG4gICAgcmV0dXJuICcnICsgdGV4dDtcbn1cbmZ1bmN0aW9uIGRlY29kZWRRdWVyeShxdWVyeSA9IHt9KSB7XG4gICAgY29uc3QgZGVjb2RlZFF1ZXJ5ID0ge307XG4gICAgT2JqZWN0LmtleXMocXVlcnkpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlY29kZWRRdWVyeVtuYW1lXSA9IGRlY29kZShxdWVyeVtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRlY29kZWRRdWVyeVtuYW1lXSA9IHF1ZXJ5W25hbWVdO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRlY29kZWRRdWVyeTtcbn1cbmNvbnN0IFBMVVNfUkUgPSAvXFwrL2c7IC8vICUyQlxuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci1uZXh0L2Jsb2IvbWFzdGVyL3NyYy9xdWVyeS50c1xuICogQGludGVybmFsXG4gKlxuICogQHBhcmFtIHNlYXJjaCAtIHNlYXJjaCBzdHJpbmcgdG8gcGFyc2VcbiAqIEByZXR1cm5zIGEgcXVlcnkgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlUXVlcnkoc2VhcmNoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB7fTtcbiAgICAvLyBhdm9pZCBjcmVhdGluZyBhbiBvYmplY3Qgd2l0aCBhbiBlbXB0eSBrZXkgYW5kIGVtcHR5IHZhbHVlXG4gICAgLy8gYmVjYXVzZSBvZiBzcGxpdCgnJicpXG4gICAgaWYgKHNlYXJjaCA9PT0gJycgfHwgc2VhcmNoID09PSAnPycpXG4gICAgICAgIHJldHVybiBxdWVyeTtcbiAgICBjb25zdCBoYXNMZWFkaW5nSU0gPSBzZWFyY2hbMF0gPT09ICc/JztcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSAoaGFzTGVhZGluZ0lNID8gc2VhcmNoLnNsaWNlKDEpIDogc2VhcmNoKS5zcGxpdCgnJicpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoUGFyYW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIC8vIHByZSBkZWNvZGUgdGhlICsgaW50byBzcGFjZVxuICAgICAgICBjb25zdCBzZWFyY2hQYXJhbSA9IHNlYXJjaFBhcmFtc1tpXS5yZXBsYWNlKFBMVVNfUkUsICcgJyk7XG4gICAgICAgIC8vIGFsbG93IHRoZSA9IGNoYXJhY3RlclxuICAgICAgICBsZXQgZXFQb3MgPSBzZWFyY2hQYXJhbS5pbmRleE9mKCc9Jyk7XG4gICAgICAgIGxldCBrZXkgPSBkZWNvZGUoZXFQb3MgPCAwID8gc2VhcmNoUGFyYW0gOiBzZWFyY2hQYXJhbS5zbGljZSgwLCBlcVBvcykpO1xuICAgICAgICBsZXQgdmFsdWUgPSBlcVBvcyA8IDAgPyBudWxsIDogZGVjb2RlKHNlYXJjaFBhcmFtLnNsaWNlKGVxUG9zICsgMSkpO1xuICAgICAgICBpZiAoa2V5IGluIHF1ZXJ5KSB7XG4gICAgICAgICAgICAvLyBhbiBleHRyYSB2YXJpYWJsZSBmb3IgdHMgdHlwZXNcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBxdWVyeVtrZXldO1xuICAgICAgICAgICAgaWYgKCFpc0FycmF5KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBxdWVyeVtrZXldID0gW2N1cnJlbnRWYWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50VmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxdWVyeVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5mdW5jdGlvbiBwYXJzZVVybCh1cmwpIHtcbiAgICBjb25zdCBbcGF0aCwgcXVlcnlzdHJpbmddID0gdXJsLnNwbGl0KCc/JywgMik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcXVlcnk6IHBhcnNlUXVlcnkocXVlcnlzdHJpbmcgfHwgJycpLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlTlZ1ZURhdGFzZXQoYXR0cikge1xuICAgIGNvbnN0IGRhdGFzZXQgPSB7fTtcbiAgICBpZiAoYXR0cikge1xuICAgICAgICBPYmplY3Qua2V5cyhhdHRyKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignZGF0YS0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRba2V5LnJlcGxhY2UoJ2RhdGEtJywgJycpXSA9IGF0dHJba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhc2V0O1xufVxuXG5mdW5jdGlvbiBwbHVzUmVhZHkoY2FsbGJhY2spIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5wbHVzKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwbHVzcmVhZHknLCBjYWxsYmFjayk7XG59XG5cbmNsYXNzIERPTUV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnRE9NRXhjZXB0aW9uJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50VHlwZSh0eXBlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2FwdHVyZSkge1xuICAgICAgICAgICAgdHlwZSArPSAnQ2FwdHVyZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMub25jZSkge1xuICAgICAgICAgICAgdHlwZSArPSAnT25jZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGFzc2l2ZSkge1xuICAgICAgICAgICAgdHlwZSArPSAnUGFzc2l2ZSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGBvbiR7Y2FwaXRhbGl6ZShjYW1lbGl6ZSh0eXBlKSl9YDtcbn1cbmNsYXNzIFVuaUV2ZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBvcHRzKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVTdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIHRoaXMuX3N0b3AgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYnViYmxlcyA9ICEhb3B0cy5idWJibGVzO1xuICAgICAgICB0aGlzLmNhbmNlbGFibGUgPSAhIW9wdHMuY2FuY2VsYWJsZTtcbiAgICB9XG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5fZW5kID0gdGhpcy5fc3RvcCA9IHRydWU7XG4gICAgfVxuICAgIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5fc3RvcCA9IHRydWU7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVW5pRXZlbnQoZXZ0KSB7XG4gICAgaWYgKGV2dCBpbnN0YW5jZW9mIFVuaUV2ZW50KSB7XG4gICAgICAgIHJldHVybiBldnQ7XG4gICAgfVxuICAgIGNvbnN0IFt0eXBlXSA9IHBhcnNlRXZlbnROYW1lKGV2dC50eXBlKTtcbiAgICBjb25zdCB1bmlFdmVudCA9IG5ldyBVbmlFdmVudCh0eXBlLCB7XG4gICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBleHRlbmQodW5pRXZlbnQsIGV2dCk7XG4gICAgcmV0dXJuIHVuaUV2ZW50O1xufVxuY2xhc3MgVW5pRXZlbnRUYXJnZXQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxpc3RlbmVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICAgIGRpc3BhdGNoRXZlbnQoZXZ0KSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzW2V2dC50eXBlXTtcbiAgICAgICAgaWYgKCFsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdExvZygnZGlzcGF0Y2hFdmVudCcsIHRoaXMubm9kZUlkKSwgZXZ0LnR5cGUsICdub3QgZm91bmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyDmoLzlvI/ljJbkuovku7bnsbvlnotcbiAgICAgICAgY29uc3QgZXZlbnQgPSBjcmVhdGVVbmlFdmVudChldnQpO1xuICAgICAgICBjb25zdCBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbaV0uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgICAgICBpZiAoZXZlbnQuX2VuZCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5jYW5jZWxhYmxlICYmIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdHlwZSA9IG5vcm1hbGl6ZUV2ZW50VHlwZSh0eXBlLCBvcHRpb25zKTtcbiAgICAgICAgKHRoaXMubGlzdGVuZXJzW3R5cGVdIHx8ICh0aGlzLmxpc3RlbmVyc1t0eXBlXSA9IFtdKSkucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgICAgdHlwZSA9IG5vcm1hbGl6ZUV2ZW50VHlwZSh0eXBlLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbdHlwZV07XG4gICAgICAgIGlmICghbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNvbnN0IG9wdGlvbnNNb2RpZmllclJFID0gLyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO1xuZnVuY3Rpb24gcGFyc2VFdmVudE5hbWUobmFtZSkge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGlmIChvcHRpb25zTW9kaWZpZXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgbGV0IG07XG4gICAgICAgIHdoaWxlICgobSA9IG5hbWUubWF0Y2gob3B0aW9uc01vZGlmaWVyUkUpKSkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgbmFtZS5sZW5ndGggLSBtWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvcHRpb25zW21bMF0udG9Mb3dlckNhc2UoKV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbaHlwaGVuYXRlKG5hbWUuc2xpY2UoMikpLCBvcHRpb25zXTtcbn1cblxuY29uc3QgRXZlbnRNb2RpZmllckZsYWdzID0gLyojX19QVVJFX18qLyAoKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0b3A6IDEsXG4gICAgICAgIHByZXZlbnQ6IDEgPDwgMSxcbiAgICAgICAgc2VsZjogMSA8PCAyLFxuICAgIH07XG59KSgpO1xuZnVuY3Rpb24gZW5jb2RlTW9kaWZpZXIobW9kaWZpZXJzKSB7XG4gICAgbGV0IGZsYWcgPSAwO1xuICAgIGlmIChtb2RpZmllcnMuaW5jbHVkZXMoJ3N0b3AnKSkge1xuICAgICAgICBmbGFnIHw9IEV2ZW50TW9kaWZpZXJGbGFncy5zdG9wO1xuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLmluY2x1ZGVzKCdwcmV2ZW50JykpIHtcbiAgICAgICAgZmxhZyB8PSBFdmVudE1vZGlmaWVyRmxhZ3MucHJldmVudDtcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVycy5pbmNsdWRlcygnc2VsZicpKSB7XG4gICAgICAgIGZsYWcgfD0gRXZlbnRNb2RpZmllckZsYWdzLnNlbGY7XG4gICAgfVxuICAgIHJldHVybiBmbGFnO1xufVxuXG5jb25zdCBOT0RFX1RZUEVfUEFHRSA9IDA7XG5jb25zdCBOT0RFX1RZUEVfRUxFTUVOVCA9IDE7XG5jb25zdCBOT0RFX1RZUEVfVEVYVCA9IDM7XG5jb25zdCBOT0RFX1RZUEVfQ09NTUVOVCA9IDg7XG5mdW5jdGlvbiBzaWJsaW5nKG5vZGUsIHR5cGUpIHtcbiAgICBjb25zdCB7IHBhcmVudE5vZGUgfSA9IG5vZGU7XG4gICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB7IGNoaWxkTm9kZXMgfSA9IHBhcmVudE5vZGU7XG4gICAgcmV0dXJuIGNoaWxkTm9kZXNbY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpICsgKHR5cGUgPT09ICduJyA/IDEgOiAtMSldIHx8IG51bGw7XG59XG5mdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcbiAgICBjb25zdCB7IHBhcmVudE5vZGUgfSA9IG5vZGU7XG4gICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgY29uc3QgeyBjaGlsZE5vZGVzIH0gPSBwYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51bGw7XG4gICAgICAgICAgICBjaGlsZE5vZGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja05vZGVJZChub2RlKSB7XG4gICAgaWYgKCFub2RlLm5vZGVJZCAmJiBub2RlLnBhZ2VOb2RlKSB7XG4gICAgICAgIG5vZGUubm9kZUlkID0gbm9kZS5wYWdlTm9kZS5nZW5JZCgpO1xuICAgIH1cbn1cbi8vIOS4uuS8mOWMluaAp+iDve+8jOWQhOW5s+WPsOS4jeS9v+eUqHByb3h55p2l5a6e546wbm9kZeeahOaTjeS9nOaLpuaIqu+8jOiAjOaYr+ebtOaOpemAmui/h3BhZ2VOb2Rl5a6a5Yi2XG5jbGFzcyBVbmlOb2RlIGV4dGVuZHMgVW5pRXZlbnRUYXJnZXQge1xuICAgIGNvbnN0cnVjdG9yKG5vZGVUeXBlLCBub2RlTmFtZSwgY29udGFpbmVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFnZU5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLnBhcmVudE5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLl90ZXh0ID0gbnVsbDtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgeyBwYWdlTm9kZSB9ID0gY29udGFpbmVyO1xuICAgICAgICAgICAgaWYgKHBhZ2VOb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTm9kZSA9IHBhZ2VOb2RlO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUlkID0gcGFnZU5vZGUuZ2VuSWQoKTtcbiAgICAgICAgICAgICAgICAhcGFnZU5vZGUuaXNVbm1vdW50ZWQgJiYgcGFnZU5vZGUub25DcmVhdGUodGhpcywgbm9kZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9kZVR5cGUgPSBub2RlVHlwZTtcbiAgICAgICAgdGhpcy5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuICAgICAgICB0aGlzLmNoaWxkTm9kZXMgPSBbXTtcbiAgICB9XG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXNbMF0gfHwgbnVsbDtcbiAgICB9XG4gICAgZ2V0IGxhc3RDaGlsZCgpIHtcbiAgICAgICAgY29uc3QgeyBjaGlsZE5vZGVzIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA/IGNoaWxkTm9kZXNbbGVuZ3RoIC0gMV0gOiBudWxsO1xuICAgIH1cbiAgICBnZXQgbmV4dFNpYmxpbmcoKSB7XG4gICAgICAgIHJldHVybiBzaWJsaW5nKHRoaXMsICduJyk7XG4gICAgfVxuICAgIGdldCBub2RlVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQgbm9kZVZhbHVlKF92YWwpIHsgfVxuICAgIGdldCB0ZXh0Q29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQgfHwgJyc7XG4gICAgfVxuICAgIHNldCB0ZXh0Q29udGVudCh0ZXh0KSB7XG4gICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICBpZiAodGhpcy5wYWdlTm9kZSAmJiAhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlTm9kZS5vblRleHRDb250ZW50KHRoaXMsIHRleHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBwYXJlbnRFbGVtZW50KCkge1xuICAgICAgICBjb25zdCB7IHBhcmVudE5vZGUgfSA9IHRoaXM7XG4gICAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRV9FTEVNRU5UKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZ2V0IHByZXZpb3VzU2libGluZygpIHtcbiAgICAgICAgcmV0dXJuIHNpYmxpbmcodGhpcywgJ3AnKTtcbiAgICB9XG4gICAgYXBwZW5kQ2hpbGQobmV3Q2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBudWxsKTtcbiAgICB9XG4gICAgY2xvbmVOb2RlKGRlZXApIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKSwgdGhpcyk7XG4gICAgICAgIGNvbnN0IHsgYXR0cmlidXRlcyB9ID0gY2xvbmVkO1xuICAgICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgY2xvbmVkLmF0dHJpYnV0ZXMgPSBleHRlbmQoe30sIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgICAgICBjbG9uZWQuY2hpbGROb2RlcyA9IGNsb25lZC5jaGlsZE5vZGVzLm1hcCgoY2hpbGROb2RlKSA9PiBjaGlsZE5vZGUuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cbiAgICBpbnNlcnRCZWZvcmUobmV3Q2hpbGQsIHJlZkNoaWxkKSB7XG4gICAgICAgIC8vIOWFiOS7jueOsOWcqOeahOeItuiKgueCueenu+mZpO+8iOazqOaEj++8muS4jeiDveinpuWPkW9uUmVtb3ZlQ2hpbGTvvIzlkKbliJnkvJrnlJ/miJDlhYhyZW1vdmXor6UgaWTvvIzlho0gaW5zZXJ077yJXG4gICAgICAgIHJlbW92ZU5vZGUobmV3Q2hpbGQpO1xuICAgICAgICBuZXdDaGlsZC5wYWdlTm9kZSA9IHRoaXMucGFnZU5vZGU7XG4gICAgICAgIG5ld0NoaWxkLnBhcmVudE5vZGUgPSB0aGlzO1xuICAgICAgICBjaGVja05vZGVJZChuZXdDaGlsZCk7XG4gICAgICAgIGNvbnN0IHsgY2hpbGROb2RlcyB9ID0gdGhpcztcbiAgICAgICAgaWYgKHJlZkNoaWxkKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZihyZWZDaGlsZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkTm9kZXMuc3BsaWNlKGluZGV4LCAwLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjaGlsZE5vZGVzLnB1c2gobmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VOb2RlICYmICF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkXG4gICAgICAgICAgICA/IHRoaXMucGFnZU5vZGUub25JbnNlcnRCZWZvcmUodGhpcywgbmV3Q2hpbGQsIHJlZkNoaWxkKVxuICAgICAgICAgICAgOiBuZXdDaGlsZDtcbiAgICB9XG4gICAgcmVtb3ZlQ2hpbGQob2xkQ2hpbGQpIHtcbiAgICAgICAgY29uc3QgeyBjaGlsZE5vZGVzIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZihvbGRDaGlsZCk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYEZhaWxlZCB0byBleGVjdXRlICdyZW1vdmVDaGlsZCcgb24gJ05vZGUnOiBUaGUgbm9kZSB0byBiZSByZW1vdmVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS5gKTtcbiAgICAgICAgfVxuICAgICAgICBvbGRDaGlsZC5wYXJlbnROb2RlID0gbnVsbDtcbiAgICAgICAgY2hpbGROb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlTm9kZSAmJiAhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZFxuICAgICAgICAgICAgPyB0aGlzLnBhZ2VOb2RlLm9uUmVtb3ZlQ2hpbGQob2xkQ2hpbGQpXG4gICAgICAgICAgICA6IG9sZENoaWxkO1xuICAgIH1cbn1cbmNvbnN0IEFUVFJfQ0xBU1MgPSAnY2xhc3MnO1xuY29uc3QgQVRUUl9TVFlMRSA9ICdzdHlsZSc7XG5jb25zdCBBVFRSX0lOTkVSX0hUTUwgPSAnaW5uZXJIVE1MJztcbmNvbnN0IEFUVFJfVEVYVF9DT05URU5UID0gJ3RleHRDb250ZW50JztcbmNvbnN0IEFUVFJfVl9TSE9XID0gJy52U2hvdyc7XG5jb25zdCBBVFRSX1ZfT1dORVJfSUQgPSAnLnZPd25lcklkJztcbmNvbnN0IEFUVFJfVl9SRU5ERVJKUyA9ICcudlJlbmRlcmpzJztcbmNvbnN0IEFUVFJfQ0hBTkdFX1BSRUZJWCA9ICdjaGFuZ2U6JztcbmNsYXNzIFVuaUJhc2VOb2RlIGV4dGVuZHMgVW5pTm9kZSB7XG4gICAgY29uc3RydWN0b3Iobm9kZVR5cGUsIG5vZGVOYW1lLCBjb250YWluZXIpIHtcbiAgICAgICAgc3VwZXIobm9kZVR5cGUsIG5vZGVOYW1lLCBjb250YWluZXIpO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnN0eWxlID0gbnVsbDtcbiAgICAgICAgdGhpcy52U2hvdyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2h0bWwgPSBudWxsO1xuICAgIH1cbiAgICBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuYXR0cmlidXRlc1tBVFRSX0NMQVNTXSB8fCAnJyk7XG4gICAgfVxuICAgIHNldCBjbGFzc05hbWUodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MsIHZhbCk7XG4gICAgfVxuICAgIGdldCBpbm5lckhUTUwoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgc2V0IGlubmVySFRNTChodG1sKSB7XG4gICAgICAgIHRoaXMuX2h0bWwgPSBodG1sO1xuICAgIH1cbiAgICBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5wYWdlTm9kZSAmJiAhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCkge1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVyLnd4c0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTm9kZS5vbkFkZFd4c0V2ZW50KHRoaXMsIG5vcm1hbGl6ZUV2ZW50VHlwZSh0eXBlLCBvcHRpb25zKSwgbGlzdGVuZXIud3hzRXZlbnQsIGVuY29kZU1vZGlmaWVyKGxpc3RlbmVyLm1vZGlmaWVycyB8fCBbXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTm9kZS5vbkFkZEV2ZW50KHRoaXMsIG5vcm1hbGl6ZUV2ZW50VHlwZSh0eXBlLCBvcHRpb25zKSwgZW5jb2RlTW9kaWZpZXIobGlzdGVuZXIubW9kaWZpZXJzIHx8IFtdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICAgICAgICBzdXBlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHRoaXMucGFnZU5vZGUgJiYgIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZU5vZGUub25SZW1vdmVFdmVudCh0aGlzLCBub3JtYWxpemVFdmVudFR5cGUodHlwZSwgb3B0aW9ucykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEF0dHJpYnV0ZShxdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIGlmIChxdWFsaWZpZWROYW1lID09PSBBVFRSX1NUWUxFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3F1YWxpZmllZE5hbWVdO1xuICAgIH1cbiAgICByZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSkge1xuICAgICAgICBpZiAocXVhbGlmaWVkTmFtZSA9PSBBVFRSX1NUWUxFKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbcXVhbGlmaWVkTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFnZU5vZGUgJiYgIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZU5vZGUub25SZW1vdmVBdHRyaWJ1dGUodGhpcywgcXVhbGlmaWVkTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0QXR0cmlidXRlKHF1YWxpZmllZE5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmIChxdWFsaWZpZWROYW1lID09PSBBVFRSX1NUWUxFKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNbcXVhbGlmaWVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYWdlTm9kZSAmJiAhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlTm9kZS5vblNldEF0dHJpYnV0ZSh0aGlzLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKHsgYXR0ciwgbm9ybWFsaXplLCB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBzdHlsZSwgbGlzdGVuZXJzLCBfdGV4dCB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcmVzID0ge307XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcy5hID0gbm9ybWFsaXplID8gbm9ybWFsaXplKGF0dHJpYnV0ZXMpIDogYXR0cmlidXRlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudHMgPSBPYmplY3Qua2V5cyhsaXN0ZW5lcnMpO1xuICAgICAgICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBlID0ge307XG4gICAgICAgICAgICBldmVudHMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gbGlzdGVuZXJzW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y+v6IO95a2Y5Zyo5aSa5LiqIGhhbmRsZXIg5LiU5LiN5ZCMIG1vZGlmaWVycyDlkJfvvJ9cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB3eHNFdmVudCwgbW9kaWZpZXJzIH0gPSBoYW5kbGVyc1swXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBlbmNvZGVNb2RpZmllcihtb2RpZmllcnMgfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXd4c0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlW25hbWVdID0gbW9kaWZpZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3W25hbWVdID0gW25vcm1hbGl6ZSA/IG5vcm1hbGl6ZSh3eHNFdmVudCkgOiB3eHNFdmVudCwgbW9kaWZpZXJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMuZSA9IG5vcm1hbGl6ZSA/IG5vcm1hbGl6ZShlLCBmYWxzZSkgOiBlO1xuICAgICAgICAgICAgaWYgKHcpIHtcbiAgICAgICAgICAgICAgICByZXMudyA9IG5vcm1hbGl6ZSA/IG5vcm1hbGl6ZSh3LCBmYWxzZSkgOiB3O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzLnMgPSBub3JtYWxpemUgPyBub3JtYWxpemUoc3R5bGUpIDogc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhdHRyKSB7XG4gICAgICAgICAgICByZXMuaSA9IHRoaXMubm9kZUlkO1xuICAgICAgICAgICAgcmVzLm4gPSB0aGlzLm5vZGVOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfdGV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzLnQgPSBub3JtYWxpemUgPyBub3JtYWxpemUoX3RleHQpIDogX3RleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5cbmNsYXNzIFVuaUNvbW1lbnROb2RlIGV4dGVuZHMgVW5pTm9kZSB7XG4gICAgY29uc3RydWN0b3IodGV4dCwgY29udGFpbmVyKSB7XG4gICAgICAgIHN1cGVyKE5PREVfVFlQRV9DT01NRU5ULCAnI2NvbW1lbnQnLCBjb250YWluZXIpO1xuICAgICAgICB0aGlzLl90ZXh0ID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gdGV4dCA6ICcnO1xuICAgIH1cbiAgICB0b0pTT04ob3B0cyA9IHt9KSB7XG4gICAgICAgIC8vIOaaguaXtuS4jeS8oOmAkiB0ZXh0IOWIsCB2aWV3IOWxgu+8jOayoeWVpeaEj+S5ie+8jOiKguecgeeCueaVsOaNrumHj1xuICAgICAgICByZXR1cm4gb3B0cy5hdHRyXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBpOiB0aGlzLm5vZGVJZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIC8vIHJldHVybiBvcHRzLmF0dHJcbiAgICAgICAgLy8gICA/IHsgdDogdGhpcy5fdGV4dCBhcyBzdHJpbmcgfVxuICAgICAgICAvLyAgIDoge1xuICAgICAgICAvLyAgICAgICBpOiB0aGlzLm5vZGVJZCEsXG4gICAgICAgIC8vICAgICAgIHQ6IHRoaXMuX3RleHQgYXMgc3RyaW5nLFxuICAgICAgICAvLyAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pRWxlbWVudCBleHRlbmRzIFVuaUJhc2VOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihub2RlTmFtZSwgY29udGFpbmVyKSB7XG4gICAgICAgIHN1cGVyKE5PREVfVFlQRV9FTEVNRU5ULCBub2RlTmFtZS50b1VwcGVyQ2FzZSgpLCBjb250YWluZXIpO1xuICAgICAgICB0aGlzLnRhZ05hbWUgPSB0aGlzLm5vZGVOYW1lO1xuICAgIH1cbn1cbmNsYXNzIFVuaUlucHV0RWxlbWVudCBleHRlbmRzIFVuaUVsZW1lbnQge1xuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuICAgIH1cbiAgICBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHZhbCk7XG4gICAgfVxufVxuY2xhc3MgVW5pVGV4dEFyZWFFbGVtZW50IGV4dGVuZHMgVW5pSW5wdXRFbGVtZW50IHtcbn1cblxuY2xhc3MgVW5pVGV4dE5vZGUgZXh0ZW5kcyBVbmlCYXNlTm9kZSB7XG4gICAgY29uc3RydWN0b3IodGV4dCwgY29udGFpbmVyKSB7XG4gICAgICAgIHN1cGVyKE5PREVfVFlQRV9URVhULCAnI3RleHQnLCBjb250YWluZXIpO1xuICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICB9XG4gICAgZ2V0IG5vZGVWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQgfHwgJyc7XG4gICAgfVxuICAgIHNldCBub2RlVmFsdWUodGV4dCkge1xuICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgICAgICAgaWYgKHRoaXMucGFnZU5vZGUgJiYgIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZU5vZGUub25Ob2RlVmFsdWUodGhpcywgdGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGZvcmNlUGF0Y2hQcm9wcyA9IHtcbiAgICBBRDogWydkYXRhJ10sXG4gICAgJ0FELURSQVcnOiBbJ2RhdGEnXSxcbiAgICAnTElWRS1QTEFZRVInOiBbJ3BpY3R1cmUtaW4tcGljdHVyZS1tb2RlJ10sXG4gICAgTUFQOiBbXG4gICAgICAgICdtYXJrZXJzJyxcbiAgICAgICAgJ3BvbHlsaW5lJyxcbiAgICAgICAgJ2NpcmNsZXMnLFxuICAgICAgICAnY29udHJvbHMnLFxuICAgICAgICAnaW5jbHVkZS1wb2ludHMnLFxuICAgICAgICAncG9seWdvbnMnLFxuICAgIF0sXG4gICAgUElDS0VSOiBbJ3JhbmdlJywgJ3ZhbHVlJ10sXG4gICAgJ1BJQ0tFUi1WSUVXJzogWyd2YWx1ZSddLFxuICAgICdSSUNILVRFWFQnOiBbJ25vZGVzJ10sXG4gICAgVklERU86IFsnZGFubXUtbGlzdCcsICdoZWFkZXInXSxcbiAgICAnV0VCLVZJRVcnOiBbJ3dlYnZpZXctc3R5bGVzJ10sXG59O1xuY29uc3QgZm9yY2VQYXRjaFByb3BLZXlzID0gWydhbmltYXRpb24nXTtcblxuY29uc3QgZm9yY2VQYXRjaFByb3AgPSAoZWwsIGtleSkgPT4ge1xuICAgIGlmIChmb3JjZVBhdGNoUHJvcEtleXMuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBmb3JjZVBhdGNoUHJvcHNbZWwubm9kZU5hbWVdO1xuICAgIGlmIChrZXlzICYmIGtleXMuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IEFDVElPTl9UWVBFX1BBR0VfQ1JFQVRFID0gMTtcbmNvbnN0IEFDVElPTl9UWVBFX1BBR0VfQ1JFQVRFRCA9IDI7XG5jb25zdCBBQ1RJT05fVFlQRV9DUkVBVEUgPSAzO1xuY29uc3QgQUNUSU9OX1RZUEVfSU5TRVJUID0gNDtcbmNvbnN0IEFDVElPTl9UWVBFX1JFTU9WRSA9IDU7XG5jb25zdCBBQ1RJT05fVFlQRV9TRVRfQVRUUklCVVRFID0gNjtcbmNvbnN0IEFDVElPTl9UWVBFX1JFTU9WRV9BVFRSSUJVVEUgPSA3O1xuY29uc3QgQUNUSU9OX1RZUEVfQUREX0VWRU5UID0gODtcbmNvbnN0IEFDVElPTl9UWVBFX1JFTU9WRV9FVkVOVCA9IDk7XG5jb25zdCBBQ1RJT05fVFlQRV9TRVRfVEVYVCA9IDEwO1xuY29uc3QgQUNUSU9OX1RZUEVfQUREX1dYU19FVkVOVCA9IDEyO1xuY29uc3QgQUNUSU9OX1RZUEVfUEFHRV9TQ1JPTEwgPSAxNTtcbmNvbnN0IEFDVElPTl9UWVBFX0VWRU5UID0gMjA7XG5cbi8qKlxuICog6ZyA6KaB5omL5Yqo5Lyg5YWlIHRpbWVyLOS4u+imgeaYr+ino+WGsyBBcHAg5bmz5Y+w55qE5a6a5Yi2IHRpbWVyXG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZuLCBkZWxheSwgeyBjbGVhclRpbWVvdXQsIHNldFRpbWVvdXQgfSkge1xuICAgIGxldCB0aW1lb3V0O1xuICAgIGNvbnN0IG5ld0ZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNvbnN0IHRpbWVyRm4gPSAoKSA9PiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCh0aW1lckZuLCBkZWxheSk7XG4gICAgfTtcbiAgICBuZXdGbi5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9O1xuICAgIHJldHVybiBuZXdGbjtcbn1cblxuY2xhc3MgRXZlbnRDaGFubmVsIHtcbiAgICBjb25zdHJ1Y3RvcihpZCwgZXZlbnRzKSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IHt9O1xuICAgICAgICB0aGlzLmVtaXRDYWNoZSA9IFtdO1xuICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uKG5hbWUsIGV2ZW50c1tuYW1lXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbWl0KGV2ZW50TmFtZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBmbnMgPSB0aGlzLmxpc3RlbmVyW2V2ZW50TmFtZV07XG4gICAgICAgIGlmICghZm5zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbWl0Q2FjaGUucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmbnMuZm9yRWFjaCgob3B0KSA9PiB7XG4gICAgICAgICAgICBvcHQuZm4uYXBwbHkob3B0LmZuLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGlzdGVuZXJbZXZlbnROYW1lXSA9IGZucy5maWx0ZXIoKG9wdCkgPT4gb3B0LnR5cGUgIT09ICdvbmNlJyk7XG4gICAgfVxuICAgIG9uKGV2ZW50TmFtZSwgZm4pIHtcbiAgICAgICAgdGhpcy5fYWRkTGlzdGVuZXIoZXZlbnROYW1lLCAnb24nLCBmbik7XG4gICAgICAgIHRoaXMuX2NsZWFyQ2FjaGUoZXZlbnROYW1lKTtcbiAgICB9XG4gICAgb25jZShldmVudE5hbWUsIGZuKSB7XG4gICAgICAgIHRoaXMuX2FkZExpc3RlbmVyKGV2ZW50TmFtZSwgJ29uY2UnLCBmbik7XG4gICAgICAgIHRoaXMuX2NsZWFyQ2FjaGUoZXZlbnROYW1lKTtcbiAgICB9XG4gICAgb2ZmKGV2ZW50TmFtZSwgZm4pIHtcbiAgICAgICAgY29uc3QgZm5zID0gdGhpcy5saXN0ZW5lcltldmVudE5hbWVdO1xuICAgICAgICBpZiAoIWZucykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOykge1xuICAgICAgICAgICAgICAgIGlmIChmbnNbaV0uZm4gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGZucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJbZXZlbnROYW1lXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY2xlYXJDYWNoZShldmVudE5hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZW1pdENhY2hlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLmVtaXRDYWNoZVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBfbmFtZSA9IGV2ZW50TmFtZVxuICAgICAgICAgICAgICAgID8gY2FjaGUuZXZlbnROYW1lID09PSBldmVudE5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyBldmVudE5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgOiBjYWNoZS5ldmVudE5hbWU7XG4gICAgICAgICAgICBpZiAoIV9uYW1lKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmVtaXQuYXBwbHkodGhpcywgW19uYW1lLCAuLi5jYWNoZS5hcmdzXSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdENhY2hlLnBvcCgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0Q2FjaGUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2FkZExpc3RlbmVyKGV2ZW50TmFtZSwgdHlwZSwgZm4pIHtcbiAgICAgICAgKHRoaXMubGlzdGVuZXJbZXZlbnROYW1lXSB8fCAodGhpcy5saXN0ZW5lcltldmVudE5hbWVdID0gW10pKS5wdXNoKHtcbiAgICAgICAgICAgIGZuLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5jb25zdCBQQUdFX0hPT0tTID0gW1xuICAgIE9OX0lOSVQsXG4gICAgT05fTE9BRCxcbiAgICBPTl9TSE9XLFxuICAgIE9OX0hJREUsXG4gICAgT05fVU5MT0FELFxuICAgIE9OX0JBQ0tfUFJFU1MsXG4gICAgT05fUEFHRV9TQ1JPTEwsXG4gICAgT05fVEFCX0lURU1fVEFQLFxuICAgIE9OX1JFQUNIX0JPVFRPTSxcbiAgICBPTl9QVUxMX0RPV05fUkVGUkVTSCxcbiAgICBPTl9TSEFSRV9USU1FTElORSxcbiAgICBPTl9TSEFSRV9BUFBfTUVTU0FHRSxcbiAgICBPTl9BRERfVE9fRkFWT1JJVEVTLFxuICAgIE9OX1NBVkVfRVhJVF9TVEFURSxcbiAgICBPTl9OQVZJR0FUSU9OX0JBUl9CVVRUT05fVEFQLFxuICAgIE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VELFxuICAgIE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DSEFOR0VELFxuICAgIE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DT05GSVJNRUQsXG4gICAgT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0ZPQ1VTX0NIQU5HRUQsXG5dO1xuZnVuY3Rpb24gaXNSb290SW1tZWRpYXRlSG9vayhuYW1lKSB7XG4gICAgY29uc3QgUEFHRV9TWU5DX0hPT0tTID0gW09OX0xPQUQsIE9OX1NIT1ddO1xuICAgIHJldHVybiBQQUdFX1NZTkNfSE9PS1MuaW5kZXhPZihuYW1lKSA+IC0xO1xufVxuLy8gaXNSb290SW1tZWRpYXRlSG9va1ggZGVwcmVjYXRlZFxuZnVuY3Rpb24gaXNSb290SG9vayhuYW1lKSB7XG4gICAgcmV0dXJuIFBBR0VfSE9PS1MuaW5kZXhPZihuYW1lKSA+IC0xO1xufVxuY29uc3QgVW5pTGlmZWN5Y2xlSG9va3MgPSBbXG4gICAgT05fU0hPVyxcbiAgICBPTl9ISURFLFxuICAgIE9OX0xBVU5DSCxcbiAgICBPTl9FUlJPUixcbiAgICBPTl9USEVNRV9DSEFOR0UsXG4gICAgT05fUEFHRV9OT1RfRk9VTkQsXG4gICAgT05fVU5IQU5ETEVfUkVKRUNUSU9OLFxuICAgIE9OX0VYSVQsXG4gICAgT05fSU5JVCxcbiAgICBPTl9MT0FELFxuICAgIE9OX1JFQURZLFxuICAgIE9OX1VOTE9BRCxcbiAgICBPTl9SRVNJWkUsXG4gICAgT05fQkFDS19QUkVTUyxcbiAgICBPTl9QQUdFX1NDUk9MTCxcbiAgICBPTl9UQUJfSVRFTV9UQVAsXG4gICAgT05fUkVBQ0hfQk9UVE9NLFxuICAgIE9OX1BVTExfRE9XTl9SRUZSRVNILFxuICAgIE9OX1NIQVJFX1RJTUVMSU5FLFxuICAgIE9OX0FERF9UT19GQVZPUklURVMsXG4gICAgT05fU0hBUkVfQVBQX01FU1NBR0UsXG4gICAgT05fU0FWRV9FWElUX1NUQVRFLFxuICAgIE9OX05BVklHQVRJT05fQkFSX0JVVFRPTl9UQVAsXG4gICAgT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NMSUNLRUQsXG4gICAgT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NIQU5HRUQsXG4gICAgT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NPTkZJUk1FRCxcbiAgICBPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfRk9DVVNfQ0hBTkdFRCxcbl07XG5jb25zdCBNSU5JX1BST0dSQU1fUEFHRV9SVU5USU1FX0hPT0tTID0gLyojX19QVVJFX18qLyAoKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIG9uUGFnZVNjcm9sbDogMSxcbiAgICAgICAgb25TaGFyZUFwcE1lc3NhZ2U6IDEgPDwgMSxcbiAgICAgICAgb25TaGFyZVRpbWVsaW5lOiAxIDw8IDIsXG4gICAgfTtcbn0pKCk7XG5mdW5jdGlvbiBpc1VuaUxpZmVjeWNsZUhvb2sobmFtZSwgdmFsdWUsIGNoZWNrVHlwZSA9IHRydWUpIHtcbiAgICAvLyDmo4Dmn6XnsbvlnotcbiAgICBpZiAoY2hlY2tUeXBlICYmICFpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChVbmlMaWZlY3ljbGVIb29rcy5pbmRleE9mKG5hbWUpID4gLTEpIHtcbiAgICAgICAgLy8g5bey6aKE5a6a5LmJXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChuYW1lLmluZGV4T2YoJ29uJykgPT09IDApIHtcbiAgICAgICAgLy8g5LulIG9uIOW8gOWktFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5sZXQgdnVlQXBwO1xuY29uc3QgY3JlYXRlVnVlQXBwSG9va3MgPSBbXTtcbi8qKlxuICog5o+Q5L6bIGNyZWF0ZUFwcCDnmoTlm57osIPkuovku7bvvIzmlrnkvr/kuInmlrnmj5Lku7bmjqXmlLYgQXBwIOWvueixoe+8jOWkhOeQhuaMgumdoOWFqOWxgCBtaXhpbiDkuYvnsbvnmoTpgLvovpFcbiAqL1xuZnVuY3Rpb24gb25DcmVhdGVWdWVBcHAoaG9vaykge1xuICAgIC8vIFRPRE8g5q+P5LiqIG52dWUg6aG16Z2i6YO95Lya6Kem5Y+RXG4gICAgaWYgKHZ1ZUFwcCkge1xuICAgICAgICByZXR1cm4gaG9vayh2dWVBcHApO1xuICAgIH1cbiAgICBjcmVhdGVWdWVBcHBIb29rcy5wdXNoKGhvb2spO1xufVxuZnVuY3Rpb24gaW52b2tlQ3JlYXRlVnVlQXBwSG9vayhhcHApIHtcbiAgICB2dWVBcHAgPSBhcHA7XG4gICAgY3JlYXRlVnVlQXBwSG9va3MuZm9yRWFjaCgoaG9vaykgPT4gaG9vayhhcHApKTtcbn1cbmNvbnN0IGludm9rZUNyZWF0ZUVycm9ySGFuZGxlciA9IG9uY2UoKGFwcCwgY3JlYXRlRXJyb3JIYW5kbGVyKSA9PiB7XG4gICAgaWYgKGlzRnVuY3Rpb24oYXBwLl9jb21wb25lbnQub25FcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9ySGFuZGxlcihhcHApO1xuICAgIH1cbn0pO1xuXG5jb25zdCBFID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIEtlZXAgdGhpcyBlbXB0eSBzbyBpdCdzIGVhc2llciB0byBpbmhlcml0IGZyb21cbiAgICAvLyAodmlhIGh0dHBzOi8vZ2l0aHViLmNvbS9saXBzbWFjayBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvaXNzdWVzLzMpXG59O1xuRS5wcm90b3R5cGUgPSB7XG4gICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY3R4KSB7XG4gICAgICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG4gICAgICAgIChlW25hbWVdIHx8IChlW25hbWVdID0gW10pKS5wdXNoKHtcbiAgICAgICAgICAgIGZuOiBjYWxsYmFjayxcbiAgICAgICAgICAgIGN0eDogY3R4LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBvbmNlOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGN0eCkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgc2VsZi5vZmYobmFtZSwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkoY3R4LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGxpc3RlbmVyLl8gPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgbGlzdGVuZXIsIGN0eCk7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgZGF0YSA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGV2dEFyciA9ICgodGhpcy5lIHx8ICh0aGlzLmUgPSB7fSkpW25hbWVdIHx8IFtdKS5zbGljZSgpO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHZhciBsZW4gPSBldnRBcnIubGVuZ3RoO1xuICAgICAgICBmb3IgKGk7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgZXZ0QXJyW2ldLmZuLmFwcGx5KGV2dEFycltpXS5jdHgsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgb2ZmOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGUgPSB0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KTtcbiAgICAgICAgdmFyIGV2dHMgPSBlW25hbWVdO1xuICAgICAgICB2YXIgbGl2ZUV2ZW50cyA9IFtdO1xuICAgICAgICBpZiAoZXZ0cyAmJiBjYWxsYmFjaykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGV2dHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZ0c1tpXS5mbiA9PT0gY2FsbGJhY2sgfHwgZXZ0c1tpXS5mbi5fID09PSBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBldnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGl2ZUV2ZW50cyA9IGV2dHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtb3ZlIGV2ZW50IGZyb20gcXVldWUgdG8gcHJldmVudCBtZW1vcnkgbGVha1xuICAgICAgICAvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2xhemRcbiAgICAgICAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vc2NvdHRjb3JnYW4vdGlueS1lbWl0dGVyL2NvbW1pdC9jNmViZmFhOWJjOTczYjMzZDExMGE4NGEzMDc3NDJiN2NmOTRjOTUzI2NvbW1pdGNvbW1lbnQtNTAyNDkxMFxuICAgICAgICBsaXZlRXZlbnRzLmxlbmd0aCA/IChlW25hbWVdID0gbGl2ZUV2ZW50cykgOiBkZWxldGUgZVtuYW1lXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbn07XG52YXIgRSQxID0gRTtcblxuY29uc3QgYm9yZGVyU3R5bGVzID0ge1xuICAgIGJsYWNrOiAncmdiYSgwLDAsMCwwLjQpJyxcbiAgICB3aGl0ZTogJ3JnYmEoMjU1LDI1NSwyNTUsMC40KScsXG59O1xuZnVuY3Rpb24gbm9ybWFsaXplVGFiQmFyU3R5bGVzKGJvcmRlclN0eWxlKSB7XG4gICAgaWYgKGJvcmRlclN0eWxlICYmIGJvcmRlclN0eWxlIGluIGJvcmRlclN0eWxlcykge1xuICAgICAgICByZXR1cm4gYm9yZGVyU3R5bGVzW2JvcmRlclN0eWxlXTtcbiAgICB9XG4gICAgcmV0dXJuIGJvcmRlclN0eWxlO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplVGl0bGVDb2xvcih0aXRsZUNvbG9yKSB7XG4gICAgcmV0dXJuIHRpdGxlQ29sb3IgPT09ICdibGFjaycgPyAnIzAwMDAwMCcgOiAnI2ZmZmZmZic7XG59XG5mdW5jdGlvbiByZXNvbHZlU3RyaW5nU3R5bGVJdGVtKG1vZGVTdHlsZSwgc3R5bGVJdGVtLCBrZXkpIHtcbiAgICBpZiAoaXNTdHJpbmcoc3R5bGVJdGVtKSAmJiBzdHlsZUl0ZW0uc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgIGNvbnN0IF9rZXkgPSBzdHlsZUl0ZW0ucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgICAgbGV0IF9zdHlsZUl0ZW0gPSBtb2RlU3R5bGVbX2tleV0gfHwgc3R5bGVJdGVtO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAndGl0bGVDb2xvcic6XG4gICAgICAgICAgICAgICAgX3N0eWxlSXRlbSA9IG5vcm1hbGl6ZVRpdGxlQ29sb3IoX3N0eWxlSXRlbSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3JkZXJTdHlsZSc6XG4gICAgICAgICAgICAgICAgX3N0eWxlSXRlbSA9IG5vcm1hbGl6ZVRhYkJhclN0eWxlcyhfc3R5bGVJdGVtKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3N0eWxlSXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlSXRlbTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlcyhwYWdlU3R5bGUsIHRoZW1lQ29uZmlnID0ge30sIG1vZGUgPSAnbGlnaHQnKSB7XG4gICAgY29uc3QgbW9kZVN0eWxlID0gdGhlbWVDb25maWdbbW9kZV07XG4gICAgY29uc3Qgc3R5bGVzID0ge307XG4gICAgaWYgKHR5cGVvZiBtb2RlU3R5bGUgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm4gcGFnZVN0eWxlO1xuICAgIE9iamVjdC5rZXlzKHBhZ2VTdHlsZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlSXRlbSA9IHBhZ2VTdHlsZVtrZXldOyAvLyBPYmplY3QgQXJyYXkgU3RyaW5nXG4gICAgICAgIGNvbnN0IHBhcnNlU3R5bGVJdGVtID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3Qoc3R5bGVJdGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplU3R5bGVzKHN0eWxlSXRlbSwgdGhlbWVDb25maWcsIG1vZGUpO1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkoc3R5bGVJdGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVJdGVtLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVN0eWxlcyhpdGVtLCB0aGVtZUNvbmZpZywgbW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlU3RyaW5nU3R5bGVJdGVtKG1vZGVTdHlsZSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVN0cmluZ1N0eWxlSXRlbShtb2RlU3R5bGUsIHN0eWxlSXRlbSwga2V5KTtcbiAgICAgICAgfTtcbiAgICAgICAgc3R5bGVzW2tleV0gPSBwYXJzZVN0eWxlSXRlbSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGdldEVudkxvY2FsZSgpIHtcbiAgICBjb25zdCB7IGVudiB9ID0gcHJvY2VzcztcbiAgICBjb25zdCBsYW5nID0gZW52LkxDX0FMTCB8fCBlbnYuTENfTUVTU0FHRVMgfHwgZW52LkxBTkcgfHwgZW52LkxBTkdVQUdFO1xuICAgIHJldHVybiAobGFuZyAmJiBsYW5nLnJlcGxhY2UoL1suOl0uKi8sICcnKSkgfHwgJ2VuJztcbn1cblxuZXhwb3J0IHsgQUNUSU9OX1RZUEVfQUREX0VWRU5ULCBBQ1RJT05fVFlQRV9BRERfV1hTX0VWRU5ULCBBQ1RJT05fVFlQRV9DUkVBVEUsIEFDVElPTl9UWVBFX0VWRU5ULCBBQ1RJT05fVFlQRV9JTlNFUlQsIEFDVElPTl9UWVBFX1BBR0VfQ1JFQVRFLCBBQ1RJT05fVFlQRV9QQUdFX0NSRUFURUQsIEFDVElPTl9UWVBFX1BBR0VfU0NST0xMLCBBQ1RJT05fVFlQRV9SRU1PVkUsIEFDVElPTl9UWVBFX1JFTU9WRV9BVFRSSUJVVEUsIEFDVElPTl9UWVBFX1JFTU9WRV9FVkVOVCwgQUNUSU9OX1RZUEVfU0VUX0FUVFJJQlVURSwgQUNUSU9OX1RZUEVfU0VUX1RFWFQsIEFUVFJfQ0hBTkdFX1BSRUZJWCwgQVRUUl9DTEFTUywgQVRUUl9JTk5FUl9IVE1MLCBBVFRSX1NUWUxFLCBBVFRSX1RFWFRfQ09OVEVOVCwgQVRUUl9WX09XTkVSX0lELCBBVFRSX1ZfUkVOREVSSlMsIEFUVFJfVl9TSE9XLCBCQUNLR1JPVU5EX0NPTE9SLCBCVUlMVF9JTl9UQUdTLCBCVUlMVF9JTl9UQUdfTkFNRVMsIENPTVBPTkVOVF9OQU1FX1BSRUZJWCwgQ09NUE9ORU5UX1BSRUZJWCwgQ09NUE9ORU5UX1NFTEVDVE9SX1BSRUZJWCwgREFUQV9SRSwgRSQxIGFzIEVtaXR0ZXIsIEV2ZW50Q2hhbm5lbCwgRXZlbnRNb2RpZmllckZsYWdzLCBJMThOX0pTT05fREVMSU1JVEVSUywgSlNPTl9QUk9UT0NPTCwgTElORUZFRUQsIE1JTklfUFJPR1JBTV9QQUdFX1JVTlRJTUVfSE9PS1MsIE5BVkJBUl9IRUlHSFQsIE5PREVfVFlQRV9DT01NRU5ULCBOT0RFX1RZUEVfRUxFTUVOVCwgTk9ERV9UWVBFX1BBR0UsIE5PREVfVFlQRV9URVhULCBOVlVFX0JVSUxUX0lOX1RBR1MsIE5WVUVfVV9CVUlMVF9JTl9UQUdTLCBPRkZfVEhFTUVfQ0hBTkdFLCBPTl9BRERfVE9fRkFWT1JJVEVTLCBPTl9BUFBfRU5URVJfQkFDS0dST1VORCwgT05fQVBQX0VOVEVSX0ZPUkVHUk9VTkQsIE9OX0JBQ0tfUFJFU1MsIE9OX0VSUk9SLCBPTl9FWElULCBPTl9ISURFLCBPTl9JTklULCBPTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLCBPTl9MQVVOQ0gsIE9OX0xPQUQsIE9OX05BVklHQVRJT05fQkFSX0JVVFRPTl9UQVAsIE9OX05BVklHQVRJT05fQkFSX0NIQU5HRSwgT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NIQU5HRUQsIE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VELCBPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ09ORklSTUVELCBPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfRk9DVVNfQ0hBTkdFRCwgT05fUEFHRV9OT1RfRk9VTkQsIE9OX1BBR0VfU0NST0xMLCBPTl9QVUxMX0RPV05fUkVGUkVTSCwgT05fUkVBQ0hfQk9UVE9NLCBPTl9SRUFDSF9CT1RUT01fRElTVEFOQ0UsIE9OX1JFQURZLCBPTl9SRVNJWkUsIE9OX1NBVkVfRVhJVF9TVEFURSwgT05fU0hBUkVfQVBQX01FU1NBR0UsIE9OX1NIQVJFX1RJTUVMSU5FLCBPTl9TSE9XLCBPTl9UQUJfSVRFTV9UQVAsIE9OX1RIRU1FX0NIQU5HRSwgT05fVU5IQU5ETEVfUkVKRUNUSU9OLCBPTl9VTkxPQUQsIE9OX1dFQl9JTlZPS0VfQVBQX1NFUlZJQ0UsIE9OX1dYU19JTlZPS0VfQ0FMTF9NRVRIT0QsIFBMVVNfUkUsIFBSSU1BUllfQ09MT1IsIFJFTkRFUkpTX01PRFVMRVMsIFJFU1BPTlNJVkVfTUlOX1dJRFRILCBTQ0hFTUVfUkUsIFNFTEVDVEVEX0NPTE9SLCBTTE9UX0RFRkFVTFRfTkFNRSwgVEFCQkFSX0hFSUdIVCwgVEFHUywgVU5JX1NTUiwgVU5JX1NTUl9EQVRBLCBVTklfU1NSX0dMT0JBTF9EQVRBLCBVTklfU1NSX1NUT1JFLCBVTklfU1NSX1RJVExFLCBVTklfU1RPUkFHRV9MT0NBTEUsIFVOSV9VSV9DT05GTElDVF9UQUdTLCBVVlVFX0JVSUxUX0lOX1RBR1MsIFVWVUVfSU9TX0JVSUxUX0lOX1RBR1MsIFVWVUVfV0VCX0JVSUxUX0lOX1RBR1MsIFVuaUJhc2VOb2RlLCBVbmlDb21tZW50Tm9kZSwgVW5pRWxlbWVudCwgVW5pRXZlbnQsIFVuaUlucHV0RWxlbWVudCwgVW5pTGlmZWN5Y2xlSG9va3MsIFVuaU5vZGUsIFVuaVRleHRBcmVhRWxlbWVudCwgVW5pVGV4dE5vZGUsIFdFQl9JTlZPS0VfQVBQU0VSVklDRSwgV1hTX01PRFVMRVMsIFdYU19QUk9UT0NPTCwgYWRkRm9udCwgYWRkTGVhZGluZ1NsYXNoLCBib3JkZXJTdHlsZXMsIGNhY2hlLCBjYWNoZVN0cmluZ0Z1bmN0aW9uLCBjYWxsT3B0aW9ucywgY3JlYXRlSXNDdXN0b21FbGVtZW50LCBjcmVhdGVScHgyVW5pdCwgY3JlYXRlVW5pRXZlbnQsIGN1c3RvbWl6ZUV2ZW50LCBkZWJvdW5jZSwgZGVjb2RlLCBkZWNvZGVkUXVlcnksIGRlZmF1bHRNaW5pUHJvZ3JhbVJweDJVbml0LCBkZWZhdWx0TlZ1ZVJweDJVbml0LCBkZWZhdWx0UnB4MlVuaXQsIGR5bmFtaWNTbG90TmFtZSwgZm9yY2VQYXRjaFByb3AsIGZvcm1hdERhdGVUaW1lLCBmb3JtYXRMb2csIGdldEN1c3RvbURhdGFzZXQsIGdldEVudkxvY2FsZSwgZ2V0TGVuLCBnZXRWYWx1ZUJ5RGF0YVBhdGgsIGluaXRDdXN0b21EYXRhc2V0T25jZSwgaW52b2tlQXJyYXlGbnMsIGludm9rZUNyZWF0ZUVycm9ySGFuZGxlciwgaW52b2tlQ3JlYXRlVnVlQXBwSG9vaywgaXNBcHBJT1NVVnVlTmF0aXZlVGFnLCBpc0FwcE5WdWVOYXRpdmVUYWcsIGlzQXBwTmF0aXZlVGFnLCBpc0FwcFVWdWVOYXRpdmVUYWcsIGlzQnVpbHRJbkNvbXBvbmVudCwgaXNDb21wb25lbnRJbnRlcm5hbEluc3RhbmNlLCBpc0NvbXBvbmVudFRhZywgaXNINUN1c3RvbUVsZW1lbnQsIGlzSDVOYXRpdmVUYWcsIGlzTWluaVByb2dyYW1OYXRpdmVUYWcsIGlzUm9vdEhvb2ssIGlzUm9vdEltbWVkaWF0ZUhvb2ssIGlzVW5pTGlmZWN5Y2xlSG9vaywgaXNVbmlYRWxlbWVudCwgbm9ybWFsaXplQ2xhc3MsIG5vcm1hbGl6ZURhdGFzZXQsIG5vcm1hbGl6ZUV2ZW50VHlwZSwgbm9ybWFsaXplUHJvcHMsIG5vcm1hbGl6ZVN0eWxlLCBub3JtYWxpemVTdHlsZXMsIG5vcm1hbGl6ZVRhYkJhclN0eWxlcywgbm9ybWFsaXplVGFyZ2V0LCBub3JtYWxpemVUaXRsZUNvbG9yLCBvbkNyZWF0ZVZ1ZUFwcCwgb25jZSwgcGFyc2VFdmVudE5hbWUsIHBhcnNlTlZ1ZURhdGFzZXQsIHBhcnNlUXVlcnksIHBhcnNlVXJsLCBwYXNzaXZlLCBwbHVzUmVhZHksIHJlbW92ZUxlYWRpbmdTbGFzaCwgcmVzb2x2ZUNvbXBvbmVudEluc3RhbmNlLCByZXNvbHZlT3duZXJFbCwgcmVzb2x2ZU93bmVyVm0sIHNhbml0aXNlLCBzY3JvbGxUbywgc29ydE9iamVjdCwgc3RyaW5naWZ5UXVlcnksIHVwZGF0ZUVsZW1lbnRTdHlsZSB9O1xuIiwiaW1wb3J0IHsgc2hhbGxvd1JlZiwgcmVmLCBnZXRDdXJyZW50SW5zdGFuY2UsIGlzSW5TU1JDb21wb25lbnRTZXR1cCwgaW5qZWN0SG9vayB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBoYXNPd24gfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5leHBvcnQgeyBjYXBpdGFsaXplLCBleHRlbmQsIGhhc093biwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0B2dWUvc2hhcmVkJztcbmltcG9ydCB7IHNhbml0aXNlLCBVTklfU1NSX0RBVEEsIFVOSV9TU1JfR0xPQkFMX0RBVEEsIFVOSV9TU1IsIE9OX1NIT1csIE9OX0hJREUsIE9OX0xBVU5DSCwgT05fRVJST1IsIE9OX1RIRU1FX0NIQU5HRSwgT05fUEFHRV9OT1RfRk9VTkQsIE9OX1VOSEFORExFX1JFSkVDVElPTiwgT05fRVhJVCwgT05fSU5JVCwgT05fTE9BRCwgT05fUkVBRFksIE9OX1VOTE9BRCwgT05fUkVTSVpFLCBPTl9CQUNLX1BSRVNTLCBPTl9QQUdFX1NDUk9MTCwgT05fVEFCX0lURU1fVEFQLCBPTl9SRUFDSF9CT1RUT00sIE9OX1BVTExfRE9XTl9SRUZSRVNILCBPTl9TQVZFX0VYSVRfU1RBVEUsIE9OX1NIQVJFX1RJTUVMSU5FLCBPTl9BRERfVE9fRkFWT1JJVEVTLCBPTl9TSEFSRV9BUFBfTUVTU0FHRSwgT05fTkFWSUdBVElPTl9CQVJfQlVUVE9OX1RBUCwgT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NIQU5HRUQsIE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VELCBPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ09ORklSTUVELCBPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfRk9DVVNfQ0hBTkdFRCB9IGZyb20gJ0BkY2xvdWRpby91bmktc2hhcmVkJztcblxuZnVuY3Rpb24gZ2V0U1NSRGF0YVR5cGUoKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRJbnN0YW5jZSgpID8gVU5JX1NTUl9EQVRBIDogVU5JX1NTUl9HTE9CQUxfREFUQTtcbn1cbmZ1bmN0aW9uIGFzc2VydEtleShrZXksIHNoYWxsb3cgPSBmYWxzZSkge1xuICAgIGlmICgha2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzaGFsbG93ID8gJ3NoYWxsb3dTc3JSZWYnIDogJ3NzclJlZid9OiBZb3UgbXVzdCBwcm92aWRlIGEga2V5LmApO1xuICAgIH1cbn1cbmNvbnN0IHNzckNsaWVudFJlZiA9ICh2YWx1ZSwga2V5LCBzaGFsbG93ID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCB2YWxSZWYgPSBzaGFsbG93ID8gc2hhbGxvd1JlZih2YWx1ZSkgOiByZWYodmFsdWUpO1xuICAgIC8vIOmdniBoNSDlubPlj7BcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbFJlZjtcbiAgICB9XG4gICAgY29uc3QgX191bmlTU1IgPSB3aW5kb3dbVU5JX1NTUl07XG4gICAgaWYgKCFfX3VuaVNTUikge1xuICAgICAgICByZXR1cm4gdmFsUmVmO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gZ2V0U1NSRGF0YVR5cGUoKTtcbiAgICBhc3NlcnRLZXkoa2V5LCBzaGFsbG93KTtcbiAgICBpZiAoaGFzT3duKF9fdW5pU1NSW3R5cGVdLCBrZXkpKSB7XG4gICAgICAgIHZhbFJlZi52YWx1ZSA9IF9fdW5pU1NSW3R5cGVdW2tleV07XG4gICAgICAgIGlmICh0eXBlID09PSBVTklfU1NSX0RBVEEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBfX3VuaVNTUlt0eXBlXVtrZXldOyAvLyBUT0RPIOmdnuWFqOWxgOaVsOaNruS7heS9v+eUqOS4gOasoe+8n+WQpuWImeS4i+asoei/mOS8muWGjeasoeS9v+eUqOivpeaVsOaNrlxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxSZWY7XG59O1xuY29uc3QgZ2xvYmFsRGF0YSA9IHt9O1xuY29uc3Qgc3NyUmVmID0gKHZhbHVlLCBrZXkpID0+IHtcbiAgICByZXR1cm4gc3NyQ2xpZW50UmVmKHZhbHVlLCBrZXkpO1xufTtcbmNvbnN0IHNoYWxsb3dTc3JSZWYgPSAodmFsdWUsIGtleSkgPT4ge1xuICAgIHJldHVybiBzc3JDbGllbnRSZWYodmFsdWUsIGtleSwgdHJ1ZSk7XG59O1xuZnVuY3Rpb24gZ2V0U3NyR2xvYmFsRGF0YSgpIHtcbiAgICByZXR1cm4gc2FuaXRpc2UoZ2xvYmFsRGF0YSk7XG59XG5cbi8qKlxuICogdW5pIOWvueixoeaYr+i3qOWunuS+i+eahO+8jOiAjOatpOWkhOWIl+eahCBBUEkg5Z2H5piv6ZyA6KaB6Lef5b2T5YmN5a6e5L6L5YWz6IGU55qE77yM5q+U5aaCIHJlcXVpcmVOYXRpdmVQbHVnaW4g6I635Y+WIGRvbSDml7bvvIzkvp3otZblvZPliY0gd2VleCDlrp7kvotcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudFN1Yk5WdWUoKSB7XG4gICAgcmV0dXJuIHVuaS5nZXRTdWJOVnVlQnlJZChwbHVzLndlYnZpZXcuY3VycmVudFdlYnZpZXcoKS5pZCk7XG59XG5mdW5jdGlvbiByZXF1aXJlTmF0aXZlUGx1Z2luKG5hbWUpIHtcbiAgICByZXR1cm4gd2VleC5yZXF1aXJlTW9kdWxlKG5hbWUpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRBcHBMb2codHlwZSwgZmlsZW5hbWUsIC4uLmFyZ3MpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaWYgKHVuaS5fX2xvZ19fKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgdW5pLl9fbG9nX18odHlwZSwgZmlsZW5hbWUsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZVt0eXBlXS5hcHBseShjb25zb2xlLCBbLi4uYXJncywgZmlsZW5hbWVdKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmb3JtYXRINUxvZyh0eXBlLCBmaWxlbmFtZSwgLi4uYXJncykge1xuICAgIGNvbnNvbGVbdHlwZV0uYXBwbHkoY29uc29sZSwgWy4uLmFyZ3MsIGZpbGVuYW1lXSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVFYXN5Y29tKGNvbXBvbmVudCwgZWFzeWNvbSkge1xuICAgIHJldHVybiB0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJyA/IGVhc3ljb20gOiBjb21wb25lbnQ7XG59XG5cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiQGRjbG91ZGlvL3R5cGVzXCIgLz5cbmNvbnN0IGNyZWF0ZUhvb2sgPSAobGlmZWN5Y2xlKSA9PiAoaG9vaywgdGFyZ2V0ID0gZ2V0Q3VycmVudEluc3RhbmNlKCkpID0+IHtcbiAgICAvLyBwb3N0LWNyZWF0ZSBsaWZlY3ljbGUgcmVnaXN0cmF0aW9ucyBhcmUgbm9vcHMgZHVyaW5nIFNTUlxuICAgICFpc0luU1NSQ29tcG9uZW50U2V0dXAgJiYgaW5qZWN0SG9vayhsaWZlY3ljbGUsIGhvb2ssIHRhcmdldCk7XG59O1xuY29uc3Qgb25TaG93ID0gLyojX19QVVJFX18qLyBjcmVhdGVIb29rKE9OX1NIT1cpO1xuY29uc3Qgb25IaWRlID0gLyojX19QVVJFX18qLyBjcmVhdGVIb29rKE9OX0hJREUpO1xuY29uc3Qgb25MYXVuY2ggPSBcbi8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9MQVVOQ0gpO1xuY29uc3Qgb25FcnJvciA9IFxuLyojX19QVVJFX18qLyBjcmVhdGVIb29rKE9OX0VSUk9SKTtcbmNvbnN0IG9uVGhlbWVDaGFuZ2UgPSBcbi8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9USEVNRV9DSEFOR0UpO1xuY29uc3Qgb25QYWdlTm90Rm91bmQgPSBcbi8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9QQUdFX05PVF9GT1VORCk7XG5jb25zdCBvblVuaGFuZGxlZFJlamVjdGlvbiA9IC8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9VTkhBTkRMRV9SRUpFQ1RJT04pO1xuY29uc3Qgb25FeGl0ID0gLyojX19QVVJFX18qLyBjcmVhdGVIb29rKE9OX0VYSVQpO1xuY29uc3Qgb25Jbml0ID0gXG4vKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fSU5JVCk7XG4vLyDlsI/nqIvluo/lpoLmnpzmg7PlnKggc2V0dXAg55qEIHByb3BzIOS8oOmAkumhtemdouWPguaVsO+8jOmcgOimgeWumuS5iSBwcm9wc++8jOaVheWQjOaXtuaatOmcsiBvbkxvYWQg5ZCnXG5jb25zdCBvbkxvYWQgPSBcbi8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9MT0FEKTtcbmNvbnN0IG9uUmVhZHkgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fUkVBRFkpO1xuY29uc3Qgb25VbmxvYWQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fVU5MT0FEKTtcbmNvbnN0IG9uUmVzaXplID0gXG4vKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fUkVTSVpFKTtcbmNvbnN0IG9uQmFja1ByZXNzID0gXG4vKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fQkFDS19QUkVTUyk7XG5jb25zdCBvblBhZ2VTY3JvbGwgPSBcbi8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9QQUdFX1NDUk9MTCk7XG5jb25zdCBvblRhYkl0ZW1UYXAgPSBcbi8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9UQUJfSVRFTV9UQVApO1xuY29uc3Qgb25SZWFjaEJvdHRvbSA9IC8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9SRUFDSF9CT1RUT00pO1xuY29uc3Qgb25QdWxsRG93blJlZnJlc2ggPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fUFVMTF9ET1dOX1JFRlJFU0gpO1xuY29uc3Qgb25TYXZlRXhpdFN0YXRlID0gXG4vKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fU0FWRV9FWElUX1NUQVRFKTtcbmNvbnN0IG9uU2hhcmVUaW1lbGluZSA9IFxuLyojX19QVVJFX18qLyBjcmVhdGVIb29rKE9OX1NIQVJFX1RJTUVMSU5FKTtcbmNvbnN0IG9uQWRkVG9GYXZvcml0ZXMgPSBcbi8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9BRERfVE9fRkFWT1JJVEVTKTtcbmNvbnN0IG9uU2hhcmVBcHBNZXNzYWdlID0gXG4vKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fU0hBUkVfQVBQX01FU1NBR0UpO1xuY29uc3Qgb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwID0gLyojX19QVVJFX18qLyBjcmVhdGVIb29rKE9OX05BVklHQVRJT05fQkFSX0JVVFRPTl9UQVApO1xuY29uc3Qgb25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRDaGFuZ2VkID0gLyojX19QVVJFX18qLyBjcmVhdGVIb29rKE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DSEFOR0VEKTtcbmNvbnN0IG9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q2xpY2tlZCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ0xJQ0tFRCk7XG5jb25zdCBvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENvbmZpcm1lZCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlSG9vayhPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ09ORklSTUVEKTtcbmNvbnN0IG9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Rm9jdXNDaGFuZ2VkID0gXG4vKiNfX1BVUkVfXyovIGNyZWF0ZUhvb2soT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0ZPQ1VTX0NIQU5HRUQpO1xuLy8gZm9yIHVuaS1hcHAteCB3ZWJcbmNvbnN0IG9uUGFnZUhpZGUgPSBvbkhpZGU7XG5jb25zdCBvblBhZ2VTaG93ID0gb25TaG93O1xuXG5mdW5jdGlvbiByZW5kZXJDb21wb25lbnRTbG90KHNsb3RzLCBuYW1lLCBwcm9wcyA9IG51bGwpIHtcbiAgICBpZiAoc2xvdHNbbmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIHNsb3RzW25hbWVdKHByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB7IGZvcm1hdEFwcExvZywgZm9ybWF0SDVMb2csIGdldEN1cnJlbnRTdWJOVnVlLCBnZXRTc3JHbG9iYWxEYXRhLCBvbkFkZFRvRmF2b3JpdGVzLCBvbkJhY2tQcmVzcywgb25FcnJvciwgb25FeGl0LCBvbkhpZGUsIG9uSW5pdCwgb25MYXVuY2gsIG9uTG9hZCwgb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwLCBvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENoYW5nZWQsIG9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q2xpY2tlZCwgb25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRDb25maXJtZWQsIG9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Rm9jdXNDaGFuZ2VkLCBvblBhZ2VIaWRlLCBvblBhZ2VOb3RGb3VuZCwgb25QYWdlU2Nyb2xsLCBvblBhZ2VTaG93LCBvblB1bGxEb3duUmVmcmVzaCwgb25SZWFjaEJvdHRvbSwgb25SZWFkeSwgb25SZXNpemUsIG9uU2F2ZUV4aXRTdGF0ZSwgb25TaGFyZUFwcE1lc3NhZ2UsIG9uU2hhcmVUaW1lbGluZSwgb25TaG93LCBvblRhYkl0ZW1UYXAsIG9uVGhlbWVDaGFuZ2UsIG9uVW5oYW5kbGVkUmVqZWN0aW9uLCBvblVubG9hZCwgcmVuZGVyQ29tcG9uZW50U2xvdCwgcmVxdWlyZU5hdGl2ZVBsdWdpbiwgcmVzb2x2ZUVhc3ljb20sIHNoYWxsb3dTc3JSZWYsIHNzclJlZiB9O1xuIiwiaW1wb3J0ICogYXMgVnVlIGZyb20gJ3Z1ZSdcblxudmFyIGlzVnVlMiA9IGZhbHNlXG52YXIgaXNWdWUzID0gdHJ1ZVxudmFyIFZ1ZTIgPSB1bmRlZmluZWRcblxuZnVuY3Rpb24gaW5zdGFsbCgpIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQodGFyZ2V0LCBrZXksIHZhbCkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSlcbiAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSwgdmFsKVxuICAgIHJldHVybiB2YWxcbiAgfVxuICB0YXJnZXRba2V5XSA9IHZhbFxuICByZXR1cm4gdmFsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWwodGFyZ2V0LCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKVxuICAgIHJldHVyblxuICB9XG4gIGRlbGV0ZSB0YXJnZXRba2V5XVxufVxuXG5leHBvcnQgKiBmcm9tICd2dWUnXG5leHBvcnQge1xuICBWdWUsXG4gIFZ1ZTIsXG4gIGlzVnVlMixcbiAgaXNWdWUzLFxuICBpbnN0YWxsLFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGdldERldnRvb2xzR2xvYmFsSG9vaygpIHtcbiAgICByZXR1cm4gZ2V0VGFyZ2V0KCkuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgID8gd2luZG93XG4gICAgICAgIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICA6IHt9O1xufVxuZXhwb3J0IGNvbnN0IGlzUHJveHlBdmFpbGFibGUgPSB0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbic7XG4iLCJleHBvcnQgY29uc3QgSE9PS19TRVRVUCA9ICdkZXZ0b29scy1wbHVnaW46c2V0dXAnO1xuZXhwb3J0IGNvbnN0IEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCA9ICdwbHVnaW46c2V0dGluZ3M6c2V0JztcbiIsImxldCBzdXBwb3J0ZWQ7XG5sZXQgcGVyZjtcbmV4cG9ydCBmdW5jdGlvbiBpc1BlcmZvcm1hbmNlU3VwcG9ydGVkKCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoc3VwcG9ydGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRlZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wZXJmb3JtYW5jZSkge1xuICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICBwZXJmID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiAoKF9hID0gZ2xvYmFsLnBlcmZfaG9va3MpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wZXJmb3JtYW5jZSkpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcGVyZiA9IGdsb2JhbC5wZXJmX2hvb2tzLnBlcmZvcm1hbmNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdXBwb3J0ZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBpc1BlcmZvcm1hbmNlU3VwcG9ydGVkKCkgPyBwZXJmLm5vdygpIDogRGF0ZS5ub3coKTtcbn1cbiIsImltcG9ydCB7IEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCB9IGZyb20gJy4vY29uc3QuanMnO1xuaW1wb3J0IHsgbm93IH0gZnJvbSAnLi90aW1lLmpzJztcbmV4cG9ydCBjbGFzcyBBcGlQcm94eSB7XG4gICAgY29uc3RydWN0b3IocGx1Z2luLCBob29rKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy50YXJnZXRRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLm9uUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHt9O1xuICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBsdWdpbi5zZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwbHVnaW4uc2V0dGluZ3NbaWRdO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRTZXR0aW5nc1tpZF0gPSBpdGVtLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2NhbFNldHRpbmdzU2F2ZUlkID0gYF9fdnVlLWRldnRvb2xzLXBsdWdpbi1zZXR0aW5nc19fJHtwbHVnaW4uaWR9YDtcbiAgICAgICAgbGV0IGN1cnJlbnRTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFNldHRpbmdzU2F2ZUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGN1cnJlbnRTZXR0aW5ncywgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZhbGxiYWNrcyA9IHtcbiAgICAgICAgICAgIGdldFNldHRpbmdzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2V0dGluZ3M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0U2V0dGluZ3ModmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShsb2NhbFNldHRpbmdzU2F2ZUlkLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZXR0aW5ncyA9IHZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm93KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaG9vaykge1xuICAgICAgICAgICAgaG9vay5vbihIT09LX1BMVUdJTl9TRVRUSU5HU19TRVQsIChwbHVnaW5JZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luSWQgPT09IHRoaXMucGx1Z2luLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFsbGJhY2tzLnNldFNldHRpbmdzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3hpZWRPbiA9IG5ldyBQcm94eSh7fSwge1xuICAgICAgICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQub25bcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25RdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb3hpZWRUYXJnZXQgPSBuZXcgUHJveHkoe30sIHtcbiAgICAgICAgICAgIGdldDogKF90YXJnZXQsIHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSAnb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3hpZWRPbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy5mYWxsYmFja3MpLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrc1twcm9wXSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0UXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBzZXRSZWFsVGFyZ2V0KHRhcmdldCkge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMub25RdWV1ZSkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXQub25baXRlbS5tZXRob2RdKC4uLml0ZW0uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMudGFyZ2V0UXVldWUpIHtcbiAgICAgICAgICAgIGl0ZW0ucmVzb2x2ZShhd2FpdCB0aGlzLnRhcmdldFtpdGVtLm1ldGhvZF0oLi4uaXRlbS5hcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBnZXRUYXJnZXQsIGdldERldnRvb2xzR2xvYmFsSG9vaywgaXNQcm94eUF2YWlsYWJsZSB9IGZyb20gJy4vZW52LmpzJztcbmltcG9ydCB7IEhPT0tfU0VUVVAgfSBmcm9tICcuL2NvbnN0LmpzJztcbmltcG9ydCB7IEFwaVByb3h5IH0gZnJvbSAnLi9wcm94eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RpbWUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwRGV2dG9vbHNQbHVnaW4ocGx1Z2luRGVzY3JpcHRvciwgc2V0dXBGbikge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBwbHVnaW5EZXNjcmlwdG9yO1xuICAgIGNvbnN0IHRhcmdldCA9IGdldFRhcmdldCgpO1xuICAgIGNvbnN0IGhvb2sgPSBnZXREZXZ0b29sc0dsb2JhbEhvb2soKTtcbiAgICBjb25zdCBlbmFibGVQcm94eSA9IGlzUHJveHlBdmFpbGFibGUgJiYgZGVzY3JpcHRvci5lbmFibGVFYXJseVByb3h5O1xuICAgIGlmIChob29rICYmICh0YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOX0FQSV9BVkFJTEFCTEVfXyB8fCAhZW5hYmxlUHJveHkpKSB7XG4gICAgICAgIGhvb2suZW1pdChIT09LX1NFVFVQLCBwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHByb3h5ID0gZW5hYmxlUHJveHkgPyBuZXcgQXBpUHJveHkoZGVzY3JpcHRvciwgaG9vaykgOiBudWxsO1xuICAgICAgICBjb25zdCBsaXN0ID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyA9IHRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5TX18gfHwgW107XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgICBwbHVnaW5EZXNjcmlwdG9yOiBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgc2V0dXBGbixcbiAgICAgICAgICAgIHByb3h5LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByb3h5KVxuICAgICAgICAgICAgc2V0dXBGbihwcm94eS5wcm94aWVkVGFyZ2V0KTtcbiAgICB9XG59XG4iLCIvKiFcbiAgKiBwaW5pYSB2Mi4wLjI3XG4gICogKGMpIDIwMjIgRWR1YXJkbyBTYW4gTWFydGluIE1vcm90ZVxuICAqIEBsaWNlbnNlIE1JVFxuICAqL1xuaW1wb3J0IHsgZ2V0Q3VycmVudEluc3RhbmNlLCBpbmplY3QsIHRvUmF3LCB3YXRjaCwgdW5yZWYsIG1hcmtSYXcsIGVmZmVjdFNjb3BlLCByZWYsIGlzVnVlMiwgaXNSZWYsIGlzUmVhY3RpdmUsIHNldCwgZ2V0Q3VycmVudFNjb3BlLCBvblNjb3BlRGlzcG9zZSwgcmVhY3RpdmUsIHRvUmVmLCBkZWwsIG5leHRUaWNrLCBjb21wdXRlZCwgdG9SZWZzIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgc2V0dXBEZXZ0b29sc1BsdWdpbiB9IGZyb20gJ0B2dWUvZGV2dG9vbHMtYXBpJztcblxuLyoqXHJcbiAqIHNldEFjdGl2ZVBpbmlhIG11c3QgYmUgY2FsbGVkIHRvIGhhbmRsZSBTU1IgYXQgdGhlIHRvcCBvZiBmdW5jdGlvbnMgbGlrZVxyXG4gKiBgZmV0Y2hgLCBgc2V0dXBgLCBgc2VydmVyUHJlZmV0Y2hgIGFuZCBvdGhlcnNcclxuICovXHJcbmxldCBhY3RpdmVQaW5pYTtcclxuLyoqXHJcbiAqIFNldHMgb3IgdW5zZXRzIHRoZSBhY3RpdmUgcGluaWEuIFVzZWQgaW4gU1NSIGFuZCBpbnRlcm5hbGx5IHdoZW4gY2FsbGluZ1xyXG4gKiBhY3Rpb25zIGFuZCBnZXR0ZXJzXHJcbiAqXHJcbiAqIEBwYXJhbSBwaW5pYSAtIFBpbmlhIGluc3RhbmNlXHJcbiAqL1xyXG5jb25zdCBzZXRBY3RpdmVQaW5pYSA9IChwaW5pYSkgPT4gKGFjdGl2ZVBpbmlhID0gcGluaWEpO1xyXG4vKipcclxuICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHBpbmlhIGlmIHRoZXJlIGlzIGFueS5cclxuICovXHJcbmNvbnN0IGdldEFjdGl2ZVBpbmlhID0gKCkgPT4gKGdldEN1cnJlbnRJbnN0YW5jZSgpICYmIGluamVjdChwaW5pYVN5bWJvbCkpIHx8IGFjdGl2ZVBpbmlhO1xyXG5jb25zdCBwaW5pYVN5bWJvbCA9ICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBTeW1ib2woJ3BpbmlhJykgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBTeW1ib2woKSk7XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbm8pIHtcclxuICAgIHJldHVybiAobyAmJlxyXG4gICAgICAgIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgJiZcclxuICAgICAgICB0eXBlb2Ygby50b0pTT04gIT09ICdmdW5jdGlvbicpO1xyXG59XHJcbi8vIHR5cGUgRGVlcFJlYWRvbmx5PFQ+ID0geyByZWFkb25seSBbUCBpbiBrZXlvZiBUXTogRGVlcFJlYWRvbmx5PFRbUF0+IH1cclxuLy8gVE9ETzogY2FuIHdlIGNoYW5nZSB0aGVzZSB0byBudW1iZXJzP1xyXG4vKipcclxuICogUG9zc2libGUgdHlwZXMgZm9yIFN1YnNjcmlwdGlvbkNhbGxiYWNrXHJcbiAqL1xyXG52YXIgTXV0YXRpb25UeXBlO1xyXG4oZnVuY3Rpb24gKE11dGF0aW9uVHlwZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJlY3QgbXV0YXRpb24gb2YgdGhlIHN0YXRlOlxyXG4gICAgICpcclxuICAgICAqIC0gYHN0b3JlLm5hbWUgPSAnbmV3IG5hbWUnYFxyXG4gICAgICogLSBgc3RvcmUuJHN0YXRlLm5hbWUgPSAnbmV3IG5hbWUnYFxyXG4gICAgICogLSBgc3RvcmUubGlzdC5wdXNoKCduZXcgaXRlbScpYFxyXG4gICAgICovXHJcbiAgICBNdXRhdGlvblR5cGVbXCJkaXJlY3RcIl0gPSBcImRpcmVjdFwiO1xyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRhdGVkIHRoZSBzdGF0ZSB3aXRoIGAkcGF0Y2hgIGFuZCBhbiBvYmplY3RcclxuICAgICAqXHJcbiAgICAgKiAtIGBzdG9yZS4kcGF0Y2goeyBuYW1lOiAnbmV3TmFtZScgfSlgXHJcbiAgICAgKi9cclxuICAgIE11dGF0aW9uVHlwZVtcInBhdGNoT2JqZWN0XCJdID0gXCJwYXRjaCBvYmplY3RcIjtcclxuICAgIC8qKlxyXG4gICAgICogTXV0YXRlZCB0aGUgc3RhdGUgd2l0aCBgJHBhdGNoYCBhbmQgYSBmdW5jdGlvblxyXG4gICAgICpcclxuICAgICAqIC0gYHN0b3JlLiRwYXRjaChzdGF0ZSA9PiBzdGF0ZS5uYW1lID0gJ25ld05hbWUnKWBcclxuICAgICAqL1xyXG4gICAgTXV0YXRpb25UeXBlW1wicGF0Y2hGdW5jdGlvblwiXSA9IFwicGF0Y2ggZnVuY3Rpb25cIjtcclxuICAgIC8vIG1heWJlIHJlc2V0PyBmb3IgJHN0YXRlID0ge30gYW5kICRyZXNldFxyXG59KShNdXRhdGlvblR5cGUgfHwgKE11dGF0aW9uVHlwZSA9IHt9KSk7XG5cbmNvbnN0IElTX0NMSUVOVCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xyXG4vKipcclxuICogU2hvdWxkIHdlIGFkZCB0aGUgZGV2dG9vbHMgcGx1Z2lucy5cclxuICogLSBvbmx5IGlmIGRldiBtb2RlIG9yIGZvcmNlZCB0aHJvdWdoIHRoZSBwcm9kIGRldnRvb2xzIGZsYWdcclxuICogLSBub3QgaW4gdGVzdFxyXG4gKiAtIG9ubHkgaWYgd2luZG93IGV4aXN0cyAoY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUpXHJcbiAqL1xyXG5jb25zdCBVU0VfREVWVE9PTFMgPSAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8ICh0eXBlb2YgX19WVUVfUFJPRF9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJyAmJiBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pKSAmJiAhKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpICYmIElTX0NMSUVOVDtcblxuLypcclxuICogRmlsZVNhdmVyLmpzIEEgc2F2ZUFzKCkgRmlsZVNhdmVyIGltcGxlbWVudGF0aW9uLlxyXG4gKlxyXG4gKiBPcmlnaW5hbGx5IGJ5IEVsaSBHcmV5LCBhZGFwdGVkIGFzIGFuIEVTTSBtb2R1bGUgYnkgRWR1YXJkbyBTYW4gTWFydGluXHJcbiAqIE1vcm90ZS5cclxuICpcclxuICogTGljZW5zZSA6IE1JVFxyXG4gKi9cclxuLy8gVGhlIG9uZSBhbmQgb25seSB3YXkgb2YgZ2V0dGluZyBnbG9iYWwgc2NvcGUgaW4gYWxsIGVudmlyb25tZW50c1xyXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMzI3NzE4Mi8xMDA4OTk5XHJcbmNvbnN0IF9nbG9iYWwgPSAvKiNfX1BVUkVfXyovICgoKSA9PiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB3aW5kb3cud2luZG93ID09PSB3aW5kb3dcclxuICAgID8gd2luZG93XHJcbiAgICA6IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGZcclxuICAgICAgICA/IHNlbGZcclxuICAgICAgICA6IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbFxyXG4gICAgICAgICAgICA/IGdsb2JhbFxyXG4gICAgICAgICAgICA6IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgPyBnbG9iYWxUaGlzXHJcbiAgICAgICAgICAgICAgICA6IHsgSFRNTEVsZW1lbnQ6IG51bGwgfSkoKTtcclxuZnVuY3Rpb24gYm9tKGJsb2IsIHsgYXV0b0JvbSA9IGZhbHNlIH0gPSB7fSkge1xyXG4gICAgLy8gcHJlcGVuZCBCT00gZm9yIFVURi04IFhNTCBhbmQgdGV4dC8qIHR5cGVzIChpbmNsdWRpbmcgSFRNTClcclxuICAgIC8vIG5vdGU6IHlvdXIgYnJvd3NlciB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCBVVEYtMTYgVStGRUZGIHRvIEVGIEJCIEJGXHJcbiAgICBpZiAoYXV0b0JvbSAmJlxyXG4gICAgICAgIC9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGJsb2IudHlwZSkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoMHhmZWZmKSwgYmxvYl0sIHsgdHlwZTogYmxvYi50eXBlIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJsb2I7XHJcbn1cclxuZnVuY3Rpb24gZG93bmxvYWQodXJsLCBuYW1lLCBvcHRzKSB7XHJcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xyXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJztcclxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2F2ZUFzKHhoci5yZXNwb25zZSwgbmFtZSwgb3B0cyk7XHJcbiAgICB9O1xyXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignY291bGQgbm90IGRvd25sb2FkIGZpbGUnKTtcclxuICAgIH07XHJcbiAgICB4aHIuc2VuZCgpO1xyXG59XHJcbmZ1bmN0aW9uIGNvcnNFbmFibGVkKHVybCkge1xyXG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAvLyB1c2Ugc3luYyB0byBhdm9pZCBwb3B1cCBibG9ja2VyXHJcbiAgICB4aHIub3BlbignSEVBRCcsIHVybCwgZmFsc2UpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB4aHIuc2VuZCgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHsgfVxyXG4gICAgcmV0dXJuIHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPD0gMjk5O1xyXG59XHJcbi8vIGBhLmNsaWNrKClgIGRvZXNuJ3Qgd29yayBmb3IgYWxsIGJyb3dzZXJzICgjNDY1KVxyXG5mdW5jdGlvbiBjbGljayhub2RlKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snKSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xyXG4gICAgICAgIGV2dC5pbml0TW91c2VFdmVudCgnY2xpY2snLCB0cnVlLCB0cnVlLCB3aW5kb3csIDAsIDAsIDAsIDgwLCAyMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xyXG4gICAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IF9uYXZpZ2F0b3IgPSBcclxuIHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnID8gbmF2aWdhdG9yIDogeyB1c2VyQWdlbnQ6ICcnIH07XHJcbi8vIERldGVjdCBXZWJWaWV3IGluc2lkZSBhIG5hdGl2ZSBtYWNPUyBhcHAgYnkgcnVsaW5nIG91dCBhbGwgYnJvd3NlcnNcclxuLy8gV2UganVzdCBuZWVkIHRvIGNoZWNrIGZvciAnU2FmYXJpJyBiZWNhdXNlIGFsbCBvdGhlciBicm93c2VycyAoYmVzaWRlcyBGaXJlZm94KSBpbmNsdWRlIHRoYXQgdG9vXHJcbi8vIGh0dHBzOi8vd3d3LndoYXRpc215YnJvd3Nlci5jb20vZ3VpZGVzL3RoZS1sYXRlc3QtdXNlci1hZ2VudC9tYWNvc1xyXG5jb25zdCBpc01hY09TV2ViVmlldyA9IC8qI19fUFVSRV9fKi8gKCgpID0+IC9NYWNpbnRvc2gvLnRlc3QoX25hdmlnYXRvci51c2VyQWdlbnQpICYmXHJcbiAgICAvQXBwbGVXZWJLaXQvLnRlc3QoX25hdmlnYXRvci51c2VyQWdlbnQpICYmXHJcbiAgICAhL1NhZmFyaS8udGVzdChfbmF2aWdhdG9yLnVzZXJBZ2VudCkpKCk7XHJcbmNvbnN0IHNhdmVBcyA9ICFJU19DTElFTlRcclxuICAgID8gKCkgPT4geyB9IC8vIG5vb3BcclxuICAgIDogLy8gVXNlIGRvd25sb2FkIGF0dHJpYnV0ZSBmaXJzdCBpZiBwb3NzaWJsZSAoIzE5MyBMdW1pYSBtb2JpbGUpIHVubGVzcyB0aGlzIGlzIGEgbWFjT1MgV2ViVmlldyBvciBtaW5pIHByb2dyYW1cclxuICAgICAgICB0eXBlb2YgSFRNTEFuY2hvckVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgICAgICdkb3dubG9hZCcgaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlICYmXHJcbiAgICAgICAgICAgICFpc01hY09TV2ViVmlld1xyXG4gICAgICAgICAgICA/IGRvd25sb2FkU2F2ZUFzXHJcbiAgICAgICAgICAgIDogLy8gVXNlIG1zU2F2ZU9yT3BlbkJsb2IgYXMgYSBzZWNvbmQgYXBwcm9hY2hcclxuICAgICAgICAgICAgICAgICdtc1NhdmVPck9wZW5CbG9iJyBpbiBfbmF2aWdhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgPyBtc1NhdmVBc1xyXG4gICAgICAgICAgICAgICAgICAgIDogLy8gRmFsbGJhY2sgdG8gdXNpbmcgRmlsZVJlYWRlciBhbmQgYSBwb3B1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU2F2ZXJTYXZlQXM7XHJcbmZ1bmN0aW9uIGRvd25sb2FkU2F2ZUFzKGJsb2IsIG5hbWUgPSAnZG93bmxvYWQnLCBvcHRzKSB7XHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgYS5kb3dubG9hZCA9IG5hbWU7XHJcbiAgICBhLnJlbCA9ICdub29wZW5lcic7IC8vIHRhYm5hYmJpbmdcclxuICAgIC8vIFRPRE86IGRldGVjdCBjaHJvbWUgZXh0ZW5zaW9ucyAmIHBhY2thZ2VkIGFwcHNcclxuICAgIC8vIGEudGFyZ2V0ID0gJ19ibGFuaydcclxuICAgIGlmICh0eXBlb2YgYmxvYiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBTdXBwb3J0IHJlZ3VsYXIgbGlua3NcclxuICAgICAgICBhLmhyZWYgPSBibG9iO1xyXG4gICAgICAgIGlmIChhLm9yaWdpbiAhPT0gbG9jYXRpb24ub3JpZ2luKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3JzRW5hYmxlZChhLmhyZWYpKSB7XHJcbiAgICAgICAgICAgICAgICBkb3dubG9hZChibG9iLCBuYW1lLCBvcHRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGEudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgICAgICAgICAgICBjbGljayhhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY2xpY2soYSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gU3VwcG9ydCBibG9ic1xyXG4gICAgICAgIGEuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKTtcclxuICAgICAgICB9LCA0ZTQpOyAvLyA0MHNcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY2xpY2soYSk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbXNTYXZlQXMoYmxvYiwgbmFtZSA9ICdkb3dubG9hZCcsIG9wdHMpIHtcclxuICAgIGlmICh0eXBlb2YgYmxvYiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBpZiAoY29yc0VuYWJsZWQoYmxvYikpIHtcclxuICAgICAgICAgICAgZG93bmxvYWQoYmxvYiwgbmFtZSwgb3B0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSBibG9iO1xyXG4gICAgICAgICAgICBhLnRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNsaWNrKGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBAdHMtaWdub3JlOiB3b3JrcyBvbiB3aW5kb3dzXHJcbiAgICAgICAgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYm9tKGJsb2IsIG9wdHMpLCBuYW1lKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBmaWxlU2F2ZXJTYXZlQXMoYmxvYiwgbmFtZSwgb3B0cywgcG9wdXApIHtcclxuICAgIC8vIE9wZW4gYSBwb3B1cCBpbW1lZGlhdGVseSBkbyBnbyBhcm91bmQgcG9wdXAgYmxvY2tlclxyXG4gICAgLy8gTW9zdGx5IG9ubHkgYXZhaWxhYmxlIG9uIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHRoZSBmaWxlUmVhZGVyIGlzIGFzeW5jIHNvLi4uXHJcbiAgICBwb3B1cCA9IHBvcHVwIHx8IG9wZW4oJycsICdfYmxhbmsnKTtcclxuICAgIGlmIChwb3B1cCkge1xyXG4gICAgICAgIHBvcHVwLmRvY3VtZW50LnRpdGxlID0gcG9wdXAuZG9jdW1lbnQuYm9keS5pbm5lclRleHQgPSAnZG93bmxvYWRpbmcuLi4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBibG9iID09PSAnc3RyaW5nJylcclxuICAgICAgICByZXR1cm4gZG93bmxvYWQoYmxvYiwgbmFtZSwgb3B0cyk7XHJcbiAgICBjb25zdCBmb3JjZSA9IGJsb2IudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbiAgICBjb25zdCBpc1NhZmFyaSA9IC9jb25zdHJ1Y3Rvci9pLnRlc3QoU3RyaW5nKF9nbG9iYWwuSFRNTEVsZW1lbnQpKSB8fCAnc2FmYXJpJyBpbiBfZ2xvYmFsO1xyXG4gICAgY29uc3QgaXNDaHJvbWVJT1MgPSAvQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcbiAgICBpZiAoKGlzQ2hyb21lSU9TIHx8IChmb3JjZSAmJiBpc1NhZmFyaSkgfHwgaXNNYWNPU1dlYlZpZXcpICYmXHJcbiAgICAgICAgdHlwZW9mIEZpbGVSZWFkZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gU2FmYXJpIGRvZXNuJ3QgYWxsb3cgZG93bmxvYWRpbmcgb2YgYmxvYiBVUkxzXHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gcmVhZGVyLnJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIHJlYWRlci5yZXN1bHQgdHlwZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHVybCA9IGlzQ2hyb21lSU9TXHJcbiAgICAgICAgICAgICAgICA/IHVybFxyXG4gICAgICAgICAgICAgICAgOiB1cmwucmVwbGFjZSgvXmRhdGE6W147XSo7LywgJ2RhdGE6YXR0YWNobWVudC9maWxlOycpO1xyXG4gICAgICAgICAgICBpZiAocG9wdXApIHtcclxuICAgICAgICAgICAgICAgIHBvcHVwLmxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5hc3NpZ24odXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwb3B1cCA9IG51bGw7IC8vIHJldmVyc2UtdGFibmFiYmluZyAjNDYwXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgaWYgKHBvcHVwKVxyXG4gICAgICAgICAgICBwb3B1cC5sb2NhdGlvbi5hc3NpZ24odXJsKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgcG9wdXAgPSBudWxsOyAvLyByZXZlcnNlLXRhYm5hYmJpbmcgIzQ2MFxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgfSwgNGU0KTsgLy8gNDBzXHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFNob3dzIGEgdG9hc3Qgb3IgY29uc29sZS5sb2dcclxuICpcclxuICogQHBhcmFtIG1lc3NhZ2UgLSBtZXNzYWdlIHRvIGxvZ1xyXG4gKiBAcGFyYW0gdHlwZSAtIGRpZmZlcmVudCBjb2xvciBvZiB0aGUgdG9vbHRpcFxyXG4gKi9cclxuZnVuY3Rpb24gdG9hc3RNZXNzYWdlKG1lc3NhZ2UsIHR5cGUpIHtcclxuICAgIGNvbnN0IHBpbmlhTWVzc2FnZSA9ICfwn42NICcgKyBtZXNzYWdlO1xyXG4gICAgaWYgKHR5cGVvZiBfX1ZVRV9ERVZUT09MU19UT0FTVF9fID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgX19WVUVfREVWVE9PTFNfVE9BU1RfXyhwaW5pYU1lc3NhZ2UsIHR5cGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IocGluaWFNZXNzYWdlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICd3YXJuJykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihwaW5pYU1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocGluaWFNZXNzYWdlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc1BpbmlhKG8pIHtcclxuICAgIHJldHVybiAnX2EnIGluIG8gJiYgJ2luc3RhbGwnIGluIG87XHJcbn1cblxuZnVuY3Rpb24gY2hlY2tDbGlwYm9hcmRBY2Nlc3MoKSB7XHJcbiAgICBpZiAoISgnY2xpcGJvYXJkJyBpbiBuYXZpZ2F0b3IpKSB7XHJcbiAgICAgICAgdG9hc3RNZXNzYWdlKGBZb3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoZSBDbGlwYm9hcmQgQVBJYCwgJ2Vycm9yJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tOb3RGb2N1c2VkRXJyb3IoZXJyb3IpIHtcclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXHJcbiAgICAgICAgZXJyb3IubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkb2N1bWVudCBpcyBub3QgZm9jdXNlZCcpKSB7XHJcbiAgICAgICAgdG9hc3RNZXNzYWdlKCdZb3UgbmVlZCB0byBhY3RpdmF0ZSB0aGUgXCJFbXVsYXRlIGEgZm9jdXNlZCBwYWdlXCIgc2V0dGluZyBpbiB0aGUgXCJSZW5kZXJpbmdcIiBwYW5lbCBvZiBkZXZ0b29scy4nLCAnd2FybicpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdsb2JhbENvcHlTdGF0ZShwaW5pYSkge1xyXG4gICAgaWYgKGNoZWNrQ2xpcGJvYXJkQWNjZXNzKCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeShwaW5pYS5zdGF0ZS52YWx1ZSkpO1xyXG4gICAgICAgIHRvYXN0TWVzc2FnZSgnR2xvYmFsIHN0YXRlIGNvcGllZCB0byBjbGlwYm9hcmQuJyk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoY2hlY2tOb3RGb2N1c2VkRXJyb3IoZXJyb3IpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdG9hc3RNZXNzYWdlKGBGYWlsZWQgdG8gc2VyaWFsaXplIHRoZSBzdGF0ZS4gQ2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgZGV0YWlscy5gLCAnZXJyb3InKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxufVxyXG5hc3luYyBmdW5jdGlvbiBhY3Rpb25HbG9iYWxQYXN0ZVN0YXRlKHBpbmlhKSB7XHJcbiAgICBpZiAoY2hlY2tDbGlwYm9hcmRBY2Nlc3MoKSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHBpbmlhLnN0YXRlLnZhbHVlID0gSlNPTi5wYXJzZShhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLnJlYWRUZXh0KCkpO1xyXG4gICAgICAgIHRvYXN0TWVzc2FnZSgnR2xvYmFsIHN0YXRlIHBhc3RlZCBmcm9tIGNsaXBib2FyZC4nKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGlmIChjaGVja05vdEZvY3VzZWRFcnJvcihlcnJvcikpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0b2FzdE1lc3NhZ2UoYEZhaWxlZCB0byBkZXNlcmlhbGl6ZSB0aGUgc3RhdGUgZnJvbSBjbGlwYm9hcmQuIENoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGRldGFpbHMuYCwgJ2Vycm9yJyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbn1cclxuYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2xvYmFsU2F2ZVN0YXRlKHBpbmlhKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHNhdmVBcyhuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocGluaWEuc3RhdGUudmFsdWUpXSwge1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04JyxcclxuICAgICAgICB9KSwgJ3BpbmlhLXN0YXRlLmpzb24nKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRvYXN0TWVzc2FnZShgRmFpbGVkIHRvIGV4cG9ydCB0aGUgc3RhdGUgYXMgSlNPTi4gQ2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgZGV0YWlscy5gLCAnZXJyb3InKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxufVxyXG5sZXQgZmlsZUlucHV0O1xyXG5mdW5jdGlvbiBnZXRGaWxlT3BlbmVyKCkge1xyXG4gICAgaWYgKCFmaWxlSW5wdXQpIHtcclxuICAgICAgICBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICAgIGZpbGVJbnB1dC50eXBlID0gJ2ZpbGUnO1xyXG4gICAgICAgIGZpbGVJbnB1dC5hY2NlcHQgPSAnLmpzb24nO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb3BlbkZpbGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgZmlsZUlucHV0Lm9uY2hhbmdlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBmaWxlSW5wdXQuZmlsZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGVzKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzLml0ZW0oMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7IHRleHQ6IGF3YWl0IGZpbGUudGV4dCgpLCBmaWxlIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBUT0RPOiBjaGFuZ2VkIGZyb20gNC4zIHRvIDQuNFxyXG4gICAgICAgICAgICBmaWxlSW5wdXQub25jYW5jZWwgPSAoKSA9PiByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICBmaWxlSW5wdXQub25lcnJvciA9IHJlamVjdDtcclxuICAgICAgICAgICAgZmlsZUlucHV0LmNsaWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3BlbkZpbGU7XHJcbn1cclxuYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2xvYmFsT3BlblN0YXRlRmlsZShwaW5pYSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBvcGVuID0gYXdhaXQgZ2V0RmlsZU9wZW5lcigpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZW4oKTtcclxuICAgICAgICBpZiAoIXJlc3VsdClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCwgZmlsZSB9ID0gcmVzdWx0O1xyXG4gICAgICAgIHBpbmlhLnN0YXRlLnZhbHVlID0gSlNPTi5wYXJzZSh0ZXh0KTtcclxuICAgICAgICB0b2FzdE1lc3NhZ2UoYEdsb2JhbCBzdGF0ZSBpbXBvcnRlZCBmcm9tIFwiJHtmaWxlLm5hbWV9XCIuYCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0b2FzdE1lc3NhZ2UoYEZhaWxlZCB0byBleHBvcnQgdGhlIHN0YXRlIGFzIEpTT04uIENoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGRldGFpbHMuYCwgJ2Vycm9yJyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGlzcGxheShkaXNwbGF5KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIF9jdXN0b206IHtcclxuICAgICAgICAgICAgZGlzcGxheSxcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxufVxyXG5jb25zdCBQSU5JQV9ST09UX0xBQkVMID0gJ/CfjY0gUGluaWEgKHJvb3QpJztcclxuY29uc3QgUElOSUFfUk9PVF9JRCA9ICdfcm9vdCc7XHJcbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShzdG9yZSkge1xyXG4gICAgcmV0dXJuIGlzUGluaWEoc3RvcmUpXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGlkOiBQSU5JQV9ST09UX0lELFxyXG4gICAgICAgICAgICBsYWJlbDogUElOSUFfUk9PVF9MQUJFTCxcclxuICAgICAgICB9XHJcbiAgICAgICAgOiB7XHJcbiAgICAgICAgICAgIGlkOiBzdG9yZS4kaWQsXHJcbiAgICAgICAgICAgIGxhYmVsOiBzdG9yZS4kaWQsXHJcbiAgICAgICAgfTtcclxufVxyXG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclN0YXRlKHN0b3JlKSB7XHJcbiAgICBpZiAoaXNQaW5pYShzdG9yZSkpIHtcclxuICAgICAgICBjb25zdCBzdG9yZU5hbWVzID0gQXJyYXkuZnJvbShzdG9yZS5fcy5rZXlzKCkpO1xyXG4gICAgICAgIGNvbnN0IHN0b3JlTWFwID0gc3RvcmUuX3M7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXRlOiBzdG9yZU5hbWVzLm1hcCgoc3RvcmVJZCkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAga2V5OiBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0b3JlLnN0YXRlLnZhbHVlW3N0b3JlSWRdLFxyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGdldHRlcnM6IHN0b3JlTmFtZXNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGlkKSA9PiBzdG9yZU1hcC5nZXQoaWQpLl9nZXR0ZXJzKVxyXG4gICAgICAgICAgICAgICAgLm1hcCgoaWQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gc3RvcmVNYXAuZ2V0KGlkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleTogaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0b3JlLl9nZXR0ZXJzLnJlZHVjZSgoZ2V0dGVycywga2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcnNba2V5XSA9IHN0b3JlW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIHt9KSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgICAgc3RhdGU6IE9iamVjdC5rZXlzKHN0b3JlLiRzdGF0ZSkubWFwKChrZXkpID0+ICh7XHJcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgIHZhbHVlOiBzdG9yZS4kc3RhdGVba2V5XSxcclxuICAgICAgICB9KSksXHJcbiAgICB9O1xyXG4gICAgLy8gYXZvaWQgYWRkaW5nIGVtcHR5IGdldHRlcnNcclxuICAgIGlmIChzdG9yZS5fZ2V0dGVycyAmJiBzdG9yZS5fZ2V0dGVycy5sZW5ndGgpIHtcclxuICAgICAgICBzdGF0ZS5nZXR0ZXJzID0gc3RvcmUuX2dldHRlcnMubWFwKChnZXR0ZXJOYW1lKSA9PiAoe1xyXG4gICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGtleTogZ2V0dGVyTmFtZSxcclxuICAgICAgICAgICAgdmFsdWU6IHN0b3JlW2dldHRlck5hbWVdLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIGlmIChzdG9yZS5fY3VzdG9tUHJvcGVydGllcy5zaXplKSB7XHJcbiAgICAgICAgc3RhdGUuY3VzdG9tUHJvcGVydGllcyA9IEFycmF5LmZyb20oc3RvcmUuX2N1c3RvbVByb3BlcnRpZXMpLm1hcCgoa2V5KSA9PiAoe1xyXG4gICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICB2YWx1ZTogc3RvcmVba2V5XSxcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbn1cclxuZnVuY3Rpb24gZm9ybWF0RXZlbnREYXRhKGV2ZW50cykge1xyXG4gICAgaWYgKCFldmVudHMpXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnRzKSkge1xyXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSBhZGQgYW5kIGRlbGV0ZSBmb3IgYXJyYXlzIGFuZCBvYmplY3RzXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50cy5yZWR1Y2UoKGRhdGEsIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEua2V5cy5wdXNoKGV2ZW50LmtleSk7XHJcbiAgICAgICAgICAgIGRhdGEub3BlcmF0aW9ucy5wdXNoKGV2ZW50LnR5cGUpO1xyXG4gICAgICAgICAgICBkYXRhLm9sZFZhbHVlW2V2ZW50LmtleV0gPSBldmVudC5vbGRWYWx1ZTtcclxuICAgICAgICAgICAgZGF0YS5uZXdWYWx1ZVtldmVudC5rZXldID0gZXZlbnQubmV3VmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgb2xkVmFsdWU6IHt9LFxyXG4gICAgICAgICAgICBrZXlzOiBbXSxcclxuICAgICAgICAgICAgb3BlcmF0aW9uczogW10sXHJcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB7fSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvbjogZm9ybWF0RGlzcGxheShldmVudHMudHlwZSksXHJcbiAgICAgICAgICAgIGtleTogZm9ybWF0RGlzcGxheShldmVudHMua2V5KSxcclxuICAgICAgICAgICAgb2xkVmFsdWU6IGV2ZW50cy5vbGRWYWx1ZSxcclxuICAgICAgICAgICAgbmV3VmFsdWU6IGV2ZW50cy5uZXdWYWx1ZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGZvcm1hdE11dGF0aW9uVHlwZSh0eXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIE11dGF0aW9uVHlwZS5kaXJlY3Q6XHJcbiAgICAgICAgICAgIHJldHVybiAnbXV0YXRpb24nO1xyXG4gICAgICAgIGNhc2UgTXV0YXRpb25UeXBlLnBhdGNoRnVuY3Rpb246XHJcbiAgICAgICAgICAgIHJldHVybiAnJHBhdGNoJztcclxuICAgICAgICBjYXNlIE11dGF0aW9uVHlwZS5wYXRjaE9iamVjdDpcclxuICAgICAgICAgICAgcmV0dXJuICckcGF0Y2gnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAndW5rbm93bic7XHJcbiAgICB9XHJcbn1cblxuLy8gdGltZWxpbmUgY2FuIGJlIHBhdXNlZCB3aGVuIGRpcmVjdGx5IGNoYW5naW5nIHRoZSBzdGF0ZVxyXG5sZXQgaXNUaW1lbGluZUFjdGl2ZSA9IHRydWU7XHJcbmNvbnN0IGNvbXBvbmVudFN0YXRlVHlwZXMgPSBbXTtcclxuY29uc3QgTVVUQVRJT05TX0xBWUVSX0lEID0gJ3BpbmlhOm11dGF0aW9ucyc7XHJcbmNvbnN0IElOU1BFQ1RPUl9JRCA9ICdwaW5pYSc7XHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBkaXNwbGF5ZWQgbmFtZSBvZiBhIHN0b3JlIGluIGRldnRvb2xzXHJcbiAqXHJcbiAqIEBwYXJhbSBpZCAtIGlkIG9mIHRoZSBzdG9yZVxyXG4gKiBAcmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmdcclxuICovXHJcbmNvbnN0IGdldFN0b3JlVHlwZSA9IChpZCkgPT4gJ/CfjY0gJyArIGlkO1xyXG4vKipcclxuICogQWRkIHRoZSBwaW5pYSBwbHVnaW4gd2l0aG91dCBhbnkgc3RvcmUuIEFsbG93cyBkaXNwbGF5aW5nIGEgUGluaWEgcGx1Z2luIHRhYlxyXG4gKiBhcyBzb29uIGFzIGl0IGlzIGFkZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi5cclxuICpcclxuICogQHBhcmFtIGFwcCAtIFZ1ZSBhcHBsaWNhdGlvblxyXG4gKiBAcGFyYW0gcGluaWEgLSBwaW5pYSBpbnN0YW5jZVxyXG4gKi9cclxuZnVuY3Rpb24gcmVnaXN0ZXJQaW5pYURldnRvb2xzKGFwcCwgcGluaWEpIHtcclxuICAgIHNldHVwRGV2dG9vbHNQbHVnaW4oe1xyXG4gICAgICAgIGlkOiAnZGV2LmVzbS5waW5pYScsXHJcbiAgICAgICAgbGFiZWw6ICdQaW5pYSDwn42NJyxcclxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly9waW5pYS52dWVqcy5vcmcvbG9nby5zdmcnLFxyXG4gICAgICAgIHBhY2thZ2VOYW1lOiAncGluaWEnLFxyXG4gICAgICAgIGhvbWVwYWdlOiAnaHR0cHM6Ly9waW5pYS52dWVqcy5vcmcnLFxyXG4gICAgICAgIGNvbXBvbmVudFN0YXRlVHlwZXMsXHJcbiAgICAgICAgYXBwLFxyXG4gICAgfSwgKGFwaSkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYXBpLm5vdyAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0b2FzdE1lc3NhZ2UoJ1lvdSBzZWVtIHRvIGJlIHVzaW5nIGFuIG91dGRhdGVkIHZlcnNpb24gb2YgVnVlIERldnRvb2xzLiBBcmUgeW91IHN0aWxsIHVzaW5nIHRoZSBCZXRhIHJlbGVhc2UgaW5zdGVhZCBvZiB0aGUgc3RhYmxlIG9uZT8gWW91IGNhbiBmaW5kIHRoZSBsaW5rcyBhdCBodHRwczovL2RldnRvb2xzLnZ1ZWpzLm9yZy9ndWlkZS9pbnN0YWxsYXRpb24uaHRtbC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xyXG4gICAgICAgICAgICBpZDogTVVUQVRJT05TX0xBWUVSX0lELFxyXG4gICAgICAgICAgICBsYWJlbDogYFBpbmlhIPCfjY1gLFxyXG4gICAgICAgICAgICBjb2xvcjogMHhlNWRmODgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXBpLmFkZEluc3BlY3Rvcih7XHJcbiAgICAgICAgICAgIGlkOiBJTlNQRUNUT1JfSUQsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnUGluaWEg8J+NjScsXHJcbiAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcclxuICAgICAgICAgICAgdHJlZUZpbHRlclBsYWNlaG9sZGVyOiAnU2VhcmNoIHN0b3JlcycsXHJcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpY29uOiAnY29udGVudF9jb3B5JyxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uR2xvYmFsQ29weVN0YXRlKHBpbmlhKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdTZXJpYWxpemUgYW5kIGNvcHkgdGhlIHN0YXRlJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2NvbnRlbnRfcGFzdGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBhY3Rpb25HbG9iYWxQYXN0ZVN0YXRlKHBpbmlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JUcmVlKElOU1BFQ1RPUl9JRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoSU5TUEVDVE9SX0lEKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdSZXBsYWNlIHRoZSBzdGF0ZSB3aXRoIHRoZSBjb250ZW50IG9mIHlvdXIgY2xpcGJvYXJkJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3NhdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25HbG9iYWxTYXZlU3RhdGUocGluaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ1NhdmUgdGhlIHN0YXRlIGFzIGEgSlNPTiBmaWxlJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ZvbGRlcl9vcGVuJyxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uR2xvYmFsT3BlblN0YXRlRmlsZShwaW5pYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShJTlNQRUNUT1JfSUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclN0YXRlKElOU1BFQ1RPUl9JRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnSW1wb3J0IHRoZSBzdGF0ZSBmcm9tIGEgSlNPTiBmaWxlJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIG5vZGVBY3Rpb25zOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3Jlc3RvcmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdSZXNldCB0aGUgc3RhdGUgKG9wdGlvbiBzdG9yZSBvbmx5KScsXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAobm9kZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gcGluaWEuX3MuZ2V0KG5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RvcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZShgQ2Fubm90IHJlc2V0IFwiJHtub2RlSWR9XCIgc3RvcmUgYmVjYXVzZSBpdCB3YXNuJ3QgZm91bmQuYCwgJ3dhcm4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RvcmUuX2lzT3B0aW9uc0FQSSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlKGBDYW5ub3QgcmVzZXQgXCIke25vZGVJZH1cIiBzdG9yZSBiZWNhdXNlIGl0J3MgYSBzZXR1cCBzdG9yZS5gLCAnd2FybicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuJHJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UoYFN0b3JlIFwiJHtub2RlSWR9XCIgcmVzZXQuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBhcGkub24uaW5zcGVjdENvbXBvbmVudCgocGF5bG9hZCwgY3R4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UgJiZcclxuICAgICAgICAgICAgICAgIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UucHJveHkpO1xyXG4gICAgICAgICAgICBpZiAocHJveHkgJiYgcHJveHkuX3BTdG9yZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBpbmlhU3RvcmVzID0gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS5wcm94eS5fcFN0b3JlcztcclxuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMocGluaWFTdG9yZXMpLmZvckVhY2goKHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pbnN0YW5jZURhdGEuc3RhdGUucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGdldFN0b3JlVHlwZShzdG9yZS4kaWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdzdGF0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RvcmUuX2lzT3B0aW9uc0FQSVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdG9SYXcoc3RvcmUuJHN0YXRlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdyZXN0b3JlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnUmVzZXQgdGhlIHN0YXRlIG9mIHRoaXMgc3RvcmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gc3RvcmUuJHJlc2V0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8vIE5PVEU6IHdvcmthcm91bmQgdG8gdW53cmFwIHRyYW5zZmVycmVkIHJlZnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzdG9yZS4kc3RhdGUpLnJlZHVjZSgoc3RhdGUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtrZXldID0gc3RvcmUuJHN0YXRlW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7fSksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3JlLl9nZXR0ZXJzICYmIHN0b3JlLl9nZXR0ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmluc3RhbmNlRGF0YS5zdGF0ZS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGdldFN0b3JlVHlwZShzdG9yZS4kaWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZ2V0dGVycycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RvcmUuX2dldHRlcnMucmVkdWNlKChnZXR0ZXJzLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJzW2tleV0gPSBzdG9yZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2UganVzdCB3YW50IHRvIHNob3cgaXQgaW4gZGV2dG9vbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyc1trZXldID0gZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge30pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFwaS5vbi5nZXRJbnNwZWN0b3JUcmVlKChwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmFwcCA9PT0gYXBwICYmIHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IElOU1BFQ1RPUl9JRCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0b3JlcyA9IFtwaW5pYV07XHJcbiAgICAgICAgICAgICAgICBzdG9yZXMgPSBzdG9yZXMuY29uY2F0KEFycmF5LmZyb20ocGluaWEuX3MudmFsdWVzKCkpKTtcclxuICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gKHBheWxvYWQuZmlsdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgPyBzdG9yZXMuZmlsdGVyKChzdG9yZSkgPT4gJyRpZCcgaW4gc3RvcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzdG9yZS4kaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMocGF5bG9hZC5maWx0ZXIudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBQSU5JQV9ST09UX0xBQkVMLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocGF5bG9hZC5maWx0ZXIudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzdG9yZXMpLm1hcChmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKChwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmFwcCA9PT0gYXBwICYmIHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IElOU1BFQ1RPUl9JRCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5zcGVjdGVkU3RvcmUgPSBwYXlsb2FkLm5vZGVJZCA9PT0gUElOSUFfUk9PVF9JRFxyXG4gICAgICAgICAgICAgICAgICAgID8gcGluaWFcclxuICAgICAgICAgICAgICAgICAgICA6IHBpbmlhLl9zLmdldChwYXlsb2FkLm5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWluc3BlY3RlZFN0b3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBjb3VsZCBiZSB0aGUgc2VsZWN0ZWQgc3RvcmUgcmVzdG9yZWQgZm9yIGEgZGlmZmVyZW50IHByb2plY3RcclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyBpdCdzIGJldHRlciBub3QgdG8gc2F5IGFueXRoaW5nIGhlcmVcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zcGVjdGVkU3RvcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnN0YXRlID0gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JTdGF0ZShpbnNwZWN0ZWRTdG9yZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBhcGkub24uZWRpdEluc3BlY3RvclN0YXRlKChwYXlsb2FkLCBjdHgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHBheWxvYWQuYXBwID09PSBhcHAgJiYgcGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gSU5TUEVDVE9SX0lEKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNwZWN0ZWRTdG9yZSA9IHBheWxvYWQubm9kZUlkID09PSBQSU5JQV9ST09UX0lEXHJcbiAgICAgICAgICAgICAgICAgICAgPyBwaW5pYVxyXG4gICAgICAgICAgICAgICAgICAgIDogcGluaWEuX3MuZ2V0KHBheWxvYWQubm9kZUlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghaW5zcGVjdGVkU3RvcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9hc3RNZXNzYWdlKGBzdG9yZSBcIiR7cGF5bG9hZC5ub2RlSWR9XCIgbm90IGZvdW5kYCwgJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBhdGggfSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzUGluaWEoaW5zcGVjdGVkU3RvcmUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzIG9ubHkgdGhlIHN0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoICE9PSAxIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFpbnNwZWN0ZWRTdG9yZS5fY3VzdG9tUHJvcGVydGllcy5oYXMocGF0aFswXSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFswXSBpbiBpbnNwZWN0ZWRTdG9yZS4kc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC51bnNoaWZ0KCckc3RhdGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSb290IGFjY2Vzcywgd2UgY2FuIG9taXQgdGhlIGAudmFsdWVgIGJlY2F1c2UgdGhlIGRldnRvb2xzIEFQSSBkb2VzIGl0IGZvciB1c1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgudW5zaGlmdCgnc3RhdGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlzVGltZWxpbmVBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHBheWxvYWQuc2V0KGluc3BlY3RlZFN0b3JlLCBwYXRoLCBwYXlsb2FkLnN0YXRlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlzVGltZWxpbmVBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXBpLm9uLmVkaXRDb21wb25lbnRTdGF0ZSgocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC50eXBlLnN0YXJ0c1dpdGgoJ/CfjY0nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmVJZCA9IHBheWxvYWQudHlwZS5yZXBsYWNlKC9e8J+NjVxccyovLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHBpbmlhLl9zLmdldChzdG9yZUlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghc3RvcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9hc3RNZXNzYWdlKGBzdG9yZSBcIiR7c3RvcmVJZH1cIiBub3QgZm91bmRgLCAnZXJyb3InKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF0aCB9ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIGlmIChwYXRoWzBdICE9PSAnc3RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvYXN0TWVzc2FnZShgSW52YWxpZCBwYXRoIGZvciBzdG9yZSBcIiR7c3RvcmVJZH1cIjpcXG4ke3BhdGh9XFxuT25seSBzdGF0ZSBjYW4gYmUgbW9kaWZpZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyByZXdyaXRlIHRoZSBmaXJzdCBlbnRyeSB0byBiZSBhYmxlIHRvIGRpcmVjdGx5IHNldCB0aGUgc3RhdGUgYXNcclxuICAgICAgICAgICAgICAgIC8vIHdlbGwgYXMgYW55IG90aGVyIHBhdGhcclxuICAgICAgICAgICAgICAgIHBhdGhbMF0gPSAnJHN0YXRlJztcclxuICAgICAgICAgICAgICAgIGlzVGltZWxpbmVBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHBheWxvYWQuc2V0KHN0b3JlLCBwYXRoLCBwYXlsb2FkLnN0YXRlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlzVGltZWxpbmVBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBhZGRTdG9yZVRvRGV2dG9vbHMoYXBwLCBzdG9yZSkge1xyXG4gICAgaWYgKCFjb21wb25lbnRTdGF0ZVR5cGVzLmluY2x1ZGVzKGdldFN0b3JlVHlwZShzdG9yZS4kaWQpKSkge1xyXG4gICAgICAgIGNvbXBvbmVudFN0YXRlVHlwZXMucHVzaChnZXRTdG9yZVR5cGUoc3RvcmUuJGlkKSk7XHJcbiAgICB9XHJcbiAgICBzZXR1cERldnRvb2xzUGx1Z2luKHtcclxuICAgICAgICBpZDogJ2Rldi5lc20ucGluaWEnLFxyXG4gICAgICAgIGxhYmVsOiAnUGluaWEg8J+NjScsXHJcbiAgICAgICAgbG9nbzogJ2h0dHBzOi8vcGluaWEudnVlanMub3JnL2xvZ28uc3ZnJyxcclxuICAgICAgICBwYWNrYWdlTmFtZTogJ3BpbmlhJyxcclxuICAgICAgICBob21lcGFnZTogJ2h0dHBzOi8vcGluaWEudnVlanMub3JnJyxcclxuICAgICAgICBjb21wb25lbnRTdGF0ZVR5cGVzLFxyXG4gICAgICAgIGFwcCxcclxuICAgICAgICBzZXR0aW5nczoge1xyXG4gICAgICAgICAgICBsb2dTdG9yZUNoYW5nZXM6IHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnTm90aWZ5IGFib3V0IG5ldy9kZWxldGVkIHN0b3JlcycsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIHVzZUVtb2ppczoge1xyXG4gICAgICAgICAgICAvLyAgIGxhYmVsOiAnVXNlIGVtb2ppcyBpbiBtZXNzYWdlcyDimqHvuI8nLFxyXG4gICAgICAgICAgICAvLyAgIHR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgICAgLy8gICBkZWZhdWx0VmFsdWU6IHRydWUsXHJcbiAgICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgfSxcclxuICAgIH0sIChhcGkpID0+IHtcclxuICAgICAgICAvLyBncmFjZWZ1bGx5IGhhbmRsZSBlcnJvcnNcclxuICAgICAgICBjb25zdCBub3cgPSB0eXBlb2YgYXBpLm5vdyA9PT0gJ2Z1bmN0aW9uJyA/IGFwaS5ub3cuYmluZChhcGkpIDogRGF0ZS5ub3c7XHJcbiAgICAgICAgc3RvcmUuJG9uQWN0aW9uKCh7IGFmdGVyLCBvbkVycm9yLCBuYW1lLCBhcmdzIH0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBJZCA9IHJ1bm5pbmdBY3Rpb25JZCsrO1xyXG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XHJcbiAgICAgICAgICAgICAgICBsYXllcklkOiBNVVRBVElPTlNfTEFZRVJfSUQsXHJcbiAgICAgICAgICAgICAgICBldmVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IG5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+bqyAnICsgbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBmb3JtYXREaXNwbGF5KHN0b3JlLiRpZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZm9ybWF0RGlzcGxheShuYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwSWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYWZ0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlQWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IE1VVEFUSU9OU19MQVlFUl9JRCxcclxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBub3coKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfwn5usICcgKyBuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ2VuZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBmb3JtYXREaXNwbGF5KHN0b3JlLiRpZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZvcm1hdERpc3BsYXkobmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cElkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG9uRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmVBY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZDogTVVUQVRJT05TX0xBWUVSX0lELFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IG5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dUeXBlOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ/CfkqUgJyArIG5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IGZvcm1hdERpc3BsYXkoc3RvcmUuJGlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZm9ybWF0RGlzcGxheShuYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIHRydWUpO1xyXG4gICAgICAgIHN0b3JlLl9jdXN0b21Qcm9wZXJ0aWVzLmZvckVhY2goKG5hbWUpID0+IHtcclxuICAgICAgICAgICAgd2F0Y2goKCkgPT4gdW5yZWYoc3RvcmVbbmFtZV0pLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhcGkubm90aWZ5Q29tcG9uZW50VXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclN0YXRlKElOU1BFQ1RPUl9JRCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUaW1lbGluZUFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZDogTVVUQVRJT05TX0xBWUVSX0lELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogbm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0NoYW5nZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cElkOiBhY3RpdmVBY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHsgZGVlcDogdHJ1ZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdG9yZS4kc3Vic2NyaWJlKCh7IGV2ZW50cywgdHlwZSB9LCBzdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICBhcGkubm90aWZ5Q29tcG9uZW50VXBkYXRlKCk7XHJcbiAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoSU5TUEVDVE9SX0lEKTtcclxuICAgICAgICAgICAgaWYgKCFpc1RpbWVsaW5lQWN0aXZlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyByb290U3RvcmUuc3RhdGVbc3RvcmUuaWRdID0gc3RhdGVcclxuICAgICAgICAgICAgY29uc3QgZXZlbnREYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgdGltZTogbm93KCksXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogZm9ybWF0TXV0YXRpb25UeXBlKHR5cGUpLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlOiBmb3JtYXREaXNwbGF5KHN0b3JlLiRpZCksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybWF0RXZlbnREYXRhKGV2ZW50cyksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBJZDogYWN0aXZlQWN0aW9uLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyByZXNldCBmb3IgdGhlIG5leHQgbXV0YXRpb25cclxuICAgICAgICAgICAgYWN0aXZlQWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gTXV0YXRpb25UeXBlLnBhdGNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5zdWJ0aXRsZSA9ICfipLXvuI8nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IE11dGF0aW9uVHlwZS5wYXRjaE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLnN1YnRpdGxlID0gJ/Cfp6knO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50cyAmJiAhQXJyYXkuaXNBcnJheShldmVudHMpKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudERhdGEuc3VidGl0bGUgPSBldmVudHMudHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudERhdGEuZGF0YVsncmF3RXZlbnQocyknXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBfY3VzdG9tOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdEZWJ1Z2dlckV2ZW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdyYXcgRGVidWdnZXJFdmVudFtdJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50cyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XHJcbiAgICAgICAgICAgICAgICBsYXllcklkOiBNVVRBVElPTlNfTEFZRVJfSUQsXHJcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnREYXRhLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCB7IGRldGFjaGVkOiB0cnVlLCBmbHVzaDogJ3N5bmMnIH0pO1xyXG4gICAgICAgIGNvbnN0IGhvdFVwZGF0ZSA9IHN0b3JlLl9ob3RVcGRhdGU7XHJcbiAgICAgICAgc3RvcmUuX2hvdFVwZGF0ZSA9IG1hcmtSYXcoKG5ld1N0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIGhvdFVwZGF0ZShuZXdTdG9yZSk7XHJcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcclxuICAgICAgICAgICAgICAgIGxheWVySWQ6IE1VVEFUSU9OU19MQVlFUl9JRCxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZTogbm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfwn5SlICcgKyBzdG9yZS4kaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6ICdITVIgdXBkYXRlJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBmb3JtYXREaXNwbGF5KHN0b3JlLiRpZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm86IGZvcm1hdERpc3BsYXkoYEhNUiB1cGRhdGVgKSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgZGV2dG9vbHMgdG9vXHJcbiAgICAgICAgICAgIGFwaS5ub3RpZnlDb21wb25lbnRVcGRhdGUoKTtcclxuICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JUcmVlKElOU1BFQ1RPUl9JRCk7XHJcbiAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoSU5TUEVDVE9SX0lEKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCB7ICRkaXNwb3NlIH0gPSBzdG9yZTtcclxuICAgICAgICBzdG9yZS4kZGlzcG9zZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgJGRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgYXBpLm5vdGlmeUNvbXBvbmVudFVwZGF0ZSgpO1xyXG4gICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclRyZWUoSU5TUEVDVE9SX0lEKTtcclxuICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShJTlNQRUNUT1JfSUQpO1xyXG4gICAgICAgICAgICBhcGkuZ2V0U2V0dGluZ3MoKS5sb2dTdG9yZUNoYW5nZXMgJiZcclxuICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZShgRGlzcG9zZWQgXCIke3N0b3JlLiRpZH1cIiBzdG9yZSDwn5eRYCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyB0cmlnZ2VyIGFuIHVwZGF0ZSBzbyBpdCBjYW4gZGlzcGxheSBuZXcgcmVnaXN0ZXJlZCBzdG9yZXNcclxuICAgICAgICBhcGkubm90aWZ5Q29tcG9uZW50VXBkYXRlKCk7XHJcbiAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JUcmVlKElOU1BFQ1RPUl9JRCk7XHJcbiAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShJTlNQRUNUT1JfSUQpO1xyXG4gICAgICAgIGFwaS5nZXRTZXR0aW5ncygpLmxvZ1N0b3JlQ2hhbmdlcyAmJlxyXG4gICAgICAgICAgICB0b2FzdE1lc3NhZ2UoYFwiJHtzdG9yZS4kaWR9XCIgc3RvcmUgaW5zdGFsbGVkIPCfhpVgKTtcclxuICAgIH0pO1xyXG59XHJcbmxldCBydW5uaW5nQWN0aW9uSWQgPSAwO1xyXG5sZXQgYWN0aXZlQWN0aW9uO1xyXG4vKipcclxuICogUGF0Y2hlcyBhIHN0b3JlIHRvIGVuYWJsZSBhY3Rpb24gZ3JvdXBpbmcgaW4gZGV2dG9vbHMgYnkgd3JhcHBpbmcgdGhlIHN0b3JlIHdpdGggYSBQcm94eSB0aGF0IGlzIHBhc3NlZCBhcyB0aGVcclxuICogY29udGV4dCBvZiBhbGwgYWN0aW9ucywgYWxsb3dpbmcgdXMgdG8gc2V0IGBydW5uaW5nQWN0aW9uYCBvbiBlYWNoIGFjY2VzcyBhbmQgZWZmZWN0aXZlbHkgYXNzb2NpYXRpbmcgYW55IHN0YXRlXHJcbiAqIG11dGF0aW9uIHRvIHRoZSBhY3Rpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBzdG9yZSAtIHN0b3JlIHRvIHBhdGNoXHJcbiAqIEBwYXJhbSBhY3Rpb25OYW1lcyAtIGxpc3Qgb2YgYWN0aW9uc3QgdG8gcGF0Y2hcclxuICovXHJcbmZ1bmN0aW9uIHBhdGNoQWN0aW9uRm9yR3JvdXBpbmcoc3RvcmUsIGFjdGlvbk5hbWVzKSB7XHJcbiAgICAvLyBvcmlnaW5hbCBhY3Rpb25zIG9mIHRoZSBzdG9yZSBhcyB0aGV5IGFyZSBnaXZlbiBieSBwaW5pYS4gV2UgYXJlIGdvaW5nIHRvIG92ZXJyaWRlIHRoZW1cclxuICAgIGNvbnN0IGFjdGlvbnMgPSBhY3Rpb25OYW1lcy5yZWR1Y2UoKHN0b3JlQWN0aW9ucywgYWN0aW9uTmFtZSkgPT4ge1xyXG4gICAgICAgIC8vIHVzZSB0b1JhdyB0byBhdm9pZCB0cmFja2luZyAjNTQxXHJcbiAgICAgICAgc3RvcmVBY3Rpb25zW2FjdGlvbk5hbWVdID0gdG9SYXcoc3RvcmUpW2FjdGlvbk5hbWVdO1xyXG4gICAgICAgIHJldHVybiBzdG9yZUFjdGlvbnM7XHJcbiAgICB9LCB7fSk7XHJcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gYWN0aW9ucykge1xyXG4gICAgICAgIHN0b3JlW2FjdGlvbk5hbWVdID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBzZXRBY3RpdmVQaW5pYShzdG9yZS5fcClcclxuICAgICAgICAgICAgLy8gdGhlIHJ1bm5pbmcgYWN0aW9uIGlkIGlzIGluY3JlbWVudGVkIGluIGEgYmVmb3JlIGFjdGlvbiBob29rXHJcbiAgICAgICAgICAgIGNvbnN0IF9hY3Rpb25JZCA9IHJ1bm5pbmdBY3Rpb25JZDtcclxuICAgICAgICAgICAgY29uc3QgdHJhY2tlZFN0b3JlID0gbmV3IFByb3h5KHN0b3JlLCB7XHJcbiAgICAgICAgICAgICAgICBnZXQoLi4uYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUFjdGlvbiA9IF9hY3Rpb25JZDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQoLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0KC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVBY3Rpb24gPSBfYWN0aW9uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25zW2FjdGlvbk5hbWVdLmFwcGx5KHRyYWNrZWRTdG9yZSwgYXJndW1lbnRzKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBwaW5pYS51c2UoZGV2dG9vbHNQbHVnaW4pXHJcbiAqL1xyXG5mdW5jdGlvbiBkZXZ0b29sc1BsdWdpbih7IGFwcCwgc3RvcmUsIG9wdGlvbnMgfSkge1xyXG4gICAgLy8gSE1SIG1vZHVsZVxyXG4gICAgaWYgKHN0b3JlLiRpZC5zdGFydHNXaXRoKCdfX2hvdDonKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGRldGVjdCBvcHRpb24gYXBpIHZzIHNldHVwIGFwaVxyXG4gICAgaWYgKG9wdGlvbnMuc3RhdGUpIHtcclxuICAgICAgICBzdG9yZS5faXNPcHRpb25zQVBJID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIG9ubHkgd3JhcCBhY3Rpb25zIGluIG9wdGlvbi1kZWZpbmVkIHN0b3JlcyBhcyB0aGlzIHRlY2huaXF1ZSByZWxpZXMgb25cclxuICAgIC8vIHdyYXBwaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBhY3Rpb24gd2l0aCBhIHByb3h5XHJcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3RhdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBwYXRjaEFjdGlvbkZvckdyb3VwaW5nKFxyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGNhbiBjYXN0IHRoZSBzdG9yZS4uLlxyXG4gICAgICAgIHN0b3JlLCBPYmplY3Qua2V5cyhvcHRpb25zLmFjdGlvbnMpKTtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbEhvdFVwZGF0ZSA9IHN0b3JlLl9ob3RVcGRhdGU7XHJcbiAgICAgICAgLy8gVXBncmFkZSB0aGUgSE1SIHRvIGFsc28gdXBkYXRlIHRoZSBuZXcgYWN0aW9uc1xyXG4gICAgICAgIHRvUmF3KHN0b3JlKS5faG90VXBkYXRlID0gZnVuY3Rpb24gKG5ld1N0b3JlKSB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsSG90VXBkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHBhdGNoQWN0aW9uRm9yR3JvdXBpbmcoc3RvcmUsIE9iamVjdC5rZXlzKG5ld1N0b3JlLl9obXJQYXlsb2FkLmFjdGlvbnMpKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgYWRkU3RvcmVUb0RldnRvb2xzKGFwcCwgXHJcbiAgICAvLyBGSVhNRTogaXMgdGhlcmUgYSB3YXkgdG8gYWxsb3cgdGhlIGFzc2lnbm1lbnQgZnJvbSBTdG9yZTxJZCwgUywgRywgQT4gdG8gU3RvcmVHZW5lcmljP1xyXG4gICAgc3RvcmUpO1xyXG59XG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgUGluaWEgaW5zdGFuY2UgdG8gYmUgdXNlZCBieSB0aGUgYXBwbGljYXRpb25cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVBpbmlhKCkge1xyXG4gICAgY29uc3Qgc2NvcGUgPSBlZmZlY3RTY29wZSh0cnVlKTtcclxuICAgIC8vIE5PVEU6IGhlcmUgd2UgY291bGQgY2hlY2sgdGhlIHdpbmRvdyBvYmplY3QgZm9yIGEgc3RhdGUgYW5kIGRpcmVjdGx5IHNldCBpdFxyXG4gICAgLy8gaWYgdGhlcmUgaXMgYW55dGhpbmcgbGlrZSBpdCB3aXRoIFZ1ZSAzIFNTUlxyXG4gICAgY29uc3Qgc3RhdGUgPSBzY29wZS5ydW4oKCkgPT4gcmVmKHt9KSk7XHJcbiAgICBsZXQgX3AgPSBbXTtcclxuICAgIC8vIHBsdWdpbnMgYWRkZWQgYmVmb3JlIGNhbGxpbmcgYXBwLnVzZShwaW5pYSlcclxuICAgIGxldCB0b0JlSW5zdGFsbGVkID0gW107XHJcbiAgICBjb25zdCBwaW5pYSA9IG1hcmtSYXcoe1xyXG4gICAgICAgIGluc3RhbGwoYXBwKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMgYWxsb3dzIGNhbGxpbmcgdXNlU3RvcmUoKSBvdXRzaWRlIG9mIGEgY29tcG9uZW50IHNldHVwIGFmdGVyXHJcbiAgICAgICAgICAgIC8vIGluc3RhbGxpbmcgcGluaWEncyBwbHVnaW5cclxuICAgICAgICAgICAgc2V0QWN0aXZlUGluaWEocGluaWEpO1xyXG4gICAgICAgICAgICBpZiAoIWlzVnVlMikge1xyXG4gICAgICAgICAgICAgICAgcGluaWEuX2EgPSBhcHA7XHJcbiAgICAgICAgICAgICAgICBhcHAucHJvdmlkZShwaW5pYVN5bWJvbCwgcGluaWEpO1xyXG4gICAgICAgICAgICAgICAgYXBwLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRwaW5pYSA9IHBpbmlhO1xyXG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgICAgICAgICAgICAgIGlmIChVU0VfREVWVE9PTFMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlclBpbmlhRGV2dG9vbHMoYXBwLCBwaW5pYSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0b0JlSW5zdGFsbGVkLmZvckVhY2goKHBsdWdpbikgPT4gX3AucHVzaChwbHVnaW4pKTtcclxuICAgICAgICAgICAgICAgIHRvQmVJbnN0YWxsZWQgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdXNlKHBsdWdpbikge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2EgJiYgIWlzVnVlMikge1xyXG4gICAgICAgICAgICAgICAgdG9CZUluc3RhbGxlZC5wdXNoKHBsdWdpbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfcC5wdXNoKHBsdWdpbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfcCxcclxuICAgICAgICAvLyBpdCdzIGFjdHVhbGx5IHVuZGVmaW5lZCBoZXJlXHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgIF9hOiBudWxsLFxyXG4gICAgICAgIF9lOiBzY29wZSxcclxuICAgICAgICBfczogbmV3IE1hcCgpLFxyXG4gICAgICAgIHN0YXRlLFxyXG4gICAgfSk7XHJcbiAgICAvLyBwaW5pYSBkZXZ0b29scyByZWx5IG9uIGRldiBvbmx5IGZlYXR1cmVzIHNvIHRoZXkgY2Fubm90IGJlIGZvcmNlZCB1bmxlc3NcclxuICAgIC8vIHRoZSBkZXYgYnVpbGQgb2YgVnVlIGlzIHVzZWQuIEF2b2lkIG9sZCBicm93c2VycyBsaWtlIElFMTEuXHJcbiAgICBpZiAoVVNFX0RFVlRPT0xTICYmIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBwaW5pYS51c2UoZGV2dG9vbHNQbHVnaW4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBpbmlhO1xyXG59XG5cbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBmdW5jdGlvbiBpcyBhIGBTdG9yZURlZmluaXRpb25gLlxyXG4gKlxyXG4gKiBAcGFyYW0gZm4gLSBvYmplY3QgdG8gdGVzdFxyXG4gKiBAcmV0dXJucyB0cnVlIGlmIGBmbmAgaXMgYSBTdG9yZURlZmluaXRpb25cclxuICovXHJcbmNvbnN0IGlzVXNlU3RvcmUgPSAoZm4pID0+IHtcclxuICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGZuLiRpZCA9PT0gJ3N0cmluZyc7XHJcbn07XHJcbi8qKlxyXG4gKiBNdXRhdGVzIGluIHBsYWNlIGBuZXdTdGF0ZWAgd2l0aCBgb2xkU3RhdGVgIHRvIF9ob3QgdXBkYXRlXyBpdC4gSXQgd2lsbFxyXG4gKiByZW1vdmUgYW55IGtleSBub3QgZXhpc3RpbmcgaW4gYG5ld1N0YXRlYCBhbmQgcmVjdXJzaXZlbHkgbWVyZ2UgcGxhaW5cclxuICogb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIG5ld1N0YXRlIC0gbmV3IHN0YXRlIG9iamVjdCB0byBiZSBwYXRjaGVkXHJcbiAqIEBwYXJhbSBvbGRTdGF0ZSAtIG9sZCBzdGF0ZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHBhdGNoIG5ld1N0YXRlXHJcbiAqIEByZXR1cm5zIC0gbmV3U3RhdGVcclxuICovXHJcbmZ1bmN0aW9uIHBhdGNoT2JqZWN0KG5ld1N0YXRlLCBvbGRTdGF0ZSkge1xyXG4gICAgLy8gbm8gbmVlZCB0byBnbyB0aHJvdWdoIHN5bWJvbHMgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBzZXJpYWxpemVkIGFueXdheVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2xkU3RhdGUpIHtcclxuICAgICAgICBjb25zdCBzdWJQYXRjaCA9IG9sZFN0YXRlW2tleV07XHJcbiAgICAgICAgLy8gc2tpcCB0aGUgd2hvbGUgc3ViIHRyZWVcclxuICAgICAgICBpZiAoIShrZXkgaW4gbmV3U3RhdGUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IG5ld1N0YXRlW2tleV07XHJcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodGFyZ2V0VmFsdWUpICYmXHJcbiAgICAgICAgICAgIGlzUGxhaW5PYmplY3Qoc3ViUGF0Y2gpICYmXHJcbiAgICAgICAgICAgICFpc1JlZihzdWJQYXRjaCkgJiZcclxuICAgICAgICAgICAgIWlzUmVhY3RpdmUoc3ViUGF0Y2gpKSB7XHJcbiAgICAgICAgICAgIG5ld1N0YXRlW2tleV0gPSBwYXRjaE9iamVjdCh0YXJnZXRWYWx1ZSwgc3ViUGF0Y2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gb2JqZWN0cyBhcmUgZWl0aGVyIGEgYml0IG1vcmUgY29tcGxleCAoZS5nLiByZWZzKSBvciBwcmltaXRpdmVzLCBzbyB3ZVxyXG4gICAgICAgICAgICAvLyBqdXN0IHNldCB0aGUgd2hvbGUgdGhpbmdcclxuICAgICAgICAgICAgaWYgKGlzVnVlMikge1xyXG4gICAgICAgICAgICAgICAgc2V0KG5ld1N0YXRlLCBrZXksIHN1YlBhdGNoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld1N0YXRlW2tleV0gPSBzdWJQYXRjaDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXdTdGF0ZTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBfYWNjZXB0XyBmdW5jdGlvbiB0byBwYXNzIHRvIGBpbXBvcnQubWV0YS5ob3RgIGluIFZpdGUgYXBwbGljYXRpb25zLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBqc1xyXG4gKiBjb25zdCB1c2VVc2VyID0gZGVmaW5lU3RvcmUoLi4uKVxyXG4gKiBpZiAoaW1wb3J0Lm1ldGEuaG90KSB7XHJcbiAqICAgaW1wb3J0Lm1ldGEuaG90LmFjY2VwdChhY2NlcHRITVJVcGRhdGUodXNlVXNlciwgaW1wb3J0Lm1ldGEuaG90KSlcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQHBhcmFtIGluaXRpYWxVc2VTdG9yZSAtIHJldHVybiBvZiB0aGUgZGVmaW5lU3RvcmUgdG8gaG90IHVwZGF0ZVxyXG4gKiBAcGFyYW0gaG90IC0gYGltcG9ydC5tZXRhLmhvdGBcclxuICovXHJcbmZ1bmN0aW9uIGFjY2VwdEhNUlVwZGF0ZShpbml0aWFsVXNlU3RvcmUsIGhvdCkge1xyXG4gICAgLy8gc3RyaXAgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIGlpZmUucHJvZFxyXG4gICAgaWYgKCEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICByZXR1cm4gKCkgPT4geyB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuZXdNb2R1bGUpID0+IHtcclxuICAgICAgICBjb25zdCBwaW5pYSA9IGhvdC5kYXRhLnBpbmlhIHx8IGluaXRpYWxVc2VTdG9yZS5fcGluaWE7XHJcbiAgICAgICAgaWYgKCFwaW5pYSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzIHN0b3JlIGlzIHN0aWxsIG5vdCB1c2VkXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcHJlc2VydmUgdGhlIHBpbmlhIGluc3RhbmNlIGFjcm9zcyBsb2Fkc1xyXG4gICAgICAgIGhvdC5kYXRhLnBpbmlhID0gcGluaWE7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2dvdCBkYXRhJywgbmV3U3RvcmUpXHJcbiAgICAgICAgZm9yIChjb25zdCBleHBvcnROYW1lIGluIG5ld01vZHVsZSkge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VTdG9yZSA9IG5ld01vZHVsZVtleHBvcnROYW1lXTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NoZWNraW5nIGZvcicsIGV4cG9ydE5hbWUpXHJcbiAgICAgICAgICAgIGlmIChpc1VzZVN0b3JlKHVzZVN0b3JlKSAmJiBwaW5pYS5fcy5oYXModXNlU3RvcmUuJGlkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0FjY2VwdGluZyB1cGRhdGUgZm9yJywgdXNlU3RvcmUuJGlkKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSB1c2VTdG9yZS4kaWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT09IGluaXRpYWxVc2VTdG9yZS4kaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBpZCBvZiB0aGUgc3RvcmUgY2hhbmdlZCBmcm9tIFwiJHtpbml0aWFsVXNlU3RvcmUuJGlkfVwiIHRvIFwiJHtpZH1cIi4gUmVsb2FkaW5nLmApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBpbXBvcnQubWV0YS5ob3QuaW52YWxpZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdC5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1N0b3JlID0gcGluaWEuX3MuZ2V0KGlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdTdG9yZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbUGluaWFdOiBza2lwcGluZyBobXIgYmVjYXVzZSBzdG9yZSBkb2Vzbid0IGV4aXN0IHlldGApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHVzZVN0b3JlKHBpbmlhLCBleGlzdGluZ1N0b3JlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHsgfTtcclxuZnVuY3Rpb24gYWRkU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbnMsIGNhbGxiYWNrLCBkZXRhY2hlZCwgb25DbGVhbnVwID0gbm9vcCkge1xyXG4gICAgc3Vic2NyaXB0aW9ucy5wdXNoKGNhbGxiYWNrKTtcclxuICAgIGNvbnN0IHJlbW92ZVN1YnNjcmlwdGlvbiA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBpZHggPSBzdWJzY3JpcHRpb25zLmluZGV4T2YoY2FsbGJhY2spO1xyXG4gICAgICAgIGlmIChpZHggPiAtMSkge1xyXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICBvbkNsZWFudXAoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKCFkZXRhY2hlZCAmJiBnZXRDdXJyZW50U2NvcGUoKSkge1xyXG4gICAgICAgIG9uU2NvcGVEaXNwb3NlKHJlbW92ZVN1YnNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVtb3ZlU3Vic2NyaXB0aW9uO1xyXG59XHJcbmZ1bmN0aW9uIHRyaWdnZXJTdWJzY3JpcHRpb25zKHN1YnNjcmlwdGlvbnMsIC4uLmFyZ3MpIHtcclxuICAgIHN1YnNjcmlwdGlvbnMuc2xpY2UoKS5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xyXG4gICAgICAgIGNhbGxiYWNrKC4uLmFyZ3MpO1xyXG4gICAgfSk7XHJcbn1cblxuZnVuY3Rpb24gbWVyZ2VSZWFjdGl2ZU9iamVjdHModGFyZ2V0LCBwYXRjaFRvQXBwbHkpIHtcclxuICAgIC8vIEhhbmRsZSBNYXAgaW5zdGFuY2VzXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWFwICYmIHBhdGNoVG9BcHBseSBpbnN0YW5jZW9mIE1hcCkge1xyXG4gICAgICAgIHBhdGNoVG9BcHBseS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB0YXJnZXQuc2V0KGtleSwgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIEhhbmRsZSBTZXQgaW5zdGFuY2VzXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU2V0ICYmIHBhdGNoVG9BcHBseSBpbnN0YW5jZW9mIFNldCkge1xyXG4gICAgICAgIHBhdGNoVG9BcHBseS5mb3JFYWNoKHRhcmdldC5hZGQsIHRhcmdldCk7XHJcbiAgICB9XHJcbiAgICAvLyBubyBuZWVkIHRvIGdvIHRocm91Z2ggc3ltYm9scyBiZWNhdXNlIHRoZXkgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYW55d2F5XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXRjaFRvQXBwbHkpIHtcclxuICAgICAgICBpZiAoIXBhdGNoVG9BcHBseS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBzdWJQYXRjaCA9IHBhdGNoVG9BcHBseVtrZXldO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XHJcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodGFyZ2V0VmFsdWUpICYmXHJcbiAgICAgICAgICAgIGlzUGxhaW5PYmplY3Qoc3ViUGF0Y2gpICYmXHJcbiAgICAgICAgICAgIHRhcmdldC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXHJcbiAgICAgICAgICAgICFpc1JlZihzdWJQYXRjaCkgJiZcclxuICAgICAgICAgICAgIWlzUmVhY3RpdmUoc3ViUGF0Y2gpKSB7XHJcbiAgICAgICAgICAgIC8vIE5PVEU6IGhlcmUgSSB3YW50ZWQgdG8gd2FybiBhYm91dCBpbmNvbnNpc3RlbnQgdHlwZXMgYnV0IGl0J3Mgbm90IHBvc3NpYmxlIGJlY2F1c2UgaW4gc2V0dXAgc3RvcmVzIG9uZSBtaWdodFxyXG4gICAgICAgICAgICAvLyBzdGFydCB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBhcyBhIGNlcnRhaW4gdHlwZSBlLmcuIGEgTWFwLCBhbmQgdGhlbiBmb3Igc29tZSByZWFzb24sIGR1cmluZyBTU1IsIGNoYW5nZSB0aGF0XHJcbiAgICAgICAgICAgIC8vIHRvIGB1bmRlZmluZWRgLiBXaGVuIHRyeWluZyB0byBoeWRyYXRlLCB3ZSB3YW50IHRvIG92ZXJyaWRlIHRoZSBNYXAgd2l0aCBgdW5kZWZpbmVkYC5cclxuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZVJlYWN0aXZlT2JqZWN0cyh0YXJnZXRWYWx1ZSwgc3ViUGF0Y2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc3ViUGF0Y2ggaXMgYSB2YWxpZCB2YWx1ZVxyXG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHN1YlBhdGNoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuY29uc3Qgc2tpcEh5ZHJhdGVTeW1ib2wgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgID8gU3ltYm9sKCdwaW5pYTpza2lwSHlkcmF0aW9uJylcclxuICAgIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gU3ltYm9sKCk7XHJcbmNvbnN0IHNraXBIeWRyYXRlTWFwID0gLyojX19QVVJFX18qLyBuZXcgV2Vha01hcCgpO1xyXG4vKipcclxuICogVGVsbHMgUGluaWEgdG8gc2tpcCB0aGUgaHlkcmF0aW9uIHByb2Nlc3Mgb2YgYSBnaXZlbiBvYmplY3QuIFRoaXMgaXMgdXNlZnVsIGluIHNldHVwIHN0b3JlcyAob25seSkgd2hlbiB5b3UgcmV0dXJuIGFcclxuICogc3RhdGVmdWwgb2JqZWN0IGluIHRoZSBzdG9yZSBidXQgaXQgaXNuJ3QgcmVhbGx5IHN0YXRlLiBlLmcuIHJldHVybmluZyBhIHJvdXRlciBpbnN0YW5jZSBpbiBhIHNldHVwIHN0b3JlLlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqIC0gdGFyZ2V0IG9iamVjdFxyXG4gKiBAcmV0dXJucyBvYmpcclxuICovXHJcbmZ1bmN0aW9uIHNraXBIeWRyYXRlKG9iaikge1xyXG4gICAgcmV0dXJuIGlzVnVlMlxyXG4gICAgICAgID8gLy8gaW4gQHZ1ZS9jb21wb3NpdGlvbi1hcGksIHRoZSByZWZzIGFyZSBzZWFsZWQgc28gZGVmaW5lUHJvcGVydHkgZG9lc24ndCB3b3JrLi4uXHJcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHNraXBIeWRyYXRlTWFwLnNldChvYmosIDEpICYmIG9ialxyXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgc2tpcEh5ZHJhdGVTeW1ib2wsIHt9KTtcclxufVxyXG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIGEgdmFsdWUgc2hvdWxkIGJlIGh5ZHJhdGVkXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmogLSB0YXJnZXQgdmFyaWFibGVcclxuICogQHJldHVybnMgdHJ1ZSBpZiBgb2JqYCBzaG91bGQgYmUgaHlkcmF0ZWRcclxuICovXHJcbmZ1bmN0aW9uIHNob3VsZEh5ZHJhdGUob2JqKSB7XHJcbiAgICByZXR1cm4gaXNWdWUyXHJcbiAgICAgICAgPyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyAhc2tpcEh5ZHJhdGVNYXAuaGFzKG9iailcclxuICAgICAgICA6ICFpc1BsYWluT2JqZWN0KG9iaikgfHwgIW9iai5oYXNPd25Qcm9wZXJ0eShza2lwSHlkcmF0ZVN5bWJvbCk7XHJcbn1cclxuY29uc3QgeyBhc3NpZ24gfSA9IE9iamVjdDtcclxuZnVuY3Rpb24gaXNDb21wdXRlZChvKSB7XHJcbiAgICByZXR1cm4gISEoaXNSZWYobykgJiYgby5lZmZlY3QpO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnNTdG9yZShpZCwgb3B0aW9ucywgcGluaWEsIGhvdCkge1xyXG4gICAgY29uc3QgeyBzdGF0ZSwgYWN0aW9ucywgZ2V0dGVycyB9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHBpbmlhLnN0YXRlLnZhbHVlW2lkXTtcclxuICAgIGxldCBzdG9yZTtcclxuICAgIGZ1bmN0aW9uIHNldHVwKCkge1xyXG4gICAgICAgIGlmICghaW5pdGlhbFN0YXRlICYmICghKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8ICFob3QpKSB7XHJcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgICAgICBpZiAoaXNWdWUyKSB7XHJcbiAgICAgICAgICAgICAgICBzZXQocGluaWEuc3RhdGUudmFsdWUsIGlkLCBzdGF0ZSA/IHN0YXRlKCkgOiB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwaW5pYS5zdGF0ZS52YWx1ZVtpZF0gPSBzdGF0ZSA/IHN0YXRlKCkgOiB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhdm9pZCBjcmVhdGluZyBhIHN0YXRlIGluIHBpbmlhLnN0YXRlLnZhbHVlXHJcbiAgICAgICAgY29uc3QgbG9jYWxTdGF0ZSA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBob3RcclxuICAgICAgICAgICAgPyAvLyB1c2UgcmVmKCkgdG8gdW53cmFwIHJlZnMgaW5zaWRlIHN0YXRlIFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgbmVjZXNzYXJ5XHJcbiAgICAgICAgICAgICAgICB0b1JlZnMocmVmKHN0YXRlID8gc3RhdGUoKSA6IHt9KS52YWx1ZSlcclxuICAgICAgICAgICAgOiB0b1JlZnMocGluaWEuc3RhdGUudmFsdWVbaWRdKTtcclxuICAgICAgICByZXR1cm4gYXNzaWduKGxvY2FsU3RhdGUsIGFjdGlvbnMsIE9iamVjdC5rZXlzKGdldHRlcnMgfHwge30pLnJlZHVjZSgoY29tcHV0ZWRHZXR0ZXJzLCBuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgbmFtZSBpbiBsb2NhbFN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFvwn42NXTogQSBnZXR0ZXIgY2Fubm90IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhbm90aGVyIHN0YXRlIHByb3BlcnR5LiBSZW5hbWUgb25lIG9mIHRoZW0uIEZvdW5kIHdpdGggXCIke25hbWV9XCIgaW4gc3RvcmUgXCIke2lkfVwiLmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbXB1dGVkR2V0dGVyc1tuYW1lXSA9IG1hcmtSYXcoY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlUGluaWEocGluaWEpO1xyXG4gICAgICAgICAgICAgICAgLy8gaXQgd2FzIGNyZWF0ZWQganVzdCBiZWZvcmVcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gcGluaWEuX3MuZ2V0KGlkKTtcclxuICAgICAgICAgICAgICAgIC8vIGFsbG93IGNyb3NzIHVzaW5nIHN0b3Jlc1xyXG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICAgICAgICAgIGlmIChpc1Z1ZTIgJiYgIXN0b3JlLl9yKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICAgICAgICAgIC8vIHJldHVybiBnZXR0ZXJzIVtuYW1lXS5jYWxsKGNvbnRleHQsIGNvbnRleHQpXHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBhdm9pZCByZWFkaW5nIHRoZSBnZXR0ZXIgd2hpbGUgYXNzaWduaW5nIHdpdGggYSBnbG9iYWwgdmFyaWFibGVcclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXJzW25hbWVdLmNhbGwoc3RvcmUsIHN0b3JlKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRHZXR0ZXJzO1xyXG4gICAgICAgIH0sIHt9KSk7XHJcbiAgICB9XHJcbiAgICBzdG9yZSA9IGNyZWF0ZVNldHVwU3RvcmUoaWQsIHNldHVwLCBvcHRpb25zLCBwaW5pYSwgaG90LCB0cnVlKTtcclxuICAgIHN0b3JlLiRyZXNldCA9IGZ1bmN0aW9uICRyZXNldCgpIHtcclxuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlID8gc3RhdGUoKSA6IHt9O1xyXG4gICAgICAgIC8vIHdlIHVzZSBhIHBhdGNoIHRvIGdyb3VwIGFsbCBjaGFuZ2VzIGludG8gb25lIHNpbmdsZSBzdWJzY3JpcHRpb25cclxuICAgICAgICB0aGlzLiRwYXRjaCgoJHN0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGFzc2lnbigkc3RhdGUsIG5ld1N0YXRlKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gc3RvcmU7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU2V0dXBTdG9yZSgkaWQsIHNldHVwLCBvcHRpb25zID0ge30sIHBpbmlhLCBob3QsIGlzT3B0aW9uc1N0b3JlKSB7XHJcbiAgICBsZXQgc2NvcGU7XHJcbiAgICBjb25zdCBvcHRpb25zRm9yUGx1Z2luID0gYXNzaWduKHsgYWN0aW9uczoge30gfSwgb3B0aW9ucyk7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGFjdGl2ZSBpcyBhbiBpbnRlcm5hbCBwcm9wZXJ0eVxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhcGluaWEuX2UuYWN0aXZlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaW5pYSBkZXN0cm95ZWQnKTtcclxuICAgIH1cclxuICAgIC8vIHdhdGNoZXIgb3B0aW9ucyBmb3IgJHN1YnNjcmliZVxyXG4gICAgY29uc3QgJHN1YnNjcmliZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAvLyBmbHVzaDogJ3Bvc3QnLFxyXG4gICAgfTtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1Z1ZTIpIHtcclxuICAgICAgICAkc3Vic2NyaWJlT3B0aW9ucy5vblRyaWdnZXIgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgICAgICAgICAgaWYgKGlzTGlzdGVuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlckV2ZW50cyA9IGV2ZW50O1xyXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgdHJpZ2dlcmluZyB0aGlzIHdoaWxlIHRoZSBzdG9yZSBpcyBiZWluZyBidWlsdCBhbmQgdGhlIHN0YXRlIGlzIGJlaW5nIHNldCBpbiBwaW5pYVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTGlzdGVuaW5nID09IGZhbHNlICYmICFzdG9yZS5faG90VXBkYXRpbmcpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxldCBwYXRjaCBzZW5kIGFsbCB0aGUgZXZlbnRzIHRvZ2V0aGVyIGxhdGVyXHJcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVidWdnZXJFdmVudHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVidWdnZXJFdmVudHMucHVzaChldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfwn42NIGRlYnVnZ2VyRXZlbnRzIHNob3VsZCBiZSBhbiBhcnJheS4gVGhpcyBpcyBtb3N0IGxpa2VseSBhbiBpbnRlcm5hbCBQaW5pYSBidWcuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgLy8gaW50ZXJuYWwgc3RhdGVcclxuICAgIGxldCBpc0xpc3RlbmluZzsgLy8gc2V0IHRvIHRydWUgYXQgdGhlIGVuZFxyXG4gICAgbGV0IGlzU3luY0xpc3RlbmluZzsgLy8gc2V0IHRvIHRydWUgYXQgdGhlIGVuZFxyXG4gICAgbGV0IHN1YnNjcmlwdGlvbnMgPSBtYXJrUmF3KFtdKTtcclxuICAgIGxldCBhY3Rpb25TdWJzY3JpcHRpb25zID0gbWFya1JhdyhbXSk7XHJcbiAgICBsZXQgZGVidWdnZXJFdmVudHM7XHJcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSBwaW5pYS5zdGF0ZS52YWx1ZVskaWRdO1xyXG4gICAgLy8gYXZvaWQgc2V0dGluZyB0aGUgc3RhdGUgZm9yIG9wdGlvbiBzdG9yZXMgaWYgaXQgaXMgc2V0XHJcbiAgICAvLyBieSB0aGUgc2V0dXBcclxuICAgIGlmICghaXNPcHRpb25zU3RvcmUgJiYgIWluaXRpYWxTdGF0ZSAmJiAoIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCAhaG90KSkge1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgIGlmIChpc1Z1ZTIpIHtcclxuICAgICAgICAgICAgc2V0KHBpbmlhLnN0YXRlLnZhbHVlLCAkaWQsIHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHBpbmlhLnN0YXRlLnZhbHVlWyRpZF0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBob3RTdGF0ZSA9IHJlZih7fSk7XHJcbiAgICAvLyBhdm9pZCB0cmlnZ2VyaW5nIHRvbyBtYW55IGxpc3RlbmVyc1xyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3BpbmlhL2lzc3Vlcy8xMTI5XHJcbiAgICBsZXQgYWN0aXZlTGlzdGVuZXI7XHJcbiAgICBmdW5jdGlvbiAkcGF0Y2gocGFydGlhbFN0YXRlT3JNdXRhdG9yKSB7XHJcbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbk11dGF0aW9uO1xyXG4gICAgICAgIGlzTGlzdGVuaW5nID0gaXNTeW5jTGlzdGVuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgLy8gcmVzZXQgdGhlIGRlYnVnZ2VyIGV2ZW50cyBzaW5jZSBwYXRjaGVzIGFyZSBzeW5jXHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIGRlYnVnZ2VyRXZlbnRzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcGFydGlhbFN0YXRlT3JNdXRhdG9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHBhcnRpYWxTdGF0ZU9yTXV0YXRvcihwaW5pYS5zdGF0ZS52YWx1ZVskaWRdKTtcclxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uTXV0YXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBNdXRhdGlvblR5cGUucGF0Y2hGdW5jdGlvbixcclxuICAgICAgICAgICAgICAgIHN0b3JlSWQ6ICRpZCxcclxuICAgICAgICAgICAgICAgIGV2ZW50czogZGVidWdnZXJFdmVudHMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtZXJnZVJlYWN0aXZlT2JqZWN0cyhwaW5pYS5zdGF0ZS52YWx1ZVskaWRdLCBwYXJ0aWFsU3RhdGVPck11dGF0b3IpO1xyXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25NdXRhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IE11dGF0aW9uVHlwZS5wYXRjaE9iamVjdCxcclxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHBhcnRpYWxTdGF0ZU9yTXV0YXRvcixcclxuICAgICAgICAgICAgICAgIHN0b3JlSWQ6ICRpZCxcclxuICAgICAgICAgICAgICAgIGV2ZW50czogZGVidWdnZXJFdmVudHMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG15TGlzdGVuZXJJZCA9IChhY3RpdmVMaXN0ZW5lciA9IFN5bWJvbCgpKTtcclxuICAgICAgICBuZXh0VGljaygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYWN0aXZlTGlzdGVuZXIgPT09IG15TGlzdGVuZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgaXNMaXN0ZW5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXNTeW5jTGlzdGVuaW5nID0gdHJ1ZTtcclxuICAgICAgICAvLyBiZWNhdXNlIHdlIHBhdXNlZCB0aGUgd2F0Y2hlciwgd2UgbmVlZCB0byBtYW51YWxseSBjYWxsIHRoZSBzdWJzY3JpcHRpb25zXHJcbiAgICAgICAgdHJpZ2dlclN1YnNjcmlwdGlvbnMoc3Vic2NyaXB0aW9ucywgc3Vic2NyaXB0aW9uTXV0YXRpb24sIHBpbmlhLnN0YXRlLnZhbHVlWyRpZF0pO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIGNvbnN0ICRyZXNldCA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgID8gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYPCfjY06IFN0b3JlIFwiJHskaWR9XCIgaXMgYnVpbHQgdXNpbmcgdGhlIHNldHVwIHN5bnRheCBhbmQgZG9lcyBub3QgaW1wbGVtZW50ICRyZXNldCgpLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICA6IG5vb3A7XHJcbiAgICBmdW5jdGlvbiAkZGlzcG9zZSgpIHtcclxuICAgICAgICBzY29wZS5zdG9wKCk7XHJcbiAgICAgICAgc3Vic2NyaXB0aW9ucyA9IFtdO1xyXG4gICAgICAgIGFjdGlvblN1YnNjcmlwdGlvbnMgPSBbXTtcclxuICAgICAgICBwaW5pYS5fcy5kZWxldGUoJGlkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYW4gYWN0aW9uIHRvIGhhbmRsZSBzdWJzY3JpcHRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuYW1lIC0gbmFtZSBvZiB0aGUgYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uIC0gYWN0aW9uIHRvIHdyYXBcclxuICAgICAqIEByZXR1cm5zIGEgd3JhcHBlZCBhY3Rpb24gdG8gaGFuZGxlIHN1YnNjcmlwdGlvbnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gd3JhcEFjdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZXRBY3RpdmVQaW5pYShwaW5pYSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyQ2FsbGJhY2tMaXN0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG9uRXJyb3JDYWxsYmFja0xpc3QgPSBbXTtcclxuICAgICAgICAgICAgZnVuY3Rpb24gYWZ0ZXIoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIGFmdGVyQ2FsbGJhY2tMaXN0LnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIG9uRXJyb3JDYWxsYmFja0xpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgICAgICB0cmlnZ2VyU3Vic2NyaXB0aW9ucyhhY3Rpb25TdWJzY3JpcHRpb25zLCB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLFxyXG4gICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgIHN0b3JlLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXIsXHJcbiAgICAgICAgICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGV0IHJldDtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldCA9IGFjdGlvbi5hcHBseSh0aGlzICYmIHRoaXMuJGlkID09PSAkaWQgPyB0aGlzIDogc3RvcmUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHN5bmMgZXJyb3JzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyU3Vic2NyaXB0aW9ucyhvbkVycm9yQ2FsbGJhY2tMaXN0LCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldFxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJzY3JpcHRpb25zKGFmdGVyQ2FsbGJhY2tMaXN0LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlclN1YnNjcmlwdGlvbnMob25FcnJvckNhbGxiYWNrTGlzdCwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhbGxvdyB0aGUgYWZ0ZXJDYWxsYmFjayB0byBvdmVycmlkZSB0aGUgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgIHRyaWdnZXJTdWJzY3JpcHRpb25zKGFmdGVyQ2FsbGJhY2tMaXN0LCByZXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBfaG1yUGF5bG9hZCA9IC8qI19fUFVSRV9fKi8gbWFya1Jhdyh7XHJcbiAgICAgICAgYWN0aW9uczoge30sXHJcbiAgICAgICAgZ2V0dGVyczoge30sXHJcbiAgICAgICAgc3RhdGU6IFtdLFxyXG4gICAgICAgIGhvdFN0YXRlLFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBwYXJ0aWFsU3RvcmUgPSB7XHJcbiAgICAgICAgX3A6IHBpbmlhLFxyXG4gICAgICAgIC8vIF9zOiBzY29wZSxcclxuICAgICAgICAkaWQsXHJcbiAgICAgICAgJG9uQWN0aW9uOiBhZGRTdWJzY3JpcHRpb24uYmluZChudWxsLCBhY3Rpb25TdWJzY3JpcHRpb25zKSxcclxuICAgICAgICAkcGF0Y2gsXHJcbiAgICAgICAgJHJlc2V0LFxyXG4gICAgICAgICRzdWJzY3JpYmUoY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgICAgICBjb25zdCByZW1vdmVTdWJzY3JpcHRpb24gPSBhZGRTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9ucywgY2FsbGJhY2ssIG9wdGlvbnMuZGV0YWNoZWQsICgpID0+IHN0b3BXYXRjaGVyKCkpO1xyXG4gICAgICAgICAgICBjb25zdCBzdG9wV2F0Y2hlciA9IHNjb3BlLnJ1bigoKSA9PiB3YXRjaCgoKSA9PiBwaW5pYS5zdGF0ZS52YWx1ZVskaWRdLCAoc3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZsdXNoID09PSAnc3luYycgPyBpc1N5bmNMaXN0ZW5pbmcgOiBpc0xpc3RlbmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVJZDogJGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNdXRhdGlvblR5cGUuZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IGRlYnVnZ2VyRXZlbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgYXNzaWduKHt9LCAkc3Vic2NyaWJlT3B0aW9ucywgb3B0aW9ucykpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlbW92ZVN1YnNjcmlwdGlvbjtcclxuICAgICAgICB9LFxyXG4gICAgICAgICRkaXNwb3NlLFxyXG4gICAgfTtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKGlzVnVlMikge1xyXG4gICAgICAgIC8vIHN0YXJ0IGFzIG5vbiByZWFkeVxyXG4gICAgICAgIHBhcnRpYWxTdG9yZS5fciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RvcmUgPSByZWFjdGl2ZSgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgVVNFX0RFVlRPT0xTXHJcbiAgICAgICAgPyBhc3NpZ24oe1xyXG4gICAgICAgICAgICBfaG1yUGF5bG9hZCxcclxuICAgICAgICAgICAgX2N1c3RvbVByb3BlcnRpZXM6IG1hcmtSYXcobmV3IFNldCgpKSwgLy8gZGV2dG9vbHMgY3VzdG9tIHByb3BlcnRpZXNcclxuICAgICAgICB9LCBwYXJ0aWFsU3RvcmVcclxuICAgICAgICAvLyBtdXN0IGJlIGFkZGVkIGxhdGVyXHJcbiAgICAgICAgLy8gc2V0dXBTdG9yZVxyXG4gICAgICAgIClcclxuICAgICAgICA6IHBhcnRpYWxTdG9yZSk7XHJcbiAgICAvLyBzdG9yZSB0aGUgcGFydGlhbCBzdG9yZSBub3cgc28gdGhlIHNldHVwIG9mIHN0b3JlcyBjYW4gaW5zdGFudGlhdGUgZWFjaCBvdGhlciBiZWZvcmUgdGhleSBhcmUgZmluaXNoZWQgd2l0aG91dFxyXG4gICAgLy8gY3JlYXRpbmcgaW5maW5pdGUgbG9vcHMuXHJcbiAgICBwaW5pYS5fcy5zZXQoJGlkLCBzdG9yZSk7XHJcbiAgICAvLyBUT0RPOiBpZGVhIGNyZWF0ZSBza2lwU2VyaWFsaXplIHRoYXQgbWFya3MgcHJvcGVydGllcyBhcyBub24gc2VyaWFsaXphYmxlIGFuZCB0aGV5IGFyZSBza2lwcGVkXHJcbiAgICBjb25zdCBzZXR1cFN0b3JlID0gcGluaWEuX2UucnVuKCgpID0+IHtcclxuICAgICAgICBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XHJcbiAgICAgICAgcmV0dXJuIHNjb3BlLnJ1bigoKSA9PiBzZXR1cCgpKTtcclxuICAgIH0pO1xyXG4gICAgLy8gb3ZlcndyaXRlIGV4aXN0aW5nIGFjdGlvbnMgdG8gc3VwcG9ydCAkb25BY3Rpb25cclxuICAgIGZvciAoY29uc3Qga2V5IGluIHNldHVwU3RvcmUpIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gc2V0dXBTdG9yZVtrZXldO1xyXG4gICAgICAgIGlmICgoaXNSZWYocHJvcCkgJiYgIWlzQ29tcHV0ZWQocHJvcCkpIHx8IGlzUmVhY3RpdmUocHJvcCkpIHtcclxuICAgICAgICAgICAgLy8gbWFyayBpdCBhcyBhIHBpZWNlIG9mIHN0YXRlIHRvIGJlIHNlcmlhbGl6ZWRcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBob3QpIHtcclxuICAgICAgICAgICAgICAgIHNldChob3RTdGF0ZS52YWx1ZSwga2V5LCB0b1JlZihzZXR1cFN0b3JlLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZU9wdGlvblN0b3JlIGRpcmVjdGx5IHNldHMgdGhlIHN0YXRlIGluIHBpbmlhLnN0YXRlLnZhbHVlIHNvIHdlXHJcbiAgICAgICAgICAgICAgICAvLyBjYW4ganVzdCBza2lwIHRoYXRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghaXNPcHRpb25zU3RvcmUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGluIHNldHVwIHN0b3JlcyB3ZSBtdXN0IGh5ZHJhdGUgdGhlIHN0YXRlIGFuZCBzeW5jIHBpbmlhIHN0YXRlIHRyZWUgd2l0aCB0aGUgcmVmcyB0aGUgdXNlciBqdXN0IGNyZWF0ZWRcclxuICAgICAgICAgICAgICAgIGlmIChpbml0aWFsU3RhdGUgJiYgc2hvdWxkSHlkcmF0ZShwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JlZihwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wLnZhbHVlID0gaW5pdGlhbFN0YXRlW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9iYWJseSBhIHJlYWN0aXZlIG9iamVjdCwgbGV0cyByZWN1cnNpdmVseSBhc3NpZ25cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogcHJvcCBpcyB1bmtub3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlUmVhY3RpdmVPYmplY3RzKHByb3AsIGluaXRpYWxTdGF0ZVtrZXldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2ZlciB0aGUgcmVmIHRvIHRoZSBwaW5pYSBzdGF0ZSB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gc3luY1xyXG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNWdWUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0KHBpbmlhLnN0YXRlLnZhbHVlWyRpZF0sIGtleSwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwaW5pYS5zdGF0ZS52YWx1ZVskaWRdW2tleV0gPSBwcm9wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIF9obXJQYXlsb2FkLnN0YXRlLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhY3Rpb25cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHByb3AgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2UgYXJlIG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uIHdlIGF2b2lkIHdyYXBwaW5nIGlmXHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblZhbHVlID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGhvdCA/IHByb3AgOiB3cmFwQWN0aW9uKGtleSwgcHJvcCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMgYSBob3QgbW9kdWxlIHJlcGxhY2VtZW50IHN0b3JlIGJlY2F1c2UgdGhlIGhvdFVwZGF0ZSBtZXRob2QgbmVlZHNcclxuICAgICAgICAgICAgLy8gdG8gZG8gaXQgd2l0aCB0aGUgcmlnaHQgY29udGV4dFxyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICAgICAgaWYgKGlzVnVlMikge1xyXG4gICAgICAgICAgICAgICAgc2V0KHNldHVwU3RvcmUsIGtleSwgYWN0aW9uVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgc2V0dXBTdG9yZVtrZXldID0gYWN0aW9uVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgX2htclBheWxvYWQuYWN0aW9uc1trZXldID0gcHJvcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBsaXN0IGFjdGlvbnMgc28gdGhleSBjYW4gYmUgdXNlZCBpbiBwbHVnaW5zXHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICAgICAgb3B0aW9uc0ZvclBsdWdpbi5hY3Rpb25zW2tleV0gPSBwcm9wO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgLy8gYWRkIGdldHRlcnMgZm9yIGRldnRvb2xzXHJcbiAgICAgICAgICAgIGlmIChpc0NvbXB1dGVkKHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBfaG1yUGF5bG9hZC5nZXR0ZXJzW2tleV0gPSBpc09wdGlvbnNTdG9yZVxyXG4gICAgICAgICAgICAgICAgICAgID8gLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmdldHRlcnNba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcDtcclxuICAgICAgICAgICAgICAgIGlmIChJU19DTElFTlQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXR0ZXJzID0gc2V0dXBTdG9yZS5fZ2V0dGVycyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBzYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZXR1cFN0b3JlLl9nZXR0ZXJzID0gbWFya1JhdyhbXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcnMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gYWRkIHRoZSBzdGF0ZSwgZ2V0dGVycywgYW5kIGFjdGlvbiBwcm9wZXJ0aWVzXHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChpc1Z1ZTIpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhzZXR1cFN0b3JlKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgc2V0KHN0b3JlLCBrZXksIHNldHVwU3RvcmVba2V5XSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhc3NpZ24oc3RvcmUsIHNldHVwU3RvcmUpO1xyXG4gICAgICAgIC8vIGFsbG93cyByZXRyaWV2aW5nIHJlYWN0aXZlIG9iamVjdHMgd2l0aCBgc3RvcmVUb1JlZnMoKWAuIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFzc2lnbmluZyB0byB0aGUgcmVhY3RpdmUgb2JqZWN0LlxyXG4gICAgICAgIC8vIE1ha2UgYHN0b3JlVG9SZWZzKClgIHdvcmsgd2l0aCBgcmVhY3RpdmUoKWAgIzc5OVxyXG4gICAgICAgIGFzc2lnbih0b1JhdyhzdG9yZSksIHNldHVwU3RvcmUpO1xyXG4gICAgfVxyXG4gICAgLy8gdXNlIHRoaXMgaW5zdGVhZCBvZiBhIGNvbXB1dGVkIHdpdGggc2V0dGVyIHRvIGJlIGFibGUgdG8gY3JlYXRlIGl0IGFueXdoZXJlXHJcbiAgICAvLyB3aXRob3V0IGxpbmtpbmcgdGhlIGNvbXB1dGVkIGxpZmVzcGFuIHRvIHdoZXJldmVyIHRoZSBzdG9yZSBpcyBmaXJzdFxyXG4gICAgLy8gY3JlYXRlZC5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdG9yZSwgJyRzdGF0ZScsIHtcclxuICAgICAgICBnZXQ6ICgpID0+ICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaG90ID8gaG90U3RhdGUudmFsdWUgOiBwaW5pYS5zdGF0ZS52YWx1ZVskaWRdKSxcclxuICAgICAgICBzZXQ6IChzdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBob3QpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHNldCBob3RTdGF0ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICRwYXRjaCgoJHN0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhc3NpZ24oJHN0YXRlLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIC8vIGFkZCB0aGUgaG90VXBkYXRlIGJlZm9yZSBwbHVnaW5zIHRvIGFsbG93IHRoZW0gdG8gb3ZlcnJpZGUgaXRcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgc3RvcmUuX2hvdFVwZGF0ZSA9IG1hcmtSYXcoKG5ld1N0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIHN0b3JlLl9ob3RVcGRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIG5ld1N0b3JlLl9obXJQYXlsb2FkLnN0YXRlLmZvckVhY2goKHN0YXRlS2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVLZXkgaW4gc3RvcmUuJHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGVUYXJnZXQgPSBuZXdTdG9yZS4kc3RhdGVbc3RhdGVLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFN0YXRlU291cmNlID0gc3RvcmUuJHN0YXRlW3N0YXRlS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5ld1N0YXRlVGFyZ2V0ID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BsYWluT2JqZWN0KG5ld1N0YXRlVGFyZ2V0KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BsYWluT2JqZWN0KG9sZFN0YXRlU291cmNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaE9iamVjdChuZXdTdGF0ZVRhcmdldCwgb2xkU3RhdGVTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNmZXIgdGhlIHJlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdG9yZS4kc3RhdGVbc3RhdGVLZXldID0gb2xkU3RhdGVTb3VyY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggZGlyZWN0IGFjY2VzcyBwcm9wZXJ0aWVzIHRvIGFsbG93IHN0b3JlLnN0YXRlUHJvcGVydHkgdG8gd29yayBhc1xyXG4gICAgICAgICAgICAgICAgLy8gc3RvcmUuJHN0YXRlLnN0YXRlUHJvcGVydHlcclxuICAgICAgICAgICAgICAgIHNldChzdG9yZSwgc3RhdGVLZXksIHRvUmVmKG5ld1N0b3JlLiRzdGF0ZSwgc3RhdGVLZXkpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBkZWxldGVkIHN0YXRlIHByb3BlcnRpZXNcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RvcmUuJHN0YXRlKS5mb3JFYWNoKChzdGF0ZUtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoc3RhdGVLZXkgaW4gbmV3U3RvcmUuJHN0YXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbChzdG9yZSwgc3RhdGVLZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gYXZvaWQgZGV2dG9vbHMgbG9nZ2luZyB0aGlzIGFzIGEgbXV0YXRpb25cclxuICAgICAgICAgICAgaXNMaXN0ZW5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaXNTeW5jTGlzdGVuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHBpbmlhLnN0YXRlLnZhbHVlWyRpZF0gPSB0b1JlZihuZXdTdG9yZS5faG1yUGF5bG9hZCwgJ2hvdFN0YXRlJyk7XHJcbiAgICAgICAgICAgIGlzU3luY0xpc3RlbmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIG5leHRUaWNrKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpc0xpc3RlbmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gbmV3U3RvcmUuX2htclBheWxvYWQuYWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gbmV3U3RvcmVbYWN0aW9uTmFtZV07XHJcbiAgICAgICAgICAgICAgICBzZXQoc3RvcmUsIGFjdGlvbk5hbWUsIHdyYXBBY3Rpb24oYWN0aW9uTmFtZSwgYWN0aW9uKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVE9ETzogZG9lcyB0aGlzIHdvcmsgaW4gYm90aCBzZXR1cCBhbmQgb3B0aW9uIHN0b3JlP1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdldHRlck5hbWUgaW4gbmV3U3RvcmUuX2htclBheWxvYWQuZ2V0dGVycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0dGVyID0gbmV3U3RvcmUuX2htclBheWxvYWQuZ2V0dGVyc1tnZXR0ZXJOYW1lXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlclZhbHVlID0gaXNPcHRpb25zU3RvcmVcclxuICAgICAgICAgICAgICAgICAgICA/IC8vIHNwZWNpYWwgaGFuZGxpbmcgb2Ygb3B0aW9ucyBhcGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGluaWEocGluaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlci5jYWxsKHN0b3JlLCBzdG9yZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgOiBnZXR0ZXI7XHJcbiAgICAgICAgICAgICAgICBzZXQoc3RvcmUsIGdldHRlck5hbWUsIGdldHRlclZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyByZW1vdmUgZGVsZXRlZCBnZXR0ZXJzXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0b3JlLl9obXJQYXlsb2FkLmdldHRlcnMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIG5ld1N0b3JlLl9obXJQYXlsb2FkLmdldHRlcnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsKHN0b3JlLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIG9sZCBhY3Rpb25zXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0b3JlLl9obXJQYXlsb2FkLmFjdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIG5ld1N0b3JlLl9obXJQYXlsb2FkLmFjdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsKHN0b3JlLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSB2YWx1ZXMgdXNlZCBpbiBkZXZ0b29scyBhbmQgdG8gYWxsb3cgZGVsZXRpbmcgbmV3IHByb3BlcnRpZXMgbGF0ZXIgb25cclxuICAgICAgICAgICAgc3RvcmUuX2htclBheWxvYWQgPSBuZXdTdG9yZS5faG1yUGF5bG9hZDtcclxuICAgICAgICAgICAgc3RvcmUuX2dldHRlcnMgPSBuZXdTdG9yZS5fZ2V0dGVycztcclxuICAgICAgICAgICAgc3RvcmUuX2hvdFVwZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoVVNFX0RFVlRPT0xTKSB7XHJcbiAgICAgICAgY29uc3Qgbm9uRW51bWVyYWJsZSA9IHtcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgLy8gYXZvaWQgd2FybmluZyBvbiBkZXZ0b29scyB0cnlpbmcgdG8gZGlzcGxheSB0aGlzIHByb3BlcnR5XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgWydfcCcsICdfaG1yUGF5bG9hZCcsICdfZ2V0dGVycycsICdfY3VzdG9tUHJvcGVydGllcyddLmZvckVhY2goKHApID0+IHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0b3JlLCBwLCB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RvcmVbcF0sXHJcbiAgICAgICAgICAgICAgICAuLi5ub25FbnVtZXJhYmxlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKGlzVnVlMikge1xyXG4gICAgICAgIC8vIG1hcmsgdGhlIHN0b3JlIGFzIHJlYWR5IGJlZm9yZSBwbHVnaW5zXHJcbiAgICAgICAgc3RvcmUuX3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gYXBwbHkgYWxsIHBsdWdpbnNcclxuICAgIHBpbmlhLl9wLmZvckVhY2goKGV4dGVuZGVyKSA9PiB7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgICAgICBpZiAoVVNFX0RFVlRPT0xTKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBzY29wZS5ydW4oKCkgPT4gZXh0ZW5kZXIoe1xyXG4gICAgICAgICAgICAgICAgc3RvcmUsXHJcbiAgICAgICAgICAgICAgICBhcHA6IHBpbmlhLl9hLFxyXG4gICAgICAgICAgICAgICAgcGluaWEsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zRm9yUGx1Z2luLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGV4dGVuc2lvbnMgfHwge30pLmZvckVhY2goKGtleSkgPT4gc3RvcmUuX2N1c3RvbVByb3BlcnRpZXMuYWRkKGtleSkpO1xyXG4gICAgICAgICAgICBhc3NpZ24oc3RvcmUsIGV4dGVuc2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYXNzaWduKHN0b3JlLCBzY29wZS5ydW4oKCkgPT4gZXh0ZW5kZXIoe1xyXG4gICAgICAgICAgICAgICAgc3RvcmUsXHJcbiAgICAgICAgICAgICAgICBhcHA6IHBpbmlhLl9hLFxyXG4gICAgICAgICAgICAgICAgcGluaWEsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zRm9yUGx1Z2luLFxyXG4gICAgICAgICAgICB9KSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgIHN0b3JlLiRzdGF0ZSAmJlxyXG4gICAgICAgIHR5cGVvZiBzdG9yZS4kc3RhdGUgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgdHlwZW9mIHN0b3JlLiRzdGF0ZS5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICFzdG9yZS4kc3RhdGUuY29uc3RydWN0b3IudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBb8J+NjV06IFRoZSBcInN0YXRlXCIgbXVzdCBiZSBhIHBsYWluIG9iamVjdC4gSXQgY2Fubm90IGJlXFxuYCArXHJcbiAgICAgICAgICAgIGBcXHRzdGF0ZTogKCkgPT4gbmV3IE15Q2xhc3MoKVxcbmAgK1xyXG4gICAgICAgICAgICBgRm91bmQgaW4gc3RvcmUgXCIke3N0b3JlLiRpZH1cIi5gKTtcclxuICAgIH1cclxuICAgIC8vIG9ubHkgYXBwbHkgaHlkcmF0ZSB0byBvcHRpb24gc3RvcmVzIHdpdGggYW4gaW5pdGlhbCBzdGF0ZSBpbiBwaW5pYVxyXG4gICAgaWYgKGluaXRpYWxTdGF0ZSAmJlxyXG4gICAgICAgIGlzT3B0aW9uc1N0b3JlICYmXHJcbiAgICAgICAgb3B0aW9ucy5oeWRyYXRlKSB7XHJcbiAgICAgICAgb3B0aW9ucy5oeWRyYXRlKHN0b3JlLiRzdGF0ZSwgaW5pdGlhbFN0YXRlKTtcclxuICAgIH1cclxuICAgIGlzTGlzdGVuaW5nID0gdHJ1ZTtcclxuICAgIGlzU3luY0xpc3RlbmluZyA9IHRydWU7XHJcbiAgICByZXR1cm4gc3RvcmU7XHJcbn1cclxuZnVuY3Rpb24gZGVmaW5lU3RvcmUoXHJcbi8vIFRPRE86IGFkZCBwcm9wZXIgdHlwZXMgZnJvbSBhYm92ZVxyXG5pZE9yT3B0aW9ucywgc2V0dXAsIHNldHVwT3B0aW9ucykge1xyXG4gICAgbGV0IGlkO1xyXG4gICAgbGV0IG9wdGlvbnM7XHJcbiAgICBjb25zdCBpc1NldHVwU3RvcmUgPSB0eXBlb2Ygc2V0dXAgPT09ICdmdW5jdGlvbic7XHJcbiAgICBpZiAodHlwZW9mIGlkT3JPcHRpb25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlkID0gaWRPck9wdGlvbnM7XHJcbiAgICAgICAgLy8gdGhlIG9wdGlvbiBzdG9yZSBzZXR1cCB3aWxsIGNvbnRhaW4gdGhlIGFjdHVhbCBvcHRpb25zIGluIHRoaXMgY2FzZVxyXG4gICAgICAgIG9wdGlvbnMgPSBpc1NldHVwU3RvcmUgPyBzZXR1cE9wdGlvbnMgOiBzZXR1cDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSBpZE9yT3B0aW9ucztcclxuICAgICAgICBpZCA9IGlkT3JPcHRpb25zLmlkO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXNlU3RvcmUocGluaWEsIGhvdCkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgICAgIHBpbmlhID1cclxuICAgICAgICAgICAgLy8gaW4gdGVzdCBtb2RlLCBpZ25vcmUgdGhlIGFyZ3VtZW50IHByb3ZpZGVkIGFzIHdlIGNhbiBhbHdheXMgcmV0cmlldmUgYVxyXG4gICAgICAgICAgICAvLyBwaW5pYSBpbnN0YW5jZSB3aXRoIGdldEFjdGl2ZVBpbmlhKClcclxuICAgICAgICAgICAgKChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSAmJiBhY3RpdmVQaW5pYSAmJiBhY3RpdmVQaW5pYS5fdGVzdGluZyA/IG51bGwgOiBwaW5pYSkgfHxcclxuICAgICAgICAgICAgICAgIChjdXJyZW50SW5zdGFuY2UgJiYgaW5qZWN0KHBpbmlhU3ltYm9sKSk7XHJcbiAgICAgICAgaWYgKHBpbmlhKVxyXG4gICAgICAgICAgICBzZXRBY3RpdmVQaW5pYShwaW5pYSk7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhYWN0aXZlUGluaWEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBb8J+NjV06IGdldEFjdGl2ZVBpbmlhIHdhcyBjYWxsZWQgd2l0aCBubyBhY3RpdmUgUGluaWEuIERpZCB5b3UgZm9yZ2V0IHRvIGluc3RhbGwgcGluaWE/XFxuYCArXHJcbiAgICAgICAgICAgICAgICBgXFx0Y29uc3QgcGluaWEgPSBjcmVhdGVQaW5pYSgpXFxuYCArXHJcbiAgICAgICAgICAgICAgICBgXFx0YXBwLnVzZShwaW5pYSlcXG5gICtcclxuICAgICAgICAgICAgICAgIGBUaGlzIHdpbGwgZmFpbCBpbiBwcm9kdWN0aW9uLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwaW5pYSA9IGFjdGl2ZVBpbmlhO1xyXG4gICAgICAgIGlmICghcGluaWEuX3MuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAvLyBjcmVhdGluZyB0aGUgc3RvcmUgcmVnaXN0ZXJzIGl0IGluIGBwaW5pYS5fc2BcclxuICAgICAgICAgICAgaWYgKGlzU2V0dXBTdG9yZSkge1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlU2V0dXBTdG9yZShpZCwgc2V0dXAsIG9wdGlvbnMsIHBpbmlhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbnNTdG9yZShpZCwgb3B0aW9ucywgcGluaWEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IG5vdCB0aGUgcmlnaHQgaW5mZXJyZWQgdHlwZVxyXG4gICAgICAgICAgICAgICAgdXNlU3RvcmUuX3BpbmlhID0gcGluaWE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RvcmUgPSBwaW5pYS5fcy5nZXQoaWQpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaG90KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhvdElkID0gJ19faG90OicgKyBpZDtcclxuICAgICAgICAgICAgY29uc3QgbmV3U3RvcmUgPSBpc1NldHVwU3RvcmVcclxuICAgICAgICAgICAgICAgID8gY3JlYXRlU2V0dXBTdG9yZShob3RJZCwgc2V0dXAsIG9wdGlvbnMsIHBpbmlhLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgOiBjcmVhdGVPcHRpb25zU3RvcmUoaG90SWQsIGFzc2lnbih7fSwgb3B0aW9ucyksIHBpbmlhLCB0cnVlKTtcclxuICAgICAgICAgICAgaG90Ll9ob3RVcGRhdGUobmV3U3RvcmUpO1xyXG4gICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBzdGF0ZSBwcm9wZXJ0aWVzIGFuZCB0aGUgc3RvcmUgZnJvbSB0aGUgY2FjaGVcclxuICAgICAgICAgICAgZGVsZXRlIHBpbmlhLnN0YXRlLnZhbHVlW2hvdElkXTtcclxuICAgICAgICAgICAgcGluaWEuX3MuZGVsZXRlKGhvdElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2F2ZSBzdG9yZXMgaW4gaW5zdGFuY2VzIHRvIGFjY2VzcyB0aGVtIGRldnRvb2xzXHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICBJU19DTElFTlQgJiZcclxuICAgICAgICAgICAgY3VycmVudEluc3RhbmNlICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnRJbnN0YW5jZS5wcm94eSAmJlxyXG4gICAgICAgICAgICAvLyBhdm9pZCBhZGRpbmcgc3RvcmVzIHRoYXQgYXJlIGp1c3QgYnVpbHQgZm9yIGhvdCBtb2R1bGUgcmVwbGFjZW1lbnRcclxuICAgICAgICAgICAgIWhvdCkge1xyXG4gICAgICAgICAgICBjb25zdCB2bSA9IGN1cnJlbnRJbnN0YW5jZS5wcm94eTtcclxuICAgICAgICAgICAgY29uc3QgY2FjaGUgPSAnX3BTdG9yZXMnIGluIHZtID8gdm0uX3BTdG9yZXMgOiAodm0uX3BTdG9yZXMgPSB7fSk7XHJcbiAgICAgICAgICAgIGNhY2hlW2lkXSA9IHN0b3JlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBTdG9yZUdlbmVyaWMgY2Fubm90IGJlIGNhc3RlZCB0b3dhcmRzIFN0b3JlXHJcbiAgICAgICAgcmV0dXJuIHN0b3JlO1xyXG4gICAgfVxyXG4gICAgdXNlU3RvcmUuJGlkID0gaWQ7XHJcbiAgICByZXR1cm4gdXNlU3RvcmU7XHJcbn1cblxubGV0IG1hcFN0b3JlU3VmZml4ID0gJ1N0b3JlJztcclxuLyoqXHJcbiAqIENoYW5nZXMgdGhlIHN1ZmZpeCBhZGRlZCBieSBgbWFwU3RvcmVzKClgLiBDYW4gYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZy5cclxuICogRGVmYXVsdHMgdG8gYFwiU3RvcmVcImAuIE1ha2Ugc3VyZSB0byBleHRlbmQgdGhlIE1hcFN0b3Jlc0N1c3RvbWl6YXRpb25cclxuICogaW50ZXJmYWNlIGlmIHlvdSBhcmUgdXNpbmcgVHlwZVNjcmlwdC5cclxuICpcclxuICogQHBhcmFtIHN1ZmZpeCAtIG5ldyBzdWZmaXhcclxuICovXHJcbmZ1bmN0aW9uIHNldE1hcFN0b3JlU3VmZml4KHN1ZmZpeCAvLyBjb3VsZCBiZSAnU3RvcmUnIGJ1dCB0aGF0IHdvdWxkIGJlIGFubm95aW5nIGZvciBKU1xyXG4pIHtcclxuICAgIG1hcFN0b3JlU3VmZml4ID0gc3VmZml4O1xyXG59XHJcbi8qKlxyXG4gKiBBbGxvd3MgdXNpbmcgc3RvcmVzIHdpdGhvdXQgdGhlIGNvbXBvc2l0aW9uIEFQSSAoYHNldHVwKClgKSBieSBnZW5lcmF0aW5nIGFuXHJcbiAqIG9iamVjdCB0byBiZSBzcHJlYWQgaW4gdGhlIGBjb21wdXRlZGAgZmllbGQgb2YgYSBjb21wb25lbnQuIEl0IGFjY2VwdHMgYSBsaXN0XHJcbiAqIG9mIHN0b3JlIGRlZmluaXRpb25zLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBqc1xyXG4gKiBleHBvcnQgZGVmYXVsdCB7XHJcbiAqICAgY29tcHV0ZWQ6IHtcclxuICogICAgIC8vIG90aGVyIGNvbXB1dGVkIHByb3BlcnRpZXNcclxuICogICAgIC4uLm1hcFN0b3Jlcyh1c2VVc2VyU3RvcmUsIHVzZUNhcnRTdG9yZSlcclxuICogICB9LFxyXG4gKlxyXG4gKiAgIGNyZWF0ZWQoKSB7XHJcbiAqICAgICB0aGlzLnVzZXJTdG9yZSAvLyBzdG9yZSB3aXRoIGlkIFwidXNlclwiXHJcbiAqICAgICB0aGlzLmNhcnRTdG9yZSAvLyBzdG9yZSB3aXRoIGlkIFwiY2FydFwiXHJcbiAqICAgfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0gc3RvcmVzIC0gbGlzdCBvZiBzdG9yZXMgdG8gbWFwIHRvIGFuIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gbWFwU3RvcmVzKC4uLnN0b3Jlcykge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBBcnJheS5pc0FycmF5KHN0b3Jlc1swXSkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYFvwn42NXTogRGlyZWN0bHkgcGFzcyBhbGwgc3RvcmVzIHRvIFwibWFwU3RvcmVzKClcIiB3aXRob3V0IHB1dHRpbmcgdGhlbSBpbiBhbiBhcnJheTpcXG5gICtcclxuICAgICAgICAgICAgYFJlcGxhY2VcXG5gICtcclxuICAgICAgICAgICAgYFxcdG1hcFN0b3JlcyhbdXNlQXV0aFN0b3JlLCB1c2VDYXJ0U3RvcmVdKVxcbmAgK1xyXG4gICAgICAgICAgICBgd2l0aFxcbmAgK1xyXG4gICAgICAgICAgICBgXFx0bWFwU3RvcmVzKHVzZUF1dGhTdG9yZSwgdXNlQ2FydFN0b3JlKVxcbmAgK1xyXG4gICAgICAgICAgICBgVGhpcyB3aWxsIGZhaWwgaW4gcHJvZHVjdGlvbiBpZiBub3QgZml4ZWQuYCk7XHJcbiAgICAgICAgc3RvcmVzID0gc3RvcmVzWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0b3Jlcy5yZWR1Y2UoKHJlZHVjZWQsIHVzZVN0b3JlKSA9PiB7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogJGlkIGlzIGFkZGVkIGJ5IGRlZmluZVN0b3JlXHJcbiAgICAgICAgcmVkdWNlZFt1c2VTdG9yZS4kaWQgKyBtYXBTdG9yZVN1ZmZpeF0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1c2VTdG9yZSh0aGlzLiRwaW5pYSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVkdWNlZDtcclxuICAgIH0sIHt9KTtcclxufVxyXG4vKipcclxuICogQWxsb3dzIHVzaW5nIHN0YXRlIGFuZCBnZXR0ZXJzIGZyb20gb25lIHN0b3JlIHdpdGhvdXQgdXNpbmcgdGhlIGNvbXBvc2l0aW9uXHJcbiAqIEFQSSAoYHNldHVwKClgKSBieSBnZW5lcmF0aW5nIGFuIG9iamVjdCB0byBiZSBzcHJlYWQgaW4gdGhlIGBjb21wdXRlZGAgZmllbGRcclxuICogb2YgYSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB1c2VTdG9yZSAtIHN0b3JlIHRvIG1hcCBmcm9tXHJcbiAqIEBwYXJhbSBrZXlzT3JNYXBwZXIgLSBhcnJheSBvciBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIG1hcFN0YXRlKHVzZVN0b3JlLCBrZXlzT3JNYXBwZXIpIHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGtleXNPck1hcHBlcilcclxuICAgICAgICA/IGtleXNPck1hcHBlci5yZWR1Y2UoKHJlZHVjZWQsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICByZWR1Y2VkW2tleV0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlU3RvcmUodGhpcy4kcGluaWEpW2tleV07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VkO1xyXG4gICAgICAgIH0sIHt9KVxyXG4gICAgICAgIDogT2JqZWN0LmtleXMoa2V5c09yTWFwcGVyKS5yZWR1Y2UoKHJlZHVjZWQsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICAgICAgICAgIHJlZHVjZWRba2V5XSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdXNlU3RvcmUodGhpcy4kcGluaWEpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmVLZXkgPSBrZXlzT3JNYXBwZXJba2V5XTtcclxuICAgICAgICAgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBUUyBpcyB1bmFibGUgdG8gaW5mZXIgdGhlIHR5cGUgb2Ygc3RvcmVLZXkgdG8gYmUgYVxyXG4gICAgICAgICAgICAgICAgLy8gZnVuY3Rpb25cclxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc3RvcmVLZXkgPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgICAgICAgICAgICA/IHN0b3JlS2V5LmNhbGwodGhpcywgc3RvcmUpXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzdG9yZVtzdG9yZUtleV07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VkO1xyXG4gICAgICAgIH0sIHt9KTtcclxufVxyXG4vKipcclxuICogQWxpYXMgZm9yIGBtYXBTdGF0ZSgpYC4gWW91IHNob3VsZCB1c2UgYG1hcFN0YXRlKClgIGluc3RlYWQuXHJcbiAqIEBkZXByZWNhdGVkIHVzZSBgbWFwU3RhdGUoKWAgaW5zdGVhZC5cclxuICovXHJcbmNvbnN0IG1hcEdldHRlcnMgPSBtYXBTdGF0ZTtcclxuLyoqXHJcbiAqIEFsbG93cyBkaXJlY3RseSB1c2luZyBhY3Rpb25zIGZyb20geW91ciBzdG9yZSB3aXRob3V0IHVzaW5nIHRoZSBjb21wb3NpdGlvblxyXG4gKiBBUEkgKGBzZXR1cCgpYCkgYnkgZ2VuZXJhdGluZyBhbiBvYmplY3QgdG8gYmUgc3ByZWFkIGluIHRoZSBgbWV0aG9kc2AgZmllbGRcclxuICogb2YgYSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB1c2VTdG9yZSAtIHN0b3JlIHRvIG1hcCBmcm9tXHJcbiAqIEBwYXJhbSBrZXlzT3JNYXBwZXIgLSBhcnJheSBvciBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIG1hcEFjdGlvbnModXNlU3RvcmUsIGtleXNPck1hcHBlcikge1xyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoa2V5c09yTWFwcGVyKVxyXG4gICAgICAgID8ga2V5c09yTWFwcGVyLnJlZHVjZSgocmVkdWNlZCwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICAgICAgcmVkdWNlZFtrZXldID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VTdG9yZSh0aGlzLiRwaW5pYSlba2V5XSguLi5hcmdzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZWQ7XHJcbiAgICAgICAgfSwge30pXHJcbiAgICAgICAgOiBPYmplY3Qua2V5cyhrZXlzT3JNYXBwZXIpLnJlZHVjZSgocmVkdWNlZCwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICAgICAgcmVkdWNlZFtrZXldID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VTdG9yZSh0aGlzLiRwaW5pYSlba2V5c09yTWFwcGVyW2tleV1dKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlZDtcclxuICAgICAgICB9LCB7fSk7XHJcbn1cclxuLyoqXHJcbiAqIEFsbG93cyB1c2luZyBzdGF0ZSBhbmQgZ2V0dGVycyBmcm9tIG9uZSBzdG9yZSB3aXRob3V0IHVzaW5nIHRoZSBjb21wb3NpdGlvblxyXG4gKiBBUEkgKGBzZXR1cCgpYCkgYnkgZ2VuZXJhdGluZyBhbiBvYmplY3QgdG8gYmUgc3ByZWFkIGluIHRoZSBgY29tcHV0ZWRgIGZpZWxkXHJcbiAqIG9mIGEgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gdXNlU3RvcmUgLSBzdG9yZSB0byBtYXAgZnJvbVxyXG4gKiBAcGFyYW0ga2V5c09yTWFwcGVyIC0gYXJyYXkgb3Igb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBtYXBXcml0YWJsZVN0YXRlKHVzZVN0b3JlLCBrZXlzT3JNYXBwZXIpIHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGtleXNPck1hcHBlcilcclxuICAgICAgICA/IGtleXNPck1hcHBlci5yZWR1Y2UoKHJlZHVjZWQsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHJlZHVjZWRba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlU3RvcmUodGhpcy4kcGluaWEpW2tleV07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBlYXNpZXIgdG8gdHlwZSBpdCBoZXJlIGFzIGFueVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodXNlU3RvcmUodGhpcy4kcGluaWEpW2tleV0gPSB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlZDtcclxuICAgICAgICB9LCB7fSlcclxuICAgICAgICA6IE9iamVjdC5rZXlzKGtleXNPck1hcHBlcikucmVkdWNlKChyZWR1Y2VkLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICByZWR1Y2VkW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVN0b3JlKHRoaXMuJHBpbmlhKVtrZXlzT3JNYXBwZXJba2V5XV07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBlYXNpZXIgdG8gdHlwZSBpdCBoZXJlIGFzIGFueVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodXNlU3RvcmUodGhpcy4kcGluaWEpW2tleXNPck1hcHBlcltrZXldXSA9IHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VkO1xyXG4gICAgICAgIH0sIHt9KTtcclxufVxuXG4vKipcclxuICogQ3JlYXRlcyBhbiBvYmplY3Qgb2YgcmVmZXJlbmNlcyB3aXRoIGFsbCB0aGUgc3RhdGUsIGdldHRlcnMsIGFuZCBwbHVnaW4tYWRkZWRcclxuICogc3RhdGUgcHJvcGVydGllcyBvZiB0aGUgc3RvcmUuIFNpbWlsYXIgdG8gYHRvUmVmcygpYCBidXQgc3BlY2lmaWNhbGx5XHJcbiAqIGRlc2lnbmVkIGZvciBQaW5pYSBzdG9yZXMgc28gbWV0aG9kcyBhbmQgbm9uIHJlYWN0aXZlIHByb3BlcnRpZXMgYXJlXHJcbiAqIGNvbXBsZXRlbHkgaWdub3JlZC5cclxuICpcclxuICogQHBhcmFtIHN0b3JlIC0gc3RvcmUgdG8gZXh0cmFjdCB0aGUgcmVmcyBmcm9tXHJcbiAqL1xyXG5mdW5jdGlvbiBzdG9yZVRvUmVmcyhzdG9yZSkge1xyXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9waW5pYS9pc3N1ZXMvODUyXHJcbiAgICAvLyBJdCdzIGVhc2llciB0byBqdXN0IHVzZSB0b1JlZnMoKSBldmVuIGlmIGl0IGluY2x1ZGVzIG1vcmUgc3R1ZmZcclxuICAgIGlmIChpc1Z1ZTIpIHtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB0b1JlZnMgaW5jbHVkZSBtZXRob2RzIGFuZCBvdGhlcnNcclxuICAgICAgICByZXR1cm4gdG9SZWZzKHN0b3JlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHN0b3JlID0gdG9SYXcoc3RvcmUpO1xyXG4gICAgICAgIGNvbnN0IHJlZnMgPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdG9yZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHN0b3JlW2tleV07XHJcbiAgICAgICAgICAgIGlmIChpc1JlZih2YWx1ZSkgfHwgaXNSZWFjdGl2ZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoZSBrZXkgaXMgc3RhdGUgb3IgZ2V0dGVyXHJcbiAgICAgICAgICAgICAgICByZWZzW2tleV0gPVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIC0tLVxyXG4gICAgICAgICAgICAgICAgICAgIHRvUmVmKHN0b3JlLCBrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZWZzO1xyXG4gICAgfVxyXG59XG5cbi8qKlxyXG4gKiBWdWUgMiBQbHVnaW4gdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgcGluaWEgdG8gd29yay4gTm90ZSAqKnlvdSBkb24ndCBuZWVkXHJcbiAqIHRoaXMgcGx1Z2luIGlmIHlvdSBhcmUgdXNpbmcgTnV4dC5qcyoqLiBVc2UgdGhlIGBidWlsZE1vZHVsZWAgaW5zdGVhZDpcclxuICogaHR0cHM6Ly9waW5pYS52dWVqcy5vcmcvc3NyL251eHQuaHRtbC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBganNcclxuICogaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXHJcbiAqIGltcG9ydCB7IFBpbmlhVnVlUGx1Z2luLCBjcmVhdGVQaW5pYSB9IGZyb20gJ3BpbmlhJ1xyXG4gKlxyXG4gKiBWdWUudXNlKFBpbmlhVnVlUGx1Z2luKVxyXG4gKiBjb25zdCBwaW5pYSA9IGNyZWF0ZVBpbmlhKClcclxuICpcclxuICogbmV3IFZ1ZSh7XHJcbiAqICAgZWw6ICcjYXBwJyxcclxuICogICAvLyAuLi5cclxuICogICBwaW5pYSxcclxuICogfSlcclxuICogYGBgXHJcbiAqXHJcbiAqIEBwYXJhbSBfVnVlIC0gYFZ1ZWAgaW1wb3J0ZWQgZnJvbSAndnVlJy5cclxuICovXHJcbmNvbnN0IFBpbmlhVnVlUGx1Z2luID0gZnVuY3Rpb24gKF9WdWUpIHtcclxuICAgIC8vIEVxdWl2YWxlbnQgb2ZcclxuICAgIC8vIGFwcC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kcGluaWEgPSBwaW5pYVxyXG4gICAgX1Z1ZS5taXhpbih7XHJcbiAgICAgICAgYmVmb3JlQ3JlYXRlKCkge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluaWEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBpbmlhID0gb3B0aW9ucy5waW5pYTtcclxuICAgICAgICAgICAgICAgIC8vIEhBQ0s6IHRha2VuIGZyb20gcHJvdmlkZSgpOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvY29tcG9zaXRpb24tYXBpL2Jsb2IvbWFpbi9zcmMvYXBpcy9pbmplY3QudHMjTDMxXHJcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wcm92aWRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVDYWNoZSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX3Byb3ZpZGVkJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHByb3ZpZGVDYWNoZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAodikgPT4gT2JqZWN0LmFzc2lnbihwcm92aWRlQ2FjaGUsIHYpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvdmlkZWRbcGluaWFTeW1ib2xdID0gcGluaWE7XHJcbiAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIHBpbmlhIGluc3RhbmNlIGluIGFuIFNTUiBmcmllbmRseSB3YXlcclxuICAgICAgICAgICAgICAgIC8vIGF2b2lkIGFkZGluZyBpdCB0byBudXh0IHR3aWNlXHJcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiRwaW5pYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHBpbmlhID0gcGluaWE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwaW5pYS5fYSA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoSVNfQ0xJRU5UKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBhbGxvd3MgY2FsbGluZyB1c2VTdG9yZSgpIG91dHNpZGUgb2YgYSBjb21wb25lbnQgc2V0dXAgYWZ0ZXJcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbnN0YWxsaW5nIHBpbmlhJ3MgcGx1Z2luXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGluaWEocGluaWEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKFVTRV9ERVZUT09MUykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyUGluaWFEZXZ0b29scyhwaW5pYS5fYSwgcGluaWEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLiRwaW5pYSAmJiBvcHRpb25zLnBhcmVudCAmJiBvcHRpb25zLnBhcmVudC4kcGluaWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHBpbmlhID0gb3B0aW9ucy5wYXJlbnQuJHBpbmlhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZXN0cm95ZWQoKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wU3RvcmVzO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufTtcblxuZXhwb3J0IHsgTXV0YXRpb25UeXBlLCBQaW5pYVZ1ZVBsdWdpbiwgYWNjZXB0SE1SVXBkYXRlLCBjcmVhdGVQaW5pYSwgZGVmaW5lU3RvcmUsIGdldEFjdGl2ZVBpbmlhLCBtYXBBY3Rpb25zLCBtYXBHZXR0ZXJzLCBtYXBTdGF0ZSwgbWFwU3RvcmVzLCBtYXBXcml0YWJsZVN0YXRlLCBzZXRBY3RpdmVQaW5pYSwgc2V0TWFwU3RvcmVTdWZmaXgsIHNraXBIeWRyYXRlLCBzdG9yZVRvUmVmcyB9O1xuIiwiLy8gc3JjL25vcm1hbGl6ZS50c1xuZnVuY3Rpb24gaXNPYmplY3Qodikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9wdGlvbnMob3B0aW9ucywgZmFjdG9yeU9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGlzT2JqZWN0KG9wdGlvbnMpID8gb3B0aW9ucyA6IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gbmV3IFByb3h5KG9wdGlvbnMsIHtcbiAgICBnZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XG4gICAgICBpZiAoa2V5ID09PSBcImtleVwiKVxuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpIHx8IFJlZmxlY3QuZ2V0KGZhY3RvcnlPcHRpb25zLCBrZXksIHJlY2VpdmVyKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyBzcmMvcGljay50c1xuZnVuY3Rpb24gZ2V0KHN0YXRlLCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlZHVjZSgob2JqLCBwKSA9PiB7XG4gICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW3BdO1xuICB9LCBzdGF0ZSk7XG59XG5mdW5jdGlvbiBzZXQoc3RhdGUsIHBhdGgsIHZhbCkge1xuICByZXR1cm4gcGF0aC5zbGljZSgwLCAtMSkucmVkdWNlKChvYmosIHApID0+IHtcbiAgICBpZiAoL14oX19wcm90b19fKSQvLnRlc3QocCkpXG4gICAgICByZXR1cm4ge307XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIG9ialtwXSA9IG9ialtwXSB8fCB7fTtcbiAgfSwgc3RhdGUpW3BhdGhbcGF0aC5sZW5ndGggLSAxXV0gPSB2YWwsIHN0YXRlO1xufVxuZnVuY3Rpb24gcGljayhiYXNlU3RhdGUsIHBhdGhzKSB7XG4gIHJldHVybiBwYXRocy5yZWR1Y2UoKHN1YnN0YXRlLCBwYXRoKSA9PiB7XG4gICAgY29uc3QgcGF0aEFycmF5ID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgcmV0dXJuIHNldChzdWJzdGF0ZSwgcGF0aEFycmF5LCBnZXQoYmFzZVN0YXRlLCBwYXRoQXJyYXkpKTtcbiAgfSwge30pO1xufVxuXG4vLyBzcmMvcGx1Z2luLnRzXG5mdW5jdGlvbiBoeWRyYXRlU3RvcmUoc3RvcmUsIHsgc3RvcmFnZSwgc2VyaWFsaXplciwga2V5LCBkZWJ1ZyB9KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZnJvbVN0b3JhZ2UgPSBzdG9yYWdlID09IG51bGwgPyB2b2lkIDAgOiBzdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICBpZiAoZnJvbVN0b3JhZ2UpXG4gICAgICBzdG9yZS4kcGF0Y2goc2VyaWFsaXplciA9PSBudWxsID8gdm9pZCAwIDogc2VyaWFsaXplci5kZXNlcmlhbGl6ZShmcm9tU3RvcmFnZSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkZWJ1ZylcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICB9XG59XG5mdW5jdGlvbiBwZXJzaXN0U3RhdGUoc3RhdGUsIHsgc3RvcmFnZSwgc2VyaWFsaXplciwga2V5LCBwYXRocywgZGVidWcgfSkge1xuICB0cnkge1xuICAgIGNvbnN0IHRvU3RvcmUgPSBBcnJheS5pc0FycmF5KHBhdGhzKSA/IHBpY2soc3RhdGUsIHBhdGhzKSA6IHN0YXRlO1xuICAgIHN0b3JhZ2Uuc2V0SXRlbShrZXksIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHRvU3RvcmUpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZGVidWcpXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUGVyc2lzdGVkU3RhdGUoZmFjdG9yeU9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCB7IGF1dG8gPSBmYWxzZSB9ID0gZmFjdG9yeU9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgb3B0aW9uczogeyBwZXJzaXN0ID0gYXV0byB9LFxuICAgICAgc3RvcmUsXG4gICAgICBwaW5pYVxuICAgIH0gPSBjb250ZXh0O1xuICAgIGlmICghcGVyc2lzdClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoIShzdG9yZS4kaWQgaW4gcGluaWEuc3RhdGUudmFsdWUpKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9zdG9yZSA9IHBpbmlhLl9zLmdldChzdG9yZS4kaWQucmVwbGFjZShcIl9faG90OlwiLCBcIlwiKSk7XG4gICAgICBpZiAob3JpZ2luYWxfc3RvcmUpXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gb3JpZ2luYWxfc3RvcmUuJHBlcnNpc3QoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBlcnNpc3RlbmNlcyA9IChBcnJheS5pc0FycmF5KHBlcnNpc3QpID8gcGVyc2lzdC5tYXAoKHApID0+IG5vcm1hbGl6ZU9wdGlvbnMocCwgZmFjdG9yeU9wdGlvbnMpKSA6IFtub3JtYWxpemVPcHRpb25zKHBlcnNpc3QsIGZhY3RvcnlPcHRpb25zKV0pLm1hcChcbiAgICAgICh7XG4gICAgICAgIHN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UsXG4gICAgICAgIGJlZm9yZVJlc3RvcmUgPSBudWxsLFxuICAgICAgICBhZnRlclJlc3RvcmUgPSBudWxsLFxuICAgICAgICBzZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogSlNPTi5zdHJpbmdpZnksXG4gICAgICAgICAgZGVzZXJpYWxpemU6IEpTT04ucGFyc2VcbiAgICAgICAgfSxcbiAgICAgICAga2V5ID0gc3RvcmUuJGlkLFxuICAgICAgICBwYXRocyA9IG51bGwsXG4gICAgICAgIGRlYnVnID0gZmFsc2VcbiAgICAgIH0pID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgYmVmb3JlUmVzdG9yZSxcbiAgICAgICAgICBhZnRlclJlc3RvcmUsXG4gICAgICAgICAgc2VyaWFsaXplcixcbiAgICAgICAgICBrZXk6ICgoX2EgPSBmYWN0b3J5T3B0aW9ucy5rZXkpICE9IG51bGwgPyBfYSA6IChrKSA9PiBrKSh0eXBlb2Yga2V5ID09IFwic3RyaW5nXCIgPyBrZXkgOiBrZXkoc3RvcmUuJGlkKSksXG4gICAgICAgICAgcGF0aHMsXG4gICAgICAgICAgZGVidWdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHN0b3JlLiRwZXJzaXN0ID0gKCkgPT4ge1xuICAgICAgcGVyc2lzdGVuY2VzLmZvckVhY2goKHBlcnNpc3RlbmNlKSA9PiB7XG4gICAgICAgIHBlcnNpc3RTdGF0ZShzdG9yZS4kc3RhdGUsIHBlcnNpc3RlbmNlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgc3RvcmUuJGh5ZHJhdGUgPSAoeyBydW5Ib29rcyA9IHRydWUgfSA9IHt9KSA9PiB7XG4gICAgICBwZXJzaXN0ZW5jZXMuZm9yRWFjaCgocGVyc2lzdGVuY2UpID0+IHtcbiAgICAgICAgY29uc3QgeyBiZWZvcmVSZXN0b3JlLCBhZnRlclJlc3RvcmUgfSA9IHBlcnNpc3RlbmNlO1xuICAgICAgICBpZiAocnVuSG9va3MpXG4gICAgICAgICAgYmVmb3JlUmVzdG9yZSA9PSBudWxsID8gdm9pZCAwIDogYmVmb3JlUmVzdG9yZShjb250ZXh0KTtcbiAgICAgICAgaHlkcmF0ZVN0b3JlKHN0b3JlLCBwZXJzaXN0ZW5jZSk7XG4gICAgICAgIGlmIChydW5Ib29rcylcbiAgICAgICAgICBhZnRlclJlc3RvcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGFmdGVyUmVzdG9yZShjb250ZXh0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgcGVyc2lzdGVuY2VzLmZvckVhY2goKHBlcnNpc3RlbmNlKSA9PiB7XG4gICAgICBjb25zdCB7IGJlZm9yZVJlc3RvcmUsIGFmdGVyUmVzdG9yZSB9ID0gcGVyc2lzdGVuY2U7XG4gICAgICBiZWZvcmVSZXN0b3JlID09IG51bGwgPyB2b2lkIDAgOiBiZWZvcmVSZXN0b3JlKGNvbnRleHQpO1xuICAgICAgaHlkcmF0ZVN0b3JlKHN0b3JlLCBwZXJzaXN0ZW5jZSk7XG4gICAgICBhZnRlclJlc3RvcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGFmdGVyUmVzdG9yZShjb250ZXh0KTtcbiAgICAgIHN0b3JlLiRzdWJzY3JpYmUoXG4gICAgICAgIChfbXV0YXRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgcGVyc2lzdFN0YXRlKHN0YXRlLCBwZXJzaXN0ZW5jZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkZXRhY2hlZDogdHJ1ZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9O1xufVxuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZGVmYXVsdCA9IGNyZWF0ZVBlcnNpc3RlZFN0YXRlKCk7XG5leHBvcnQge1xuICBjcmVhdGVQZXJzaXN0ZWRTdGF0ZSxcbiAgc3JjX2RlZmF1bHQgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCB0eXBlIHsgTG9naW5SZXN1bHQgfSBmcm9tICdAL3R5cGVzL21lbWJlcidcclxuaW1wb3J0IHsgZGVmaW5lU3RvcmUgfSBmcm9tICdwaW5pYSdcclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLy8g5a6a5LmJIFN0b3JlXHJcbmV4cG9ydCBjb25zdCB1c2VNZW1iZXJTdG9yZSA9IGRlZmluZVN0b3JlKFxyXG4gICdtZW1iZXInLFxyXG4gICgpID0+IHtcclxuICAgIC8vIOS8muWRmOS/oeaBr1xyXG4gICAgY29uc3QgcHJvZmlsZSA9IHJlZjxMb2dpblJlc3VsdD4oKVxyXG5cclxuICAgIC8vIOS/neWtmOS8muWRmOS/oeaBr++8jOeZu+W9leaXtuS9v+eUqFxyXG4gICAgY29uc3Qgc2V0UHJvZmlsZSA9ICh2YWw6IExvZ2luUmVzdWx0KSA9PiB7XHJcbiAgICAgIHByb2ZpbGUudmFsdWUgPSB2YWxcclxuICAgIH1cclxuXHJcbiAgICAvLyDmuIXnkIbkvJrlkZjkv6Hmga/vvIzpgIDlh7rml7bkvb/nlKhcclxuICAgIGNvbnN0IGNsZWFyUHJvZmlsZSA9ICgpID0+IHtcclxuICAgICAgcHJvZmlsZS52YWx1ZSA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIC8vIOiusOW+lyByZXR1cm5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByb2ZpbGUsXHJcbiAgICAgIHNldFByb2ZpbGUsXHJcbiAgICAgIGNsZWFyUHJvZmlsZSxcclxuICAgIH1cclxuICB9LFxyXG4gIHtcclxuICAgIC8vIOe9kemhteerr+mFjee9rlxyXG4gICAgLy8gcGVyc2lzdDogdHJ1ZSxcclxuICAgIC8vIOWwj+eoi+W6j+err+mFjee9rlxyXG4gICAgcGVyc2lzdDoge1xyXG4gICAgICBzdG9yYWdlOiB7XHJcbiAgICAgICAgZ2V0SXRlbShrZXkpIHtcclxuICAgICAgICAgIHJldHVybiB1bmkuZ2V0U3RvcmFnZVN5bmMoa2V5KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0SXRlbShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICB1bmkuc2V0U3RvcmFnZVN5bmMoa2V5LCB2YWx1ZSlcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9LFxyXG4pXHJcbiIsImltcG9ydCB7IGNyZWF0ZVBpbmlhIH0gZnJvbSAncGluaWEnXHJcbmltcG9ydCBwZXJzaXN0IGZyb20gJ3BpbmlhLXBsdWdpbi1wZXJzaXN0ZWRzdGF0ZSdcclxuXHJcbi8vIOWIm+W7uiBwaW5pYSDlrp7kvotcclxuY29uc3QgcGluaWEgPSBjcmVhdGVQaW5pYSgpXHJcbi8vIOS9v+eUqOaMgeS5heWMluWtmOWCqOaPkuS7tlxyXG5waW5pYS51c2UocGVyc2lzdClcclxuXHJcbi8vIOm7mOiupOWvvOWHuu+8jOe7mSBtYWluLnRzIOS9v+eUqFxyXG5leHBvcnQgZGVmYXVsdCBwaW5pYVxyXG5cclxuLy8g5qih5Z2X57uf5LiA5a+85Ye6XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kdWxlcy9tZW1iZXInXHJcbiIsIi8qKlxyXG4gKiDmt7vliqDmi6bmiKrlmag6XHJcbiAqICAg5oum5oiqIHJlcXVlc3Qg6K+35rGCXHJcbiAqICAg5oum5oiqIHVwbG9hZEZpbGUg5paH5Lu25LiK5LygXHJcbiAqXHJcbiAqIFRPRE86XHJcbiAqICAgMS4g6Z2eIGh0dHAg5byA5aS06ZyA5ou85o6l5Zyw5Z2AXHJcbiAqICAgMi4g6K+35rGC6LaF5pe2XHJcbiAqICAgMy4g5re75Yqg5bCP56iL5bqP56uv6K+35rGC5aS05qCH6K+GXHJcbiAqICAgNC4g5re75YqgIHRva2VuIOivt+axguWktOagh+ivhlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IHVzZU1lbWJlclN0b3JlIH0gZnJvbSAnQC9zdG9yZXMnXHJcblxyXG4vLyBjb25zdCBiYXNlVVJMID0gJ2h0dHBzOi8vcGNhcGkteGlhb3R1eGlhbi1mcm9udC1kZXZ0ZXN0Lml0aGVpbWEubmV0J1xyXG5jb25zdCBiYXNlVVJMID0gaW1wb3J0Lm1ldGEuZW52LlZJVEVfQVhJT1NfQkFTRV9VUkwgYXMgc3RyaW5nXHJcbmNvbnNvbGUubG9nKCcqKionLCBpbXBvcnQubWV0YS5lbnYpXHJcbmNvbnNvbGUubG9nKCcqKjIqJywgYmFzZVVSTClcclxuLy8g5re75Yqg5oum5oiq5ZmoXHJcbmNvbnN0IGh0dHBJbnRlcmNlcHRvciA9IHtcclxuICAvLyDmi6bmiKrliY3op6blj5FcclxuICBpbnZva2Uob3B0aW9uczogVW5pQXBwLlJlcXVlc3RPcHRpb25zKSB7XHJcbiAgICAvLyAxLiDpnZ4gaHR0cCDlvIDlpLTpnIDmi7zmjqXlnLDlnYBcclxuICAgIGlmICghb3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XHJcbiAgICAgIG9wdGlvbnMudXJsID0gYmFzZVVSTCArIG9wdGlvbnMudXJsXHJcbiAgICB9XHJcbiAgICAvLyAyLiDor7fmsYLotoXml7YsIOm7mOiupCA2MHNcclxuICAgIG9wdGlvbnMudGltZW91dCA9IDEwMDAwXHJcbiAgICAvLyAzLiDmt7vliqDlsI/nqIvluo/nq6/or7fmsYLlpLTmoIfor4ZcclxuICAgIG9wdGlvbnMuaGVhZGVyID0ge1xyXG4gICAgICAuLi5vcHRpb25zLmhlYWRlcixcclxuICAgICAgJ3NvdXJjZS1jbGllbnQnOiAnbWluaWFwcCcsXHJcbiAgICB9XHJcbiAgICAvLyA0LiDmt7vliqAgdG9rZW4g6K+35rGC5aS05qCH6K+GXHJcbiAgICBjb25zdCBtZW1iZXJTdG9yZSA9IHVzZU1lbWJlclN0b3JlKClcclxuICAgIGNvbnN0IHRva2VuID0gbWVtYmVyU3RvcmUucHJvZmlsZT8udG9rZW5cclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICBvcHRpb25zLmhlYWRlci5iYXRva2VuID0gdG9rZW5cclxuICAgIH1cclxuICB9LFxyXG59XHJcbnVuaS5hZGRJbnRlcmNlcHRvcigncmVxdWVzdCcsIGh0dHBJbnRlcmNlcHRvcilcclxudW5pLmFkZEludGVyY2VwdG9yKCd1cGxvYWRGaWxlJywgaHR0cEludGVyY2VwdG9yKVxyXG5cclxuLyoqXHJcbiAqIOivt+axguWHveaVsFxyXG4gKiBAcGFyYW0gIFVuaUFwcC5SZXF1ZXN0T3B0aW9uc1xyXG4gKiBAcmV0dXJucyBQcm9taXNlXHJcbiAqICAxLiDov5Tlm54gUHJvbWlzZSDlr7nosaFcclxuICogIDIuIOiOt+WPluaVsOaNruaIkOWKn1xyXG4gKiAgICAyLjEg5o+Q5Y+W5qC45b+D5pWw5o2uIHJlcy5kYXRhXHJcbiAqICAgIDIuMiDmt7vliqDnsbvlnovvvIzmlK/mjIHms5vlnotcclxuICogIDMuIOiOt+WPluaVsOaNruWksei0pVxyXG4gKiAgICAzLjEgNDAx6ZSZ6K+vICAtPiDmuIXnkIbnlKjmiLfkv6Hmga/vvIzot7PovazliLDnmbvlvZXpobVcclxuICogICAgMy4yIOWFtuS7lumUmeivryAtPiDmoLnmja7lkI7nq6/plJnor6/kv6Hmga/ovbvmj5DnpLpcclxuICogICAgMy4zIOe9kee7nOmUmeivryAtPiDmj5DnpLrnlKjmiLfmjaLnvZHnu5xcclxuICovXHJcbnR5cGUgRGF0YTxUPiA9IHtcclxuICBjb2RlOiBudW1iZXJcclxuICBtc2c6IHN0cmluZ1xyXG4gIGRhdGE6IFRcclxufVxyXG4vLyAyLjIg5re75Yqg57G75Z6L77yM5pSv5oyB5rOb5Z6LXHJcbmV4cG9ydCBjb25zdCBodHRwID0gPFQ+KG9wdGlvbnM6IFVuaUFwcC5SZXF1ZXN0T3B0aW9ucykgPT4ge1xyXG4gIC8vIDEuIOi/lOWbniBQcm9taXNlIOWvueixoVxyXG4gIHJldHVybiBuZXcgUHJvbWlzZTxEYXRhPFQ+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICB1bmkucmVxdWVzdCh7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIC8vIOWTjeW6lOaIkOWKn1xyXG4gICAgICBzdWNjZXNzKHJlcykge1xyXG4gICAgICAgIC8vIOeKtuaAgeeggSAyeHjvvIwgYXhpb3Mg5bCx5piv6L+Z5qC36K6+6K6h55qEXHJcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMCkge1xyXG4gICAgICAgICAgLy8gMi4xIOaPkOWPluaguOW/g+aVsOaNriByZXMuZGF0YVxyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlcy5kYXRhIGFzIERhdGE8VD5cclxuICAgICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDMwMikge1xyXG4gICAgICAgICAgICAvLyDmnKrnmbvlvZUgLT4g5riF55CG55So5oi35L+h5oGv77yM6Lez6L2s5Yiw55m75b2V6aG1XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfmnKrnmbvlvZUgLT4g5riF55CG55So5oi35L+h5oGv77yM6Lez6L2s5Yiw55m75b2V6aG1LS0tJylcclxuICAgICAgICAgICAgY29uc3QgbWVtYmVyU3RvcmUgPSB1c2VNZW1iZXJTdG9yZSgpXHJcbiAgICAgICAgICAgIG1lbWJlclN0b3JlLmNsZWFyUHJvZmlsZSgpXHJcbiAgICAgICAgICAgIHVuaS5uYXZpZ2F0ZVRvKHsgdXJsOiAnL3BhZ2VzL2xvZ2luL2xvZ2luJyB9KVxyXG4gICAgICAgICAgICByZWplY3QocmVzKVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmNvZGUgPT09IDQwOSkge1xyXG4gICAgICAgICAgICAvLyDnmbvlvZXmgIHov4fmnJ/vvIzliLfmlrB0b2tlblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygn55m75b2V5oCB6L+H5pyf77yM6K+36YeN5paw55m75b2V77yBLS0tJylcclxuICAgICAgICAgICAgY29uc3QgbWVtYmVyU3RvcmUgPSB1c2VNZW1iZXJTdG9yZSgpXHJcbiAgICAgICAgICAgIG1lbWJlclN0b3JlLmNsZWFyUHJvZmlsZSgpXHJcbiAgICAgICAgICAgIHVuaS5uYXZpZ2F0ZVRvKHsgdXJsOiAnL3BhZ2VzL2xvZ2luL2xvZ2luJyB9KVxyXG4gICAgICAgICAgICByZWplY3QocmVzKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSBhcyBEYXRhPFQ+KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDQwMSkge1xyXG4gICAgICAgICAgLy8gNDAx6ZSZ6K+vICAtPiDmuIXnkIbnlKjmiLfkv6Hmga/vvIzot7PovazliLDnmbvlvZXpobVcclxuICAgICAgICAgIGNvbnN0IG1lbWJlclN0b3JlID0gdXNlTWVtYmVyU3RvcmUoKVxyXG4gICAgICAgICAgbWVtYmVyU3RvcmUuY2xlYXJQcm9maWxlKClcclxuICAgICAgICAgIHVuaS5uYXZpZ2F0ZVRvKHsgdXJsOiAnL3BhZ2VzL2xvZ2luL2xvZ2luJyB9KVxyXG4gICAgICAgICAgcmVqZWN0KHJlcylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8g5YW25LuW6ZSZ6K+vIC0+IOagueaNruWQjuerr+mUmeivr+S/oeaBr+i9u+aPkOekulxyXG4gICAgICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICAgICAgdGl0bGU6IChyZXMuZGF0YSBhcyBEYXRhPFQ+KS5tc2cgfHwgJ+ivt+axgumUmeivrycsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmVqZWN0KHJlcylcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOWTjeW6lOWksei0pVxyXG4gICAgICBmYWlsKGVycikge1xyXG4gICAgICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgaWNvbjogJ25vbmUnLFxyXG4gICAgICAgICAgdGl0bGU6ICfnvZHnu5zplJnor6/vvIzmjaLkuKrnvZHnu5zor5Xor5UnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmVqZWN0KGVycilcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IENhdGVnb3J5VG9wSXRlbSB9IGZyb20gJ0AvdHlwZXMvY2F0ZWdvcnknXHJcbmltcG9ydCB7IGh0dHAgfSBmcm9tICdAL3V0aWxzL2h0dHAnXHJcblxyXG4vKipcclxuICog5YiG57G75YiX6KGoLeWwj+eoi+W6j1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldENhdGVnb3J5VG9wQVBJID0gKCkgPT4ge1xyXG4gIHJldHVybiBodHRwPENhdGVnb3J5VG9wSXRlbVtdPih7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiAnL2NhdGVnb3J5L3RvcCcsXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IFBhZ2VQYXJhbXMsIFBhZ2VSZXN1bHQgfSBmcm9tICdAL3R5cGVzL2dsb2JhbCdcclxuaW1wb3J0IHR5cGUgeyBCYW5uZXJJdGVtLCBDYXRlZ29yeUl0ZW0sIEd1ZXNzSXRlbSwgSG90SXRlbSB9IGZyb20gJ0AvdHlwZXMvaG9tZSdcclxuaW1wb3J0IHsgaHR0cCB9IGZyb20gJ0AvdXRpbHMvaHR0cCdcclxuXHJcbi8qKlxyXG4gKiDpppbpobUt5bm/5ZGK5Yy65Z+fLeWwj+eoi+W6j1xyXG4gKiBAcGFyYW0gZGlzdHJpYnV0aW9uU2l0ZSDlub/lkYrljLrln5/lsZXnpLrkvY3nva7vvIjmipXmlL7kvY3nva4g5oqV5pS+5L2N572u77yMMeS4uummlumhte+8jDLkuLrliIbnsbvllYblk4HpobXvvIkg6buY6K6k5pivMVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldEhvbWVCYW5uZXJBUEkgPSAoZGlzdHJpYnV0aW9uU2l0ZSA9IDEpID0+IHtcclxuICByZXR1cm4gaHR0cDxCYW5uZXJJdGVtW10+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6ICcvaG9tZS9iYW5uZXInLFxyXG4gICAgZGF0YToge1xyXG4gICAgICBkaXN0cmlidXRpb25TaXRlLFxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog6aaW6aG1LeWJjeWPsOWIhuexuy3lsI/nqIvluo9cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRIb21lQ2F0ZWdvcnlBUEkgPSAoKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8Q2F0ZWdvcnlJdGVtW10+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6ICcvaG9tZS9jYXRlZ29yeS9tdXRsaScsXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIOmmlumhtS3ng63pl6jmjqjojZAt5bCP56iL5bqPXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0SG9tZUhvdEFQSSA9ICgpID0+IHtcclxuICByZXR1cm4gaHR0cDxIb3RJdGVtW10+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6ICcvaG9tZS9ob3QvbXV0bGknLFxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnjJzkvaDllpzmrKIt5bCP56iL5bqPXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0SG9tZUdvb2RzR3Vlc3NMaWtlQVBJID0gKGRhdGE/OiBQYWdlUGFyYW1zKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8UGFnZVJlc3VsdDxHdWVzc0l0ZW0+Pih7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiAnL2hvbWUvZ29vZHMvZ3Vlc3NMaWtlJyxcclxuICAgIGRhdGEsXHJcbiAgfSlcclxufVxyXG4iLCI8dGVtcGxhdGUgbmFtZT1cInNrZWxldG9uXCI+XHJcbiAgPHZpZXcgY2xhc3M9XCJzay1jb250YWluZXJcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJzZWFyY2hcIj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImlucHV0XCI+XHJcbiAgICAgICAgICA8dGV4dFxyXG4gICAgICAgICAgICBjbGFzcz1cImljb24tc2VhcmNoIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny0yMjUgc2stdGV4dCBzay1wc2V1ZG8gc2stcHNldWRvLWNpcmNsZVwiXHJcbiAgICAgICAgICAgID7lpbPpnbQ8L3RleHRcclxuICAgICAgICAgID5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjYXRlZ29yaWVzXCI+XHJcbiAgICAgICAgPHNjcm9sbC12aWV3IDpzY3JvbGwteT1cInRydWVcIiBjbGFzcz1cInByaW1hcnlcIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbSBhY3RpdmUgc2stcHNldWRvIHNrLXBzZXVkby1jaXJjbGVcIj5cclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJuYW1lIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny0yMTggc2stdGV4dFwiPuWxheWutjwvdGV4dD5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbSBzay1wc2V1ZG8gc2stcHNldWRvLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm5hbWUgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTQ5NSBzay10ZXh0XCI+576O6aOfPC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtIHNrLXBzZXVkbyBzay1wc2V1ZG8tY2lyY2xlXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibmFtZSBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctNjI4IHNrLXRleHRcIj7mnI3ppbA8L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIml0ZW0gc2stcHNldWRvIHNrLXBzZXVkby1jaXJjbGVcIj5cclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJuYW1lIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny0xNjMgc2stdGV4dFwiPuavjeWptDwvdGV4dD5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbSBzay1wc2V1ZG8gc2stcHNldWRvLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm5hbWUgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTY5MCBzay10ZXh0XCI+5Liq5oqkPC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtIHNrLXBzZXVkbyBzay1wc2V1ZG8tY2lyY2xlXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibmFtZSBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctMzAyIHNrLXRleHRcIj7kuKXpgIk8L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIml0ZW0gc2stcHNldWRvIHNrLXBzZXVkby1jaXJjbGVcIj5cclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJuYW1lIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny03MzAgc2stdGV4dFwiPuaVsOeggTwvdGV4dD5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbSBzay1wc2V1ZG8gc2stcHNldWRvLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm5hbWUgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTU4NCBzay10ZXh0XCI+6L+Q5YqoPC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtIHNrLXBzZXVkbyBzay1wc2V1ZG8tY2lyY2xlXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibmFtZSBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctODk1IHNrLXRleHRcIj7mnYLpobk8L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC9zY3JvbGwtdmlldz5cclxuICAgICAgICA8c2Nyb2xsLXZpZXcgOnNjcm9sbC15PVwidHJ1ZVwiIGNsYXNzPVwic2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICA8dmlldyBpcz1cImNvbXBvbmVudHMvWHR4U3dpcGVyXCIgY2xhc3M9XCJiYW5uZXJcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJjYXJvdXNlbCBYdHhTd2lwZXItLWNhcm91c2VsXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpbmRpY2F0b3IgWHR4U3dpcGVyLS1pbmRpY2F0b3JcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiZG90IFh0eFN3aXBlci0tZG90IGFjdGl2ZSBYdHhTd2lwZXItLWFjdGl2ZVwiPjwvdGV4dD5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiZG90IFh0eFN3aXBlci0tZG90XCI+PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJkb3QgWHR4U3dpcGVyLS1kb3RcIj48L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImRvdCBYdHhTd2lwZXItLWRvdFwiPjwvdGV4dD5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiZG90IFh0eFN3aXBlci0tZG90XCI+PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJwYW5lbFwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJuYW1lIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMjYtNjY2Ny04ODUgc2stdGV4dFwiPuWxheWutueUn+a0u+eUqOWTgTwvdGV4dD5cclxuICAgICAgICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vcmUgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0zMC0wMDAwLTg5MiBzay10ZXh0IHNrLXBzZXVkbyBzay1wc2V1ZG8tY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICA+5YWo6YOoPC9uYXZpZ2F0b3JcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPG5hdmlnYXRvciBjbGFzcz1cImdvb2RzXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1hZ2UgY2xhc3M9XCJpbWFnZSBzay1pbWFnZVwiPjwvaW1hZ2U+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXMgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTY0OCBzay10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgPuaegeWFiemZkOWumiDnj6DlhYnok53nj5DnkIXplIU8L3ZpZXdcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJzeW1ib2wgc2stdHJhbnNwYXJlbnQgc2stb3BhY2l0eVwiPsKlPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlciBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctNzA4IHNrLXRleHRcIj4xOTkuMDA8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICAgICAgPG5hdmlnYXRvciBjbGFzcz1cImdvb2RzXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1hZ2UgY2xhc3M9XCJpbWFnZSBzay1pbWFnZVwiPjwvaW1hZ2U+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXMgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTgzMiBzay10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgPumSu+efs+mZtueTt+a2guWxguWkmueUqOmUhTE4Y20g5bCP5aW26ZSFPC92aWV3XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sIHNrLXRyYW5zcGFyZW50IHNrLW9wYWNpdHlcIj7CpTwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJudW1iZXIgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTM0OSBzay10ZXh0XCI+MTQ5LjAwPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInBhbmVsXCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm5hbWUgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0yNi02NjY3LTQ4NiBzay10ZXh0XCI+5pS257qzPC90ZXh0PlxyXG4gICAgICAgICAgICAgIDxuYXZpZ2F0b3JcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibW9yZSBzay10cmFuc3BhcmVudCBzay10ZXh0LTMwLTAwMDAtNTIwIHNrLXRleHQgc2stcHNldWRvIHNrLXBzZXVkby1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgICAgICAgICAgID7lhajpg6g8L25hdmlnYXRvclxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICA8bmF2aWdhdG9yIGNsYXNzPVwiZ29vZHNcIiBob3Zlci1jbGFzcz1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxpbWFnZSBjbGFzcz1cImltYWdlIHNrLWltYWdlXCI+PC9pbWFnZT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwibmFtZSBlbGxpcHNpcyBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctNTgyIHNrLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICA+5byA5Y+R5ZGY6Ieq55WZ5qy+77yM5bim5rua6L2u5Y+M5bGC6ISP6KGj56+TPC92aWV3XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sIHNrLXRyYW5zcGFyZW50IHNrLW9wYWNpdHlcIj7CpTwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJudW1iZXIgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTkzOCBzay10ZXh0XCI+MTI1LjAwPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgICAgIDxuYXZpZ2F0b3IgY2xhc3M9XCJnb29kc1wiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2Ugc2staW1hZ2VcIj48L2ltYWdlPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny0xMDggc2stdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgID7mjaLlraPlpb3luK7miYvvvIzlpKflrrnph4/pmLLlsJjooaPnianmlLbnurPooos8L3ZpZXdcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJzeW1ib2wgc2stdHJhbnNwYXJlbnQgc2stb3BhY2l0eVwiPsKlPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlciBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctNTY0IHNrLXRleHRcIj42OS4wMDwvdGV4dD5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgICAgICA8bmF2aWdhdG9yIGNsYXNzPVwiZ29vZHNcIiBob3Zlci1jbGFzcz1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxpbWFnZSBjbGFzcz1cImltYWdlIHNrLWltYWdlXCI+PC9pbWFnZT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwibmFtZSBlbGxpcHNpcyBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctNTA3IHNrLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICA+5Y+v5rC05rSX55qE5biD6Im65pS257qz55uSPC92aWV3XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sIHNrLXRyYW5zcGFyZW50IHNrLW9wYWNpdHlcIj7CpTwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJudW1iZXIgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTUwMyBzay10ZXh0XCI+MjkuOTA8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICAgICAgPG5hdmlnYXRvciBjbGFzcz1cImdvb2RzXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1hZ2UgY2xhc3M9XCJpbWFnZSBzay1pbWFnZVwiPjwvaW1hZ2U+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXMgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTc1IHNrLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICA+54iG5qy+5piO5pif5aW954mp77yM5oq95bGJ5byP6YCP5piO5YKo54mp5p+cPC92aWV3XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sIHNrLXRyYW5zcGFyZW50IHNrLW9wYWNpdHlcIj7CpTwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJudW1iZXIgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTk2NSBzay10ZXh0XCI+MTI5LjAwPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgICAgIDxuYXZpZ2F0b3IgY2xhc3M9XCJnb29kc1wiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2Ugc2staW1hZ2VcIj48L2ltYWdlPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny03MSBzay10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgPue7meiho+afnOWHj+WHj+iCpe+8jOecn+epuumYsua9ruWOi+e8qeiiizwvdmlld1xyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cInN5bWJvbCBzay10cmFuc3BhcmVudCBzay1vcGFjaXR5XCI+wqU8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibnVtYmVyIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny01MzAgc2stdGV4dFwiPjc5LjAwPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgICAgIDxuYXZpZ2F0b3IgY2xhc3M9XCJnb29kc1wiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2Ugc2staW1hZ2VcIj48L2ltYWdlPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny0xNTEgc2stdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgID7mi4nlvIDmir3lsYnkuI3lh4zkubHvvIzno6jnoILmir3lsYnmlbTnkIbnm5LlpZfoo4U8L3ZpZXdcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJzeW1ib2wgc2stdHJhbnNwYXJlbnQgc2stb3BhY2l0eVwiPsKlPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlciBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctNjQxIHNrLXRleHRcIj40OS4wMDwvdGV4dD5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvc2Nyb2xsLXZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLyogI2lmZGVmIEg1IHx8IEFQUC1QTFVTICovXHJcbi8qIOS/ruWkjSBINSDnq6/pqqjmnrblsY/moLflvI/lvILluLggKi9cclxuLy8gQGltcG9ydCAnQC9jb21wb25lbnRzL3N0eWxlcy9YdHhTd2lwZXIuc2Nzcyc7XHJcbkBpbXBvcnQgJy4uL3N0eWxlcy9jYXRlZ29yeS5zY3NzJztcclxuLyogI2VuZGlmICovXHJcbi5zay10cmFuc3BhcmVudCB7XHJcbiAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny0yMjUge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzkuMnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dCB7XHJcbiAgYmFja2dyb3VuZC1vcmlnaW46IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveCAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC15ICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny0yMTgge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzYuNHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTQ5NSB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzNi40cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctNjI4IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDM2LjRycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny0xNjMge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzYuNHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTY5MCB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzNi40cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctMzAyIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDM2LjRycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny03MzAge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzYuNHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTU4NCB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzNi40cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctODk1IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDM2LjRycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMjYtNjY2Ny04ODUge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDI2LjY2NjclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgNzMuMzMzMyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNjBycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMzAtMDAwMC04OTIge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDMwJSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDcwJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSA2MHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTY0OCB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzMC44cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay1vcGFjaXR5IHtcclxuICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny03MDgge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzMuNnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTgzMiB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzMC44cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctMzQ5IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMzLjZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMjYtNjY2Ny00ODYge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDI2LjY2NjclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgNzMuMzMzMyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNjBycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMzAtMDAwMC01MjAge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDMwJSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDcwJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSA2MHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTU4MiB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzMC44cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctOTM4IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMzLjZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny0xMDgge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzAuOHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTU2NCB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzMy42cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctNTA3IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMwLjhycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny01MDMge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzMuNnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTc1IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMwLjhycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny05NjUge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzMuNnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTcxIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMwLjhycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny01MzAge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzMuNnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTE1MSB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzMC44cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctNjQxIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMzLjZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLWltYWdlIHtcclxuICBiYWNrZ3JvdW5kOiAjZWZlZmVmICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXBzZXVkbzo6YmVmb3JlLFxyXG4uc2stcHNldWRvOjphZnRlciB7XHJcbiAgYmFja2dyb3VuZDogI2VmZWZlZiAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDtcclxuICBjb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcclxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXBzZXVkby1yZWN0OjpiZWZvcmUsXHJcbi5zay1wc2V1ZG8tcmVjdDo6YWZ0ZXIge1xyXG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxufVxyXG4uc2stcHNldWRvLWNpcmNsZTo6YmVmb3JlLFxyXG4uc2stcHNldWRvLWNpcmNsZTo6YWZ0ZXIge1xyXG4gIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay1jb250YWluZXIge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogMDtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBnZXRDYXRlZ29yeVRvcEFQSSB9IGZyb20gJ0Avc2VydmljZXMvY2F0ZWdvcnknXHJcbmltcG9ydCB7IGdldEhvbWVCYW5uZXJBUEkgfSBmcm9tICdAL3NlcnZpY2VzL2hvbWUnXHJcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlUb3BJdGVtIH0gZnJvbSAnQC90eXBlcy9jYXRlZ29yeSdcclxuaW1wb3J0IHR5cGUgeyBCYW5uZXJJdGVtIH0gZnJvbSAnQC90eXBlcy9ob21lJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IFBhZ2VTa2VsZXRvbiBmcm9tICcuL2NvbXBvbmVudHMvUGFnZVNrZWxldG9uLnZ1ZSdcclxuXHJcbi8vIOiOt+WPlui9ruaSreWbvuaVsOaNrlxyXG5jb25zdCBiYW5uZXJMaXN0ID0gcmVmPEJhbm5lckl0ZW1bXT4oW10pXHJcbmNvbnN0IGdldEJhbm5lckRhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SG9tZUJhbm5lckFQSSgyKVxyXG4gIGJhbm5lckxpc3QudmFsdWUgPSByZXMucmVzdWx0XHJcbn1cclxuXHJcbi8vIOiOt+WPluWIhuexu+WIl+ihqOaVsOaNrlxyXG5jb25zdCBjYXRlZ29yeUxpc3QgPSByZWY8Q2F0ZWdvcnlUb3BJdGVtW10+KFtdKVxyXG5jb25zdCBhY3RpdmVJbmRleCA9IHJlZigwKVxyXG5jb25zdCBnZXRDYXRlZ29yeVRvcERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0Q2F0ZWdvcnlUb3BBUEkoKVxyXG4gIGNhdGVnb3J5TGlzdC52YWx1ZSA9IHJlcy5yZXN1bHRcclxufVxyXG5cclxuLy8g5piv5ZCm5pWw5o2u5Yqg6L295a6M5q+VXHJcbmNvbnN0IGlzRmluaXNoID0gcmVmKGZhbHNlKVxyXG4vLyDpobXpnaLliqDovb1cclxub25Mb2FkKGFzeW5jICgpID0+IHtcclxuICBhd2FpdCBQcm9taXNlLmFsbChbZ2V0QmFubmVyRGF0YSgpLCBnZXRDYXRlZ29yeVRvcERhdGEoKV0pXHJcbiAgaXNGaW5pc2gudmFsdWUgPSB0cnVlXHJcbn0pXHJcblxyXG4vLyDmj5Dlj5blvZPliY3kuoznuqfliIbnsbvmlbDmja5cclxuY29uc3Qgc3ViQ2F0ZWdvcnlMaXN0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBjYXRlZ29yeUxpc3QudmFsdWVbYWN0aXZlSW5kZXgudmFsdWVdPy5jaGlsZHJlbiB8fCBbXVxyXG59KVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cInZpZXdwb3J0XCIgdi1pZj1cImlzRmluaXNoXCI+XHJcbiAgICA8IS0tIOaQnOe0ouahhiAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwic2VhcmNoXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaW5wdXRcIj5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImljb24tc2VhcmNoXCI+5aWz6Z20PC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tIOWIhuexuyAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiY2F0ZWdvcmllc1wiPlxyXG4gICAgICA8IS0tIOW3puS+p++8muS4gOe6p+WIhuexuyAtLT5cclxuICAgICAgPHNjcm9sbC12aWV3IGNsYXNzPVwicHJpbWFyeVwiIHNjcm9sbC15PlxyXG4gICAgICAgIDx2aWV3XHJcbiAgICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2F0ZWdvcnlMaXN0XCJcclxuICAgICAgICAgIDprZXk9XCJpdGVtLmlkXCJcclxuICAgICAgICAgIGNsYXNzPVwiaXRlbVwiXHJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogaW5kZXggPT09IGFjdGl2ZUluZGV4IH1cIlxyXG4gICAgICAgICAgQHRhcD1cImFjdGl2ZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cclxuICAgICAgICAgIDwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvc2Nyb2xsLXZpZXc+XHJcbiAgICAgIDwhLS0g5Y+z5L6n77ya5LqM57qn5YiG57G7IC0tPlxyXG4gICAgICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIGNsYXNzPVwic2Vjb25kYXJ5XCIgc2Nyb2xsLXk+XHJcbiAgICAgICAgPCEtLSDnhKbngrnlm74gLS0+XHJcbiAgICAgICAgPFh0eFN3aXBlciBjbGFzcz1cImJhbm5lclwiIDpsaXN0PVwiYmFubmVyTGlzdFwiIC8+XHJcbiAgICAgICAgPCEtLSDlhoXlrrnljLrln58gLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJwYW5lbFwiIHYtZm9yPVwiaXRlbSBpbiBzdWJDYXRlZ29yeUxpc3RcIiA6a2V5PVwiaXRlbS5pZFwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm5hbWVcIj57eyBpdGVtLm5hbWUgfX08L3RleHQ+XHJcbiAgICAgICAgICAgIDxuYXZpZ2F0b3IgY2xhc3M9XCJtb3JlXCIgaG92ZXItY2xhc3M9XCJub25lXCI+5YWo6YOoPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgICAgIHYtZm9yPVwiZ29vZHMgaW4gaXRlbS5nb29kc1wiXHJcbiAgICAgICAgICAgICAgOmtleT1cImdvb2RzLmlkXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImdvb2RzXCJcclxuICAgICAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzL2dvb2RzL2dvb2RzP2lkPSR7Z29vZHMuaWR9YFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aW1hZ2UgY2xhc3M9XCJpbWFnZVwiIDpzcmM9XCJnb29kcy5waWN0dXJlXCI+PC9pbWFnZT5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXNcIj57eyBnb29kcy5uYW1lIH19PC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sXCI+wqU8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlclwiPnt7IGdvb2RzLnByaWNlIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3Njcm9sbC12aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuICA8UGFnZVNrZWxldG9uIHYtZWxzZSAvPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbkBpbXBvcnQgJy4vc3R5bGVzL2NhdGVnb3J5LnNjc3MnO1xyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBnZXRDYXRlZ29yeVRvcEFQSSB9IGZyb20gJ0Avc2VydmljZXMvY2F0ZWdvcnknXHJcbmltcG9ydCB7IGdldEhvbWVCYW5uZXJBUEkgfSBmcm9tICdAL3NlcnZpY2VzL2hvbWUnXHJcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlUb3BJdGVtIH0gZnJvbSAnQC90eXBlcy9jYXRlZ29yeSdcclxuaW1wb3J0IHR5cGUgeyBCYW5uZXJJdGVtIH0gZnJvbSAnQC90eXBlcy9ob21lJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IFBhZ2VTa2VsZXRvbiBmcm9tICcuL2NvbXBvbmVudHMvUGFnZVNrZWxldG9uLnZ1ZSdcclxuXHJcbi8vIOiOt+WPlui9ruaSreWbvuaVsOaNrlxyXG5jb25zdCBiYW5uZXJMaXN0ID0gcmVmPEJhbm5lckl0ZW1bXT4oW10pXHJcbmNvbnN0IGdldEJhbm5lckRhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SG9tZUJhbm5lckFQSSgyKVxyXG4gIGJhbm5lckxpc3QudmFsdWUgPSByZXMucmVzdWx0XHJcbn1cclxuXHJcbi8vIOiOt+WPluWIhuexu+WIl+ihqOaVsOaNrlxyXG5jb25zdCBjYXRlZ29yeUxpc3QgPSByZWY8Q2F0ZWdvcnlUb3BJdGVtW10+KFtdKVxyXG5jb25zdCBhY3RpdmVJbmRleCA9IHJlZigwKVxyXG5jb25zdCBnZXRDYXRlZ29yeVRvcERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0Q2F0ZWdvcnlUb3BBUEkoKVxyXG4gIGNhdGVnb3J5TGlzdC52YWx1ZSA9IHJlcy5yZXN1bHRcclxufVxyXG5cclxuLy8g5piv5ZCm5pWw5o2u5Yqg6L295a6M5q+VXHJcbmNvbnN0IGlzRmluaXNoID0gcmVmKGZhbHNlKVxyXG4vLyDpobXpnaLliqDovb1cclxub25Mb2FkKGFzeW5jICgpID0+IHtcclxuICBhd2FpdCBQcm9taXNlLmFsbChbZ2V0QmFubmVyRGF0YSgpLCBnZXRDYXRlZ29yeVRvcERhdGEoKV0pXHJcbiAgaXNGaW5pc2gudmFsdWUgPSB0cnVlXHJcbn0pXHJcblxyXG4vLyDmj5Dlj5blvZPliY3kuoznuqfliIbnsbvmlbDmja5cclxuY29uc3Qgc3ViQ2F0ZWdvcnlMaXN0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBjYXRlZ29yeUxpc3QudmFsdWVbYWN0aXZlSW5kZXgudmFsdWVdPy5jaGlsZHJlbiB8fCBbXVxyXG59KVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cInZpZXdwb3J0XCIgdi1pZj1cImlzRmluaXNoXCI+XHJcbiAgICA8IS0tIOaQnOe0ouahhiAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwic2VhcmNoXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaW5wdXRcIj5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImljb24tc2VhcmNoXCI+5aWz6Z20PC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tIOWIhuexuyAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiY2F0ZWdvcmllc1wiPlxyXG4gICAgICA8IS0tIOW3puS+p++8muS4gOe6p+WIhuexuyAtLT5cclxuICAgICAgPHNjcm9sbC12aWV3IGNsYXNzPVwicHJpbWFyeVwiIHNjcm9sbC15PlxyXG4gICAgICAgIDx2aWV3XHJcbiAgICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2F0ZWdvcnlMaXN0XCJcclxuICAgICAgICAgIDprZXk9XCJpdGVtLmlkXCJcclxuICAgICAgICAgIGNsYXNzPVwiaXRlbVwiXHJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogaW5kZXggPT09IGFjdGl2ZUluZGV4IH1cIlxyXG4gICAgICAgICAgQHRhcD1cImFjdGl2ZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cclxuICAgICAgICAgIDwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvc2Nyb2xsLXZpZXc+XHJcbiAgICAgIDwhLS0g5Y+z5L6n77ya5LqM57qn5YiG57G7IC0tPlxyXG4gICAgICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIGNsYXNzPVwic2Vjb25kYXJ5XCIgc2Nyb2xsLXk+XHJcbiAgICAgICAgPCEtLSDnhKbngrnlm74gLS0+XHJcbiAgICAgICAgPFh0eFN3aXBlciBjbGFzcz1cImJhbm5lclwiIDpsaXN0PVwiYmFubmVyTGlzdFwiIC8+XHJcbiAgICAgICAgPCEtLSDlhoXlrrnljLrln58gLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJwYW5lbFwiIHYtZm9yPVwiaXRlbSBpbiBzdWJDYXRlZ29yeUxpc3RcIiA6a2V5PVwiaXRlbS5pZFwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm5hbWVcIj57eyBpdGVtLm5hbWUgfX08L3RleHQ+XHJcbiAgICAgICAgICAgIDxuYXZpZ2F0b3IgY2xhc3M9XCJtb3JlXCIgaG92ZXItY2xhc3M9XCJub25lXCI+5YWo6YOoPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgICAgIHYtZm9yPVwiZ29vZHMgaW4gaXRlbS5nb29kc1wiXHJcbiAgICAgICAgICAgICAgOmtleT1cImdvb2RzLmlkXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImdvb2RzXCJcclxuICAgICAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzL2dvb2RzL2dvb2RzP2lkPSR7Z29vZHMuaWR9YFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aW1hZ2UgY2xhc3M9XCJpbWFnZVwiIDpzcmM9XCJnb29kcy5waWN0dXJlXCI+PC9pbWFnZT5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXNcIj57eyBnb29kcy5uYW1lIH19PC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sXCI+wqU8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlclwiPnt7IGdvb2RzLnByaWNlIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3Njcm9sbC12aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuICA8UGFnZVNrZWxldG9uIHYtZWxzZSAvPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbkBpbXBvcnQgJy4vc3R5bGVzL2NhdGVnb3J5LnNjc3MnO1xyXG48L3N0eWxlPlxyXG4iLCI8IS0tIOatpei/m+WZqCAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwidmstZGF0YS1pbnB1dC1udW1iZXItYm94XCI+XHJcbiAgICA8dmlld1xyXG4gICAgICBjbGFzcz1cInUtaWNvbi1taW51c1wiXHJcbiAgICAgIDpjbGFzcz1cInsgJ3UtaWNvbi1kaXNhYmxlZCc6IGRpc2FibGVkIHx8IGlucHV0VmFsIDw9IG1pbiB9XCJcclxuICAgICAgOnN0eWxlPVwie1xyXG4gICAgICAgIGJhY2tncm91bmQ6IGJnQ29sb3IsXHJcbiAgICAgICAgaGVpZ2h0OiBpbnB1dEhlaWdodCArICdycHgnLFxyXG4gICAgICAgIGNvbG9yOiBjb2xvcixcclxuICAgICAgICBmb250U2l6ZTogc2l6ZSArICdycHgnLFxyXG4gICAgICAgIG1pbkhlaWdodDogJzEuNGVtJyxcclxuICAgICAgfVwiXHJcbiAgICAgIEB0b3VjaHN0YXJ0LnByZXZlbnQ9XCJidG5Ub3VjaFN0YXJ0KCdtaW51cycpXCJcclxuICAgICAgQHRvdWNoZW5kLnN0b3AucHJldmVudD1cImNsZWFyVGltZXJcIlxyXG4gICAgPlxyXG4gICAgICA8dmlldyA6c3R5bGU9XCInZm9udC1zaXplOicgKyAoTnVtYmVyKHNpemUpICsgMTApICsgJ3JweCdcIiBjbGFzcz1cIm51bS1idG5cIj7vvI08L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8aW5wdXRcclxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsXCJcclxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRJbnB1dCB8fCBkaXNhYmxlZFwiXHJcbiAgICAgIDpjdXJzb3Itc3BhY2luZz1cImdldEN1cnNvclNwYWNpbmdcIlxyXG4gICAgICA6Y2xhc3M9XCJ7ICd1LWlucHV0LWRpc2FibGVkJzogZGlzYWJsZWQgfVwiXHJcbiAgICAgIGNsYXNzPVwidS1udW1iZXItaW5wdXRcIlxyXG4gICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgOnN0eWxlPVwie1xyXG4gICAgICAgIGNvbG9yOiBjb2xvcixcclxuICAgICAgICBmb250U2l6ZTogc2l6ZSArICdycHgnLFxyXG4gICAgICAgIGJhY2tncm91bmQ6IGJnQ29sb3IsXHJcbiAgICAgICAgaGVpZ2h0OiBpbnB1dEhlaWdodCArICdycHgnLFxyXG4gICAgICAgIHdpZHRoOiBpbnB1dFdpZHRoICsgJ3JweCcsXHJcbiAgICAgIH1cIlxyXG4gICAgICBAYmx1cj1cIm9uQmx1clwiXHJcbiAgICAvPlxyXG4gICAgPHZpZXdcclxuICAgICAgY2xhc3M9XCJ1LWljb24tcGx1c1wiXHJcbiAgICAgIDpjbGFzcz1cInsgJ3UtaWNvbi1kaXNhYmxlZCc6IGRpc2FibGVkIHx8IGlucHV0VmFsID49IG1heCB9XCJcclxuICAgICAgOnN0eWxlPVwie1xyXG4gICAgICAgIGJhY2tncm91bmQ6IGJnQ29sb3IsXHJcbiAgICAgICAgaGVpZ2h0OiBpbnB1dEhlaWdodCArICdycHgnLFxyXG4gICAgICAgIGNvbG9yOiBjb2xvcixcclxuICAgICAgICBmb250U2l6ZTogc2l6ZSArICdycHgnLFxyXG4gICAgICAgIG1pbkhlaWdodDogJzEuNGVtJyxcclxuICAgICAgfVwiXHJcbiAgICAgIEB0b3VjaHN0YXJ0LnByZXZlbnQ9XCJidG5Ub3VjaFN0YXJ0KCdwbHVzJylcIlxyXG4gICAgICBAdG91Y2hlbmQuc3RvcC5wcmV2ZW50PVwiY2xlYXJUaW1lclwiXHJcbiAgICA+XHJcbiAgICAgIDx2aWV3IDpzdHlsZT1cIidmb250LXNpemU6JyArIChOdW1iZXIoc2l6ZSkgKyAxMCkgKyAncnB4J1wiIGNsYXNzPVwibnVtLWJ0blwiPu+8izwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4vKipcclxuICogbnVtYmVyQm94IOatpei/m+WZqO+8iOatpOS4unV2aWV357uE5Lu25pS56YCg77yJXHJcbiAqIEBkZXNjcmlwdGlvbiDor6Xnu4Tku7bkuIDoiKznlKjkuo7llYbln47otK3nianpgInmi6nnianlk4HmlbDph4/nmoTlnLrmma/jgILms6jmhI/vvJror6XovpPlhaXmoYblj6rog73ovpPlhaXlpKfkuo7miJbnrYnkuo4w55qE5pW05pWw77yM5LiN5pSv5oyB5bCP5pWw6L6T5YWlXHJcbiAqIEB0dXRvcmlhbCBodHRwczovL3d3dy51dmlld3VpLmNvbS9jb21wb25lbnRzL251bWJlckJveC5odG1sXHJcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSB2YWx1ZSDovpPlhaXmoYbliJ3lp4vlgLzvvIjpu5jorqQx77yJXHJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBiZy1jb2xvciDovpPlhaXmoYblkozmjInpkq7nmoTog4zmma/popzoibLvvIjpu5jorqQjRjJGM0Y177yJXHJcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBtaW4g55So5oi35Y+v6L6T5YWl55qE5pyA5bCP5YC877yI6buY6K6kMO+8iVxyXG4gKiBAcHJvcGVydHkge051bWJlcn0gbWF4IOeUqOaIt+WPr+i+k+WFpeeahOacgOWkp+WAvO+8iOm7mOiupDk5OTk577yJXHJcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBzdGVwIOatpemVv++8jOavj+asoeWKoOaIluWHj+eahOWAvO+8iOm7mOiupDHvvIlcclxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHN0ZXBGaXJzdCDmraXov5vlgLzvvIzpppbmrKHlop7liqDmiJbmnIDlkI7lh4/nmoTlgLwo6buY6K6kc3RlcOWAvOWSjOS4gOiHtO+8iVxyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRpc2FibGVkIOaYr+WQpuemgeeUqOaTjeS9nO+8jOemgeeUqOWQjuaXoOazleWKoOWHj+aIluaJi+WKqOS/ruaUuei+k+WFpeahhueahOWAvO+8iOm7mOiupGZhbHNl77yJXHJcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGlzYWJsZWQtaW5wdXQg5piv5ZCm56aB5q2i6L6T5YWl5qGG5omL5Yqo6L6T5YWl5YC877yI6buY6K6kZmFsc2XvvIlcclxuICogQHByb3BlcnR5IHtCb29sZWFufSBwb3NpdGl2ZS1pbnRlZ2VyIOaYr+WQpuWPquiDvei+k+WFpeato+aVtOaVsO+8iOm7mOiupHRydWXvvIlcclxuICogQHByb3BlcnR5IHtTdHJpbmcgfCBOdW1iZXJ9IHNpemUg6L6T5YWl5qGG5paH5a2X5ZKM5oyJ6ZKu5a2X5L2T5aSn5bCP77yM5Y2V5L2NcnB477yI6buY6K6kMjbvvIlcclxuICogQHByb3BlcnR5IHtTdHJpbmd9IGNvbG9yIOi+k+WFpeahhuaWh+Wtl+WSjOWKoOWHj+aMiemSruWbvuagh+eahOminOiJsu+8iOm7mOiupCMzMjMyMzPvvIlcclxuICogQHByb3BlcnR5IHtTdHJpbmcgfCBOdW1iZXJ9IGlucHV0LXdpZHRoIOi+k+WFpeahhuWuveW6pu+8jOWNleS9jXJweO+8iOm7mOiupDgw77yJXHJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nIHwgTnVtYmVyfSBpbnB1dC1oZWlnaHQg6L6T5YWl5qGG5ZKM5oyJ6ZKu55qE6auY5bqm77yM5Y2V5L2NcnB477yI6buY6K6kNTDvvIlcclxuICogQHByb3BlcnR5IHtTdHJpbmcgfCBOdW1iZXJ9IGluZGV4IOS6i+S7tuWbnuiwg+aXtueUqOS7peWMuuWIhuW9k+WJjeWPkeeUn+WPmOWMlueahOaYr+WTquS4qui+k+WFpeahhlxyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGxvbmctcHJlc3Mg5piv5ZCm5byA5ZCv6ZW/5oyJ6L+e57ut6YCS5aKe5oiW6YCS5YePKOm7mOiupHRydWUpXHJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nIHwgTnVtYmVyfSBwcmVzcy10aW1lIOW8gOWQr+mVv+aMieinpuWPkeWQju+8jOavj+inpuWPkeS4gOasoemcgOimgeWkmuS5he+8jOWNleS9jW1zKOm7mOiupDI1MClcclxuICogQHByb3BlcnR5IHtTdHJpbmcgfCBOdW1iZXJ9IGN1cnNvci1zcGFjaW5nIOaMh+WumuWFieagh+S6jumUruebmOeahOi3neemu++8jOmBv+WFjemUruebmOmBruaMoei+k+WFpeahhu+8jOWNleS9jXJweO+8iOm7mOiupDIwMO+8iVxyXG4gKiBAZXZlbnQge0Z1bmN0aW9ufSBjaGFuZ2Ug6L6T5YWl5qGG5YaF5a655Y+R55Sf5Y+Y5YyW5pe26Kem5Y+R77yM5a+56LGh5b2i5byPXHJcbiAqIEBldmVudCB7RnVuY3Rpb259IGJsdXIg6L6T5YWl5qGG5aSx5Y6754Sm54K55pe26Kem5Y+R77yM5a+56LGh5b2i5byPXHJcbiAqIEBldmVudCB7RnVuY3Rpb259IG1pbnVzIOeCueWHu+WHj+WwkeaMiemSruaXtuinpuWPkSjmjInpkq7lj6/ngrnlh7vmg4XlhrXkuIsp77yM5a+56LGh5b2i5byPXHJcbiAqIEBldmVudCB7RnVuY3Rpb259IHBsdXMg54K55Ye75aKe5Yqg5oyJ6ZKu5pe26Kem5Y+RKOaMiemSruWPr+eCueWHu+aDheWGteS4iynvvIzlr7nosaHlvaLlvI9cclxuICogQGV4YW1wbGUgPHZrLWRhdGEtaW5wdXQtbnVtYmVyLWJveCA6bWluPVwiMVwiIDptYXg9XCIxMDBcIj48L3ZrLWRhdGEtaW5wdXQtbnVtYmVyLWJveD5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBuYW1lOiAndmstZGF0YS1pbnB1dC1udW1iZXItYm94JyxcclxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdpbnB1dCcsICdjaGFuZ2UnLCAnYmx1cicsICdwbHVzJywgJ21pbnVzJ10sXHJcbiAgcHJvcHM6IHtcclxuICAgIC8vIOmihOaYvuekuueahOaVsOWtl1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICBkZWZhdWx0OiAxLFxyXG4gICAgfSxcclxuICAgIG1vZGVsVmFsdWU6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICBkZWZhdWx0OiAxLFxyXG4gICAgfSxcclxuICAgIC8vIOiDjOaZr+minOiJslxyXG4gICAgYmdDb2xvcjoge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6ICcjRjJGM0Y1JyxcclxuICAgIH0sXHJcbiAgICAvLyDmnIDlsI/lgLxcclxuICAgIG1pbjoge1xyXG4gICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgIGRlZmF1bHQ6IDAsXHJcbiAgICB9LFxyXG4gICAgLy8g5pyA5aSn5YC8XHJcbiAgICBtYXg6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICBkZWZhdWx0OiA5OTk5OSxcclxuICAgIH0sXHJcbiAgICAvLyDmraXov5vlgLzvvIzmr4/mrKHliqDmiJblh4/nmoTlgLxcclxuICAgIHN0ZXA6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICBkZWZhdWx0OiAxLFxyXG4gICAgfSxcclxuICAgIC8vIOatpei/m+WAvO+8jOmmluasoeWinuWKoOaIluacgOWQjuWHj+eahOWAvFxyXG4gICAgc3RlcEZpcnN0OiB7XHJcbiAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgZGVmYXVsdDogMCxcclxuICAgIH0sXHJcbiAgICAvLyDmmK/lkKblj6rog73ovpPlhaUgc3RlcCDnmoTlgI3mlbBcclxuICAgIHN0ZXBTdHJpY3RseToge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcclxuICAgIH0sXHJcbiAgICAvLyDmmK/lkKbnpoHnlKjliqDlh4/mk43kvZxcclxuICAgIGRpc2FibGVkOiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIC8vIGlucHV055qE5a2X5L2T5aSn5bCP77yM5Y2V5L2NcnB4XHJcbiAgICBzaXplOiB7XHJcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXHJcbiAgICAgIGRlZmF1bHQ6IDI2LFxyXG4gICAgfSxcclxuICAgIC8vIOWKoOWHj+Wbvuagh+eahOminOiJslxyXG4gICAgY29sb3I6IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiAnIzMyMzIzMycsXHJcbiAgICB9LFxyXG4gICAgLy8gaW5wdXTlrr3luqbvvIzljZXkvY1ycHhcclxuICAgIGlucHV0V2lkdGg6IHtcclxuICAgICAgdHlwZTogW051bWJlciwgU3RyaW5nXSxcclxuICAgICAgZGVmYXVsdDogODAsXHJcbiAgICB9LFxyXG4gICAgLy8gaW5wdXTpq5jluqbvvIzljZXkvY1ycHhcclxuICAgIGlucHV0SGVpZ2h0OiB7XHJcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXHJcbiAgICAgIGRlZmF1bHQ6IDUwLFxyXG4gICAgfSxcclxuICAgIC8vIGluZGV457Si5byV77yM55So5LqO5YiX6KGo5Lit5L2/55So77yM6K6p55So5oi355+l6YGT5piv5ZOq5LiqbnVtYmVyYm945Y+R55Sf5LqG5Y+Y5YyW77yM5LiA6Iis5L2/55SoZm9y5b6q546v5Ye65p2l55qEaW5kZXjlgLzljbPlj69cclxuICAgIGluZGV4OiB7XHJcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXHJcbiAgICAgIGRlZmF1bHQ6ICcnLFxyXG4gICAgfSxcclxuICAgIC8vIOaYr+WQpuemgeeUqOi+k+WFpeahhu+8jOS4jmRpc2FibGVk5L2c55So5LqO6L6T5YWl5qGG5pe277yM5Li6T1LnmoTlhbPns7vvvIzljbPmg7PopoHnpoHnlKjovpPlhaXmoYbvvIzlj4jlj6/ku6XliqDlh4/nmoTor51cclxuICAgIC8vIOiuvue9rmRpc2FibGVk5Li6ZmFsc2XvvIxkaXNhYmxlZElucHV05Li6dHJ1ZeWNs+WPr1xyXG4gICAgZGlzYWJsZWRJbnB1dDoge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcclxuICAgIH0sXHJcbiAgICAvLyDovpPlhaXmoYbkuo7plK7nm5jkuYvpl7TnmoTot53nprtcclxuICAgIGN1cnNvclNwYWNpbmc6IHtcclxuICAgICAgdHlwZTogW051bWJlciwgU3RyaW5nXSxcclxuICAgICAgZGVmYXVsdDogMTAwLFxyXG4gICAgfSxcclxuICAgIC8vIOaYr+WQpuW8gOWQr+mVv+aMiei/nue7remAkuWinuaIlumAkuWHj1xyXG4gICAgbG9uZ1ByZXNzOiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgLy8g5byA5ZCv6ZW/5oyJ6Kem5Y+R5ZCO77yM5q+P6Kem5Y+R5LiA5qyh6ZyA6KaB5aSa5LmFXHJcbiAgICBwcmVzc1RpbWU6IHtcclxuICAgICAgdHlwZTogW051bWJlciwgU3RyaW5nXSxcclxuICAgICAgZGVmYXVsdDogMjUwLFxyXG4gICAgfSxcclxuICAgIC8vIOaYr+WQpuWPquiDvei+k+WFpeWkp+S6juaIluetieS6jjDnmoTmlbTmlbAo5q2j5pW05pWwKVxyXG4gICAgcG9zaXRpdmVJbnRlZ2VyOiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgd2F0Y2g6IHtcclxuICAgIHZhbHVlQ29tKHYxLCB2Mikge1xyXG4gICAgICAvLyDlj6rmnIl2YWx1ZeeahOaUueWPmOaYr+adpeiHquWklumDqOeahOaXtuWAme+8jOaJjeWOu+WQjOatpWlucHV0VmFs55qE5YC877yM5ZCm5YiZ5Lya6YCg5oiQ5b6q546v6ZSZ6K+vXHJcbiAgICAgIGlmICghdGhpcy5jaGFuZ2VGcm9tSW5uZXIpIHtcclxuICAgICAgICB0aGlzLmlucHV0VmFsID0gdjFcclxuICAgICAgICAvLyDlm6DkuLppbnB1dFZhbOWPmOWMluWQju+8jOS8muinpuWPkXRoaXMuaGFuZGxlQ2hhbmdlKCnvvIzlnKjlhbbkuK1jaGFuZ2VGcm9tSW5uZXLkvJrlho3mrKHooqvorr7nva7kuLp0cnVl77yMXHJcbiAgICAgICAgLy8g6YCg5oiQ5aSW6Z2i5L+u5pS55YC877yM5Lmf5a+86Ie06KKr6K6k5Li65piv5YaF6YOo5L+u5pS555qE5re35Lmx77yM6L+Z6YeM6L+b6KGMdGhpcy4kbmV4dFRpY2vlu7bml7bvvIzkv53or4HlnKjov5DooYzlkajmnJ/nmoTmnIDlkI7lpIRcclxuICAgICAgICAvLyDlsIZjaGFuZ2VGcm9tSW5uZXLorr7nva7kuLpmYWxzZVxyXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRnJvbUlubmVyID0gZmFsc2VcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgaW5wdXRWYWwodjEsIHYyKSB7XHJcbiAgICAgIC8vIOS4uuS6huiuqeeUqOaIt+iDveWkn+WIoOmZpOaJgOaciei+k+WFpeWAvO+8jOmHjeaWsOi+k+WFpeWGheWuue+8jOWIoOmZpOaJgOacieWAvOWQju+8jOWGheWuueS4uuepuuWtl+espuS4slxyXG4gICAgICBpZiAodjEgPT0gJycpIHJldHVyblxyXG4gICAgICBsZXQgdmFsdWUgPSAwXHJcbiAgICAgIC8vIOmmluWFiOWIpOaWreaYr+WQpuaVsOWAvO+8jOW5tuS4lOWcqG1pbuWSjG1heOS5i+mXtO+8jOWmguaenOS4jeaYr++8jOS9v+eUqOWOn+adpeWAvFxyXG4gICAgICBsZXQgdG1wID0gdGhpcy5pc051bWJlcih2MSlcclxuICAgICAgaWYgKHRtcCAmJiB2MSA+PSB0aGlzLm1pbiAmJiB2MSA8PSB0aGlzLm1heCkgdmFsdWUgPSB2MVxyXG4gICAgICBlbHNlIHZhbHVlID0gdjJcclxuICAgICAgLy8g5Yik5pat5piv5ZCm5Y+q6IO96L6T5YWl5aSn5LqO562J5LqOMOeahOaVtOaVsFxyXG4gICAgICBpZiAodGhpcy5wb3NpdGl2ZUludGVnZXIpIHtcclxuICAgICAgICAvLyDlsI/kuo4w77yM5oiW6ICF5bim5pyJ5bCP5pWw54K577yMXHJcbiAgICAgICAgaWYgKHYxIDwgMCB8fCBTdHJpbmcodjEpLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcclxuICAgICAgICAgIHZhbHVlID0gdjJcclxuICAgICAgICAgIC8vIOWPjOWQkee7keWummlucHV055qE5YC877yM5b+F6aG76KaB5L2/55SoJG5leHRUaWNr5L+u5pS55pi+56S655qE5YC8XHJcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWwgPSB2MlxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8g5Y+R5Ye6Y2hhbmdl5LqL5Lu2XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlLCAnY2hhbmdlJylcclxuICAgIH0sXHJcbiAgICBtaW4odjEpIHtcclxuICAgICAgaWYgKHYxICE9PSB1bmRlZmluZWQgJiYgdjEgIT0gJycgJiYgdGhpcy52YWx1ZUNvbSA8IHYxKSB7XHJcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2MSlcclxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHYxKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbWF4KHYxKSB7XHJcbiAgICAgIGlmICh2MSAhPT0gdW5kZWZpbmVkICYmIHYxICE9ICcnICYmIHRoaXMudmFsdWVDb20gPiB2MSkge1xyXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdjEpXHJcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2MSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG4gIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpbnB1dFZhbDogMSwgLy8g6L6T5YWl5qGG5Lit55qE5YC877yM5LiN6IO955u05o6l5L2/55SocHJvcHPkuK3nmoR2YWx1Ze+8jOWboOS4uuW6lOivpeaUueWPmHByb3Bz55qE54q25oCBXHJcbiAgICAgIHRpbWVyOiBudWxsLCAvLyDnlKjkvZzplb/mjInnmoTlrprml7blmahcclxuICAgICAgY2hhbmdlRnJvbUlubmVyOiBmYWxzZSwgLy8g5YC85Y+R55Sf5Y+Y5YyW77yM5piv5p2l6Ieq5YaF6YOo6L+Y5piv5aSW6YOoXHJcbiAgICAgIGlubmVyQ2hhbmdlVGltZXI6IG51bGwsIC8vIOWGhemDqOWumuaXtuWZqFxyXG4gICAgfVxyXG4gIH0sXHJcbiAgY3JlYXRlZCgpIHtcclxuICAgIHRoaXMuaW5wdXRWYWwgPSBOdW1iZXIodGhpcy52YWx1ZUNvbSlcclxuICB9LFxyXG4gIGNvbXB1dGVkOiB7XHJcbiAgICB2YWx1ZUNvbSgpIHtcclxuICAgICAgLy8gI2lmbmRlZiBWVUUzXHJcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlXHJcbiAgICAgIC8vICNlbmRpZlxyXG5cclxuICAgICAgLy8gI2lmZGVmIFZVRTNcclxuICAgICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZVxyXG4gICAgICAvLyAjZW5kaWZcclxuICAgIH0sXHJcbiAgICBnZXRDdXJzb3JTcGFjaW5nKCkge1xyXG4gICAgICAvLyDlhYjlsIblgLzovazkuLpweOWNleS9je+8jOWGjei9rOS4uuaVsOWAvFxyXG4gICAgICByZXR1cm4gTnVtYmVyKHVuaS51cHgycHgodGhpcy5jdXJzb3JTcGFjaW5nKSlcclxuICAgIH0sXHJcbiAgfSxcclxuICBtZXRob2RzOiB7XHJcbiAgICAvLyDngrnlh7vpgIDmoLzplK5cclxuICAgIGJ0blRvdWNoU3RhcnQoY2FsbGJhY2spIHtcclxuICAgICAgLy8g5YWI5omn6KGM5LiA6YGN5pa55rOV77yM5ZCm5YiZ5Lya6YCg5oiQ5p2+5byA5omL5pe277yM5bCx5omn6KGM5LqGY2xlYXJUaW1lcu+8jOWvvOiHtOaXoOazleWunueOsOWKn+iDvVxyXG4gICAgICB0aGlzW2NhbGxiYWNrXSgpXHJcbiAgICAgIC8vIOWmguaenOayoeW8gOWQr+mVv+aMieWKn+iDve+8jOebtOaOpei/lOWbnlxyXG4gICAgICBpZiAoIXRoaXMubG9uZ1ByZXNzKSByZXR1cm5cclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKSAvL+WGjeasoea4heepuuWumuaXtuWZqO+8jOmYsuatoumHjeWkjeazqOWGjOWumuaXtuWZqFxyXG4gICAgICB0aGlzLnRpbWVyID0gbnVsbFxyXG4gICAgICB0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIC8vIOaJp+ihjOWKoOaIluWHj+WHveaVsFxyXG4gICAgICAgIHRoaXNbY2FsbGJhY2tdKClcclxuICAgICAgfSwgdGhpcy5wcmVzc1RpbWUpXHJcbiAgICB9LFxyXG4gICAgY2xlYXJUaW1lcigpIHtcclxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcilcclxuICAgICAgICB0aGlzLnRpbWVyID0gbnVsbFxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIG1pbnVzKCkge1xyXG4gICAgICB0aGlzLmNvbXB1dGVWYWwoJ21pbnVzJylcclxuICAgIH0sXHJcbiAgICBwbHVzKCkge1xyXG4gICAgICB0aGlzLmNvbXB1dGVWYWwoJ3BsdXMnKVxyXG4gICAgfSxcclxuICAgIC8vIOS4uuS6huS/neivgeWwj+aVsOebuOWKoOWHj+WHuueOsOeyvuW6pua6ouWHuueahOmXrumimFxyXG4gICAgY2FsY1BsdXMobnVtMSwgbnVtMikge1xyXG4gICAgICBsZXQgYmFzZU51bSwgYmFzZU51bTEsIGJhc2VOdW0yXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYmFzZU51bTEgPSBudW0xLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXS5sZW5ndGhcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGJhc2VOdW0xID0gMFxyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYmFzZU51bTIgPSBudW0yLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXS5sZW5ndGhcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGJhc2VOdW0yID0gMFxyXG4gICAgICB9XHJcbiAgICAgIGJhc2VOdW0gPSBNYXRoLnBvdygxMCwgTWF0aC5tYXgoYmFzZU51bTEsIGJhc2VOdW0yKSlcclxuICAgICAgbGV0IHByZWNpc2lvbiA9IGJhc2VOdW0xID49IGJhc2VOdW0yID8gYmFzZU51bTEgOiBiYXNlTnVtMiAvL+eyvuW6plxyXG4gICAgICByZXR1cm4gKChudW0xICogYmFzZU51bSArIG51bTIgKiBiYXNlTnVtKSAvIGJhc2VOdW0pLnRvRml4ZWQocHJlY2lzaW9uKVxyXG4gICAgfSxcclxuICAgIC8vIOS4uuS6huS/neivgeWwj+aVsOebuOWKoOWHj+WHuueOsOeyvuW6pua6ouWHuueahOmXrumimFxyXG4gICAgY2FsY01pbnVzKG51bTEsIG51bTIpIHtcclxuICAgICAgbGV0IGJhc2VOdW0sIGJhc2VOdW0xLCBiYXNlTnVtMlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGJhc2VOdW0xID0gbnVtMS50b1N0cmluZygpLnNwbGl0KCcuJylbMV0ubGVuZ3RoXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBiYXNlTnVtMSA9IDBcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGJhc2VOdW0yID0gbnVtMi50b1N0cmluZygpLnNwbGl0KCcuJylbMV0ubGVuZ3RoXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBiYXNlTnVtMiA9IDBcclxuICAgICAgfVxyXG4gICAgICBiYXNlTnVtID0gTWF0aC5wb3coMTAsIE1hdGgubWF4KGJhc2VOdW0xLCBiYXNlTnVtMikpXHJcbiAgICAgIGxldCBwcmVjaXNpb24gPSBiYXNlTnVtMSA+PSBiYXNlTnVtMiA/IGJhc2VOdW0xIDogYmFzZU51bTJcclxuICAgICAgcmV0dXJuICgobnVtMSAqIGJhc2VOdW0gLSBudW0yICogYmFzZU51bSkgLyBiYXNlTnVtKS50b0ZpeGVkKHByZWNpc2lvbilcclxuICAgIH0sXHJcbiAgICBjb21wdXRlVmFsKHR5cGUpIHtcclxuICAgICAgdW5pLmhpZGVLZXlib2FyZCgpXHJcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm5cclxuICAgICAgbGV0IHZhbHVlID0gMFxyXG4gICAgICAvLyDmlrDlop5zdGVwRmlyc3TlvIDlp4tcclxuICAgICAgLy8g5YePXHJcbiAgICAgIGlmICh0eXBlID09PSAnbWludXMnKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RlcEZpcnN0ID4gMCAmJiB0aGlzLmlucHV0VmFsID09IHRoaXMuc3RlcEZpcnN0KSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMubWluXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbHVlID0gdGhpcy5jYWxjTWludXModGhpcy5pbnB1dFZhbCwgdGhpcy5zdGVwKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncGx1cycpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGVwRmlyc3QgPiAwICYmIHRoaXMuaW5wdXRWYWwgPCB0aGlzLnN0ZXBGaXJzdCkge1xyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnN0ZXBGaXJzdFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuY2FsY1BsdXModGhpcy5pbnB1dFZhbCwgdGhpcy5zdGVwKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zdGVwU3RyaWN0bHkpIHtcclxuICAgICAgICBsZXQgc3RyaWN0bHkgPSB2YWx1ZSAlIHRoaXMuc3RlcFxyXG4gICAgICAgIGlmIChzdHJpY3RseSA+IDApIHtcclxuICAgICAgICAgIHZhbHVlIC09IHN0cmljdGx5XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh2YWx1ZSA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLm1heFxyXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgdGhpcy5taW4pIHtcclxuICAgICAgICB2YWx1ZSA9IHRoaXMubWluXHJcbiAgICAgIH1cclxuICAgICAgLy8g5paw5aKec3RlcEZpcnN057uT5p2fXHJcbiAgICAgIHRoaXMuaW5wdXRWYWwgPSB2YWx1ZVxyXG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWx1ZSwgdHlwZSlcclxuICAgIH0sXHJcbiAgICAvLyDlpITnkIbnlKjmiLfmiYvliqjovpPlhaXnmoTmg4XlhrVcclxuICAgIG9uQmx1cihldmVudCkge1xyXG4gICAgICBsZXQgdmFsID0gMFxyXG4gICAgICBsZXQgdmFsdWUgPSBldmVudC5kZXRhaWwudmFsdWVcclxuICAgICAgLy8g5aaC5p6c5Li66Z2eMC055pWw5a2X57uE5oiQ77yM5oiW6ICF5YW256ys5LiA5L2N5pWw5YC85Li6MO+8jOebtOaOpeiuqeWFtuetieS6jm1pbuWAvFxyXG4gICAgICAvLyDov5nph4zkuI3nm7TmjqXliKTmlq3mmK/lkKbmraPmlbTmlbDvvIzmmK/lm6DkuLrnlKjmiLfkvKDpgJLnmoRwcm9wcyBtaW7lgLzlj6/og73kuLowXHJcbiAgICAgIGlmICghLyheXFxkKyQpLy50ZXN0KHZhbHVlKSB8fCB2YWx1ZVswXSA9PSAwKSB2YWwgPSB0aGlzLm1pblxyXG4gICAgICB2YWwgPSArdmFsdWVcclxuXHJcbiAgICAgIC8vIOaWsOWinnN0ZXBGaXJzdOW8gOWni1xyXG4gICAgICBpZiAodGhpcy5zdGVwRmlyc3QgPiAwICYmIHRoaXMuaW5wdXRWYWwgPCB0aGlzLnN0ZXBGaXJzdCAmJiB0aGlzLmlucHV0VmFsID4gMCkge1xyXG4gICAgICAgIHZhbCA9IHRoaXMuc3RlcEZpcnN0XHJcbiAgICAgIH1cclxuICAgICAgLy8g5paw5aKec3RlcEZpcnN057uT5p2fXHJcbiAgICAgIGlmICh0aGlzLnN0ZXBTdHJpY3RseSkge1xyXG4gICAgICAgIGxldCBzdHJpY3RseSA9IHZhbCAlIHRoaXMuc3RlcFxyXG4gICAgICAgIGlmIChzdHJpY3RseSA+IDApIHtcclxuICAgICAgICAgIHZhbCAtPSBzdHJpY3RseVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsID4gdGhpcy5tYXgpIHtcclxuICAgICAgICB2YWwgPSB0aGlzLm1heFxyXG4gICAgICB9IGVsc2UgaWYgKHZhbCA8IHRoaXMubWluKSB7XHJcbiAgICAgICAgdmFsID0gdGhpcy5taW5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbnB1dFZhbCA9IHZhbFxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWwsICdibHVyJylcclxuICAgIH0sXHJcbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUsIHR5cGUpIHtcclxuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVyblxyXG4gICAgICAvLyDmuIXpmaTlrprml7blmajvvIzpgb/lhY3pgKDmiJDmt7fkubFcclxuICAgICAgaWYgKHRoaXMuaW5uZXJDaGFuZ2VUaW1lcikge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmlubmVyQ2hhbmdlVGltZXIpXHJcbiAgICAgICAgdGhpcy5pbm5lckNoYW5nZVRpbWVyID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWPkeWHumlucHV05LqL5Lu277yM5L+u5pS56YCa6L+Hdi1tb2RlbOe7keWumueahOWAvO+8jOi+vuWIsOWPjOWQkee7keWumueahOaViOaenFxyXG4gICAgICB0aGlzLmNoYW5nZUZyb21Jbm5lciA9IHRydWVcclxuICAgICAgLy8g5LiA5a6a5pe26Ze05YaF77yM5riF6ZmkY2hhbmdlRnJvbUlubmVy5qCH6K6w77yM5ZCm5YiZ5YaF6YOo5YC85pS55Y+Y5ZCOXHJcbiAgICAgIC8vIOWklumDqOmAmui/h+eoi+W6j+S/ruaUuXZhbHVl5YC877yM5bCG5Lya5peg5pWIXHJcbiAgICAgIHRoaXMuaW5uZXJDaGFuZ2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRnJvbUlubmVyID0gZmFsc2VcclxuICAgICAgfSwgMTUwKVxyXG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIE51bWJlcih2YWx1ZSkpXHJcbiAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgTnVtYmVyKHZhbHVlKSlcclxuICAgICAgdGhpcy4kZW1pdCh0eXBlLCB7XHJcbiAgICAgICAgLy8g6L2s5Li6TnVtYmVy57G75Z6LXHJcbiAgICAgICAgdmFsdWU6IE51bWJlcih2YWx1ZSksXHJcbiAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDpqozor4HljYHov5vliLbmlbDlrZdcclxuICAgICAqL1xyXG4gICAgaXNOdW1iZXIodmFsdWUpIHtcclxuICAgICAgcmV0dXJuIC9eKD86LT9cXGQrfC0/XFxkezEsM30oPzosXFxkezN9KSspPyg/OlxcLlxcZCspPyQvLnRlc3QodmFsdWUpXHJcbiAgICB9LFxyXG4gIH0sXHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi52ay1kYXRhLWlucHV0LW51bWJlci1ib3gge1xyXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbn1cclxuXHJcbi51LW51bWJlci1pbnB1dCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBwYWRkaW5nOiAwO1xyXG4gIG1hcmdpbjogMCA2cnB4O1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxufVxyXG5cclxuLnUtaWNvbi1wbHVzLFxyXG4udS1pY29uLW1pbnVzIHtcclxuICB3aWR0aDogNjBycHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcblxyXG4udS1pY29uLXBsdXMge1xyXG4gIGJvcmRlci1yYWRpdXM6IDAgOHJweCA4cnB4IDA7XHJcbn1cclxuXHJcbi51LWljb24tbWludXMge1xyXG4gIGJvcmRlci1yYWRpdXM6IDhycHggMCAwIDhycHg7XHJcbn1cclxuXHJcbi51LWljb24tZGlzYWJsZWQge1xyXG4gIGNvbG9yOiAjYzhjOWNjICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZDogI2Y3ZjhmYSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udS1pbnB1dC1kaXNhYmxlZCB7XHJcbiAgY29sb3I6ICNjOGM5Y2MgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmM2Y1ICFpbXBvcnRhbnQ7XHJcbn1cclxuLm51bS1idG4ge1xyXG4gIGZvbnQtd2VpZ2h0OiA1NTA7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRvcDogLTRycHg7XHJcbn1cclxuPC9zdHlsZT5cclxuIiwibGV0IG1wTWl4aW5zID0ge31cclxubGV0IGlzX3BjID0gbnVsbFxyXG4vLyAjaWZkZWYgSDVcclxuaW1wb3J0IHtcclxuXHRpc1BDXHJcbn0gZnJvbSBcIi4vaXNQQ1wiXHJcbmlzX3BjID0gaXNQQygpXHJcbi8vICNlbmRpZlxyXG4vLyAjaWZkZWYgQVBQLVZVRXx8IE1QLVdFSVhJTiB8fCBINVxyXG5cclxubXBNaXhpbnMgPSB7XHJcblx0ZGF0YSgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGlzX3Nob3c6ICdub25lJ1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0d2F0Y2g6IHtcclxuXHRcdHNob3cobmV3VmFsKSB7XHJcblx0XHRcdHRoaXMuaXNfc2hvdyA9IHRoaXMuc2hvd1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0Y3JlYXRlZCgpIHtcclxuXHRcdHRoaXMuc3dpcGVhY3Rpb24gPSB0aGlzLmdldFN3aXBlQWN0aW9uKClcclxuXHRcdGlmICh0aGlzLnN3aXBlYWN0aW9uLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5zd2lwZWFjdGlvbi5jaGlsZHJlbi5wdXNoKHRoaXMpXHJcblx0XHR9XHJcblx0fSxcclxuXHRtb3VudGVkKCkge1xyXG5cdFx0dGhpcy5pc19zaG93ID0gdGhpcy5zaG93XHJcblx0fSxcclxuXHRtZXRob2RzOiB7XHJcblx0XHQvLyB3eHMg5Lit6LCD55SoXHJcblx0XHRjbG9zZVN3aXBlKGUpIHtcclxuXHRcdFx0aWYgKCF0aGlzLmF1dG9DbG9zZSkgcmV0dXJuXHJcblx0XHRcdHRoaXMuc3dpcGVhY3Rpb24uY2xvc2VPdGhlcih0aGlzKVxyXG5cdFx0fSxcclxuXHJcblx0XHRjaGFuZ2UoZSkge1xyXG5cdFx0XHR0aGlzLiRlbWl0KCdjaGFuZ2UnLCBlLm9wZW4pXHJcblx0XHRcdGlmICh0aGlzLmlzX3Nob3cgIT09IGUub3Blbikge1xyXG5cdFx0XHRcdHRoaXMuaXNfc2hvdyA9IGUub3BlblxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdGFwcFRvdWNoU3RhcnQoZSkge1xyXG5cdFx0XHRpZiAoaXNfcGMpIHJldHVyblxyXG5cdFx0XHRjb25zdCB7XHJcblx0XHRcdFx0Y2xpZW50WFxyXG5cdFx0XHR9ID0gZS5jaGFuZ2VkVG91Y2hlc1swXVxyXG5cdFx0XHR0aGlzLmNsaWVudFggPSBjbGllbnRYXHJcblx0XHRcdHRoaXMudGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKClcclxuXHRcdH0sXHJcblx0XHRhcHBUb3VjaEVuZChlLCBpbmRleCwgaXRlbSwgcG9zaXRpb24pIHtcclxuXHRcdFx0aWYgKGlzX3BjKSByZXR1cm5cclxuXHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdGNsaWVudFhcclxuXHRcdFx0fSA9IGUuY2hhbmdlZFRvdWNoZXNbMF1cclxuXHRcdFx0Ly8gZml4ZWQgYnkgeHh4eCDmqKHmi5/ngrnlh7vkuovku7bvvIzop6PlhrMgaW9zIDEzIOeCueWHu+WMuuWfn+mUmeS9jeeahOmXrumimFxyXG5cdFx0XHRsZXQgZGlmZiA9IE1hdGguYWJzKHRoaXMuY2xpZW50WCAtIGNsaWVudFgpXHJcblx0XHRcdGxldCB0aW1lID0gKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSAtIHRoaXMudGltZXN0YW1wXHJcblx0XHRcdGlmIChkaWZmIDwgNDAgJiYgdGltZSA8IDMwMCkge1xyXG5cdFx0XHRcdHRoaXMuJGVtaXQoJ2NsaWNrJywge1xyXG5cdFx0XHRcdFx0Y29udGVudDogaXRlbSxcclxuXHRcdFx0XHRcdGluZGV4LFxyXG5cdFx0XHRcdFx0cG9zaXRpb25cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25DbGlja0ZvclBDKGluZGV4LCBpdGVtLCBwb3NpdGlvbikge1xyXG5cdFx0XHRpZiAoIWlzX3BjKSByZXR1cm5cclxuXHRcdFx0Ly8gI2lmZGVmIEg1XHJcblx0XHRcdHRoaXMuJGVtaXQoJ2NsaWNrJywge1xyXG5cdFx0XHRcdGNvbnRlbnQ6IGl0ZW0sXHJcblx0XHRcdFx0aW5kZXgsXHJcblx0XHRcdFx0cG9zaXRpb25cclxuXHRcdFx0fSlcclxuXHRcdFx0Ly8gI2VuZGlmXHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG4vLyAjZW5kaWZcclxuZXhwb3J0IGRlZmF1bHQgbXBNaXhpbnNcbiIsImxldCBiaW5kSW5nWE1peGlucyA9IHt9XHJcblxyXG4vLyAjaWZkZWYgQVBQLU5WVUVcclxuY29uc3QgQmluZGluZ1ggPSB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbignYmluZGluZ3gnKTtcclxuY29uc3QgZG9tID0gdW5pLnJlcXVpcmVOYXRpdmVQbHVnaW4oJ2RvbScpO1xyXG5jb25zdCBhbmltYXRpb24gPSB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbignYW5pbWF0aW9uJyk7XHJcblxyXG5iaW5kSW5nWE1peGlucyA9IHtcclxuXHRkYXRhKCkge1xyXG5cdFx0cmV0dXJuIHt9XHJcblx0fSxcclxuXHJcblx0d2F0Y2g6IHtcclxuXHRcdHNob3cobmV3VmFsKSB7XHJcblx0XHRcdGlmICh0aGlzLmF1dG9DbG9zZSkgcmV0dXJuXHJcblx0XHRcdGlmICh0aGlzLnN0b3ApIHJldHVyblxyXG5cdFx0XHR0aGlzLnN0b3AgPSB0cnVlXHJcblx0XHRcdGlmIChuZXdWYWwpIHtcclxuXHRcdFx0XHR0aGlzLm9wZW4obmV3VmFsKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY2xvc2UoKVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0bGVmdE9wdGlvbnMoKSB7XHJcblx0XHRcdHRoaXMuZ2V0U2VsZWN0b3JRdWVyeSgpXHJcblx0XHRcdHRoaXMuaW5pdCgpXHJcblx0XHR9LFxyXG5cdFx0cmlnaHRPcHRpb25zKG5ld1ZhbCkge1xyXG5cdFx0XHR0aGlzLmluaXQoKVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0Y3JlYXRlZCgpIHtcclxuXHRcdHRoaXMuc3dpcGVhY3Rpb24gPSB0aGlzLmdldFN3aXBlQWN0aW9uKClcclxuXHRcdGlmICh0aGlzLnN3aXBlYWN0aW9uLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5zd2lwZWFjdGlvbi5jaGlsZHJlbi5wdXNoKHRoaXMpXHJcblx0XHR9XHJcblx0fSxcclxuXHRtb3VudGVkKCkge1xyXG5cdFx0dGhpcy5ib3ggPSB0aGlzLmdldEVsKHRoaXMuJHJlZnNbJ3NlbGVjdG9yLWJveC0taG9jayddKVxyXG5cdFx0dGhpcy5zZWxlY3RvciA9IHRoaXMuZ2V0RWwodGhpcy4kcmVmc1snc2VsZWN0b3ItY29udGVudC0taG9jayddKTtcclxuXHRcdHRoaXMubGVmdEJ1dHRvbiA9IHRoaXMuZ2V0RWwodGhpcy4kcmVmc1snc2VsZWN0b3ItbGVmdC1idXR0b24tLWhvY2snXSk7XHJcblx0XHR0aGlzLnJpZ2h0QnV0dG9uID0gdGhpcy5nZXRFbCh0aGlzLiRyZWZzWydzZWxlY3Rvci1yaWdodC1idXR0b24tLWhvY2snXSk7XHJcblx0XHR0aGlzLmluaXQoKVxyXG5cdH0sXHJcblx0Ly8gYmVmb3JlRGVzdHJveSgpIHtcclxuXHQvLyBcdHRoaXMuc3dpcGVhY3Rpb24uY2hpbGRyZW4uZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuXHQvLyBcdFx0aWYgKGl0ZW0gPT09IHRoaXMpIHtcclxuXHQvLyBcdFx0XHR0aGlzLnN3aXBlYWN0aW9uLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSlcclxuXHQvLyBcdFx0fVxyXG5cdC8vIFx0fSlcclxuXHQvLyB9LFxyXG5cdG1ldGhvZHM6IHtcclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnggPSAwXHJcblx0XHRcdFx0dGhpcy5idXR0b24gPSB7XHJcblx0XHRcdFx0XHRzaG93OiBmYWxzZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VsZWN0b3JRdWVyeSgpXHJcblx0XHRcdFx0fSwgMjAwKVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdG9uQ2xpY2soaW5kZXgsIGl0ZW0sIHBvc2l0aW9uKSB7XHJcblx0XHRcdHRoaXMuJGVtaXQoJ2NsaWNrJywge1xyXG5cdFx0XHRcdGNvbnRlbnQ6IGl0ZW0sXHJcblx0XHRcdFx0aW5kZXgsXHJcblx0XHRcdFx0cG9zaXRpb25cclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHR0b3VjaHN0YXJ0KGUpIHtcclxuXHRcdFx0Ly8gZml4IGJ5IG1laGFvdGlhbiDnpoHmraLmu5HliqhcclxuXHRcdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHJldHVyblxyXG5cdFx0XHQvLyDmr4/mrKHlj6rop6blj5HkuIDmrKHvvIzpgb/lhY3lpJrmrKHnm5HlkKzpgKDmiJDpl6rng4FcclxuXHRcdFx0aWYgKHRoaXMuc3RvcCkgcmV0dXJuXHJcblx0XHRcdHRoaXMuc3RvcCA9IHRydWVcclxuXHRcdFx0aWYgKHRoaXMuYXV0b0Nsb3NlKSB7XHJcblx0XHRcdFx0dGhpcy5zd2lwZWFjdGlvbi5jbG9zZU90aGVyKHRoaXMpXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGxlZnRXaWR0aCA9IHRoaXMuYnV0dG9uLmxlZnQud2lkdGhcclxuXHRcdFx0Y29uc3QgcmlnaHRXaWR0aCA9IHRoaXMuYnV0dG9uLnJpZ2h0LndpZHRoXHJcblx0XHRcdGxldCBleHByZXNzaW9uID0gdGhpcy5yYW5nZSh0aGlzLngsIC1yaWdodFdpZHRoLCBsZWZ0V2lkdGgpXHJcblx0XHRcdGxldCBsZWZ0RXhwcmVzc2lvbiA9IHRoaXMucmFuZ2UodGhpcy54IC0gbGVmdFdpZHRoLCAtbGVmdFdpZHRoLCAwKVxyXG5cdFx0XHRsZXQgcmlnaHRFeHByZXNzaW9uID0gdGhpcy5yYW5nZSh0aGlzLnggKyByaWdodFdpZHRoLCAwLCByaWdodFdpZHRoKVxyXG5cclxuXHRcdFx0dGhpcy5ldmVudHBhbiA9IEJpbmRpbmdYLmJpbmQoe1xyXG5cdFx0XHRcdGFuY2hvcjogdGhpcy5ib3gsXHJcblx0XHRcdFx0ZXZlbnRUeXBlOiAncGFuJyxcclxuXHRcdFx0XHRwcm9wczogW3tcclxuXHRcdFx0XHRcdGVsZW1lbnQ6IHRoaXMuc2VsZWN0b3IsXHJcblx0XHRcdFx0XHRwcm9wZXJ0eTogJ3RyYW5zZm9ybS50cmFuc2xhdGVYJyxcclxuXHRcdFx0XHRcdGV4cHJlc3Npb25cclxuXHRcdFx0XHR9LCB7XHJcblx0XHRcdFx0XHRlbGVtZW50OiB0aGlzLmxlZnRCdXR0b24sXHJcblx0XHRcdFx0XHRwcm9wZXJ0eTogJ3RyYW5zZm9ybS50cmFuc2xhdGVYJyxcclxuXHRcdFx0XHRcdGV4cHJlc3Npb246IGxlZnRFeHByZXNzaW9uXHJcblx0XHRcdFx0fSwge1xyXG5cdFx0XHRcdFx0ZWxlbWVudDogdGhpcy5yaWdodEJ1dHRvbixcclxuXHRcdFx0XHRcdHByb3BlcnR5OiAndHJhbnNmb3JtLnRyYW5zbGF0ZVgnLFxyXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbjogcmlnaHRFeHByZXNzaW9uXHJcblx0XHRcdFx0fSwgXVxyXG5cdFx0XHR9LCAoZSkgPT4ge1xyXG5cdFx0XHRcdC8vIG5vcGVcclxuXHRcdFx0XHRpZiAoZS5zdGF0ZSA9PT0gJ2VuZCcpIHtcclxuXHRcdFx0XHRcdHRoaXMueCA9IGUuZGVsdGFYICsgdGhpcy54O1xyXG5cdFx0XHRcdFx0dGhpcy5pc2NsaWNrID0gdHJ1ZVxyXG5cdFx0XHRcdFx0dGhpcy5iaW5kVGltaW5nKGUuZGVsdGFYKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0dG91Y2hlbmQoZSkge1xyXG5cdFx0XHRpZiAodGhpcy5pc29wZW4gIT09ICdub25lJyAmJiAhdGhpcy5pc2NsaWNrKSB7XHJcblx0XHRcdFx0dGhpcy5vcGVuKCdub25lJylcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGJpbmRUaW1pbmcoeCkge1xyXG5cdFx0XHRjb25zdCBsZWZ0ID0gdGhpcy54XHJcblx0XHRcdGNvbnN0IGxlZnRXaWR0aCA9IHRoaXMuYnV0dG9uLmxlZnQud2lkdGhcclxuXHRcdFx0Y29uc3QgcmlnaHRXaWR0aCA9IHRoaXMuYnV0dG9uLnJpZ2h0LndpZHRoXHJcblx0XHRcdGNvbnN0IHRocmVzaG9sZCA9IHRoaXMudGhyZXNob2xkXHJcblx0XHRcdGlmICghdGhpcy5pc29wZW4gfHwgdGhpcy5pc29wZW4gPT09ICdub25lJykge1xyXG5cdFx0XHRcdGlmIChsZWZ0ID4gdGhyZXNob2xkKSB7XHJcblx0XHRcdFx0XHR0aGlzLm9wZW4oJ2xlZnQnKVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAobGVmdCA8IC10aHJlc2hvbGQpIHtcclxuXHRcdFx0XHRcdHRoaXMub3BlbigncmlnaHQnKVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLm9wZW4oJ25vbmUnKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoKHggPiAtbGVmdFdpZHRoICYmIHggPCAwKSB8fCB4ID4gcmlnaHRXaWR0aCkge1xyXG5cdFx0XHRcdFx0aWYgKCh4ID4gLXRocmVzaG9sZCAmJiB4IDwgMCkgfHwgKHggLSByaWdodFdpZHRoID4gdGhyZXNob2xkKSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm9wZW4oJ2xlZnQnKVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5vcGVuKCdub25lJylcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKCh4IDwgdGhyZXNob2xkICYmIHggPiAwKSB8fCAoeCArIGxlZnRXaWR0aCA8IC10aHJlc2hvbGQpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMub3BlbigncmlnaHQnKVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5vcGVuKCdub25lJylcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDnp7vliqjojIPlm7RcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBudW1cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBtaXhcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBtYXhcclxuXHRcdCAqL1xyXG5cdFx0cmFuZ2UobnVtLCBtaXgsIG1heCkge1xyXG5cdFx0XHRyZXR1cm4gYG1pbihtYXgoeCske251bX0sICR7bWl4fSksICR7bWF4fSlgXHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICog5byA5ZCvc3dpcGVcclxuXHRcdCAqL1xyXG5cdFx0b3Blbih0eXBlKSB7XHJcblx0XHRcdHRoaXMuYW5pbWF0aW9uKHR5cGUpXHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICog5YWz6Zetc3dpcGVcclxuXHRcdCAqL1xyXG5cdFx0Y2xvc2UoKSB7XHJcblx0XHRcdHRoaXMuYW5pbWF0aW9uKCdub25lJylcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDlvIDlkK/lhbPpl63liqjnlLtcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlXHJcblx0XHQgKi9cclxuXHRcdGFuaW1hdGlvbih0eXBlKSB7XHJcblx0XHRcdGNvbnN0IHRpbWUgPSAzMDBcclxuXHRcdFx0Y29uc3QgbGVmdFdpZHRoID0gdGhpcy5idXR0b24ubGVmdC53aWR0aFxyXG5cdFx0XHRjb25zdCByaWdodFdpZHRoID0gdGhpcy5idXR0b24ucmlnaHQud2lkdGhcclxuXHRcdFx0aWYgKHRoaXMuZXZlbnRwYW4gJiYgdGhpcy5ldmVudHBhbi50b2tlbikge1xyXG5cdFx0XHRcdEJpbmRpbmdYLnVuYmluZCh7XHJcblx0XHRcdFx0XHR0b2tlbjogdGhpcy5ldmVudHBhbi50b2tlbixcclxuXHRcdFx0XHRcdGV2ZW50VHlwZTogJ3BhbidcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0XHRjYXNlICdsZWZ0JzpcclxuXHRcdFx0XHRcdFByb21pc2UuYWxsKFtcclxuXHRcdFx0XHRcdFx0dGhpcy5tb3ZlKHRoaXMuc2VsZWN0b3IsIGxlZnRXaWR0aCksXHJcblx0XHRcdFx0XHRcdHRoaXMubW92ZSh0aGlzLmxlZnRCdXR0b24sIDApLFxyXG5cdFx0XHRcdFx0XHR0aGlzLm1vdmUodGhpcy5yaWdodEJ1dHRvbiwgcmlnaHRXaWR0aCAqIDIpXHJcblx0XHRcdFx0XHRdKS50aGVuKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRFbWl0KGxlZnRXaWR0aCwgdHlwZSlcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdGNhc2UgJ3JpZ2h0JzpcclxuXHRcdFx0XHRcdFByb21pc2UuYWxsKFtcclxuXHRcdFx0XHRcdFx0dGhpcy5tb3ZlKHRoaXMuc2VsZWN0b3IsIC1yaWdodFdpZHRoKSxcclxuXHRcdFx0XHRcdFx0dGhpcy5tb3ZlKHRoaXMubGVmdEJ1dHRvbiwgLWxlZnRXaWR0aCAqIDIpLFxyXG5cdFx0XHRcdFx0XHR0aGlzLm1vdmUodGhpcy5yaWdodEJ1dHRvbiwgMClcclxuXHRcdFx0XHRcdF0pLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEVtaXQoLXJpZ2h0V2lkdGgsIHR5cGUpXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0YnJlYWtcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0UHJvbWlzZS5hbGwoW1xyXG5cdFx0XHRcdFx0XHR0aGlzLm1vdmUodGhpcy5zZWxlY3RvciwgMCksXHJcblx0XHRcdFx0XHRcdHRoaXMubW92ZSh0aGlzLmxlZnRCdXR0b24sIC1sZWZ0V2lkdGgpLFxyXG5cdFx0XHRcdFx0XHR0aGlzLm1vdmUodGhpcy5yaWdodEJ1dHRvbiwgcmlnaHRXaWR0aClcclxuXHRcdFx0XHRcdF0pLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEVtaXQoMCwgdHlwZSlcclxuXHRcdFx0XHRcdH0pXHJcblxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0c2V0RW1pdCh4LCB0eXBlKSB7XHJcblx0XHRcdGNvbnN0IGxlZnRXaWR0aCA9IHRoaXMuYnV0dG9uLmxlZnQud2lkdGhcclxuXHRcdFx0Y29uc3QgcmlnaHRXaWR0aCA9IHRoaXMuYnV0dG9uLnJpZ2h0LndpZHRoXHJcblx0XHRcdHRoaXMuaXNvcGVuID0gdGhpcy5pc29wZW4gfHwgJ25vbmUnXHJcblx0XHRcdHRoaXMuc3RvcCA9IGZhbHNlXHJcblx0XHRcdHRoaXMuaXNjbGljayA9IGZhbHNlXHJcblx0XHRcdC8vIOWPquacieeKtuaAgeS4jeS4gOiHtOaJjeS8mui/lOWbnue7k+aenFxyXG5cdFx0XHRpZiAodGhpcy5pc29wZW4gIT09IHR5cGUgJiYgdGhpcy54ICE9PSB4KSB7XHJcblx0XHRcdFx0aWYgKHR5cGUgPT09ICdsZWZ0JyAmJiBsZWZ0V2lkdGggPiAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLiRlbWl0KCdjaGFuZ2UnLCAnbGVmdCcpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0eXBlID09PSAncmlnaHQnICYmIHJpZ2h0V2lkdGggPiAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLiRlbWl0KCdjaGFuZ2UnLCAncmlnaHQnKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ25vbmUnKSB7XHJcblx0XHRcdFx0XHR0aGlzLiRlbWl0KCdjaGFuZ2UnLCAnbm9uZScpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMueCA9IHhcclxuXHRcdFx0dGhpcy5pc29wZW4gPSB0eXBlXHJcblx0XHR9LFxyXG5cdFx0bW92ZShyZWYsIHZhbHVlKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0YW5pbWF0aW9uLnRyYW5zaXRpb24ocmVmLCB7XHJcblx0XHRcdFx0XHRzdHlsZXM6IHtcclxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgke3ZhbHVlfSlgLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGR1cmF0aW9uOiAxNTAsIC8vbXNcclxuXHRcdFx0XHRcdHRpbWluZ0Z1bmN0aW9uOiAnbGluZWFyJyxcclxuXHRcdFx0XHRcdG5lZWRMYXlvdXQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0ZGVsYXk6IDAgLy9tc1xyXG5cdFx0XHRcdH0sIGZ1bmN0aW9uKHJlcykge1xyXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXMpXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICog6I635Y+WcmVmXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZWxcclxuXHRcdCAqL1xyXG5cdFx0Z2V0RWwoZWwpIHtcclxuXHRcdFx0cmV0dXJuIGVsLnJlZlxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICog6I635Y+W6IqC54K55L+h5oGvXHJcblx0XHQgKi9cclxuXHRcdGdldFNlbGVjdG9yUXVlcnkoKSB7XHJcblx0XHRcdFByb21pc2UuYWxsKFtcclxuXHRcdFx0XHR0aGlzLmdldERvbSgnbGVmdCcpLFxyXG5cdFx0XHRcdHRoaXMuZ2V0RG9tKCdyaWdodCcpLFxyXG5cdFx0XHRdKS50aGVuKChkYXRhKSA9PiB7XHJcblx0XHRcdFx0bGV0IHNob3cgPSAnbm9uZSdcclxuXHRcdFx0XHRpZiAodGhpcy5hdXRvQ2xvc2UpIHtcclxuXHRcdFx0XHRcdHNob3cgPSAnbm9uZSdcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0c2hvdyA9IHRoaXMuc2hvd1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHNob3cgPT09ICdub25lJykge1xyXG5cdFx0XHRcdFx0Ly8gdGhpcy5jbG9zZSgpXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMub3BlbihzaG93KVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdH0pXHJcblxyXG5cdFx0fSxcclxuXHRcdGdldERvbShzdHIpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHRkb20uZ2V0Q29tcG9uZW50UmVjdCh0aGlzLiRyZWZzW2BzZWxlY3Rvci0ke3N0cn0tYnV0dG9uLS1ob2NrYF0sIChkYXRhKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmJ1dHRvbltzdHJdID0gZGF0YS5zaXplXHJcblx0XHRcdFx0XHRcdHJlc29sdmUoZGF0YSlcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHJlamVjdCgpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbi8vICNlbmRpZlxyXG5cclxuZXhwb3J0IGRlZmF1bHQgYmluZEluZ1hNaXhpbnNcbiIsImxldCBvdGhlck1peGlucyA9IHt9XHJcblxyXG4vLyAjaWZuZGVmIEFQUC1QTFVTfHwgTVAtV0VJWElOICB8fCAgSDVcclxuY29uc3QgTUlOX0RJU1RBTkNFID0gMTA7XHJcbm90aGVyTWl4aW5zID0ge1xyXG5cdGRhdGEoKSB7XHJcblx0XHQvLyBUT0RPIOmaj+acuueUn+eUn+WFg+e0oElE77yM6Kej5Yaz55m+5bqm5bCP56iL5bqP6I635Y+W5ZCM5LiA5Liq5YWD57Sg5L2N572u5L+h5oGv55qEYnVnXHJcblx0XHRjb25zdCBlbENsYXNzID0gYFVuaV8ke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogMTBlNSkudG9TdHJpbmcoMzYpfWBcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHVuaVNob3c6IGZhbHNlLFxyXG5cdFx0XHRsZWZ0OiAwLFxyXG5cdFx0XHRidXR0b25TaG93OiAnbm9uZScsXHJcblx0XHRcdGFuaTogZmFsc2UsXHJcblx0XHRcdG1vdmVMZWZ0OiAnJyxcclxuXHRcdFx0ZWxDbGFzc1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0d2F0Y2g6IHtcclxuXHRcdHNob3cobmV3VmFsKSB7XHJcblx0XHRcdGlmICh0aGlzLmF1dG9DbG9zZSkgcmV0dXJuXHJcblx0XHRcdHRoaXMub3BlblN0YXRlKG5ld1ZhbClcclxuXHRcdH0sXHJcblx0XHRsZWZ0KCkge1xyXG5cdFx0XHR0aGlzLm1vdmVMZWZ0ID0gYHRyYW5zbGF0ZVgoJHt0aGlzLmxlZnR9cHgpYFxyXG5cdFx0fSxcclxuXHRcdGJ1dHRvblNob3cobmV3VmFsKSB7XHJcblx0XHRcdGlmICh0aGlzLmF1dG9DbG9zZSkgcmV0dXJuXHJcblx0XHRcdHRoaXMub3BlblN0YXRlKG5ld1ZhbClcclxuXHRcdH0sXHJcblx0XHRsZWZ0T3B0aW9ucygpIHtcclxuXHRcdFx0dGhpcy5pbml0KClcclxuXHRcdH0sXHJcblx0XHRyaWdodE9wdGlvbnMoKSB7XHJcblx0XHRcdHRoaXMuaW5pdCgpXHJcblx0XHR9XHJcblx0fSxcclxuXHRtb3VudGVkKCkge1xyXG5cdFx0dGhpcy5zd2lwZWFjdGlvbiA9IHRoaXMuZ2V0U3dpcGVBY3Rpb24oKVxyXG5cdFx0aWYgKHRoaXMuc3dpcGVhY3Rpb24uY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLnN3aXBlYWN0aW9uLmNoaWxkcmVuLnB1c2godGhpcylcclxuXHRcdH1cclxuXHRcdHRoaXMuaW5pdCgpXHJcblx0fSxcclxuXHRtZXRob2RzOiB7XHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lcilcclxuXHRcdFx0dGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuZ2V0U2VsZWN0b3JRdWVyeSgpXHJcblx0XHRcdH0sIDEwMClcclxuXHRcdFx0Ly8g56e75Yqo6Led56a7XHJcblx0XHRcdHRoaXMubGVmdCA9IDBcclxuXHRcdFx0dGhpcy54ID0gMFxyXG5cdFx0fSxcclxuXHJcblx0XHRjbG9zZVN3aXBlKGUpIHtcclxuXHRcdFx0aWYgKCF0aGlzLmF1dG9DbG9zZSkgcmV0dXJuXHJcblx0XHRcdHRoaXMuc3dpcGVhY3Rpb24uY2xvc2VPdGhlcih0aGlzKVxyXG5cdFx0fSxcclxuXHRcdGFwcFRvdWNoU3RhcnQoZSkge1xyXG5cdFx0XHRjb25zdCB7XHJcblx0XHRcdFx0Y2xpZW50WFxyXG5cdFx0XHR9ID0gZS5jaGFuZ2VkVG91Y2hlc1swXVxyXG5cdFx0XHR0aGlzLmNsaWVudFggPSBjbGllbnRYXHJcblx0XHRcdHRoaXMudGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKClcclxuXHRcdH0sXHJcblx0XHRhcHBUb3VjaEVuZChlLCBpbmRleCwgaXRlbSwgcG9zaXRpb24pIHtcclxuXHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdGNsaWVudFhcclxuXHRcdFx0fSA9IGUuY2hhbmdlZFRvdWNoZXNbMF1cclxuXHRcdFx0Ly8gZml4ZWQgYnkgeHh4eCDmqKHmi5/ngrnlh7vkuovku7bvvIzop6PlhrMgaW9zIDEzIOeCueWHu+WMuuWfn+mUmeS9jeeahOmXrumimFxyXG5cdFx0XHRsZXQgZGlmZiA9IE1hdGguYWJzKHRoaXMuY2xpZW50WCAtIGNsaWVudFgpXHJcblx0XHRcdGxldCB0aW1lID0gKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSAtIHRoaXMudGltZXN0YW1wXHJcblx0XHRcdGlmIChkaWZmIDwgNDAgJiYgdGltZSA8IDMwMCkge1xyXG5cdFx0XHRcdHRoaXMuJGVtaXQoJ2NsaWNrJywge1xyXG5cdFx0XHRcdFx0Y29udGVudDogaXRlbSxcclxuXHRcdFx0XHRcdGluZGV4LFxyXG5cdFx0XHRcdFx0cG9zaXRpb25cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0dG91Y2hzdGFydChlKSB7XHJcblx0XHRcdGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm5cclxuXHRcdFx0dGhpcy5hbmkgPSBmYWxzZVxyXG5cdFx0XHR0aGlzLnggPSB0aGlzLmxlZnQgfHwgMFxyXG5cdFx0XHR0aGlzLnN0b3BUb3VjaFN0YXJ0KGUpXHJcblx0XHRcdHRoaXMuYXV0b0Nsb3NlICYmIHRoaXMuY2xvc2VTd2lwZSgpXHJcblx0XHR9LFxyXG5cdFx0dG91Y2htb3ZlKGUpIHtcclxuXHRcdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHJldHVyblxyXG5cdFx0XHQvLyDmmK/lkKblj6/ku6Xmu5HliqjpobXpnaJcclxuXHRcdFx0dGhpcy5zdG9wVG91Y2hNb3ZlKGUpO1xyXG5cdFx0XHRpZiAodGhpcy5kaXJlY3Rpb24gIT09ICdob3Jpem9udGFsJykge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLm1vdmUodGhpcy54ICsgdGhpcy5kZWx0YVgpXHJcblx0XHRcdHJldHVybiBmYWxzZVxyXG5cdFx0fSxcclxuXHRcdHRvdWNoZW5kKCkge1xyXG5cdFx0XHRpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuXHJcblx0XHRcdHRoaXMubW92ZURpcmVjdGlvbih0aGlzLmxlZnQpXHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiDorr7nva7np7vliqjot53nprtcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZVxyXG5cdFx0ICovXHJcblx0XHRtb3ZlKHZhbHVlKSB7XHJcblx0XHRcdHZhbHVlID0gdmFsdWUgfHwgMFxyXG5cdFx0XHRjb25zdCBsZWZ0V2lkdGggPSB0aGlzLmxlZnRXaWR0aFxyXG5cdFx0XHRjb25zdCByaWdodFdpZHRoID0gdGhpcy5yaWdodFdpZHRoXHJcblx0XHRcdC8vIOiOt+WPluWPr+a7keWKqOiMg+WbtFxyXG5cdFx0XHR0aGlzLmxlZnQgPSB0aGlzLnJhbmdlKHZhbHVlLCAtcmlnaHRXaWR0aCwgbGVmdFdpZHRoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDojrflj5bojIPlm7RcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBudW1cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBtaW5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBtYXhcclxuXHRcdCAqL1xyXG5cdFx0cmFuZ2UobnVtLCBtaW4sIG1heCkge1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobnVtLCBtaW4pLCBtYXgpO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICog56e75Yqo5pa55ZCR5Yik5patXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gbGVmdFxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXHJcblx0XHQgKi9cclxuXHRcdG1vdmVEaXJlY3Rpb24obGVmdCkge1xyXG5cdFx0XHRjb25zdCB0aHJlc2hvbGQgPSB0aGlzLnRocmVzaG9sZFxyXG5cdFx0XHRjb25zdCBpc29wZW4gPSB0aGlzLmlzb3BlbiB8fCAnbm9uZSdcclxuXHRcdFx0Y29uc3QgbGVmdFdpZHRoID0gdGhpcy5sZWZ0V2lkdGhcclxuXHRcdFx0Y29uc3QgcmlnaHRXaWR0aCA9IHRoaXMucmlnaHRXaWR0aFxyXG5cdFx0XHRpZiAodGhpcy5kZWx0YVggPT09IDApIHtcclxuXHRcdFx0XHR0aGlzLm9wZW5TdGF0ZSgnbm9uZScpXHJcblx0XHRcdFx0cmV0dXJuXHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKChpc29wZW4gPT09ICdub25lJyAmJiByaWdodFdpZHRoID4gMCAmJiAtbGVmdCA+IHRocmVzaG9sZCkgfHwgKGlzb3BlbiAhPT0gJ25vbmUnICYmIHJpZ2h0V2lkdGggPlxyXG5cdFx0XHRcdFx0MCAmJiByaWdodFdpZHRoICtcclxuXHRcdFx0XHRcdGxlZnQgPCB0aHJlc2hvbGQpKSB7XHJcblx0XHRcdFx0Ly8gcmlnaHRcclxuXHRcdFx0XHR0aGlzLm9wZW5TdGF0ZSgncmlnaHQnKVxyXG5cdFx0XHR9IGVsc2UgaWYgKChpc29wZW4gPT09ICdub25lJyAmJiBsZWZ0V2lkdGggPiAwICYmIGxlZnQgPiB0aHJlc2hvbGQpIHx8IChpc29wZW4gIT09ICdub25lJyAmJiBsZWZ0V2lkdGggPlxyXG5cdFx0XHRcdFx0MCAmJlxyXG5cdFx0XHRcdFx0bGVmdFdpZHRoIC0gbGVmdCA8IHRocmVzaG9sZCkpIHtcclxuXHRcdFx0XHQvLyBsZWZ0XHJcblx0XHRcdFx0dGhpcy5vcGVuU3RhdGUoJ2xlZnQnKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGRlZmF1bHRcclxuXHRcdFx0XHR0aGlzLm9wZW5TdGF0ZSgnbm9uZScpXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDlvIDlkK/nirbmgIFcclxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gdHlwZVxyXG5cdFx0ICovXHJcblx0XHRvcGVuU3RhdGUodHlwZSkge1xyXG5cdFx0XHRjb25zdCBsZWZ0V2lkdGggPSB0aGlzLmxlZnRXaWR0aFxyXG5cdFx0XHRjb25zdCByaWdodFdpZHRoID0gdGhpcy5yaWdodFdpZHRoXHJcblx0XHRcdGxldCBsZWZ0ID0gJydcclxuXHRcdFx0dGhpcy5pc29wZW4gPSB0aGlzLmlzb3BlbiA/IHRoaXMuaXNvcGVuIDogJ25vbmUnXHJcblx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XHJcblx0XHRcdFx0XHRsZWZ0ID0gbGVmdFdpZHRoXHJcblx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdGNhc2UgXCJyaWdodFwiOlxyXG5cdFx0XHRcdFx0bGVmdCA9IC1yaWdodFdpZHRoXHJcblx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRsZWZ0ID0gMFxyXG5cdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0aWYgKHRoaXMuaXNvcGVuICE9PSB0eXBlKSB7XHJcblx0XHRcdFx0dGhpcy50aHJvdHRsZSA9IHRydWVcclxuXHRcdFx0XHR0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0eXBlKVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLmlzb3BlbiA9IHR5cGVcclxuXHRcdFx0Ly8g5re75Yqg5Yqo55S757G7XHJcblx0XHRcdHRoaXMuYW5pID0gdHJ1ZVxyXG5cdFx0XHR0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5tb3ZlKGxlZnQpXHJcblx0XHRcdH0pXHJcblx0XHRcdC8vIOiuvue9ruacgOe7iOenu+WKqOS9jee9riznkIborrrkuIrlj6ropoHov5vlhaXliLDov5nkuKrlh73mlbDvvIzogq/lrprmmK/opoHmiZPlvIDnmoRcclxuXHRcdH0sXHJcblx0XHRjbG9zZSgpIHtcclxuXHRcdFx0dGhpcy5vcGVuU3RhdGUoJ25vbmUnKVxyXG5cdFx0fSxcclxuXHRcdGdldERpcmVjdGlvbih4LCB5KSB7XHJcblx0XHRcdGlmICh4ID4geSAmJiB4ID4gTUlOX0RJU1RBTkNFKSB7XHJcblx0XHRcdFx0cmV0dXJuICdob3Jpem9udGFsJztcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoeSA+IHggJiYgeSA+IE1JTl9ESVNUQU5DRSkge1xyXG5cdFx0XHRcdHJldHVybiAndmVydGljYWwnO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDph43nva7mu5HliqjnirbmgIFcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG5cdFx0ICovXHJcblx0XHRyZXNldFRvdWNoU3RhdHVzKCkge1xyXG5cdFx0XHR0aGlzLmRpcmVjdGlvbiA9ICcnO1xyXG5cdFx0XHR0aGlzLmRlbHRhWCA9IDA7XHJcblx0XHRcdHRoaXMuZGVsdGFZID0gMDtcclxuXHRcdFx0dGhpcy5vZmZzZXRYID0gMDtcclxuXHRcdFx0dGhpcy5vZmZzZXRZID0gMDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDorr7nva7mu5HliqjlvIDlp4vkvY3nva5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG5cdFx0ICovXHJcblx0XHRzdG9wVG91Y2hTdGFydChldmVudCkge1xyXG5cdFx0XHR0aGlzLnJlc2V0VG91Y2hTdGF0dXMoKTtcclxuXHRcdFx0Y29uc3QgdG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG5cdFx0XHR0aGlzLnN0YXJ0WCA9IHRvdWNoLmNsaWVudFg7XHJcblx0XHRcdHRoaXMuc3RhcnRZID0gdG91Y2guY2xpZW50WTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDmu5HliqjkuK3vvIzmmK/lkKbnpoHmraLmiZPlvIBcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG5cdFx0ICovXHJcblx0XHRzdG9wVG91Y2hNb3ZlKGV2ZW50KSB7XHJcblx0XHRcdGNvbnN0IHRvdWNoID0gZXZlbnQudG91Y2hlc1swXTtcclxuXHRcdFx0dGhpcy5kZWx0YVggPSB0b3VjaC5jbGllbnRYIC0gdGhpcy5zdGFydFg7XHJcblx0XHRcdHRoaXMuZGVsdGFZID0gdG91Y2guY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xyXG5cdFx0XHR0aGlzLm9mZnNldFggPSBNYXRoLmFicyh0aGlzLmRlbHRhWCk7XHJcblx0XHRcdHRoaXMub2Zmc2V0WSA9IE1hdGguYWJzKHRoaXMuZGVsdGFZKTtcclxuXHRcdFx0dGhpcy5kaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbiB8fCB0aGlzLmdldERpcmVjdGlvbih0aGlzLm9mZnNldFgsIHRoaXMub2Zmc2V0WSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGdldFNlbGVjdG9yUXVlcnkoKSB7XHJcblx0XHRcdGNvbnN0IHZpZXdzID0gdW5pLmNyZWF0ZVNlbGVjdG9yUXVlcnkoKS5pbih0aGlzKVxyXG5cdFx0XHR2aWV3c1xyXG5cdFx0XHRcdC5zZWxlY3RBbGwoJy4nICsgdGhpcy5lbENsYXNzKVxyXG5cdFx0XHRcdC5ib3VuZGluZ0NsaWVudFJlY3QoZGF0YSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVyblxyXG5cdFx0XHRcdFx0bGV0IHNob3cgPSAnbm9uZSdcclxuXHRcdFx0XHRcdGlmICh0aGlzLmF1dG9DbG9zZSkge1xyXG5cdFx0XHRcdFx0XHRzaG93ID0gJ25vbmUnXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRzaG93ID0gdGhpcy5zaG93XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmxlZnRXaWR0aCA9IGRhdGFbMF0ud2lkdGggfHwgMFxyXG5cdFx0XHRcdFx0dGhpcy5yaWdodFdpZHRoID0gZGF0YVsxXS53aWR0aCB8fCAwXHJcblx0XHRcdFx0XHR0aGlzLmJ1dHRvblNob3cgPSBzaG93XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQuZXhlYygpXHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG4vLyAjZW5kaWZcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG90aGVyTWl4aW5zXG4iLCI8dGVtcGxhdGU+XHJcblx0PCEtLSDlnKjlvq7kv6HlsI/nqIvluo8gYXBwIHZ1ZeerryBoNSDkvb/nlKh3eHMg5a6e546wLS0+XHJcblx0PCEtLSAjaWZkZWYgQVBQLVZVRSB8fCBNUC1XRUlYSU4gfHwgSDUgLS0+XHJcblx0PHZpZXcgY2xhc3M9XCJ1bmktc3dpcGVcIj5cclxuXHRcdDwhLS0gICNpZmRlZiBNUC1XRUlYSU4gfHwgVlVFMyAtLT5cclxuXHRcdDx2aWV3IGNsYXNzPVwidW5pLXN3aXBlX2JveFwiIDpjaGFuZ2U6cHJvcD1cInd4c3N3aXBlLnNob3dXYXRjaFwiIDpwcm9wPVwiaXNfc2hvd1wiIDpkYXRhLXRocmVzaG9sZD1cInRocmVzaG9sZFwiXHJcblx0XHRcdDpkYXRhLWRpc2FibGVkPVwiZGlzYWJsZWRcIiBAdG91Y2hzdGFydD1cInd4c3N3aXBlLnRvdWNoc3RhcnRcIiBAdG91Y2htb3ZlPVwid3hzc3dpcGUudG91Y2htb3ZlXCJcclxuXHRcdFx0QHRvdWNoZW5kPVwid3hzc3dpcGUudG91Y2hlbmRcIj5cclxuXHRcdFx0PCEtLSAjZW5kaWYgLS0+XHJcblx0XHRcdDwhLS0gICNpZm5kZWYgTVAtV0VJWElOIHx8IFZVRTMgLS0+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidW5pLXN3aXBlX2JveFwiIDpjaGFuZ2U6cHJvcD1cInJlbmRlcnN3aXBlLnNob3dXYXRjaFwiIDpwcm9wPVwiaXNfc2hvd1wiIDpkYXRhLXRocmVzaG9sZD1cInRocmVzaG9sZFwiXHJcblx0XHRcdFx0OmRhdGEtZGlzYWJsZWQ9XCJkaXNhYmxlZCsnJ1wiIEB0b3VjaHN0YXJ0PVwicmVuZGVyc3dpcGUudG91Y2hzdGFydFwiIEB0b3VjaG1vdmU9XCJyZW5kZXJzd2lwZS50b3VjaG1vdmVcIlxyXG5cdFx0XHRcdEB0b3VjaGVuZD1cInJlbmRlcnN3aXBlLnRvdWNoZW5kXCI+XHJcblx0XHRcdFx0PCEtLSAjZW5kaWYgLS0+XHJcblx0XHRcdFx0PCEtLSDlnKjlvq7kv6HlsI/nqIvluo8gYXBwIHZ1ZeerryBoNSDkvb/nlKh3eHMg5a6e546wLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uLWdyb3VwIGJ1dHRvbi1ncm91cC0tbGVmdFwiPlxyXG5cdFx0XHRcdFx0PHNsb3QgbmFtZT1cImxlZnRcIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gbGVmdE9wdGlvbnNcIiA6a2V5PVwiaW5kZXhcIiA6c3R5bGU9XCJ7XHJcblx0XHRcdFx0XHQgIGJhY2tncm91bmRDb2xvcjogaXRlbS5zdHlsZSAmJiBpdGVtLnN0eWxlLmJhY2tncm91bmRDb2xvciA/IGl0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yIDogJyNDN0M2Q0QnXHJcblx0XHRcdFx0XHR9XCIgY2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uIGJ1dHRvbi1ob2NrXCIgQHRvdWNoc3RhcnQ9XCJhcHBUb3VjaFN0YXJ0XCJcclxuXHRcdFx0XHRcdFx0XHRAdG91Y2hlbmQ9XCJhcHBUb3VjaEVuZCgkZXZlbnQsaW5kZXgsaXRlbSwnbGVmdCcpXCJcclxuXHRcdFx0XHRcdFx0XHRAY2xpY2suc3RvcD1cIm9uQ2xpY2tGb3JQQyhpbmRleCxpdGVtLCdsZWZ0JylcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInVuaS1zd2lwZV9idXR0b24tdGV4dFwiXHJcblx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7Y29sb3I6IGl0ZW0uc3R5bGUgJiYgaXRlbS5zdHlsZS5jb2xvciA/IGl0ZW0uc3R5bGUuY29sb3IgOiAnI0ZGRkZGRicsZm9udFNpemU6IGl0ZW0uc3R5bGUgJiYgaXRlbS5zdHlsZS5mb250U2l6ZSA/IGl0ZW0uc3R5bGUuZm9udFNpemUgOiAnMTZweCd9XCI+e3sgaXRlbS50ZXh0IH19PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8L3Nsb3Q+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwidW5pLXN3aXBlX3RleHQtLWNlbnRlclwiPlxyXG5cdFx0XHRcdFx0PHNsb3Q+PC9zbG90PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1zd2lwZV9idXR0b24tZ3JvdXAgYnV0dG9uLWdyb3VwLS1yaWdodFwiPlxyXG5cdFx0XHRcdFx0PHNsb3QgbmFtZT1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHJpZ2h0T3B0aW9uc1wiIDprZXk9XCJpbmRleFwiIDpzdHlsZT1cIntcclxuXHRcdFx0XHRcdCAgYmFja2dyb3VuZENvbG9yOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID8gaXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgOiAnI0M3QzZDRCdcclxuXHRcdFx0XHRcdH1cIiBjbGFzcz1cInVuaS1zd2lwZV9idXR0b24gYnV0dG9uLWhvY2tcIiBAdG91Y2hzdGFydD1cImFwcFRvdWNoU3RhcnRcIlxyXG5cdFx0XHRcdFx0XHRcdEB0b3VjaGVuZD1cImFwcFRvdWNoRW5kKCRldmVudCxpbmRleCxpdGVtLCdyaWdodCcpXCJcclxuXHRcdFx0XHRcdFx0XHRAY2xpY2suc3RvcD1cIm9uQ2xpY2tGb3JQQyhpbmRleCxpdGVtLCdyaWdodCcpXCI+PHRleHQgY2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uLXRleHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwie2NvbG9yOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuY29sb3IgPyBpdGVtLnN0eWxlLmNvbG9yIDogJyNGRkZGRkYnLGZvbnRTaXplOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuZm9udFNpemUgPyBpdGVtLnN0eWxlLmZvbnRTaXplIDogJzE2cHgnfVwiPnt7IGl0ZW0udGV4dCB9fTwvdGV4dD5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC9zbG90PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PCEtLSAjZW5kaWYgLS0+XHJcblx0XHQ8IS0tIGFwcCBudnVl56uvIOS9v+eUqCBiaW5kaW5neCAtLT5cclxuXHRcdDwhLS0gI2lmZGVmIEFQUC1OVlVFIC0tPlxyXG5cdFx0PHZpZXcgcmVmPVwic2VsZWN0b3ItYm94LS1ob2NrXCIgY2xhc3M9XCJ1bmktc3dpcGVcIiBAaG9yaXpvbnRhbHBhbj1cInRvdWNoc3RhcnRcIiBAdG91Y2hlbmQ9XCJ0b3VjaGVuZFwiPlxyXG5cdFx0XHQ8dmlldyByZWY9J3NlbGVjdG9yLWxlZnQtYnV0dG9uLS1ob2NrJyBjbGFzcz1cInVuaS1zd2lwZV9idXR0b24tZ3JvdXAgYnV0dG9uLWdyb3VwLS1sZWZ0XCI+XHJcblx0XHRcdFx0PHNsb3QgbmFtZT1cImxlZnRcIj5cclxuXHRcdFx0XHRcdDx2aWV3IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIGxlZnRPcHRpb25zXCIgOmtleT1cImluZGV4XCIgOnN0eWxlPVwie1xyXG5cdFx0XHRcdCAgYmFja2dyb3VuZENvbG9yOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID8gaXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgOiAnI0M3QzZDRCdcclxuXHRcdFx0XHR9XCIgY2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uIGJ1dHRvbi1ob2NrXCIgQGNsaWNrLnN0b3A9XCJvbkNsaWNrKGluZGV4LGl0ZW0sJ2xlZnQnKVwiPjx0ZXh0XHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uLXRleHRcIlxyXG5cdFx0XHRcdFx0XHRcdDpzdHlsZT1cIntjb2xvcjogaXRlbS5zdHlsZSAmJiBpdGVtLnN0eWxlLmNvbG9yID8gaXRlbS5zdHlsZS5jb2xvciA6ICcjRkZGRkZGJywgZm9udFNpemU6IGl0ZW0uc3R5bGUgJiYgaXRlbS5zdHlsZS5mb250U2l6ZSA/IGl0ZW0uc3R5bGUuZm9udFNpemUgOiAnMTZweCd9XCI+e3sgaXRlbS50ZXh0IH19PC90ZXh0PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvc2xvdD5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyByZWY9J3NlbGVjdG9yLXJpZ2h0LWJ1dHRvbi0taG9jaycgY2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uLWdyb3VwIGJ1dHRvbi1ncm91cC0tcmlnaHRcIj5cclxuXHRcdFx0XHQ8c2xvdCBuYW1lPVwicmlnaHRcIj5cclxuXHRcdFx0XHRcdDx2aWV3IHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHJpZ2h0T3B0aW9uc1wiIDprZXk9XCJpbmRleFwiIDpzdHlsZT1cIntcclxuXHRcdFx0XHQgIGJhY2tncm91bmRDb2xvcjogaXRlbS5zdHlsZSAmJiBpdGVtLnN0eWxlLmJhY2tncm91bmRDb2xvciA/IGl0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yIDogJyNDN0M2Q0QnXHJcblx0XHRcdFx0fVwiIGNsYXNzPVwidW5pLXN3aXBlX2J1dHRvbiBidXR0b24taG9ja1wiIEBjbGljay5zdG9wPVwib25DbGljayhpbmRleCxpdGVtLCdyaWdodCcpXCI+PHRleHRcclxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cInVuaS1zd2lwZV9idXR0b24tdGV4dFwiXHJcblx0XHRcdFx0XHRcdFx0OnN0eWxlPVwie2NvbG9yOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuY29sb3IgPyBpdGVtLnN0eWxlLmNvbG9yIDogJyNGRkZGRkYnLGZvbnRTaXplOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuZm9udFNpemUgPyBpdGVtLnN0eWxlLmZvbnRTaXplIDogJzE2cHgnfVwiPnt7IGl0ZW0udGV4dCB9fTwvdGV4dD5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8L3Nsb3Q+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgcmVmPSdzZWxlY3Rvci1jb250ZW50LS1ob2NrJyBjbGFzcz1cInVuaS1zd2lwZV9ib3hcIj5cclxuXHRcdFx0XHQ8c2xvdD48L3Nsb3Q+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDwhLS0gI2VuZGlmIC0tPlxyXG5cdFx0PCEtLSDlhbbku5blubPlj7Dkvb/nlKgganMg77yM6ZW/5YiX6KGo5oCn6IO95Y+v6IO95Lya5pyJ5b2x5ZONLS0+XHJcblx0XHQ8IS0tICNpZmRlZiBNUC1BTElQQVkgfHwgTVAtQkFJRFUgfHwgTVAtVE9VVElBTyB8fCBNUC1RUSAtLT5cclxuXHRcdDx2aWV3IGNsYXNzPVwidW5pLXN3aXBlXCI+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidW5pLXN3aXBlX2JveFwiIEB0b3VjaHN0YXJ0PVwidG91Y2hzdGFydFwiIEB0b3VjaG1vdmU9XCJ0b3VjaG1vdmVcIiBAdG91Y2hlbmQ9XCJ0b3VjaGVuZFwiXHJcblx0XHRcdFx0OnN0eWxlPVwie3RyYW5zZm9ybTptb3ZlTGVmdH1cIiA6Y2xhc3M9XCJ7YW5pOmFuaX1cIj5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1zd2lwZV9idXR0b24tZ3JvdXAgYnV0dG9uLWdyb3VwLS1sZWZ0XCIgOmNsYXNzPVwiW2VsQ2xhc3NdXCI+XHJcblx0XHRcdFx0XHQ8c2xvdCBuYW1lPVwibGVmdFwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBsZWZ0T3B0aW9uc1wiIDprZXk9XCJpbmRleFwiIDpzdHlsZT1cIntcclxuXHRcdFx0XHRcdCAgYmFja2dyb3VuZENvbG9yOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID8gaXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgOiAnI0M3QzZDRCcsXHJcblx0XHRcdFx0XHQgIGZvbnRTaXplOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuZm9udFNpemUgPyBpdGVtLnN0eWxlLmZvbnRTaXplIDogJzE2cHgnXHJcblx0XHRcdFx0XHR9XCIgY2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uIGJ1dHRvbi1ob2NrXCIgQHRvdWNoc3RhcnQ9XCJhcHBUb3VjaFN0YXJ0XCJcclxuXHRcdFx0XHRcdFx0XHRAdG91Y2hlbmQ9XCJhcHBUb3VjaEVuZCgkZXZlbnQsaW5kZXgsaXRlbSwnbGVmdCcpXCI+PHRleHQgY2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uLXRleHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwie2NvbG9yOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuY29sb3IgPyBpdGVtLnN0eWxlLmNvbG9yIDogJyNGRkZGRkYnLH1cIj57eyBpdGVtLnRleHQgfX08L3RleHQ+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDwvc2xvdD5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PHNsb3Q+PC9zbG90PlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwidW5pLXN3aXBlX2J1dHRvbi1ncm91cCBidXR0b24tZ3JvdXAtLXJpZ2h0XCIgOmNsYXNzPVwiW2VsQ2xhc3NdXCI+XHJcblx0XHRcdFx0XHQ8c2xvdCBuYW1lPVwicmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0PHZpZXcgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gcmlnaHRPcHRpb25zXCIgOmtleT1cImluZGV4XCIgOnN0eWxlPVwie1xyXG5cdFx0XHRcdFx0ICBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uc3R5bGUgJiYgaXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPyBpdGVtLnN0eWxlLmJhY2tncm91bmRDb2xvciA6ICcjQzdDNkNEJyxcclxuXHRcdFx0XHRcdCAgZm9udFNpemU6IGl0ZW0uc3R5bGUgJiYgaXRlbS5zdHlsZS5mb250U2l6ZSA/IGl0ZW0uc3R5bGUuZm9udFNpemUgOiAnMTZweCdcclxuXHRcdFx0XHRcdH1cIiBAdG91Y2hzdGFydD1cImFwcFRvdWNoU3RhcnRcIiBAdG91Y2hlbmQ9XCJhcHBUb3VjaEVuZCgkZXZlbnQsaW5kZXgsaXRlbSwncmlnaHQnKVwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uIGJ1dHRvbi1ob2NrXCI+PHRleHQgY2xhc3M9XCJ1bmktc3dpcGVfYnV0dG9uLXRleHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwie2NvbG9yOiBpdGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUuY29sb3IgPyBpdGVtLnN0eWxlLmNvbG9yIDogJyNGRkZGRkYnLH1cIj57eyBpdGVtLnRleHQgfX08L3RleHQ+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDwvc2xvdD5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDwhLS0gI2VuZGlmIC0tPlxyXG5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBzcmM9XCIuL3d4Lnd4c1wiIG1vZHVsZT1cInd4c3N3aXBlXCIgbGFuZz1cInd4c1wiPjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCBtb2R1bGU9XCJyZW5kZXJzd2lwZVwiIGxhbmc9XCJyZW5kZXJqc1wiPlxyXG5cdGltcG9ydCByZW5kZXIgZnJvbSAnLi9yZW5kZXIuanMnXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0bW91bnRlZChlLCBpbnMsIG93bmVyKSB7XHJcblx0XHRcdHRoaXMuc3RhdGUgPSB7fVxyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0c2hvd1dhdGNoKG5ld1ZhbCwgb2xkVmFsLCBvd25lckluc3RhbmNlLCBpbnN0YW5jZSkge1xyXG5cdFx0XHRcdHJlbmRlci5zaG93V2F0Y2gobmV3VmFsLCBvbGRWYWwsIG93bmVySW5zdGFuY2UsIGluc3RhbmNlLCB0aGlzKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0b3VjaHN0YXJ0KGUsIG93bmVySW5zdGFuY2UpIHtcclxuXHRcdFx0XHRyZW5kZXIudG91Y2hzdGFydChlLCBvd25lckluc3RhbmNlLCB0aGlzKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0b3VjaG1vdmUoZSwgb3duZXJJbnN0YW5jZSkge1xyXG5cdFx0XHRcdHJlbmRlci50b3VjaG1vdmUoZSwgb3duZXJJbnN0YW5jZSwgdGhpcylcclxuXHRcdFx0fSxcclxuXHRcdFx0dG91Y2hlbmQoZSwgb3duZXJJbnN0YW5jZSkge1xyXG5cdFx0XHRcdHJlbmRlci50b3VjaGVuZChlLCBvd25lckluc3RhbmNlLCB0aGlzKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuPHNjcmlwdD5cclxuXHRpbXBvcnQgbXB3eHMgZnJvbSAnLi9tcHd4cydcclxuXHRpbXBvcnQgYmluZGluZ3ggZnJvbSAnLi9iaW5kaW5neC5qcydcclxuXHRpbXBvcnQgbXBvdGhlciBmcm9tICcuL21wb3RoZXInXHJcblxyXG5cdC8qKlxyXG5cdCAqIFN3aXBlQWN0aW9uSXRlbSDmu5Hliqjmk43kvZzlrZDnu4Tku7ZcclxuXHQgKiBAZGVzY3JpcHRpb24g6YCa6L+H5ruR5Yqo6Kem5Y+R6YCJ6aG555qE5a655ZmoXHJcblx0ICogQHR1dG9yaWFsIGh0dHBzOi8vZXh0LmRjbG91ZC5uZXQuY24vcGx1Z2luP2lkPTE4MVxyXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2hvdyA9IFtsZWZ0fHJpZ2h0772cbm9uZV0gXHTlvIDlkK/lhbPpl63nu4Tku7bvvIxhdXRvLWNsb3NlID0gZmFsc2Ug5pe255Sf5pWIXHJcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkaXNhYmxlZCA9IFt0cnVlfGZhbHNlXSBcdFx05piv5ZCm56aB5q2i5ruR5YqoXHJcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBhdXRvQ2xvc2UgPSBbdHJ1ZXxmYWxzZV0gXHTmu5HliqjmiZPlvIDlvZPliY3nu4Tku7bvvIzmmK/lkKblhbPpl63lhbbku5bnu4Tku7ZcclxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gIHRocmVzaG9sZCBcdFx0XHRcdFx05ruR5Yqo57y655yB5YC8XHJcblx0ICogQHByb3BlcnR5IHtBcnJheX0gbGVmdE9wdGlvbnMgXHRcdFx0XHRcdOW3puS+p+mAiemhueWGheWuueWPiuagt+W8j1xyXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJnaWh0T3B0aW9ucyBcdFx0XHRcdFx05Y+z5L6n6YCJ6aG55YaF5a655Y+K5qC35byPXHJcblx0ICogQGV2ZW50IHtGdW5jdGlvbn0gY2xpY2sgXHRcdFx0XHRcdFx0XHTngrnlh7vpgInpobnmjInpkq7ml7bop6blj5Hkuovku7bvvIxlID0ge2NvbnRlbnQsaW5kZXh9IO+8jGNvbnRlbnTvvIjngrnlh7vlhoXlrrnvvInjgIFpbmRleO+8iOS4i+aghylcclxuXHQgKiBAZXZlbnQge0Z1bmN0aW9ufSBjaGFuZ2UgXHRcdFx0XHRcdFx057uE5Lu25omT5byA5oiW5YWz6Zet5pe26Kem5Y+R77yMbGVmdFxccmlnaHRcXG5vbmVcclxuXHQgKi9cclxuXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0bWl4aW5zOiBbbXB3eHMsIGJpbmRpbmd4LCBtcG90aGVyXSxcclxuXHRcdGVtaXRzOiBbJ2NsaWNrJywgJ2NoYW5nZSddLFxyXG5cdFx0cHJvcHM6IHtcclxuXHRcdFx0Ly8g5o6n5Yi25byA5YWzXHJcblx0XHRcdHNob3c6IHtcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJ25vbmUnXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyDnpoHnlKhcclxuXHRcdFx0ZGlzYWJsZWQ6IHtcclxuXHRcdFx0XHR0eXBlOiBCb29sZWFuLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IGZhbHNlXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyDmmK/lkKboh6rliqjlhbPpl61cclxuXHRcdFx0YXV0b0Nsb3NlOiB7XHJcblx0XHRcdFx0dHlwZTogQm9vbGVhbixcclxuXHRcdFx0XHRkZWZhdWx0OiB0cnVlXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyDmu5HliqjnvLrnnIHot53nprtcclxuXHRcdFx0dGhyZXNob2xkOiB7XHJcblx0XHRcdFx0dHlwZTogTnVtYmVyLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IDIwXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyDlt6bkvqfmjInpkq7lhoXlrrlcclxuXHRcdFx0bGVmdE9wdGlvbnM6IHtcclxuXHRcdFx0XHR0eXBlOiBBcnJheSxcclxuXHRcdFx0XHRkZWZhdWx0ICgpIHtcclxuXHRcdFx0XHRcdHJldHVybiBbXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIOWPs+S+p+aMiemSruWGheWuuVxyXG5cdFx0XHRyaWdodE9wdGlvbnM6IHtcclxuXHRcdFx0XHR0eXBlOiBBcnJheSxcclxuXHRcdFx0XHRkZWZhdWx0ICgpIHtcclxuXHRcdFx0XHRcdHJldHVybiBbXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdH0sXHJcblx0XHQvLyAjaWZuZGVmIFZVRTNcclxuXHRcdC8vIFRPRE8gdnVlMlxyXG5cdFx0ZGVzdHJveWVkKCkge1xyXG5cdFx0XHRpZiAodGhpcy5fX2lzVW5tb3VudGVkKSByZXR1cm5cclxuXHRcdFx0dGhpcy51bmluc3RhbGwoKVxyXG5cdFx0fSxcclxuXHRcdC8vICNlbmRpZlxyXG5cdFx0Ly8gI2lmZGVmIFZVRTNcclxuXHRcdC8vIFRPRE8gdnVlM1xyXG5cdFx0dW5tb3VudGVkKCkge1xyXG5cdFx0XHR0aGlzLl9faXNVbm1vdW50ZWQgPSB0cnVlXHJcblx0XHRcdHRoaXMudW5pbnN0YWxsKClcclxuXHRcdH0sXHJcblx0XHQvLyAjZW5kaWZcclxuXHJcblx0XHRtZXRob2RzOiB7XHJcblx0XHRcdHVuaW5zdGFsbCgpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5zd2lwZWFjdGlvbikge1xyXG5cdFx0XHRcdFx0dGhpcy5zd2lwZWFjdGlvbi5jaGlsZHJlbi5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoaXRlbSA9PT0gdGhpcykge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc3dpcGVhY3Rpb24uY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOiOt+WPlueItuWFg+e0oOWunuS+i1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0Z2V0U3dpcGVBY3Rpb24obmFtZSA9ICd1bmlTd2lwZUFjdGlvbicpIHtcclxuXHRcdFx0XHRsZXQgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xyXG5cdFx0XHRcdGxldCBwYXJlbnROYW1lID0gcGFyZW50LiRvcHRpb25zLm5hbWU7XHJcblx0XHRcdFx0d2hpbGUgKHBhcmVudE5hbWUgIT09IG5hbWUpIHtcclxuXHRcdFx0XHRcdHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xyXG5cdFx0XHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdHBhcmVudE5hbWUgPSBwYXJlbnQuJG9wdGlvbnMubmFtZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHBhcmVudDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5cdC51bmktc3dpcGUge1xyXG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdH1cclxuXHJcblx0LnVuaS1zd2lwZV9ib3gge1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGZsZXgtc2hyaW5rOiAwO1xyXG5cdFx0Ly8gdG91Y2gtYWN0aW9uOiBub25lO1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0fVxyXG5cclxuXHQudW5pLXN3aXBlX2NvbnRlbnQge1xyXG5cdFx0Ly8gYm9yZGVyOiAxcHggcmVkIHNvbGlkO1xyXG5cdH1cclxuXHJcblx0LnVuaS1zd2lwZV90ZXh0LS1jZW50ZXIge1xyXG5cdFx0d2lkdGg6IDEwMCU7XHJcblx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHRjdXJzb3I6IGdyYWI7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHR9XHJcblxyXG5cdC51bmktc3dpcGVfYnV0dG9uLWdyb3VwIHtcclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0XHRmbGV4LWRpcmVjdGlvbjogcm93O1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0dG9wOiAwO1xyXG5cdFx0Ym90dG9tOiAwO1xyXG5cdFx0LyogI2lmZGVmIEg1ICovXHJcblx0XHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHR9XHJcblxyXG5cdC5idXR0b24tZ3JvdXAtLWxlZnQge1xyXG5cdFx0bGVmdDogMDtcclxuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSlcclxuXHR9XHJcblxyXG5cdC5idXR0b24tZ3JvdXAtLXJpZ2h0IHtcclxuXHRcdHJpZ2h0OiAwO1xyXG5cdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpXHJcblx0fVxyXG5cclxuXHQudW5pLXN3aXBlX2J1dHRvbiB7XHJcblx0XHQvKiAjaWZkZWYgQVBQLU5WVUUgKi9cclxuXHRcdGZsZXg6IDE7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0XHRwYWRkaW5nOiAwIDIwcHg7XHJcblx0fVxyXG5cclxuXHQudW5pLXN3aXBlX2J1dHRvbi10ZXh0IHtcclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGZsZXgtc2hyaW5rOiAwO1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0XHRmb250LXNpemU6IDE0cHg7XHJcblx0fVxyXG5cclxuXHQuYW5pIHtcclxuXHRcdHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcclxuXHRcdHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XHJcblx0XHR0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKTtcclxuXHR9XHJcblxyXG5cdC8qICNpZmRlZiBNUC1BTElQQVkgKi9cclxuXHQubW92YWJsZS1hcmVhIHtcclxuXHRcdC8qIHdpZHRoOiAxMDAlOyAqL1xyXG5cdFx0aGVpZ2h0OiA0NXB4O1xyXG5cdH1cclxuXHJcblx0Lm1vdmFibGUtdmlldyB7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0LyoganVzdGlmeS1jb250ZW50OiBjZW50ZXI7ICovXHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHRmbGV4OiAxO1xyXG5cdFx0aGVpZ2h0OiA0NXB4O1xyXG5cdFx0ei1pbmRleDogMjtcclxuXHR9XHJcblxyXG5cdC5tb3ZhYmxlLXZpZXctYnV0dG9uIHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRmbGV4LXNocmluazogMDtcclxuXHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcblx0XHRoZWlnaHQ6IDEwMCU7XHJcblx0XHRiYWNrZ3JvdW5kOiAjQzBDMEMwO1xyXG5cdH1cclxuXHJcblx0LyogLnRyYW5zaXRpb24ge1xyXG5cdFx0dHJhbnNpdGlvbjogYWxsIDAuM3M7XHJcblx0fSAqL1xyXG5cclxuXHQubW92YWJsZS12aWV3LWJveCB7XHJcblx0XHRmbGV4LXNocmluazogMDtcclxuXHRcdGhlaWdodDogMTAwJTtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblx0fVxyXG5cclxuXHQvKiAjZW5kaWYgKi9cclxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cclxuXHQ8dmlldz5cclxuXHRcdDxzbG90Pjwvc2xvdD5cclxuXHQ8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5cdC8qKlxyXG5cdCAqIFN3aXBlQWN0aW9uIOa7keWKqOaTjeS9nFxyXG5cdCAqIEBkZXNjcmlwdGlvbiDpgJrov4fmu5Hliqjop6blj5HpgInpobnnmoTlrrnlmahcclxuXHQgKiBAdHV0b3JpYWwgaHR0cHM6Ly9leHQuZGNsb3VkLm5ldC5jbi9wbHVnaW4/aWQ9MTgxXHJcblx0ICovXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xuXHRcdG5hbWU6XCJ1bmlTd2lwZUFjdGlvblwiLFxyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cdFx0fSxcclxuXHRcdGNyZWF0ZWQoKSB7XHJcblx0XHRcdHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuXHRcdH0sXHJcblx0XHRtZXRob2RzOiB7XHJcblx0XHRcdC8vIOWFrOW8gOe7meeUqOaIt+S9v+eUqO+8jOmHjeWItue7hOS7tuagt+W8j1xyXG5cdFx0XHRyZXNpemUoKXtcclxuXHRcdFx0XHQvLyB3eHMg5Lya6Ieq5bex6K6h566X57uE5Lu25aSn5bCP77yM5omA5Lul5peg6ZyA5omn6KGM5LiL6Z2i5Luj56CBXHJcblx0XHRcdFx0Ly8gI2lmbmRlZiBBUFAtVlVFIHx8IEg1IHx8IE1QLVdFSVhJTlxyXG5cdFx0XHRcdHRoaXMuY2hpbGRyZW4uZm9yRWFjaCh2bT0+e1xyXG5cdFx0XHRcdFx0dm0uaW5pdCgpXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQvLyAjZW5kaWZcclxuXHRcdFx0fSxcblx0XHRcdC8vIOWFrOW8gOe7meeUqOaIt+S9v+eUqO+8jOWFs+mXreWFqOmDqCDlt7Lnu4/miZPlvIDnmoTnu4Tku7Zcblx0XHRcdGNsb3NlQWxsKCl7XG5cdFx0XHRcdHRoaXMuY2hpbGRyZW4uZm9yRWFjaCh2bT0+e1xuXHRcdFx0XHRcdC8vICNpZmRlZiBBUFAtVlVFIHx8IEg1IHx8IE1QLVdFSVhJTlxuXHRcdFx0XHRcdHZtLmlzX3Nob3cgPSAnbm9uZSdcblx0XHRcdFx0XHQvLyAjZW5kaWZcblxuXHRcdFx0XHRcdC8vICNpZm5kZWYgQVBQLVZVRSB8fCBINSB8fCBNUC1XRUlYSU5cblx0XHRcdFx0XHR2bS5jbG9zZSgpXG5cdFx0XHRcdFx0Ly8gI2VuZGlmXG5cdFx0XHRcdH0pXG5cdFx0XHR9LFxyXG5cdFx0XHRjbG9zZU90aGVyKHZtKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMub3Blbkl0ZW0gJiYgdGhpcy5vcGVuSXRlbSAhPT0gdm0pIHtcclxuXHRcdFx0XHRcdC8vICNpZmRlZiBBUFAtVlVFIHx8IEg1IHx8IE1QLVdFSVhJTlxyXG5cdFx0XHRcdFx0dGhpcy5vcGVuSXRlbS5pc19zaG93ID0gJ25vbmUnXHJcblx0XHRcdFx0XHQvLyAjZW5kaWZcclxuXHJcblx0XHRcdFx0XHQvLyAjaWZuZGVmIEFQUC1WVUUgfHwgSDUgfHwgTVAtV0VJWElOXHJcblx0XHRcdFx0XHR0aGlzLm9wZW5JdGVtLmNsb3NlKClcclxuXHRcdFx0XHRcdC8vICNlbmRpZlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyDorrDlvZXkuIrkuIDkuKrmiZPlvIDnmoQgc3dpcGUtYWN0aW9uLWl0ZW0gLOeUqOS6jiBhdXRvLWNsb3NlXHJcblx0XHRcdFx0dGhpcy5vcGVuSXRlbSA9IHZtXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZT48L3N0eWxlPlxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgZ2V0SG9tZUdvb2RzR3Vlc3NMaWtlQVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9ob21lJ1xyXG5pbXBvcnQgdHlwZSB7IFBhZ2VQYXJhbXMgfSBmcm9tICdAL3R5cGVzL2dsb2JhbCdcclxuaW1wb3J0IHR5cGUgeyBHdWVzc0l0ZW0gfSBmcm9tICdAL3R5cGVzL2hvbWUnXHJcbmltcG9ydCB7IG9uTW91bnRlZCwgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLy8g5YiG6aG15Y+C5pWwXHJcbmNvbnN0IHBhZ2VQYXJhbXM6IFJlcXVpcmVkPFBhZ2VQYXJhbXM+ID0ge1xyXG4gIHBhZ2U6IDEsXHJcbiAgcGFnZVNpemU6IDEwLFxyXG59XHJcbi8vIOeMnOS9oOWWnOasoueahOWIl+ihqFxyXG5jb25zdCBndWVzc0xpc3QgPSByZWY8R3Vlc3NJdGVtW10+KFtdKVxyXG4vLyDlt7Lnu5PmnZ/moIforrBcclxuY29uc3QgZmluaXNoID0gcmVmKGZhbHNlKVxyXG4vLyDojrflj5bnjJzkvaDllpzmrKLmlbDmja5cclxuY29uc3QgZ2V0SG9tZUdvb2RzR3Vlc3NMaWtlRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAvLyDpgIDlh7rliIbpobXliKTmlq1cclxuICBpZiAoZmluaXNoLnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICByZXR1cm4gdW5pLnNob3dUb2FzdCh7IGljb246ICdub25lJywgdGl0bGU6ICfmsqHmnInmm7TlpJrmlbDmja5+JyB9KVxyXG4gIH1cclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRIb21lR29vZHNHdWVzc0xpa2VBUEkocGFnZVBhcmFtcylcclxuICAvLyBndWVzc0xpc3QudmFsdWUgPSByZXMucmVzdWx0Lml0ZW1zXHJcbiAgLy8g5pWw57uE6L+95YqgXHJcbiAgZ3Vlc3NMaXN0LnZhbHVlLnB1c2goLi4ucmVzLnJlc3VsdC5pdGVtcylcclxuICAvLyDliIbpobXmnaHku7ZcclxuICBpZiAocGFnZVBhcmFtcy5wYWdlIDwgcmVzLnJlc3VsdC5wYWdlcykge1xyXG4gICAgLy8g6aG156CB57Sv5YqgXHJcbiAgICBwYWdlUGFyYW1zLnBhZ2UrK1xyXG4gIH0gZWxzZSB7XHJcbiAgICBmaW5pc2gudmFsdWUgPSB0cnVlXHJcbiAgfVxyXG59XHJcbi8vIOmHjee9ruaVsOaNrlxyXG5jb25zdCByZXNldERhdGEgPSAoKSA9PiB7XHJcbiAgcGFnZVBhcmFtcy5wYWdlID0gMVxyXG4gIGd1ZXNzTGlzdC52YWx1ZSA9IFtdXHJcbiAgZmluaXNoLnZhbHVlID0gZmFsc2VcclxufVxyXG4vLyDnu4Tku7bmjILovb3lrozmr5Vcclxub25Nb3VudGVkKCgpID0+IHtcclxuICBnZXRIb21lR29vZHNHdWVzc0xpa2VEYXRhKClcclxufSlcclxuLy8g5pq06Zyy5pa55rOVXHJcbmRlZmluZUV4cG9zZSh7XHJcbiAgcmVzZXREYXRhLFxyXG4gIGdldE1vcmU6IGdldEhvbWVHb29kc0d1ZXNzTGlrZURhdGEsXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDwhLS0g54yc5L2g5Zac5qyiIC0tPlxyXG4gIDx2aWV3IGNsYXNzPVwiY2FwdGlvblwiPlxyXG4gICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+54yc5L2g5Zac5qyiPC90ZXh0PlxyXG4gIDwvdmlldz5cclxuICA8dmlldyBjbGFzcz1cImd1ZXNzXCI+XHJcbiAgICA8bmF2aWdhdG9yXHJcbiAgICAgIGNsYXNzPVwiZ3Vlc3MtaXRlbVwiXHJcbiAgICAgIHYtZm9yPVwiaXRlbSBpbiBndWVzc0xpc3RcIlxyXG4gICAgICA6a2V5PVwiaXRlbS5pZFwiXHJcbiAgICAgIDp1cmw9XCJgL3BhZ2VzL2dvb2RzL2dvb2RzP2lkPSR7aXRlbS5pZH1gXCJcclxuICAgID5cclxuICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2VcIiBtb2RlPVwiYXNwZWN0RmlsbFwiIDpzcmM9XCJpdGVtLnBpY3R1cmVcIj48L2ltYWdlPlxyXG4gICAgICA8dmlldyBjbGFzcz1cIm5hbWVcIj4ge3sgaXRlbS5uYW1lIH19IDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwic21hbGxcIj7CpTwvdGV4dD5cclxuICAgICAgICA8dGV4dD57eyBpdGVtLnByaWNlIH19PC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L25hdmlnYXRvcj5cclxuICA8L3ZpZXc+XHJcbiAgPHZpZXcgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5cclxuICAgIHt7IGZpbmlzaCA/ICfmsqHmnInmm7TlpJrmlbDmja5+JyA6ICfmraPlnKjliqDovb0uLi4nIH19XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG46aG9zdCB7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbn1cclxuLyog5YiG57G75qCH6aKYICovXHJcbi5jYXB0aW9uIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGxpbmUtaGVpZ2h0OiAxO1xyXG4gIHBhZGRpbmc6IDM2cnB4IDAgNDBycHg7XHJcbiAgZm9udC1zaXplOiAzMnJweDtcclxuICBjb2xvcjogIzI2MjYyNjtcclxuICAudGV4dCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgcGFkZGluZzogMCAyOHJweCAwIDMwcnB4O1xyXG5cclxuICAgICY6OmJlZm9yZSxcclxuICAgICY6OmFmdGVyIHtcclxuICAgICAgY29udGVudDogJyc7XHJcbiAgICAgIHdpZHRoOiAyMHJweDtcclxuICAgICAgaGVpZ2h0OiAyMHJweDtcclxuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEAvc3RhdGljL2ltYWdlcy9idWJibGUucG5nKTtcclxuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xyXG4gICAgICBtYXJnaW46IDAgMTBycHg7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiDnjJzkvaDllpzmrKIgKi9cclxuLmd1ZXNzIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtd3JhcDogd3JhcDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICAuZ3Vlc3MtaXRlbSB7XHJcbiAgICB3aWR0aDogMzQ1cnB4O1xyXG4gICAgcGFkZGluZzogMjRycHggMjBycHggMjBycHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgfVxyXG4gIC5pbWFnZSB7XHJcbiAgICB3aWR0aDogMzA0cnB4O1xyXG4gICAgaGVpZ2h0OiAzMDRycHg7XHJcbiAgfVxyXG4gIC5uYW1lIHtcclxuICAgIGhlaWdodDogNzVycHg7XHJcbiAgICBtYXJnaW46IDEwcnB4IDA7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICMyNjI2MjY7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcclxuICAgIC13ZWJraXQtbGluZS1jbGFtcDogMjtcclxuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XHJcbiAgfVxyXG4gIC5wcmljZSB7XHJcbiAgICBsaW5lLWhlaWdodDogMTtcclxuICAgIHBhZGRpbmctdG9wOiA0cnB4O1xyXG4gICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gIH1cclxuICAuc21hbGwge1xyXG4gICAgZm9udC1zaXplOiA4MCU7XHJcbiAgfVxyXG59XHJcbi8vIOWKoOi9veaPkOekuuaWh+Wtl1xyXG4ubG9hZGluZy10ZXh0IHtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgZm9udC1zaXplOiAyOHJweDtcclxuICBjb2xvcjogIzY2NjtcclxuICBwYWRkaW5nOiAyMHJweCAwO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IGdldEhvbWVHb29kc0d1ZXNzTGlrZUFQSSB9IGZyb20gJ0Avc2VydmljZXMvaG9tZSdcclxuaW1wb3J0IHR5cGUgeyBQYWdlUGFyYW1zIH0gZnJvbSAnQC90eXBlcy9nbG9iYWwnXHJcbmltcG9ydCB0eXBlIHsgR3Vlc3NJdGVtIH0gZnJvbSAnQC90eXBlcy9ob21lJ1xyXG5pbXBvcnQgeyBvbk1vdW50ZWQsIHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbi8vIOWIhumhteWPguaVsFxyXG5jb25zdCBwYWdlUGFyYW1zOiBSZXF1aXJlZDxQYWdlUGFyYW1zPiA9IHtcclxuICBwYWdlOiAxLFxyXG4gIHBhZ2VTaXplOiAxMCxcclxufVxyXG4vLyDnjJzkvaDllpzmrKLnmoTliJfooahcclxuY29uc3QgZ3Vlc3NMaXN0ID0gcmVmPEd1ZXNzSXRlbVtdPihbXSlcclxuLy8g5bey57uT5p2f5qCH6K6wXHJcbmNvbnN0IGZpbmlzaCA9IHJlZihmYWxzZSlcclxuLy8g6I635Y+W54yc5L2g5Zac5qyi5pWw5o2uXHJcbmNvbnN0IGdldEhvbWVHb29kc0d1ZXNzTGlrZURhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgLy8g6YCA5Ye65YiG6aG15Yik5patXHJcbiAgaWYgKGZpbmlzaC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgcmV0dXJuIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnbm9uZScsIHRpdGxlOiAn5rKh5pyJ5pu05aSa5pWw5o2uficgfSlcclxuICB9XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SG9tZUdvb2RzR3Vlc3NMaWtlQVBJKHBhZ2VQYXJhbXMpXHJcbiAgLy8gZ3Vlc3NMaXN0LnZhbHVlID0gcmVzLnJlc3VsdC5pdGVtc1xyXG4gIC8vIOaVsOe7hOi/veWKoFxyXG4gIGd1ZXNzTGlzdC52YWx1ZS5wdXNoKC4uLnJlcy5yZXN1bHQuaXRlbXMpXHJcbiAgLy8g5YiG6aG15p2h5Lu2XHJcbiAgaWYgKHBhZ2VQYXJhbXMucGFnZSA8IHJlcy5yZXN1bHQucGFnZXMpIHtcclxuICAgIC8vIOmhteeggee0r+WKoFxyXG4gICAgcGFnZVBhcmFtcy5wYWdlKytcclxuICB9IGVsc2Uge1xyXG4gICAgZmluaXNoLnZhbHVlID0gdHJ1ZVxyXG4gIH1cclxufVxyXG4vLyDph43nva7mlbDmja5cclxuY29uc3QgcmVzZXREYXRhID0gKCkgPT4ge1xyXG4gIHBhZ2VQYXJhbXMucGFnZSA9IDFcclxuICBndWVzc0xpc3QudmFsdWUgPSBbXVxyXG4gIGZpbmlzaC52YWx1ZSA9IGZhbHNlXHJcbn1cclxuLy8g57uE5Lu25oyC6L295a6M5q+VXHJcbm9uTW91bnRlZCgoKSA9PiB7XHJcbiAgZ2V0SG9tZUdvb2RzR3Vlc3NMaWtlRGF0YSgpXHJcbn0pXHJcbi8vIOaatOmcsuaWueazlVxyXG5kZWZpbmVFeHBvc2Uoe1xyXG4gIHJlc2V0RGF0YSxcclxuICBnZXRNb3JlOiBnZXRIb21lR29vZHNHdWVzc0xpa2VEYXRhLFxyXG59KVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8IS0tIOeMnOS9oOWWnOasoiAtLT5cclxuICA8dmlldyBjbGFzcz1cImNhcHRpb25cIj5cclxuICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPueMnOS9oOWWnOasojwvdGV4dD5cclxuICA8L3ZpZXc+XHJcbiAgPHZpZXcgY2xhc3M9XCJndWVzc1wiPlxyXG4gICAgPG5hdmlnYXRvclxyXG4gICAgICBjbGFzcz1cImd1ZXNzLWl0ZW1cIlxyXG4gICAgICB2LWZvcj1cIml0ZW0gaW4gZ3Vlc3NMaXN0XCJcclxuICAgICAgOmtleT1cIml0ZW0uaWRcIlxyXG4gICAgICA6dXJsPVwiYC9wYWdlcy9nb29kcy9nb29kcz9pZD0ke2l0ZW0uaWR9YFwiXHJcbiAgICA+XHJcbiAgICAgIDxpbWFnZSBjbGFzcz1cImltYWdlXCIgbW9kZT1cImFzcGVjdEZpbGxcIiA6c3JjPVwiaXRlbS5waWN0dXJlXCI+PC9pbWFnZT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lXCI+IHt7IGl0ZW0ubmFtZSB9fSA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cInNtYWxsXCI+wqU8L3RleHQ+XHJcbiAgICAgICAgPHRleHQ+e3sgaXRlbS5wcmljZSB9fTwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC9uYXZpZ2F0b3I+XHJcbiAgPC92aWV3PlxyXG4gIDx2aWV3IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+XHJcbiAgICB7eyBmaW5pc2ggPyAn5rKh5pyJ5pu05aSa5pWw5o2uficgOiAn5q2j5Zyo5Yqg6L29Li4uJyB9fVxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG46aG9zdCB7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbn1cclxuLyog5YiG57G75qCH6aKYICovXHJcbi5jYXB0aW9uIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGxpbmUtaGVpZ2h0OiAxO1xyXG4gIHBhZGRpbmc6IDM2cnB4IDAgNDBycHg7XHJcbiAgZm9udC1zaXplOiAzMnJweDtcclxuICBjb2xvcjogIzI2MjYyNjtcclxuICAudGV4dCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgcGFkZGluZzogMCAyOHJweCAwIDMwcnB4O1xyXG5cclxuICAgICY6OmJlZm9yZSxcclxuICAgICY6OmFmdGVyIHtcclxuICAgICAgY29udGVudDogJyc7XHJcbiAgICAgIHdpZHRoOiAyMHJweDtcclxuICAgICAgaGVpZ2h0OiAyMHJweDtcclxuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEAvc3RhdGljL2ltYWdlcy9idWJibGUucG5nKTtcclxuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xyXG4gICAgICBtYXJnaW46IDAgMTBycHg7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiDnjJzkvaDllpzmrKIgKi9cclxuLmd1ZXNzIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtd3JhcDogd3JhcDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICAuZ3Vlc3MtaXRlbSB7XHJcbiAgICB3aWR0aDogMzQ1cnB4O1xyXG4gICAgcGFkZGluZzogMjRycHggMjBycHggMjBycHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgfVxyXG4gIC5pbWFnZSB7XHJcbiAgICB3aWR0aDogMzA0cnB4O1xyXG4gICAgaGVpZ2h0OiAzMDRycHg7XHJcbiAgfVxyXG4gIC5uYW1lIHtcclxuICAgIGhlaWdodDogNzVycHg7XHJcbiAgICBtYXJnaW46IDEwcnB4IDA7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICMyNjI2MjY7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcclxuICAgIC13ZWJraXQtbGluZS1jbGFtcDogMjtcclxuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XHJcbiAgfVxyXG4gIC5wcmljZSB7XHJcbiAgICBsaW5lLWhlaWdodDogMTtcclxuICAgIHBhZGRpbmctdG9wOiA0cnB4O1xyXG4gICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gIH1cclxuICAuc21hbGwge1xyXG4gICAgZm9udC1zaXplOiA4MCU7XHJcbiAgfVxyXG59XHJcbi8vIOWKoOi9veaPkOekuuaWh+Wtl1xyXG4ubG9hZGluZy10ZXh0IHtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgZm9udC1zaXplOiAyOHJweDtcclxuICBjb2xvcjogIzY2NjtcclxuICBwYWRkaW5nOiAyMHJweCAwO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsImltcG9ydCB0eXBlIHsgWHR4R3Vlc3NJbnN0YW5jZSB9IGZyb20gJ0AvdHlwZXMvY29tcG9uZW50cydcclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLyoqXHJcbiAqIOeMnOS9oOWWnOasoue7hOWQiOW8j+WHveaVsFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHVzZUd1ZXNzTGlzdCA9ICgpID0+IHtcclxuICAvLyDojrflj5bnjJzkvaDllpzmrKLnu4Tku7blrp7kvotcclxuICBjb25zdCBndWVzc1JlZiA9IHJlZjxYdHhHdWVzc0luc3RhbmNlPigpXHJcblxyXG4gIC8vIOa7muWKqOinpuW6leS6i+S7tlxyXG4gIGNvbnN0IG9uU2Nyb2xsdG9sb3dlciA9ICgpID0+IHtcclxuICAgIGd1ZXNzUmVmLnZhbHVlPy5nZXRNb3JlKClcclxuICB9XHJcblxyXG4gIC8vIOi/lOWbniByZWYg5ZKM5LqL5Lu25aSE55CG5Ye95pWwXHJcbiAgcmV0dXJuIHtcclxuICAgIGd1ZXNzUmVmLFxyXG4gICAgb25TY3JvbGx0b2xvd2VyLFxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IENhcnRJdGVtIH0gZnJvbSAnQC90eXBlcy9jYXJ0J1xyXG5pbXBvcnQgeyBodHRwIH0gZnJvbSAnQC91dGlscy9odHRwJ1xyXG4vKipcclxuICog5Yqg5YWl6LSt54mp6L2mXHJcbiAqIEBwYXJhbSBkYXRhIOivt+axguS9k+WPguaVsFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHBvc3RNZW1iZXJDYXJ0QVBJID0gKGRhdGE6IHsgc2t1SWQ6IHN0cmluZzsgY291bnQ6IG51bWJlciB9KSA9PiB7XHJcbiAgcmV0dXJuIGh0dHAoe1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICcvbWVtYmVyL2NhcnQnLFxyXG4gICAgZGF0YSxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W6LSt54mp6L2m5YiX6KGoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0TWVtYmVyQ2FydEFQSSA9ICgpID0+IHtcclxuICByZXR1cm4gaHR0cDxDYXJ0SXRlbVtdPih7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiAnL21lbWJlci9jYXJ0JyxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog5Yig6ZmkL+a4heepuui0reeJqei9puWNleWTgVxyXG4gKiBAcGFyYW0gZGF0YSDor7fmsYLkvZPlj4LmlbAgaWRzIFNLVUlEIOmbhuWQiFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZU1lbWJlckNhcnRBUEkgPSAoZGF0YTogeyBpZHM6IHN0cmluZ1tdIH0pID0+IHtcclxuICByZXR1cm4gaHR0cCh7XHJcbiAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgdXJsOiAnL21lbWJlci9jYXJ0JyxcclxuICAgIGRhdGEsXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIOS/ruaUuei0reeJqei9puWNleWTgVxyXG4gKiBAcGFyYW0gc2t1SWQgU0tVSURcclxuICogQHBhcmFtIGRhdGEgc2VsZWN0ZWQg6YCJ5Lit54q25oCBIGNvdW50IOWVhuWTgeaVsOmHj1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHB1dE1lbWJlckNhcnRCeVNrdUlkQVBJID0gKFxyXG4gIHNrdUlkOiBzdHJpbmcsXHJcbiAgZGF0YTogeyBzZWxlY3RlZD86IGJvb2xlYW47IGNvdW50PzogbnVtYmVyIH0sXHJcbikgPT4ge1xyXG4gIHJldHVybiBodHRwKHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGAvbWVtYmVyL2NhcnQvJHtza3VJZH1gLFxyXG4gICAgZGF0YSxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog6LSt54mp6L2m5YWo6YCJL+WPlua2iOWFqOmAiVxyXG4gKiBAcGFyYW0gZGF0YSBzZWxlY3RlZCDmmK/lkKbpgInkuK1cclxuICovXHJcbmV4cG9ydCBjb25zdCBwdXRNZW1iZXJDYXJ0U2VsZWN0ZWRBUEkgPSAoZGF0YTogeyBzZWxlY3RlZDogYm9vbGVhbiB9KSA9PiB7XHJcbiAgcmV0dXJuIGh0dHAoe1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogJy9tZW1iZXIvY2FydC9zZWxlY3RlZCcsXHJcbiAgICBkYXRhLFxyXG4gIH0pXHJcbn1cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHR5cGUgeyBJbnB1dE51bWJlckJveEV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3ZrLWRhdGEtaW5wdXQtbnVtYmVyLWJveC92ay1kYXRhLWlucHV0LW51bWJlci1ib3gnXHJcbmltcG9ydCB7IHVzZUd1ZXNzTGlzdCB9IGZyb20gJ0AvY29tcG9zYWJsZXMnXHJcbmltcG9ydCB7XHJcbiAgZGVsZXRlTWVtYmVyQ2FydEFQSSxcclxuICBnZXRNZW1iZXJDYXJ0QVBJLFxyXG4gIHB1dE1lbWJlckNhcnRCeVNrdUlkQVBJLFxyXG4gIHB1dE1lbWJlckNhcnRTZWxlY3RlZEFQSSxcclxufSBmcm9tICdAL3NlcnZpY2VzL2NhcnQnXHJcbmltcG9ydCB7IHVzZU1lbWJlclN0b3JlIH0gZnJvbSAnQC9zdG9yZXMnXHJcbmltcG9ydCB0eXBlIHsgQ2FydEl0ZW0gfSBmcm9tICdAL3R5cGVzL2NhcnQnXHJcbmltcG9ydCB7IG9uU2hvdyB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyBjb21wdXRlZCwgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLy8g5piv5ZCm6YCC6YWN5bqV6YOo5a6J5YWo5Yy65Z+fXHJcbmRlZmluZVByb3BzPHtcclxuICBzYWZlQXJlYUluc2V0Qm90dG9tPzogYm9vbGVhblxyXG59PigpXHJcblxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuXHJcbi8vIOiOt+WPluS8muWRmFN0b3JlXHJcbmNvbnN0IG1lbWJlclN0b3JlID0gdXNlTWVtYmVyU3RvcmUoKVxyXG5cclxuLy8g6I635Y+W6LSt54mp6L2m5pWw5o2uXHJcbmNvbnN0IGNhcnRMaXN0ID0gcmVmPENhcnRJdGVtW10+KFtdKVxyXG4vLyDkvJjljJbotK3nianovabnqbrliJfooajnirbmgIHvvIzpu5jorqTlsZXnpLrliJfooahcclxuY29uc3Qgc2hvd0NhcnRMaXN0ID0gcmVmKHRydWUpXHJcbmNvbnN0IGdldE1lbWJlckNhcnREYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldE1lbWJlckNhcnRBUEkoKVxyXG4gIGNhcnRMaXN0LnZhbHVlID0gcmVzLnJlc3VsdFxyXG4gIHNob3dDYXJ0TGlzdC52YWx1ZSA9IHJlcy5yZXN1bHQubGVuZ3RoID4gMFxyXG59XHJcblxyXG4vLyDliJ3lp4vljJbosIPnlKg6IOmhtemdouaYvuekuuinpuWPkVxyXG5vblNob3coKCkgPT4ge1xyXG4gIGlmIChtZW1iZXJTdG9yZS5wcm9maWxlKSB7XHJcbiAgICBnZXRNZW1iZXJDYXJ0RGF0YSgpXHJcbiAgfVxyXG59KVxyXG5cclxuLy8g54K55Ye75Yig6Zmk5oyJ6ZKuXHJcbmNvbnN0IG9uRGVsZXRlQ2FydCA9IChza3VJZDogc3RyaW5nKSA9PiB7XHJcbiAgLy8g5by556qX5LqM5qyh56Gu6K6kXHJcbiAgdW5pLnNob3dNb2RhbCh7XHJcbiAgICBjb250ZW50OiAn5piv5ZCm5Yig6ZmkJyxcclxuICAgIGNvbmZpcm1Db2xvcjogJyMyN0JBOUInLFxyXG4gICAgc3VjY2VzczogYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgICAgICAvLyDlkI7nq6/liKDpmaTljZXlk4FcclxuICAgICAgICBhd2FpdCBkZWxldGVNZW1iZXJDYXJ0QVBJKHsgaWRzOiBbc2t1SWRdIH0pXHJcbiAgICAgICAgLy8g6YeN5paw6I635Y+W5YiX6KGoXHJcbiAgICAgICAgZ2V0TWVtYmVyQ2FydERhdGEoKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuXHJcbi8vIOS/ruaUueWVhuWTgeaVsOmHj1xyXG5jb25zdCBvbkNoYW5nZUNvdW50ID0gKGV2OiBJbnB1dE51bWJlckJveEV2ZW50KSA9PiB7XHJcbiAgcHV0TWVtYmVyQ2FydEJ5U2t1SWRBUEkoZXYuaW5kZXgsIHsgY291bnQ6IGV2LnZhbHVlIH0pXHJcbn1cclxuXHJcbi8vIOS/ruaUuemAieS4reeKtuaAgS3ljZXlk4Hkv67mlLlcclxuY29uc3Qgb25DaGFuZ2VTZWxlY3RlZCA9IChpdGVtOiBDYXJ0SXRlbSkgPT4ge1xyXG4gIC8vIOWJjeerr+aVsOaNruabtOaWsC3mmK/lkKbpgInkuK3lj5blj41cclxuICBpdGVtLnNlbGVjdGVkID0gIWl0ZW0uc2VsZWN0ZWRcclxuICAvLyDlkI7nq6/mlbDmja7mm7TmlrBcclxuICBwdXRNZW1iZXJDYXJ0QnlTa3VJZEFQSShpdGVtLnNrdUlkLCB7IHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkIH0pXHJcbn1cclxuXHJcbi8vIOiuoeeul+WFqOmAieeKtuaAgVxyXG5jb25zdCBpc1NlbGVjdGVkQWxsID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBjYXJ0TGlzdC52YWx1ZS5sZW5ndGggJiYgY2FydExpc3QudmFsdWUuZXZlcnkoKHYpID0+IHYuc2VsZWN0ZWQpXHJcbn0pXHJcblxyXG4vLyDkv67mlLnpgInkuK3nirbmgIEt5YWo6YCJ5L+u5pS5XHJcbmNvbnN0IG9uQ2hhbmdlU2VsZWN0ZWRBbGwgPSAoKSA9PiB7XHJcbiAgLy8g5YWo6YCJ54q25oCB5Y+W5Y+NXHJcbiAgY29uc3QgX2lzU2VsZWN0ZWRBbGwgPSAhaXNTZWxlY3RlZEFsbC52YWx1ZVxyXG4gIC8vIOWJjeerr+aVsOaNruabtOaWsFxyXG4gIGNhcnRMaXN0LnZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgIGl0ZW0uc2VsZWN0ZWQgPSBfaXNTZWxlY3RlZEFsbFxyXG4gIH0pXHJcbiAgLy8g5ZCO56uv5pWw5o2u5pu05pawXHJcbiAgcHV0TWVtYmVyQ2FydFNlbGVjdGVkQVBJKHsgc2VsZWN0ZWQ6IF9pc1NlbGVjdGVkQWxsIH0pXHJcbn1cclxuXHJcbi8vIOiuoeeul+mAieS4reWNleWTgeWIl+ihqFxyXG5jb25zdCBzZWxlY3RlZENhcnRMaXN0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBjYXJ0TGlzdC52YWx1ZS5maWx0ZXIoKHYpID0+IHYuc2VsZWN0ZWQpXHJcbn0pXHJcblxyXG4vLyDorqHnrpfpgInkuK3mgLvku7bmlbBcclxuY29uc3Qgc2VsZWN0ZWRDYXJ0TGlzdENvdW50ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBzZWxlY3RlZENhcnRMaXN0LnZhbHVlLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyBpdGVtLmNvdW50LCAwKVxyXG59KVxyXG5cclxuLy8g6K6h566X6YCJ5Lit5oC76YeR6aKdXHJcbmNvbnN0IHNlbGVjdGVkQ2FydExpc3RNb25leSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gc2VsZWN0ZWRDYXJ0TGlzdC52YWx1ZVxyXG4gICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyBpdGVtLmNvdW50ICogaXRlbS5ub3dQcmljZSwgMClcclxuICAgIC50b0ZpeGVkKDIpXHJcbn0pXHJcblxyXG4vLyDnu5PnrpfmjInpkq5cclxuY29uc3QgZ290b1BheW1lbnQgPSAoKSA9PiB7XHJcbiAgaWYgKHNlbGVjdGVkQ2FydExpc3RDb3VudC52YWx1ZSA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICBpY29uOiAnbm9uZScsXHJcbiAgICAgIHRpdGxlOiAn6K+36YCJ5oup5ZWG5ZOBJyxcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vIOi3s+i9rOWIsOe7k+eul+mhtVxyXG4gIHVuaS5uYXZpZ2F0ZVRvKHsgdXJsOiAnL3BhZ2VzT3JkZXIvY3JlYXRlL2NyZWF0ZScgfSlcclxufVxyXG5cclxuLy8g54yc5L2g5Zac5qyiXHJcbmNvbnN0IHsgZ3Vlc3NSZWYsIG9uU2Nyb2xsdG9sb3dlciB9ID0gdXNlR3Vlc3NMaXN0KClcclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHNjcm9sbC12aWV3IGVuYWJsZS1iYWNrLXRvLXRvcCBzY3JvbGwteSBjbGFzcz1cInNjcm9sbC12aWV3XCIgQHNjcm9sbHRvbG93ZXI9XCJvblNjcm9sbHRvbG93ZXJcIj5cclxuICAgIDwhLS0g5bey55m75b2VOiDmmL7npLrotK3nianovaYgLS0+XHJcbiAgICA8dGVtcGxhdGUgdi1pZj1cIm1lbWJlclN0b3JlLnByb2ZpbGVcIj5cclxuICAgICAgPCEtLSDotK3nianovabliJfooaggLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiY2FydC1saXN0XCIgdi1pZj1cInNob3dDYXJ0TGlzdFwiPlxyXG4gICAgICAgIDwhLS0g5LyY5oOg5o+Q56S6IC0tPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwidGlwc1wiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJsYWJlbFwiPua7oeWHjzwvdGV4dD5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiZGVzY1wiPua7oTHku7YsIOWNs+WPr+S6q+WPlznmipjkvJjmg6A8L3RleHQ+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwhLS0g5ruR5Yqo5pON5L2c5YiG5Yy6IC0tPlxyXG4gICAgICAgIDx1bmktc3dpcGUtYWN0aW9uPlxyXG4gICAgICAgICAgPCEtLSDmu5Hliqjmk43kvZzpobkgLS0+XHJcbiAgICAgICAgICA8dW5pLXN3aXBlLWFjdGlvbi1pdGVtIHYtZm9yPVwiaXRlbSBpbiBjYXJ0TGlzdFwiIDprZXk9XCJpdGVtLnNrdUlkXCIgY2xhc3M9XCJjYXJ0LXN3aXBlXCI+XHJcbiAgICAgICAgICAgIDwhLS0g5ZWG5ZOB5L+h5oGvIC0tPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cImdvb2RzXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSDpgInkuK3nirbmgIEgLS0+XHJcbiAgICAgICAgICAgICAgPHRleHRcclxuICAgICAgICAgICAgICAgIEB0YXA9XCJvbkNoYW5nZVNlbGVjdGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwieyBjaGVja2VkOiBpdGVtLnNlbGVjdGVkIH1cIlxyXG4gICAgICAgICAgICAgID48L3RleHQ+XHJcbiAgICAgICAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgICAgICAgOnVybD1cImAvcGFnZXMvZ29vZHMvZ29vZHM/aWQ9JHtpdGVtLmlkfWBcIlxyXG4gICAgICAgICAgICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2aWdhdG9yXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW1hZ2UgbW9kZT1cImFzcGVjdEZpbGxcIiBjbGFzcz1cInBpY3R1cmVcIiA6c3JjPVwiaXRlbS5waWN0dXJlXCI+PC9pbWFnZT5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXNcIj57eyBpdGVtLm5hbWUgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYXR0cnNUZXh0IGVsbGlwc2lzXCI+e3sgaXRlbS5hdHRyc1RleHQgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj57eyBpdGVtLm5vd1ByaWNlIH19PC92aWV3PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgICAgIDwhLS0g5ZWG5ZOB5pWw6YePIC0tPlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiY291bnRcIj5cclxuICAgICAgICAgICAgICAgIDx2ay1kYXRhLWlucHV0LW51bWJlci1ib3hcclxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cIml0ZW0uY291bnRcIlxyXG4gICAgICAgICAgICAgICAgICA6bWluPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgIDptYXg9XCJpdGVtLnN0b2NrXCJcclxuICAgICAgICAgICAgICAgICAgOmluZGV4PVwiaXRlbS5za3VJZFwiXHJcbiAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9XCJvbkNoYW5nZUNvdW50XCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwhLS0g5Y+z5L6n5Yig6Zmk5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgI3JpZ2h0PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiY2FydC1zd2lwZS1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBAdGFwPVwib25EZWxldGVDYXJ0KGl0ZW0uc2t1SWQpXCIgY2xhc3M9XCJidXR0b24gZGVsZXRlLWJ1dHRvblwiPuWIoOmZpDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdW5pLXN3aXBlLWFjdGlvbi1pdGVtPlxyXG4gICAgICAgIDwvdW5pLXN3aXBlLWFjdGlvbj5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8IS0tIOi0reeJqei9puepuueKtuaAgSAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjYXJ0LWJsYW5rXCIgdi1lbHNlPlxyXG4gICAgICAgIDxpbWFnZSBzcmM9XCIvc3RhdGljL2ltYWdlcy9ibGFua19jYXJ0LnBuZ1wiIGNsYXNzPVwiaW1hZ2VcIiAvPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPui0reeJqei9pui/mOaYr+epuueahO+8jOW/q+adpeaMkemAieWlvei0p+WQpzwvdGV4dD5cclxuICAgICAgICA8bmF2aWdhdG9yIHVybD1cIi9wYWdlcy9pbmRleC9pbmRleFwiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiPuWOu+mmlumhteeci+ecizwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDwhLS0g5ZC45bqV5bel5YW35qCPIC0tPlxyXG4gICAgICA8dmlld1xyXG4gICAgICAgIHYtaWY9XCJzaG93Q2FydExpc3RcIlxyXG4gICAgICAgIGNsYXNzPVwidG9vbGJhclwiXHJcbiAgICAgICAgOnN0eWxlPVwieyBwYWRkaW5nQm90dG9tOiBzYWZlQXJlYUluc2V0Qm90dG9tID8gc2FmZUFyZWFJbnNldHM/LmJvdHRvbSArICdweCcgOiAwIH1cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHRleHQgQHRhcD1cIm9uQ2hhbmdlU2VsZWN0ZWRBbGxcIiBjbGFzcz1cImFsbFwiIDpjbGFzcz1cInsgY2hlY2tlZDogaXNTZWxlY3RlZEFsbCB9XCI+5YWo6YCJPC90ZXh0PlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPuWQiOiuoTo8L3RleHQ+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJhbW91bnRcIj57eyBzZWxlY3RlZENhcnRMaXN0TW9uZXkgfX08L3RleHQ+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24tZ3JvdW5wXCI+XHJcbiAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICBAdGFwPVwiZ290b1BheW1lbnRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBwYXltZW50LWJ1dHRvblwiXHJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgZGlzYWJsZWQ6IHNlbGVjdGVkQ2FydExpc3RDb3VudCA9PT0gMCB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5Y6757uT566XKHt7IHNlbGVjdGVkQ2FydExpc3RDb3VudCB9fSlcclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8IS0tIOacqueZu+W9lTog5o+Q56S655m75b2VIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJsb2dpbi1ibGFua1wiIHYtZWxzZT5cclxuICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+55m75b2V5ZCO5Y+v5p+l55yL6LSt54mp6L2m5Lit55qE5ZWG5ZOBPC90ZXh0PlxyXG4gICAgICA8bmF2aWdhdG9yIHVybD1cIi9wYWdlcy9sb2dpbi9sb2dpblwiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIj7ljrvnmbvlvZU8L2J1dHRvbj5cclxuICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tIOeMnOS9oOWWnOasoiAtLT5cclxuICAgIDxYdHhHdWVzcyByZWY9XCJndWVzc1JlZlwiIC8+XHJcbiAgICA8IS0tIOW6lemDqOWNoOS9jeepuuebkuWtkCAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwidG9vbGJhci1oZWlnaHRcIj48L3ZpZXc+XHJcbiAgPC9zY3JvbGwtdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLy8g5qC55YWD57SgXHJcbjpob3N0IHtcclxuICBoZWlnaHQ6IDEwMHZoO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjg7XHJcbn1cclxuXHJcbi8vIOa7muWKqOWuueWZqFxyXG4uc2Nyb2xsLXZpZXcge1xyXG4gIGZsZXg6IDE7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmODtcclxufVxyXG5cclxuLy8g6LSt54mp6L2m5YiX6KGoXHJcbi5jYXJ0LWxpc3Qge1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcblxyXG4gIC8vIOS8mOaDoOaPkOekulxyXG4gIC50aXBzIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICBtYXJnaW46IDMwcnB4IDEwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG5cclxuICAgIC5sYWJlbCB7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICBwYWRkaW5nOiA3cnB4IDE1cnB4IDVycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMTBycHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDotK3nianovabllYblk4FcclxuICAuZ29vZHMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIHBhZGRpbmc6IDIwcnB4IDIwcnB4IDIwcnB4IDgwcnB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuICAgIC5uYXZpZ2F0b3Ige1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgfVxyXG5cclxuICAgIC5jaGVja2JveCB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICBsZWZ0OiAwO1xyXG5cclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIHdpZHRoOiA4MHJweDtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG5cclxuICAgICAgJjo6YmVmb3JlIHtcclxuICAgICAgICBjb250ZW50OiAnXFxlNmNkJztcclxuICAgICAgICBmb250LWZhbWlseTogJ2VyYWJiaXQnICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgZm9udC1zaXplOiA0MHJweDtcclxuICAgICAgICBjb2xvcjogIzQ0NDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5jaGVja2VkOjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6ICdcXGU2Y2MnO1xyXG4gICAgICAgIGNvbG9yOiAjMjdiYTliO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLnBpY3R1cmUge1xyXG4gICAgICB3aWR0aDogMTcwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDE3MHJweDtcclxuICAgIH1cclxuXHJcbiAgICAubWV0YSB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDIwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5uYW1lIHtcclxuICAgICAgaGVpZ2h0OiA3MnJweDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmF0dHJzVGV4dCB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjg7XHJcbiAgICAgIHBhZGRpbmc6IDAgMTVycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRycHg7XHJcbiAgICAgIGNvbG9yOiAjODg4O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y4O1xyXG4gICAgfVxyXG5cclxuICAgIC5wcmljZSB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogIzQ0NDtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMnJweDtcclxuICAgICAgY29sb3I6ICNjZjQ0NDQ7XHJcblxyXG4gICAgICAmOjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6ICfvv6UnO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogODAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5ZWG5ZOB5pWw6YePXHJcbiAgICAuY291bnQge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogMjBycHg7XHJcbiAgICAgIHJpZ2h0OiA1cnB4O1xyXG5cclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICB3aWR0aDogMjIwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDQ4cnB4O1xyXG5cclxuICAgICAgLnRleHQge1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMzJycHg7XHJcbiAgICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5pbnB1dCB7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cnB4O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmNjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmNhcnQtc3dpcGUge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBtYXJnaW46IDIwcnB4IDA7XHJcbiAgfVxyXG5cclxuICAuY2FydC1zd2lwZS1yaWdodCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG5cclxuICAgIC5idXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDUwcHg7XHJcbiAgICAgIHBhZGRpbmc6IDZweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmRlbGV0ZS1idXR0b24ge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2Y0NDQ0O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8g56m654q25oCBXHJcbi5jYXJ0LWJsYW5rLFxyXG4ubG9naW4tYmxhbmsge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogNjB2aDtcclxuICAuaW1hZ2Uge1xyXG4gICAgd2lkdGg6IDQwMHJweDtcclxuICAgIGhlaWdodDogMjgxcnB4O1xyXG4gIH1cclxuICAudGV4dCB7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICBtYXJnaW46IDIwcnB4IDA7XHJcbiAgfVxyXG4gIC5idXR0b24ge1xyXG4gICAgd2lkdGg6IDI0MHJweCAhaW1wb3J0YW50O1xyXG4gICAgaGVpZ2h0OiA2MHJweDtcclxuICAgIGxpbmUtaGVpZ2h0OiA2MHJweDtcclxuICAgIG1hcmdpbi10b3A6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDYwcnB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG4gIH1cclxufVxyXG5cclxuLy8g5ZC45bqV5bel5YW35qCPXHJcbi50b29sYmFyIHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgbGVmdDogMDtcclxuICByaWdodDogMDtcclxuICBib3R0b206IGNhbGModmFyKC0td2luZG93LWJvdHRvbSkpO1xyXG4gIHotaW5kZXg6IDE7XHJcblxyXG4gIGhlaWdodDogMTAwcnB4O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGJvcmRlci10b3A6IDFycHggc29saWQgI2VkZWRlZDtcclxuICBib3JkZXItYm90dG9tOiAxcnB4IHNvbGlkICNlZGVkZWQ7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuXHJcbiAgLmFsbCB7XHJcbiAgICBtYXJnaW4tbGVmdDogMjVycHg7XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIH1cclxuXHJcbiAgLmFsbDo6YmVmb3JlIHtcclxuICAgIGZvbnQtZmFtaWx5OiAnZXJhYmJpdCcgIWltcG9ydGFudDtcclxuICAgIGNvbnRlbnQ6ICdcXGU2Y2QnO1xyXG4gICAgZm9udC1zaXplOiA0MHJweDtcclxuICAgIG1hcmdpbi1yaWdodDogOHJweDtcclxuICB9XHJcblxyXG4gIC5jaGVja2VkOjpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ1xcZTZjYyc7XHJcbiAgICBjb2xvcjogIzI3YmE5YjtcclxuICB9XHJcblxyXG4gIC50ZXh0IHtcclxuICAgIG1hcmdpbi1yaWdodDogOHJweDtcclxuICAgIG1hcmdpbi1sZWZ0OiAzMnJweDtcclxuICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgZm9udC1zaXplOiAxNHB4O1xyXG4gIH1cclxuXHJcbiAgLmFtb3VudCB7XHJcbiAgICBmb250LXNpemU6IDIwcHg7XHJcbiAgICBjb2xvcjogI2NmNDQ0NDtcclxuXHJcbiAgICAuZGVjaW1hbCB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcclxuICAgIH1cclxuXHJcbiAgICAmOjpiZWZvcmUge1xyXG4gICAgICBjb250ZW50OiAn77+lJztcclxuICAgICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmJ1dHRvbi1ncm91bnAge1xyXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbGluZS1oZWlnaHQ6IDcycnB4O1xyXG4gICAgZm9udC1zaXplOiAxM3B4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcblxyXG4gICAgLmJ1dHRvbiB7XHJcbiAgICAgIHdpZHRoOiAyNDBycHg7XHJcbiAgICAgIG1hcmdpbjogMCAxMHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNzJycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLnBheW1lbnQtYnV0dG9uIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuXHJcbiAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4vLyDlupXpg6jljaDkvY3nqbrnm5LlrZBcclxuLnRvb2xiYXItaGVpZ2h0IHtcclxuICBoZWlnaHQ6IDEwMHJweDtcclxufVxyXG48L3N0eWxlPlxyXG4iLCJleHBvcnQgZGVmYXVsdCBcIi9zdGF0aWMvaW1hZ2VzL2JsYW5rX2NhcnQucG5nXCIiLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgdHlwZSB7IElucHV0TnVtYmVyQm94RXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmstZGF0YS1pbnB1dC1udW1iZXItYm94L3ZrLWRhdGEtaW5wdXQtbnVtYmVyLWJveCdcclxuaW1wb3J0IHsgdXNlR3Vlc3NMaXN0IH0gZnJvbSAnQC9jb21wb3NhYmxlcydcclxuaW1wb3J0IHtcclxuICBkZWxldGVNZW1iZXJDYXJ0QVBJLFxyXG4gIGdldE1lbWJlckNhcnRBUEksXHJcbiAgcHV0TWVtYmVyQ2FydEJ5U2t1SWRBUEksXHJcbiAgcHV0TWVtYmVyQ2FydFNlbGVjdGVkQVBJLFxyXG59IGZyb20gJ0Avc2VydmljZXMvY2FydCdcclxuaW1wb3J0IHsgdXNlTWVtYmVyU3RvcmUgfSBmcm9tICdAL3N0b3JlcydcclxuaW1wb3J0IHR5cGUgeyBDYXJ0SXRlbSB9IGZyb20gJ0AvdHlwZXMvY2FydCdcclxuaW1wb3J0IHsgb25TaG93IH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IGNvbXB1dGVkLCByZWYgfSBmcm9tICd2dWUnXHJcblxyXG4vLyDmmK/lkKbpgILphY3lupXpg6jlronlhajljLrln59cclxuZGVmaW5lUHJvcHM8e1xyXG4gIHNhZmVBcmVhSW5zZXRCb3R0b20/OiBib29sZWFuXHJcbn0+KClcclxuXHJcbi8vIOiOt+WPluWxj+W5lei+ueeVjOWIsOWuieWFqOWMuuWfn+i3neemu1xyXG5jb25zdCB7IHNhZmVBcmVhSW5zZXRzIH0gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKVxyXG5cclxuLy8g6I635Y+W5Lya5ZGYU3RvcmVcclxuY29uc3QgbWVtYmVyU3RvcmUgPSB1c2VNZW1iZXJTdG9yZSgpXHJcblxyXG4vLyDojrflj5botK3nianovabmlbDmja5cclxuY29uc3QgY2FydExpc3QgPSByZWY8Q2FydEl0ZW1bXT4oW10pXHJcbi8vIOS8mOWMlui0reeJqei9puepuuWIl+ihqOeKtuaAge+8jOm7mOiupOWxleekuuWIl+ihqFxyXG5jb25zdCBzaG93Q2FydExpc3QgPSByZWYodHJ1ZSlcclxuY29uc3QgZ2V0TWVtYmVyQ2FydERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0TWVtYmVyQ2FydEFQSSgpXHJcbiAgY2FydExpc3QudmFsdWUgPSByZXMucmVzdWx0XHJcbiAgc2hvd0NhcnRMaXN0LnZhbHVlID0gcmVzLnJlc3VsdC5sZW5ndGggPiAwXHJcbn1cclxuXHJcbi8vIOWIneWni+WMluiwg+eUqDog6aG16Z2i5pi+56S66Kem5Y+RXHJcbm9uU2hvdygoKSA9PiB7XHJcbiAgaWYgKG1lbWJlclN0b3JlLnByb2ZpbGUpIHtcclxuICAgIGdldE1lbWJlckNhcnREYXRhKClcclxuICB9XHJcbn0pXHJcblxyXG4vLyDngrnlh7vliKDpmaTmjInpkq5cclxuY29uc3Qgb25EZWxldGVDYXJ0ID0gKHNrdUlkOiBzdHJpbmcpID0+IHtcclxuICAvLyDlvLnnqpfkuozmrKHnoa7orqRcclxuICB1bmkuc2hvd01vZGFsKHtcclxuICAgIGNvbnRlbnQ6ICfmmK/lkKbliKDpmaQnLFxyXG4gICAgY29uZmlybUNvbG9yOiAnIzI3QkE5QicsXHJcbiAgICBzdWNjZXNzOiBhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMuY29uZmlybSkge1xyXG4gICAgICAgIC8vIOWQjuerr+WIoOmZpOWNleWTgVxyXG4gICAgICAgIGF3YWl0IGRlbGV0ZU1lbWJlckNhcnRBUEkoeyBpZHM6IFtza3VJZF0gfSlcclxuICAgICAgICAvLyDph43mlrDojrflj5bliJfooahcclxuICAgICAgICBnZXRNZW1iZXJDYXJ0RGF0YSgpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5cclxuLy8g5L+u5pS55ZWG5ZOB5pWw6YePXHJcbmNvbnN0IG9uQ2hhbmdlQ291bnQgPSAoZXY6IElucHV0TnVtYmVyQm94RXZlbnQpID0+IHtcclxuICBwdXRNZW1iZXJDYXJ0QnlTa3VJZEFQSShldi5pbmRleCwgeyBjb3VudDogZXYudmFsdWUgfSlcclxufVxyXG5cclxuLy8g5L+u5pS56YCJ5Lit54q25oCBLeWNleWTgeS/ruaUuVxyXG5jb25zdCBvbkNoYW5nZVNlbGVjdGVkID0gKGl0ZW06IENhcnRJdGVtKSA9PiB7XHJcbiAgLy8g5YmN56uv5pWw5o2u5pu05pawLeaYr+WQpumAieS4reWPluWPjVxyXG4gIGl0ZW0uc2VsZWN0ZWQgPSAhaXRlbS5zZWxlY3RlZFxyXG4gIC8vIOWQjuerr+aVsOaNruabtOaWsFxyXG4gIHB1dE1lbWJlckNhcnRCeVNrdUlkQVBJKGl0ZW0uc2t1SWQsIHsgc2VsZWN0ZWQ6IGl0ZW0uc2VsZWN0ZWQgfSlcclxufVxyXG5cclxuLy8g6K6h566X5YWo6YCJ54q25oCBXHJcbmNvbnN0IGlzU2VsZWN0ZWRBbGwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIGNhcnRMaXN0LnZhbHVlLmxlbmd0aCAmJiBjYXJ0TGlzdC52YWx1ZS5ldmVyeSgodikgPT4gdi5zZWxlY3RlZClcclxufSlcclxuXHJcbi8vIOS/ruaUuemAieS4reeKtuaAgS3lhajpgInkv67mlLlcclxuY29uc3Qgb25DaGFuZ2VTZWxlY3RlZEFsbCA9ICgpID0+IHtcclxuICAvLyDlhajpgInnirbmgIHlj5blj41cclxuICBjb25zdCBfaXNTZWxlY3RlZEFsbCA9ICFpc1NlbGVjdGVkQWxsLnZhbHVlXHJcbiAgLy8g5YmN56uv5pWw5o2u5pu05pawXHJcbiAgY2FydExpc3QudmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgaXRlbS5zZWxlY3RlZCA9IF9pc1NlbGVjdGVkQWxsXHJcbiAgfSlcclxuICAvLyDlkI7nq6/mlbDmja7mm7TmlrBcclxuICBwdXRNZW1iZXJDYXJ0U2VsZWN0ZWRBUEkoeyBzZWxlY3RlZDogX2lzU2VsZWN0ZWRBbGwgfSlcclxufVxyXG5cclxuLy8g6K6h566X6YCJ5Lit5Y2V5ZOB5YiX6KGoXHJcbmNvbnN0IHNlbGVjdGVkQ2FydExpc3QgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIGNhcnRMaXN0LnZhbHVlLmZpbHRlcigodikgPT4gdi5zZWxlY3RlZClcclxufSlcclxuXHJcbi8vIOiuoeeul+mAieS4reaAu+S7tuaVsFxyXG5jb25zdCBzZWxlY3RlZENhcnRMaXN0Q291bnQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIHNlbGVjdGVkQ2FydExpc3QudmFsdWUucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGl0ZW0uY291bnQsIDApXHJcbn0pXHJcblxyXG4vLyDorqHnrpfpgInkuK3mgLvph5Hpop1cclxuY29uc3Qgc2VsZWN0ZWRDYXJ0TGlzdE1vbmV5ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBzZWxlY3RlZENhcnRMaXN0LnZhbHVlXHJcbiAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGl0ZW0uY291bnQgKiBpdGVtLm5vd1ByaWNlLCAwKVxyXG4gICAgLnRvRml4ZWQoMilcclxufSlcclxuXHJcbi8vIOe7k+eul+aMiemSrlxyXG5jb25zdCBnb3RvUGF5bWVudCA9ICgpID0+IHtcclxuICBpZiAoc2VsZWN0ZWRDYXJ0TGlzdENvdW50LnZhbHVlID09PSAwKSB7XHJcbiAgICByZXR1cm4gdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgIGljb246ICdub25lJyxcclxuICAgICAgdGl0bGU6ICfor7fpgInmi6nllYblk4EnLFxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8g6Lez6L2s5Yiw57uT566X6aG1XHJcbiAgdW5pLm5hdmlnYXRlVG8oeyB1cmw6ICcvcGFnZXNPcmRlci9jcmVhdGUvY3JlYXRlJyB9KVxyXG59XHJcblxyXG4vLyDnjJzkvaDllpzmrKJcclxuY29uc3QgeyBndWVzc1JlZiwgb25TY3JvbGx0b2xvd2VyIH0gPSB1c2VHdWVzc0xpc3QoKVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIHNjcm9sbC15IGNsYXNzPVwic2Nyb2xsLXZpZXdcIiBAc2Nyb2xsdG9sb3dlcj1cIm9uU2Nyb2xsdG9sb3dlclwiPlxyXG4gICAgPCEtLSDlt7LnmbvlvZU6IOaYvuekuui0reeJqei9piAtLT5cclxuICAgIDx0ZW1wbGF0ZSB2LWlmPVwibWVtYmVyU3RvcmUucHJvZmlsZVwiPlxyXG4gICAgICA8IS0tIOi0reeJqei9puWIl+ihqCAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjYXJ0LWxpc3RcIiB2LWlmPVwic2hvd0NhcnRMaXN0XCI+XHJcbiAgICAgICAgPCEtLSDkvJjmg6Dmj5DnpLogLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXBzXCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+5ruh5YePPC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJkZXNjXCI+5ruhMeS7tiwg5Y2z5Y+v5Lqr5Y+XOeaKmOS8mOaDoDwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPCEtLSDmu5Hliqjmk43kvZzliIbljLogLS0+XHJcbiAgICAgICAgPHVuaS1zd2lwZS1hY3Rpb24+XHJcbiAgICAgICAgICA8IS0tIOa7keWKqOaTjeS9nOmhuSAtLT5cclxuICAgICAgICAgIDx1bmktc3dpcGUtYWN0aW9uLWl0ZW0gdi1mb3I9XCJpdGVtIGluIGNhcnRMaXN0XCIgOmtleT1cIml0ZW0uc2t1SWRcIiBjbGFzcz1cImNhcnQtc3dpcGVcIj5cclxuICAgICAgICAgICAgPCEtLSDllYblk4Hkv6Hmga8gLS0+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZ29vZHNcIj5cclxuICAgICAgICAgICAgICA8IS0tIOmAieS4reeKtuaAgSAtLT5cclxuICAgICAgICAgICAgICA8dGV4dFxyXG4gICAgICAgICAgICAgICAgQHRhcD1cIm9uQ2hhbmdlU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGNoZWNrZWQ6IGl0ZW0uc2VsZWN0ZWQgfVwiXHJcbiAgICAgICAgICAgICAgPjwvdGV4dD5cclxuICAgICAgICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICAgICAgICA6dXJsPVwiYC9wYWdlcy9nb29kcy9nb29kcz9pZD0ke2l0ZW0uaWR9YFwiXHJcbiAgICAgICAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0b3JcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpbWFnZSBtb2RlPVwiYXNwZWN0RmlsbFwiIGNsYXNzPVwicGljdHVyZVwiIDpzcmM9XCJpdGVtLnBpY3R1cmVcIj48L2ltYWdlPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJtZXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwibmFtZSBlbGxpcHNpc1wiPnt7IGl0ZW0ubmFtZSB9fTwvdmlldz5cclxuICAgICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJhdHRyc1RleHQgZWxsaXBzaXNcIj57eyBpdGVtLmF0dHJzVGV4dCB9fTwvdmlldz5cclxuICAgICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZVwiPnt7IGl0ZW0ubm93UHJpY2UgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICAgICAgPCEtLSDllYblk4HmlbDph48gLS0+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJjb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgPHZrLWRhdGEtaW5wdXQtbnVtYmVyLWJveFxyXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaXRlbS5jb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgIDptaW49XCIxXCJcclxuICAgICAgICAgICAgICAgICAgOm1heD1cIml0ZW0uc3RvY2tcIlxyXG4gICAgICAgICAgICAgICAgICA6aW5kZXg9XCJpdGVtLnNrdUlkXCJcclxuICAgICAgICAgICAgICAgICAgQGNoYW5nZT1cIm9uQ2hhbmdlQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPCEtLSDlj7PkvqfliKDpmaTmjInpkq4gLS0+XHJcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSAjcmlnaHQ+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJjYXJ0LXN3aXBlLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIEB0YXA9XCJvbkRlbGV0ZUNhcnQoaXRlbS5za3VJZClcIiBjbGFzcz1cImJ1dHRvbiBkZWxldGUtYnV0dG9uXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgPC91bmktc3dpcGUtYWN0aW9uLWl0ZW0+XHJcbiAgICAgICAgPC91bmktc3dpcGUtYWN0aW9uPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDwhLS0g6LSt54mp6L2m56m654q25oCBIC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cImNhcnQtYmxhbmtcIiB2LWVsc2U+XHJcbiAgICAgICAgPGltYWdlIHNyYz1cIi9zdGF0aWMvaW1hZ2VzL2JsYW5rX2NhcnQucG5nXCIgY2xhc3M9XCJpbWFnZVwiIC8+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+6LSt54mp6L2m6L+Y5piv56m655qE77yM5b+r5p2l5oyR6YCJ5aW96LSn5ZCnPC90ZXh0PlxyXG4gICAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzL2luZGV4L2luZGV4XCIgaG92ZXItY2xhc3M9XCJub25lXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCI+5Y676aaW6aG155yL55yLPC9idXR0b24+XHJcbiAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPCEtLSDlkLjlupXlt6XlhbfmoI8gLS0+XHJcbiAgICAgIDx2aWV3XHJcbiAgICAgICAgdi1pZj1cInNob3dDYXJ0TGlzdFwiXHJcbiAgICAgICAgY2xhc3M9XCJ0b29sYmFyXCJcclxuICAgICAgICA6c3R5bGU9XCJ7IHBhZGRpbmdCb3R0b206IHNhZmVBcmVhSW5zZXRCb3R0b20gPyBzYWZlQXJlYUluc2V0cz8uYm90dG9tICsgJ3B4JyA6IDAgfVwiXHJcbiAgICAgID5cclxuICAgICAgICA8dGV4dCBAdGFwPVwib25DaGFuZ2VTZWxlY3RlZEFsbFwiIGNsYXNzPVwiYWxsXCIgOmNsYXNzPVwieyBjaGVja2VkOiBpc1NlbGVjdGVkQWxsIH1cIj7lhajpgIk8L3RleHQ+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+5ZCI6K6hOjwvdGV4dD5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImFtb3VudFwiPnt7IHNlbGVjdGVkQ2FydExpc3RNb25leSB9fTwvdGV4dD5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbi1ncm91bnBcIj5cclxuICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgIEB0YXA9XCJnb3RvUGF5bWVudFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHBheW1lbnQtYnV0dG9uXCJcclxuICAgICAgICAgICAgOmNsYXNzPVwieyBkaXNhYmxlZDogc2VsZWN0ZWRDYXJ0TGlzdENvdW50ID09PSAwIH1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICDljrvnu5Pnrpcoe3sgc2VsZWN0ZWRDYXJ0TGlzdENvdW50IH19KVxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICAgIDwhLS0g5pyq55m75b2VOiDmj5DnpLrnmbvlvZUgLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cImxvZ2luLWJsYW5rXCIgdi1lbHNlPlxyXG4gICAgICA8dGV4dCBjbGFzcz1cInRleHRcIj7nmbvlvZXlkI7lj6/mn6XnnIvotK3nianovabkuK3nmoTllYblk4E8L3RleHQ+XHJcbiAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzL2xvZ2luL2xvZ2luXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiPuWOu+eZu+W9lTwvYnV0dG9uPlxyXG4gICAgICA8L25hdmlnYXRvcj5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g54yc5L2g5Zac5qyiIC0tPlxyXG4gICAgPFh0eEd1ZXNzIHJlZj1cImd1ZXNzUmVmXCIgLz5cclxuICAgIDwhLS0g5bqV6YOo5Y2g5L2N56m655uS5a2QIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0b29sYmFyLWhlaWdodFwiPjwvdmlldz5cclxuICA8L3Njcm9sbC12aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbi8vIOagueWFg+e0oFxyXG46aG9zdCB7XHJcbiAgaGVpZ2h0OiAxMDB2aDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y4O1xyXG59XHJcblxyXG4vLyDmu5rliqjlrrnlmahcclxuLnNjcm9sbC12aWV3IHtcclxuICBmbGV4OiAxO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjg7XHJcbn1cclxuXHJcbi8vIOi0reeJqei9puWIl+ihqFxyXG4uY2FydC1saXN0IHtcclxuICBwYWRkaW5nOiAwIDIwcnB4O1xyXG5cclxuICAvLyDkvJjmg6Dmj5DnpLpcclxuICAudGlwcyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgbWFyZ2luOiAzMHJweCAxMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICBjb2xvcjogIzY2NjtcclxuXHJcbiAgICAubGFiZWwge1xyXG4gICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgcGFkZGluZzogN3JweCAxNXJweCA1cnB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA0cnB4O1xyXG4gICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IDEwcnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6LSt54mp6L2m5ZWG5ZOBXHJcbiAgLmdvb2RzIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBwYWRkaW5nOiAyMHJweCAyMHJweCAyMHJweCA4MHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHJcbiAgICAubmF2aWdhdG9yIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgIH1cclxuXHJcbiAgICAuY2hlY2tib3gge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgbGVmdDogMDtcclxuXHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICB3aWR0aDogODBycHg7XHJcbiAgICAgIGhlaWdodDogMTAwJTtcclxuXHJcbiAgICAgICY6OmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogJ1xcZTZjZCc7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6ICdlcmFiYml0JyAhaW1wb3J0YW50O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogNDBycHg7XHJcbiAgICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuY2hlY2tlZDo6YmVmb3JlIHtcclxuICAgICAgICBjb250ZW50OiAnXFxlNmNjJztcclxuICAgICAgICBjb2xvcjogIzI3YmE5YjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5waWN0dXJlIHtcclxuICAgICAgd2lkdGg6IDE3MHJweDtcclxuICAgICAgaGVpZ2h0OiAxNzBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLm1ldGEge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAubmFtZSB7XHJcbiAgICAgIGhlaWdodDogNzJycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgfVxyXG5cclxuICAgIC5hdHRyc1RleHQge1xyXG4gICAgICBsaW5lLWhlaWdodDogMS44O1xyXG4gICAgICBwYWRkaW5nOiAwIDE1cnB4O1xyXG4gICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA0cnB4O1xyXG4gICAgICBjb2xvcjogIzg4ODtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmODtcclxuICAgIH1cclxuXHJcbiAgICAucHJpY2Uge1xyXG4gICAgICBsaW5lLWhlaWdodDogMTtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDJycHg7XHJcbiAgICAgIGNvbG9yOiAjY2Y0NDQ0O1xyXG5cclxuICAgICAgJjo6YmVmb3JlIHtcclxuICAgICAgICBjb250ZW50OiAn77+lJztcclxuICAgICAgICBmb250LXNpemU6IDgwJTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOWVhuWTgeaVsOmHj1xyXG4gICAgLmNvdW50IHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBib3R0b206IDIwcnB4O1xyXG4gICAgICByaWdodDogNXJweDtcclxuXHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDIyMHJweDtcclxuICAgICAgaGVpZ2h0OiA0OHJweDtcclxuXHJcbiAgICAgIC50ZXh0IHtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgcGFkZGluZzogMCAyMHJweDtcclxuICAgICAgICBmb250LXNpemU6IDMycnB4O1xyXG4gICAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuaW5wdXQge1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHJweDtcclxuICAgICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNmY2ZjY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5jYXJ0LXN3aXBlIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgbWFyZ2luOiAyMHJweCAwO1xyXG4gIH1cclxuXHJcbiAgLmNhcnQtc3dpcGUtcmlnaHQge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGhlaWdodDogMTAwJTtcclxuXHJcbiAgICAuYnV0dG9uIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIHdpZHRoOiA1MHB4O1xyXG4gICAgICBwYWRkaW5nOiA2cHg7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5kZWxldGUtYnV0dG9uIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NmNDQ0NDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8vIOepuueKtuaAgVxyXG4uY2FydC1ibGFuayxcclxuLmxvZ2luLWJsYW5rIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBoZWlnaHQ6IDYwdmg7XHJcbiAgLmltYWdlIHtcclxuICAgIHdpZHRoOiA0MDBycHg7XHJcbiAgICBoZWlnaHQ6IDI4MXJweDtcclxuICB9XHJcbiAgLnRleHQge1xyXG4gICAgY29sb3I6ICM0NDQ7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgbWFyZ2luOiAyMHJweCAwO1xyXG4gIH1cclxuICAuYnV0dG9uIHtcclxuICAgIHdpZHRoOiAyNDBycHggIWltcG9ydGFudDtcclxuICAgIGhlaWdodDogNjBycHg7XHJcbiAgICBsaW5lLWhlaWdodDogNjBycHg7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiA2MHJweDtcclxuICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuICB9XHJcbn1cclxuXHJcbi8vIOWQuOW6leW3peWFt+agj1xyXG4udG9vbGJhciB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgYm90dG9tOiBjYWxjKHZhcigtLXdpbmRvdy1ib3R0b20pKTtcclxuICB6LWluZGV4OiAxO1xyXG5cclxuICBoZWlnaHQ6IDEwMHJweDtcclxuICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBib3JkZXItdG9wOiAxcnB4IHNvbGlkICNlZGVkZWQ7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZWRlZGVkO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcblxyXG4gIC5hbGwge1xyXG4gICAgbWFyZ2luLWxlZnQ6IDI1cnB4O1xyXG4gICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgY29sb3I6ICM0NDQ7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC5hbGw6OmJlZm9yZSB7XHJcbiAgICBmb250LWZhbWlseTogJ2VyYWJiaXQnICFpbXBvcnRhbnQ7XHJcbiAgICBjb250ZW50OiAnXFxlNmNkJztcclxuICAgIGZvbnQtc2l6ZTogNDBycHg7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDhycHg7XHJcbiAgfVxyXG5cclxuICAuY2hlY2tlZDo6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdcXGU2Y2MnO1xyXG4gICAgY29sb3I6ICMyN2JhOWI7XHJcbiAgfVxyXG5cclxuICAudGV4dCB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDhycHg7XHJcbiAgICBtYXJnaW4tbGVmdDogMzJycHg7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICB9XHJcblxyXG4gIC5hbW91bnQge1xyXG4gICAgZm9udC1zaXplOiAyMHB4O1xyXG4gICAgY29sb3I6ICNjZjQ0NDQ7XHJcblxyXG4gICAgLmRlY2ltYWwge1xyXG4gICAgICBmb250LXNpemU6IDEycHg7XHJcbiAgICB9XHJcblxyXG4gICAgJjo6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJ++/pSc7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5idXR0b24tZ3JvdW5wIHtcclxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGxpbmUtaGVpZ2h0OiA3MnJweDtcclxuICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgIGNvbG9yOiAjZmZmO1xyXG5cclxuICAgIC5idXR0b24ge1xyXG4gICAgICB3aWR0aDogMjQwcnB4O1xyXG4gICAgICBtYXJnaW46IDAgMTBycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDcycnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5wYXltZW50LWJ1dHRvbiB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcblxyXG4gICAgICAmLmRpc2FibGVkIHtcclxuICAgICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuLy8g5bqV6YOo5Y2g5L2N56m655uS5a2QXHJcbi50b29sYmFyLWhlaWdodCB7XHJcbiAgaGVpZ2h0OiAxMDBycHg7XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IENhcnRNYWluIGZyb20gJy4vY29tcG9uZW50cy9DYXJ0TWFpbi52dWUnXHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDwhLS0g6YCC6YWN5bqV6YOo5a6J5YWo5Yy6IC0tPlxyXG4gIDxDYXJ0TWFpbiBzYWZlLWFyZWEtaW5zZXQtYm90dG9tIC8+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgeyB1c2VHdWVzc0xpc3QgfSBmcm9tICdAL2NvbXBvc2FibGVzJ1xuaW1wb3J0IHsgdXNlTWVtYmVyU3RvcmUgfSBmcm9tICdAL3N0b3Jlcydcbi8vIOiOt+WPluWxj+W5lei+ueeVjOWIsOWuieWFqOWMuuWfn+i3neemu1xuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcbi8vIOiuouWNlemAiemhuVxuY29uc3Qgb3JkZXJUeXBlcyA9IFtcbiAgeyB0eXBlOiAnMScsIHRleHQ6ICflvoXku5jmrL4nLCBpY29uOiAnaWNvbi1jdXJyZW5jeScgfSxcbiAgeyB0eXBlOiAnMicsIHRleHQ6ICflvoXlj5HotKcnLCBpY29uOiAnaWNvbi1naWZ0JyB9LFxuICB7IHR5cGU6ICczJywgdGV4dDogJ+W+heaUtui0pycsIGljb246ICdpY29uLWNoZWNrJyB9LFxuICB7IHR5cGU6ICc0JywgdGV4dDogJ+W+heivhOS7tycsIGljb246ICdpY29uLWNvbW1lbnQnIH0sXG5dXG4vLyDojrflj5bkvJrlkZjkv6Hmga9cbmNvbnN0IG1lbWJlclN0b3JlID0gdXNlTWVtYmVyU3RvcmUoKVxuXG5jb25zdCB7IGd1ZXNzUmVmLCBvblNjcm9sbHRvbG93ZXIgfSA9IHVzZUd1ZXNzTGlzdCgpXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIEBzY3JvbGx0b2xvd2VyPVwib25TY3JvbGx0b2xvd2VyXCIgY2xhc3M9XCJ2aWV3cG9ydFwiIHNjcm9sbC15PlxuICAgIDwhLS0g5Liq5Lq66LWE5paZIC0tPlxuICAgIDx2aWV3IGNsYXNzPVwicHJvZmlsZVwiIDpzdHlsZT1cInsgcGFkZGluZ1RvcDogc2FmZUFyZWFJbnNldHMhLnRvcCArICdweCcgfVwiPlxuICAgICAgPCEtLSDmg4XlhrUx77ya5bey55m75b2VIC0tPlxuICAgICAgPHZpZXcgY2xhc3M9XCJvdmVydmlld1wiIHYtaWY9XCJtZW1iZXJTdG9yZS5wcm9maWxlXCI+XG4gICAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzTWVtYmVyL3Byb2ZpbGUvcHJvZmlsZVwiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxuICAgICAgICAgIDxpbWFnZSBjbGFzcz1cImF2YXRhclwiIDpzcmM9XCJtZW1iZXJTdG9yZS5wcm9maWxlLmF2YXRhclwiIG1vZGU9XCJhc3BlY3RGaWxsXCI+PC9pbWFnZT5cbiAgICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwibmlja25hbWVcIj5cbiAgICAgICAgICAgIHt7IG1lbWJlclN0b3JlLnByb2ZpbGUubmlja25hbWUgfHwgbWVtYmVyU3RvcmUucHJvZmlsZS51c2VybmFtZSB9fVxuICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgICA8bmF2aWdhdG9yIGNsYXNzPVwiZXh0cmFcIiB1cmw9XCIvcGFnZXNNZW1iZXIvcHJvZmlsZS9wcm9maWxlXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInVwZGF0ZVwiPuabtOaWsOWktOWDj+aYteensDwvdGV4dD5cbiAgICAgICAgICA8L25hdmlnYXRvcj5cbiAgICAgICAgPC92aWV3PlxuICAgICAgPC92aWV3PlxuICAgICAgPCEtLSDmg4XlhrUy77ya5pyq55m75b2VIC0tPlxuICAgICAgPHZpZXcgY2xhc3M9XCJvdmVydmlld1wiIHYtZWxzZT5cbiAgICAgICAgPG5hdmlnYXRvciB1cmw9XCIvcGFnZXMvbG9naW4vbG9naW5cIiBob3Zlci1jbGFzcz1cIm5vbmVcIj5cbiAgICAgICAgICA8aW1hZ2VcbiAgICAgICAgICAgIGNsYXNzPVwiYXZhdGFyIGdyYXlcIlxuICAgICAgICAgICAgbW9kZT1cImFzcGVjdEZpbGxcIlxuICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly95ankteGlhb3R1eGlhbi1kZXYub3NzLWNuLWJlaWppbmcuYWxpeXVuY3MuY29tL3BpY3R1cmUvMjAyMS0wNC0wNi9kYjYyOGQ0Mi04OGE3LTQ2ZTctYWJiOC02NTk0NDhjMzMwODEucG5nXCJcbiAgICAgICAgICA+PC9pbWFnZT5cbiAgICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxuICAgICAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzL2xvZ2luL2xvZ2luXCIgaG92ZXItY2xhc3M9XCJub25lXCIgY2xhc3M9XCJuaWNrbmFtZVwiPlxuICAgICAgICAgICAg5pyq55m75b2VXG4gICAgICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJleHRyYVwiPlxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aXBzXCI+54K55Ye755m75b2V6LSm5Y+3PC90ZXh0PlxuICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgPC92aWV3PlxuICAgICAgPC92aWV3PlxuICAgICAgPG5hdmlnYXRvciBjbGFzcz1cInNldHRpbmdzXCIgdXJsPVwiL3BhZ2VzTWVtYmVyL3NldHRpbmdzL3NldHRpbmdzXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XG4gICAgICAgIOiuvue9rlxuICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgPC92aWV3PlxuICAgIDwhLS0g5oiR55qE6K6i5Y2VIC0tPlxuICAgIDx2aWV3IGNsYXNzPVwib3JkZXJzXCI+XG4gICAgICA8dmlldyBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgIOaIkeeahOiuouWNlVxuICAgICAgICA8bmF2aWdhdG9yIGNsYXNzPVwibmF2aWdhdG9yXCIgdXJsPVwiL3BhZ2VzT3JkZXIvbGlzdC9saXN0P3R5cGU9MFwiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxuICAgICAgICAgIOafpeeci+WFqOmDqOiuouWNlTx0ZXh0IGNsYXNzPVwiaWNvbi1yaWdodFwiPjwvdGV4dD5cbiAgICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgICA8L3ZpZXc+XG4gICAgICA8dmlldyBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPCEtLSDorqLljZUgLS0+XG4gICAgICAgIDxuYXZpZ2F0b3JcbiAgICAgICAgICB2LWZvcj1cIml0ZW0gaW4gb3JkZXJUeXBlc1wiXG4gICAgICAgICAgOmtleT1cIml0ZW0udHlwZVwiXG4gICAgICAgICAgOmNsYXNzPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICA6dXJsPVwiYC9wYWdlc09yZGVyL2xpc3QvbGlzdD90eXBlPSR7aXRlbS50eXBlfWBcIlxuICAgICAgICAgIGNsYXNzPVwibmF2aWdhdG9yXCJcbiAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgaXRlbS50ZXh0IH19XG4gICAgICAgIDwvbmF2aWdhdG9yPlxuICAgICAgICA8IS0tIOWuouacjSAtLT5cblxuXG5cbiAgICAgIDwvdmlldz5cbiAgICA8L3ZpZXc+XG4gIDwvc2Nyb2xsLXZpZXc+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbnBhZ2Uge1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjg7XG59XG5cbi52aWV3cG9ydCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vcGNhcGkteGlhb3R1eGlhbi1mcm9udC1kZXZ0ZXN0Lml0aGVpbWEubmV0L21pbmlhcHAvaW1hZ2VzL2NlbnRlcl9iZy5wbmcpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgYXV0bztcbn1cblxuLyog55So5oi35L+h5oGvICovXG4ucHJvZmlsZSB7XG4gIG1hcmdpbi10b3A6IDMwcnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLm92ZXJ2aWV3IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGhlaWdodDogMTIwcnB4O1xuICAgIHBhZGRpbmc6IDAgMzZycHg7XG4gICAgY29sb3I6ICNmZmY7XG4gIH1cblxuICAuYXZhdGFyIHtcbiAgICB3aWR0aDogMTIwcnB4O1xuICAgIGhlaWdodDogMTIwcnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuICB9XG5cbiAgLmdyYXkge1xuICAgIGZpbHRlcjogZ3JheXNjYWxlKDEwMCUpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBsaW5lLWhlaWdodDogMzBycHg7XG4gICAgcGFkZGluZzogMTZycHggMDtcbiAgICBtYXJnaW4tbGVmdDogMjBycHg7XG4gIH1cblxuICAubmlja25hbWUge1xuICAgIG1heC13aWR0aDogMTgwcnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE2cnB4O1xuICAgIGZvbnQtc2l6ZTogMzBycHg7XG5cbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZXh0cmEge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZm9udC1zaXplOiAyMHJweDtcbiAgfVxuXG4gIC50aXBzIHtcbiAgICBmb250LXNpemU6IDIycnB4O1xuICB9XG5cbiAgLnVwZGF0ZSB7XG4gICAgcGFkZGluZzogM3JweCAxMHJweCAxcnB4O1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gICAgYm9yZGVyOiAxcnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDMwcnB4O1xuICB9XG5cbiAgLnNldHRpbmdzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIHJpZ2h0OiA0MHJweDtcbiAgICBmb250LXNpemU6IDMwcnB4O1xuICAgIGNvbG9yOiAjZmZmO1xuICB9XG59XG5cbi8qIOaIkeeahOiuouWNlSAqL1xuLm9yZGVycyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogOTk7XG4gIHBhZGRpbmc6IDMwcnB4O1xuICBtYXJnaW46IDUwcnB4IDIwcnB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xuICBib3gtc2hhZG93OiAwIDRycHggNnJweCByZ2JhKDI0MCwgMjQwLCAyNDAsIDAuNik7XG5cbiAgLnRpdGxlIHtcbiAgICBoZWlnaHQ6IDQwcnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA0MHJweDtcbiAgICBmb250LXNpemU6IDI4cnB4O1xuICAgIGNvbG9yOiAjMWUxZTFlO1xuXG4gICAgLm5hdmlnYXRvciB7XG4gICAgICBmb250LXNpemU6IDI0cnB4O1xuICAgICAgY29sb3I6ICM5MzkzOTM7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLnNlY3Rpb24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmc6IDQwcnB4IDIwcnB4IDEwcnB4O1xuICAgIC5uYXZpZ2F0b3IsXG4gICAgLmNvbnRhY3Qge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1zaXplOiAyNHJweDtcbiAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogNjBycHg7XG4gICAgICAgIGNvbG9yOiAjZmY5NTQ1O1xuICAgICAgfVxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICAgIC5jb250YWN0IHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgeyB1c2VHdWVzc0xpc3QgfSBmcm9tICdAL2NvbXBvc2FibGVzJ1xuaW1wb3J0IHsgdXNlTWVtYmVyU3RvcmUgfSBmcm9tICdAL3N0b3Jlcydcbi8vIOiOt+WPluWxj+W5lei+ueeVjOWIsOWuieWFqOWMuuWfn+i3neemu1xuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcbi8vIOiuouWNlemAiemhuVxuY29uc3Qgb3JkZXJUeXBlcyA9IFtcbiAgeyB0eXBlOiAnMScsIHRleHQ6ICflvoXku5jmrL4nLCBpY29uOiAnaWNvbi1jdXJyZW5jeScgfSxcbiAgeyB0eXBlOiAnMicsIHRleHQ6ICflvoXlj5HotKcnLCBpY29uOiAnaWNvbi1naWZ0JyB9LFxuICB7IHR5cGU6ICczJywgdGV4dDogJ+W+heaUtui0pycsIGljb246ICdpY29uLWNoZWNrJyB9LFxuICB7IHR5cGU6ICc0JywgdGV4dDogJ+W+heivhOS7tycsIGljb246ICdpY29uLWNvbW1lbnQnIH0sXG5dXG4vLyDojrflj5bkvJrlkZjkv6Hmga9cbmNvbnN0IG1lbWJlclN0b3JlID0gdXNlTWVtYmVyU3RvcmUoKVxuXG5jb25zdCB7IGd1ZXNzUmVmLCBvblNjcm9sbHRvbG93ZXIgfSA9IHVzZUd1ZXNzTGlzdCgpXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIEBzY3JvbGx0b2xvd2VyPVwib25TY3JvbGx0b2xvd2VyXCIgY2xhc3M9XCJ2aWV3cG9ydFwiIHNjcm9sbC15PlxuICAgIDwhLS0g5Liq5Lq66LWE5paZIC0tPlxuICAgIDx2aWV3IGNsYXNzPVwicHJvZmlsZVwiIDpzdHlsZT1cInsgcGFkZGluZ1RvcDogc2FmZUFyZWFJbnNldHMhLnRvcCArICdweCcgfVwiPlxuICAgICAgPCEtLSDmg4XlhrUx77ya5bey55m75b2VIC0tPlxuICAgICAgPHZpZXcgY2xhc3M9XCJvdmVydmlld1wiIHYtaWY9XCJtZW1iZXJTdG9yZS5wcm9maWxlXCI+XG4gICAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzTWVtYmVyL3Byb2ZpbGUvcHJvZmlsZVwiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxuICAgICAgICAgIDxpbWFnZSBjbGFzcz1cImF2YXRhclwiIDpzcmM9XCJtZW1iZXJTdG9yZS5wcm9maWxlLmF2YXRhclwiIG1vZGU9XCJhc3BlY3RGaWxsXCI+PC9pbWFnZT5cbiAgICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwibmlja25hbWVcIj5cbiAgICAgICAgICAgIHt7IG1lbWJlclN0b3JlLnByb2ZpbGUubmlja25hbWUgfHwgbWVtYmVyU3RvcmUucHJvZmlsZS51c2VybmFtZSB9fVxuICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgICA8bmF2aWdhdG9yIGNsYXNzPVwiZXh0cmFcIiB1cmw9XCIvcGFnZXNNZW1iZXIvcHJvZmlsZS9wcm9maWxlXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInVwZGF0ZVwiPuabtOaWsOWktOWDj+aYteensDwvdGV4dD5cbiAgICAgICAgICA8L25hdmlnYXRvcj5cbiAgICAgICAgPC92aWV3PlxuICAgICAgPC92aWV3PlxuICAgICAgPCEtLSDmg4XlhrUy77ya5pyq55m75b2VIC0tPlxuICAgICAgPHZpZXcgY2xhc3M9XCJvdmVydmlld1wiIHYtZWxzZT5cbiAgICAgICAgPG5hdmlnYXRvciB1cmw9XCIvcGFnZXMvbG9naW4vbG9naW5cIiBob3Zlci1jbGFzcz1cIm5vbmVcIj5cbiAgICAgICAgICA8aW1hZ2VcbiAgICAgICAgICAgIGNsYXNzPVwiYXZhdGFyIGdyYXlcIlxuICAgICAgICAgICAgbW9kZT1cImFzcGVjdEZpbGxcIlxuICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly95ankteGlhb3R1eGlhbi1kZXYub3NzLWNuLWJlaWppbmcuYWxpeXVuY3MuY29tL3BpY3R1cmUvMjAyMS0wNC0wNi9kYjYyOGQ0Mi04OGE3LTQ2ZTctYWJiOC02NTk0NDhjMzMwODEucG5nXCJcbiAgICAgICAgICA+PC9pbWFnZT5cbiAgICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxuICAgICAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzL2xvZ2luL2xvZ2luXCIgaG92ZXItY2xhc3M9XCJub25lXCIgY2xhc3M9XCJuaWNrbmFtZVwiPlxuICAgICAgICAgICAg5pyq55m75b2VXG4gICAgICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJleHRyYVwiPlxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aXBzXCI+54K55Ye755m75b2V6LSm5Y+3PC90ZXh0PlxuICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgPC92aWV3PlxuICAgICAgPC92aWV3PlxuICAgICAgPG5hdmlnYXRvciBjbGFzcz1cInNldHRpbmdzXCIgdXJsPVwiL3BhZ2VzTWVtYmVyL3NldHRpbmdzL3NldHRpbmdzXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XG4gICAgICAgIOiuvue9rlxuICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgPC92aWV3PlxuICAgIDwhLS0g5oiR55qE6K6i5Y2VIC0tPlxuICAgIDx2aWV3IGNsYXNzPVwib3JkZXJzXCI+XG4gICAgICA8dmlldyBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgIOaIkeeahOiuouWNlVxuICAgICAgICA8bmF2aWdhdG9yIGNsYXNzPVwibmF2aWdhdG9yXCIgdXJsPVwiL3BhZ2VzT3JkZXIvbGlzdC9saXN0P3R5cGU9MFwiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxuICAgICAgICAgIOafpeeci+WFqOmDqOiuouWNlTx0ZXh0IGNsYXNzPVwiaWNvbi1yaWdodFwiPjwvdGV4dD5cbiAgICAgICAgPC9uYXZpZ2F0b3I+XG4gICAgICA8L3ZpZXc+XG4gICAgICA8dmlldyBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPCEtLSDorqLljZUgLS0+XG4gICAgICAgIDxuYXZpZ2F0b3JcbiAgICAgICAgICB2LWZvcj1cIml0ZW0gaW4gb3JkZXJUeXBlc1wiXG4gICAgICAgICAgOmtleT1cIml0ZW0udHlwZVwiXG4gICAgICAgICAgOmNsYXNzPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICA6dXJsPVwiYC9wYWdlc09yZGVyL2xpc3QvbGlzdD90eXBlPSR7aXRlbS50eXBlfWBcIlxuICAgICAgICAgIGNsYXNzPVwibmF2aWdhdG9yXCJcbiAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgaXRlbS50ZXh0IH19XG4gICAgICAgIDwvbmF2aWdhdG9yPlxuICAgICAgICA8IS0tIOWuouacjSAtLT5cbiAgICAgICAgPCEtLSAjaWZkZWYgTVAtV0VJWElOIC0tPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdCBpY29uLWhhbmRzZXRcIiBvcGVuLXR5cGU9XCJjb250YWN0XCI+5ZSu5ZCOPC9idXR0b24+XG4gICAgICAgIDwhLS0gI2VuZGlmIC0tPlxuICAgICAgPC92aWV3PlxuICAgIDwvdmlldz5cbiAgPC9zY3JvbGwtdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxucGFnZSB7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmODtcbn1cblxuLnZpZXdwb3J0IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly9wY2FwaS14aWFvdHV4aWFuLWZyb250LWRldnRlc3QuaXRoZWltYS5uZXQvbWluaWFwcC9pbWFnZXMvY2VudGVyX2JnLnBuZyk7XG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSBhdXRvO1xufVxuXG4vKiDnlKjmiLfkv6Hmga8gKi9cbi5wcm9maWxlIHtcbiAgbWFyZ2luLXRvcDogMzBycHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAub3ZlcnZpZXcge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAxMjBycHg7XG4gICAgcGFkZGluZzogMCAzNnJweDtcbiAgICBjb2xvcjogI2ZmZjtcbiAgfVxuXG4gIC5hdmF0YXIge1xuICAgIHdpZHRoOiAxMjBycHg7XG4gICAgaGVpZ2h0OiAxMjBycHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIH1cblxuICAuZ3JheSB7XG4gICAgZmlsdGVyOiBncmF5c2NhbGUoMTAwJSk7XG4gIH1cblxuICAubWV0YSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGxpbmUtaGVpZ2h0OiAzMHJweDtcbiAgICBwYWRkaW5nOiAxNnJweCAwO1xuICAgIG1hcmdpbi1sZWZ0OiAyMHJweDtcbiAgfVxuXG4gIC5uaWNrbmFtZSB7XG4gICAgbWF4LXdpZHRoOiAxODBycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZycHg7XG4gICAgZm9udC1zaXplOiAzMHJweDtcblxuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIC5leHRyYSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmb250LXNpemU6IDIwcnB4O1xuICB9XG5cbiAgLnRpcHMge1xuICAgIGZvbnQtc2l6ZTogMjJycHg7XG4gIH1cblxuICAudXBkYXRlIHtcbiAgICBwYWRkaW5nOiAzcnB4IDEwcnB4IDFycHg7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgICBib3JkZXI6IDFycHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgIG1hcmdpbi1yaWdodDogMTBycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMzBycHg7XG4gIH1cblxuICAuc2V0dGluZ3Mge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6IDQwcnB4O1xuICAgIGZvbnQtc2l6ZTogMzBycHg7XG4gICAgY29sb3I6ICNmZmY7XG4gIH1cbn1cblxuLyog5oiR55qE6K6i5Y2VICovXG4ub3JkZXJzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA5OTtcbiAgcGFkZGluZzogMzBycHg7XG4gIG1hcmdpbjogNTBycHggMjBycHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMTBycHg7XG4gIGJveC1zaGFkb3c6IDAgNHJweCA2cnB4IHJnYmEoMjQwLCAyNDAsIDI0MCwgMC42KTtcblxuICAudGl0bGUge1xuICAgIGhlaWdodDogNDBycHg7XG4gICAgbGluZS1oZWlnaHQ6IDQwcnB4O1xuICAgIGZvbnQtc2l6ZTogMjhycHg7XG4gICAgY29sb3I6ICMxZTFlMWU7XG5cbiAgICAubmF2aWdhdG9yIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XG4gICAgICBjb2xvcjogIzkzOTM5MztcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG4gIH1cblxuICAuc2VjdGlvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZzogNDBycHggMjBycHggMTBycHg7XG4gICAgLm5hdmlnYXRvcixcbiAgICAuY29udGFjdCB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXNpemU6IDI0cnB4O1xuICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiA2MHJweDtcbiAgICAgICAgY29sb3I6ICNmZjk1NDU7XG4gICAgICB9XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLmNvbnRhY3Qge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBcImlkXCI6IFwiMjg1MjYzN1wiLFxuICBcIm5hbWVcIjogXCJ1bml1aeWbvuagh+W6k1wiLFxuICBcImZvbnRfZmFtaWx5XCI6IFwidW5paWNvbnNcIixcbiAgXCJjc3NfcHJlZml4X3RleHRcIjogXCJ1bml1aS1cIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICBcImdseXBoc1wiOiBbXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjUwMjcwNDlcIixcbiAgICAgIFwibmFtZVwiOiBcInlhbnNlXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjb2xvclwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZjZlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwODdcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI1MDI3MDQ4XCIsXG4gICAgICBcIm5hbWVcIjogXCJ3YWxsZXRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIndhbGxldFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZiMVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNTdcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI1MDE1NzIwXCIsXG4gICAgICBcIm5hbWVcIjogXCJzZXR0aW5ncy1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInNldHRpbmdzLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZjZVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwODZcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI1MDE1NDM0XCIsXG4gICAgICBcIm5hbWVcIjogXCJzaGltaW5ncmVuemhlbmctZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJhdXRoLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZjY1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwODRcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTM0MjQ2XCIsXG4gICAgICBcIm5hbWVcIjogXCJzaG9wLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic2hvcC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2Y2RcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDg1XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkzNDE1OVwiLFxuICAgICAgXCJuYW1lXCI6IFwic3RhZmYtZmlsbGVkLTAxXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJzdGFmZi1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2Y2JcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDgzXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkzMjQ2MVwiLFxuICAgICAgXCJuYW1lXCI6IFwiVklQLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwidmlwLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZjNlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNzhcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTMyNDYyXCIsXG4gICAgICBcIm5hbWVcIjogXCJwbHVzX2NpcmNsZV9maWxsXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJwbHVzLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZjN1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNzlcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTMyNDYzXCIsXG4gICAgICBcIm5hbWVcIjogXCJmb2xkZXJfYWRkLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiZm9sZGVyLWFkZC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YzhcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDgwXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkzMjQ2NFwiLFxuICAgICAgXCJuYW1lXCI6IFwieWFuc2UtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjb2xvci1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YzlcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDgxXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkzMjQ2NVwiLFxuICAgICAgXCJuYW1lXCI6IFwidHVuZS1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInR1bmUtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmNhXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA4MlxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ5MzI0NTVcIixcbiAgICAgIFwibmFtZVwiOiBcImEtcmlsaWRha2EtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjYWxlbmRhci1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YzBcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDcyXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkzMjQ1NlwiLFxuICAgICAgXCJuYW1lXCI6IFwibm90aWZpY2F0aW9uLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibm90aWZpY2F0aW9uLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZjMVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNzNcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTMyNDU3XCIsXG4gICAgICBcIm5hbWVcIjogXCJ3YWxsZXQtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJ3YWxsZXQtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmMyXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA3NFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ5MzI0NThcIixcbiAgICAgIFwibmFtZVwiOiBcInBhaWhhbmdiYW5nLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibWVkYWwtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmMzXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA3NVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ5MzI0NTlcIixcbiAgICAgIFwibmFtZVwiOiBcImdpZnQtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJnaWZ0LWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZjNFwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNzZcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTMyNDYwXCIsXG4gICAgICBcIm5hbWVcIjogXCJmaXJlLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiZmlyZS1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YzVcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDc3XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyODAwMVwiLFxuICAgICAgXCJuYW1lXCI6IFwicmVmcmVzaGVtcHR5XCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJyZWZyZXNoZW1wdHlcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YmZcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDcxXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyNjg1M1wiLFxuICAgICAgXCJuYW1lXCI6IFwibG9jYXRpb24tZWxsaXBzZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibG9jYXRpb24tZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmFmXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA1NVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ5MjY3MzVcIixcbiAgICAgIFwibmFtZVwiOiBcInBlcnNvbi1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInBlcnNvbi1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OWRcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDM3XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyNjcwM1wiLFxuICAgICAgXCJuYW1lXCI6IFwicGVyc29uYWRkLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwicGVyc29uYWRkLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY5OFwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMzJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMzUxXCIsXG4gICAgICBcIm5hbWVcIjogXCJiYWNrXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJiYWNrXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmI5XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA2NVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ5MjMzNTJcIixcbiAgICAgIFwibmFtZVwiOiBcImZvcndhcmRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImZvcndhcmRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YmFcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDY2XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyMzM1M1wiLFxuICAgICAgXCJuYW1lXCI6IFwiYXJyb3d0aGlucmlnaHRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImFycm93LXJpZ2h0XCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmJiXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA2N1xuICAgIH0sXG5cdFx0e1xuXHRcdCAgXCJpY29uX2lkXCI6IFwiMjQ5MjMzNTNcIixcblx0XHQgIFwibmFtZVwiOiBcImFycm93dGhpbnJpZ2h0XCIsXG5cdFx0ICBcImZvbnRfY2xhc3NcIjogXCJhcnJvd3RoaW5yaWdodFwiLFxuXHRcdCAgXCJ1bmljb2RlXCI6IFwiZTZiYlwiLFxuXHRcdCAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNjdcblx0XHR9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMzU0XCIsXG4gICAgICBcIm5hbWVcIjogXCJhcnJvd3RoaW5sZWZ0XCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJhcnJvdy1sZWZ0XCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmJjXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA2OFxuICAgIH0sXG5cdFx0e1xuXHRcdCAgXCJpY29uX2lkXCI6IFwiMjQ5MjMzNTRcIixcblx0XHQgIFwibmFtZVwiOiBcImFycm93dGhpbmxlZnRcIixcblx0XHQgIFwiZm9udF9jbGFzc1wiOiBcImFycm93dGhpbmxlZnRcIixcblx0XHQgIFwidW5pY29kZVwiOiBcImU2YmNcIixcblx0XHQgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDY4XG5cdFx0fSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyMzM1NVwiLFxuICAgICAgXCJuYW1lXCI6IFwiYXJyb3d0aGludXBcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImFycm93LXVwXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmJkXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA2OVxuICAgIH0sXG5cdFx0e1xuXHRcdCAgXCJpY29uX2lkXCI6IFwiMjQ5MjMzNTVcIixcblx0XHQgIFwibmFtZVwiOiBcImFycm93dGhpbnVwXCIsXG5cdFx0ICBcImZvbnRfY2xhc3NcIjogXCJhcnJvd3RoaW51cFwiLFxuXHRcdCAgXCJ1bmljb2RlXCI6IFwiZTZiZFwiLFxuXHRcdCAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNjlcblx0XHR9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMzU2XCIsXG4gICAgICBcIm5hbWVcIjogXCJhcnJvd3RoaW5kb3duXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJhcnJvdy1kb3duXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmJlXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA3MFxuICAgIH0se1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ5MjMzNTZcIixcbiAgICAgIFwibmFtZVwiOiBcImFycm93dGhpbmRvd25cIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImFycm93dGhpbmRvd25cIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YmVcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDcwXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyMzM0OVwiLFxuICAgICAgXCJuYW1lXCI6IFwiYXJyb3dkb3duXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJib3R0b21cIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YjhcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDY0XG4gICAgfSx7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyMzM0OVwiLFxuICAgICAgXCJuYW1lXCI6IFwiYXJyb3dkb3duXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJhcnJvd2Rvd25cIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YjhcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDY0XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyMzM0NlwiLFxuICAgICAgXCJuYW1lXCI6IFwiYXJyb3dyaWdodFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwicmlnaHRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YjVcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDYxXG4gICAgfSxcblx0XHR7XG5cdFx0ICBcImljb25faWRcIjogXCIyNDkyMzM0NlwiLFxuXHRcdCAgXCJuYW1lXCI6IFwiYXJyb3dyaWdodFwiLFxuXHRcdCAgXCJmb250X2NsYXNzXCI6IFwiYXJyb3dyaWdodFwiLFxuXHRcdCAgXCJ1bmljb2RlXCI6IFwiZTZiNVwiLFxuXHRcdCAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNjFcblx0XHR9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMzQ3XCIsXG4gICAgICBcIm5hbWVcIjogXCJhcnJvd3VwXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJ0b3BcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YjZcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDYyXG4gICAgfSxcblx0XHR7XG5cdFx0ICBcImljb25faWRcIjogXCIyNDkyMzM0N1wiLFxuXHRcdCAgXCJuYW1lXCI6IFwiYXJyb3d1cFwiLFxuXHRcdCAgXCJmb250X2NsYXNzXCI6IFwiYXJyb3d1cFwiLFxuXHRcdCAgXCJ1bmljb2RlXCI6IFwiZTZiNlwiLFxuXHRcdCAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNjJcblx0XHR9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMzQ4XCIsXG4gICAgICBcIm5hbWVcIjogXCJhcnJvd2xlZnRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImxlZnRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YjdcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDYzXG4gICAgfSxcblx0XHR7XG5cdFx0ICBcImljb25faWRcIjogXCIyNDkyMzM0OFwiLFxuXHRcdCAgXCJuYW1lXCI6IFwiYXJyb3dsZWZ0XCIsXG5cdFx0ICBcImZvbnRfY2xhc3NcIjogXCJhcnJvd2xlZnRcIixcblx0XHQgIFwidW5pY29kZVwiOiBcImU2YjdcIixcblx0XHQgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDYzXG5cdFx0fSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyMzMzNFwiLFxuICAgICAgXCJuYW1lXCI6IFwiZXllXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJleWVcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NTFcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTYxXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyMzMzNVwiLFxuICAgICAgXCJuYW1lXCI6IFwiZXllLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiZXllLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY2YVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5ODZcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMzM2XCIsXG4gICAgICBcIm5hbWVcIjogXCJleWUtc2xhc2hcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImV5ZS1zbGFzaFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZiM1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNTlcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMzM3XCIsXG4gICAgICBcIm5hbWVcIjogXCJleWUtc2xhc2gtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJleWUtc2xhc2gtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmI0XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA2MFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ5MjMzMDVcIixcbiAgICAgIFwibmFtZVwiOiBcImluZm8tZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJpbmZvLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY0OVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NTNcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMjk5XCIsXG4gICAgICBcIm5hbWVcIjogXCJyZWxvYWQtMDFcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInJlbG9hZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZiMlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNThcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMTk1XCIsXG4gICAgICBcIm5hbWVcIjogXCJtaWNfc2xhc2hfZmlsbFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibWljb2ZmLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZiMFwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNTZcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMTY1XCIsXG4gICAgICBcIm5hbWVcIjogXCJtYXAtcGluLWVsbGlwc2VcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm1hcC1waW4tZWxsaXBzZVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZhY1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNTJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMTY2XCIsXG4gICAgICBcIm5hbWVcIjogXCJtYXAtcGluXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJtYXAtcGluXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmFkXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA1M1xuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ5MjMxNjdcIixcbiAgICAgIFwibmFtZVwiOiBcImxvY2F0aW9uXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJsb2NhdGlvblwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZhZVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNTRcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMDY0XCIsXG4gICAgICBcIm5hbWVcIjogXCJzdGFyaGFsZlwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic3RhcmhhbGZcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2ODNcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDExXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDkyMzA2NVwiLFxuICAgICAgXCJuYW1lXCI6IFwic3RhclwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic3RhclwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY4OFwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMTZcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0OTIzMDY2XCIsXG4gICAgICBcIm5hbWVcIjogXCJzdGFyLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic3Rhci1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OGZcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDIzXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTY0NlwiLFxuICAgICAgXCJuYW1lXCI6IFwiYS1yaWxpZGFrYVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2FsZW5kYXJcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YTBcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDQwXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTY0N1wiLFxuICAgICAgXCJuYW1lXCI6IFwiZmlyZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiZmlyZVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZhMVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNDFcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODk5NjQ4XCIsXG4gICAgICBcIm5hbWVcIjogXCJwYWloYW5nYmFuZ1wiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibWVkYWxcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YTJcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDQyXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTY0OVwiLFxuICAgICAgXCJuYW1lXCI6IFwiZm9udFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiZm9udFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZhM1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNDNcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODk5NjUwXCIsXG4gICAgICBcIm5hbWVcIjogXCJnaWZ0XCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJnaWZ0XCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmE0XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA0NFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4OTk2NTFcIixcbiAgICAgIFwibmFtZVwiOiBcImxpbmtcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImxpbmtcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YTVcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDQ1XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTY1MlwiLFxuICAgICAgXCJuYW1lXCI6IFwibm90aWZpY2F0aW9uXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJub3RpZmljYXRpb25cIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YTZcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDQ2XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTY1M1wiLFxuICAgICAgXCJuYW1lXCI6IFwic3RhZmZcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInN0YWZmXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmE3XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA0N1xuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4OTk2NTRcIixcbiAgICAgIFwibmFtZVwiOiBcIlZJUFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwidmlwXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNmE4XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTA0OFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4OTk2NTVcIixcbiAgICAgIFwibmFtZVwiOiBcImZvbGRlcl9hZGRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImZvbGRlci1hZGRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YTlcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDQ5XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTY1NlwiLFxuICAgICAgXCJuYW1lXCI6IFwidHVuZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwidHVuZVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTZhYVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwNTBcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODk5NjU3XCIsXG4gICAgICBcIm5hbWVcIjogXCJzaGltaW5ncmVuemhlbmdcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImF1dGhcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2YWJcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDUxXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTU2NVwiLFxuICAgICAgXCJuYW1lXCI6IFwicGVyc29uXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJwZXJzb25cIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OTlcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDMzXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTU2NlwiLFxuICAgICAgXCJuYW1lXCI6IFwiZW1haWwtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJlbWFpbC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OWFcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDM0XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTU2N1wiLFxuICAgICAgXCJuYW1lXCI6IFwicGhvbmUtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJwaG9uZS1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OWJcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDM1XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTU2OFwiLFxuICAgICAgXCJuYW1lXCI6IFwicGhvbmVcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInBob25lXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjljXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTAzNlxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4OTk1NzBcIixcbiAgICAgIFwibmFtZVwiOiBcImVtYWlsXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJlbWFpbFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY5ZVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMzhcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODk5NTcxXCIsXG4gICAgICBcIm5hbWVcIjogXCJwZXJzb25hZGRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInBlcnNvbmFkZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY5ZlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMzlcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODk5NTU4XCIsXG4gICAgICBcIm5hbWVcIjogXCJjaGF0Ym94ZXMtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjaGF0Ym94ZXMtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjkyXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTAyNlxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4OTk1NTlcIixcbiAgICAgIFwibmFtZVwiOiBcImNvbnRhY3RcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNvbnRhY3RcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OTNcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDI3XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg5OTU2MFwiLFxuICAgICAgXCJuYW1lXCI6IFwiY2hhdGJ1YmJsZS1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNoYXRidWJibGUtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjk0XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTAyOFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4OTk1NjFcIixcbiAgICAgIFwibmFtZVwiOiBcImNvbnRhY3QtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjb250YWN0LWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY5NVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMjlcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODk5NTYyXCIsXG4gICAgICBcIm5hbWVcIjogXCJjaGF0Ym94ZXNcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNoYXRib3hlc1wiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY5NlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMzBcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODk5NTYzXCIsXG4gICAgICBcIm5hbWVcIjogXCJjaGF0YnViYmxlXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjaGF0YnViYmxlXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjk3XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTAzMVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4ODEyOTBcIixcbiAgICAgIFwibmFtZVwiOiBcInVwbG9hZC1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInVwbG9hZC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OGVcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDIyXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI5MlwiLFxuICAgICAgXCJuYW1lXCI6IFwidXBsb2FkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJ1cGxvYWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OTBcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDI0XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI5M1wiLFxuICAgICAgXCJuYW1lXCI6IFwid2VpeGluXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJ3ZWl4aW5cIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OTFcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDI1XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI3NFwiLFxuICAgICAgXCJuYW1lXCI6IFwiY29tcG9zZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY29tcG9zZVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY3ZlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMDdcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODgxMjc1XCIsXG4gICAgICBcIm5hbWVcIjogXCJxcVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwicXFcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2ODBcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDA4XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI3NlwiLFxuICAgICAgXCJuYW1lXCI6IFwiZG93bmxvYWQtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJkb3dubG9hZC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2ODFcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDA5XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI3N1wiLFxuICAgICAgXCJuYW1lXCI6IFwicGVuZ3lvdXF1YW5cIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInB5cVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY4MlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMTBcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODgxMjc5XCIsXG4gICAgICBcIm5hbWVcIjogXCJzb3VuZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic291bmRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2ODRcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDEyXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI4MFwiLFxuICAgICAgXCJuYW1lXCI6IFwidHJhc2gtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJ0cmFzaC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2ODVcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDEzXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI4MVwiLFxuICAgICAgXCJuYW1lXCI6IFwic291bmQtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJzb3VuZC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2ODZcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDE0XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI4MlwiLFxuICAgICAgXCJuYW1lXCI6IFwidHJhc2hcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInRyYXNoXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjg3XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTAxNVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4ODEyODRcIixcbiAgICAgIFwibmFtZVwiOiBcInZpZGVvY2FtLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwidmlkZW9jYW0tZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjg5XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTAxN1xuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4ODEyODVcIixcbiAgICAgIFwibmFtZVwiOiBcInNwaW5uZXItY3ljbGVcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInNwaW5uZXItY3ljbGVcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OGFcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDE4XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg4MTI4NlwiLFxuICAgICAgXCJuYW1lXCI6IFwid2VpYm9cIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIndlaWJvXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjhiXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1OTAxOVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4ODEyODhcIixcbiAgICAgIFwibmFtZVwiOiBcInZpZGVvY2FtXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJ2aWRlb2NhbVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY4Y1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMjBcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODgxMjg5XCIsXG4gICAgICBcIm5hbWVcIjogXCJkb3dubG9hZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiZG93bmxvYWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2OGRcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDIxXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTYwMVwiLFxuICAgICAgXCJuYW1lXCI6IFwiaGVscFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiaGVscFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY3OVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMDFcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODc5NjAyXCIsXG4gICAgICBcIm5hbWVcIjogXCJuYXZpZ2F0ZS1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm5hdmlnYXRlLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY3YVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMDJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODc5NjAzXCIsXG4gICAgICBcIm5hbWVcIjogXCJwbHVzZW1wdHlcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInBsdXNlbXB0eVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY3YlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTkwMDNcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODc5NjA0XCIsXG4gICAgICBcIm5hbWVcIjogXCJzbWFsbGNpcmNsZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic21hbGxjaXJjbGVcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2N2NcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDA0XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTYwNVwiLFxuICAgICAgXCJuYW1lXCI6IFwibWludXMtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJtaW51cy1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2N2RcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDA1XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTYwNlwiLFxuICAgICAgXCJuYW1lXCI6IFwibWljb2ZmXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJtaWNvZmZcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2N2VcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDA2XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTU4OFwiLFxuICAgICAgXCJuYW1lXCI6IFwiY2xvc2VlbXB0eVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2xvc2VlbXB0eVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY2Y1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5ODhcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODc5NTg5XCIsXG4gICAgICBcIm5hbWVcIjogXCJjbGVhclwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2xlYXJcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NmRcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTg5XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTU5MFwiLFxuICAgICAgXCJuYW1lXCI6IFwibmF2aWdhdGVcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm5hdmlnYXRlXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjZlXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk5MFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4Nzk1OTFcIixcbiAgICAgIFwibmFtZVwiOiBcIm1pbnVzXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJtaW51c1wiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY2ZlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5OTFcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODc5NTkyXCIsXG4gICAgICBcIm5hbWVcIjogXCJpbWFnZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiaW1hZ2VcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NzBcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTkyXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTU5M1wiLFxuICAgICAgXCJuYW1lXCI6IFwibWljXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJtaWNcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NzFcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTkzXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTU5NFwiLFxuICAgICAgXCJuYW1lXCI6IFwicGFwZXJwbGFuZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwicGFwZXJwbGFuZVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY3MlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5OTRcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODc5NTk1XCIsXG4gICAgICBcIm5hbWVcIjogXCJjbG9zZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2xvc2VcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NzNcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTk1XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTU5NlwiLFxuICAgICAgXCJuYW1lXCI6IFwiaGVscC1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImhlbHAtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjc0XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk5NlxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4Nzk1OTdcIixcbiAgICAgIFwibmFtZVwiOiBcInBsdXMtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJwYXBlcnBsYW5lLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY3NVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5OTdcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODc5NTk4XCIsXG4gICAgICBcIm5hbWVcIjogXCJwbHVzXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJwbHVzXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjc2XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk5OFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4Nzk1OTlcIixcbiAgICAgIFwibmFtZVwiOiBcIm1pYy1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm1pYy1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NzdcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTk5XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg3OTYwMFwiLFxuICAgICAgXCJuYW1lXCI6IFwiaW1hZ2UtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJpbWFnZS1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NzhcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU5MDAwXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTkwMFwiLFxuICAgICAgXCJuYW1lXCI6IFwibG9ja2VkLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibG9ja2VkLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY2OFwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5ODRcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1OTAxXCIsXG4gICAgICBcIm5hbWVcIjogXCJpbmZvXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJpbmZvXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjY5XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk4NVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU5MDNcIixcbiAgICAgIFwibmFtZVwiOiBcImxvY2tlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibG9ja2VkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjZiXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk4N1xuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4ODRcIixcbiAgICAgIFwibmFtZVwiOiBcImNhbWVyYS1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNhbWVyYS1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NThcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTY4XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTg4NVwiLFxuICAgICAgXCJuYW1lXCI6IFwiY2hhdC1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNoYXQtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjU5XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk2OVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4ODZcIixcbiAgICAgIFwibmFtZVwiOiBcImNhbWVyYVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2FtZXJhXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjVhXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk3MFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4ODdcIixcbiAgICAgIFwibmFtZVwiOiBcImNpcmNsZVwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2lyY2xlXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjViXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk3MVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4ODhcIixcbiAgICAgIFwibmFtZVwiOiBcImNoZWNrbWFya2VtcHR5XCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjaGVja21hcmtlbXB0eVwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY1Y1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NzJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1ODg5XCIsXG4gICAgICBcIm5hbWVcIjogXCJjaGF0XCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjaGF0XCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjVkXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk3M1xuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4OTBcIixcbiAgICAgIFwibmFtZVwiOiBcImNpcmNsZS1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNpcmNsZS1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NWVcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTc0XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTg5MVwiLFxuICAgICAgXCJuYW1lXCI6IFwiZmxhZ1wiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiZmxhZ1wiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY1ZlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NzVcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1ODkyXCIsXG4gICAgICBcIm5hbWVcIjogXCJmbGFnLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiZmxhZy1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NjBcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTc2XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTg5M1wiLFxuICAgICAgXCJuYW1lXCI6IFwiZ2Vhci1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImdlYXItZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjYxXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk3N1xuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4OTRcIixcbiAgICAgIFwibmFtZVwiOiBcImhvbWVcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImhvbWVcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NjJcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTc4XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTg5NVwiLFxuICAgICAgXCJuYW1lXCI6IFwiaG9tZS1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImhvbWUtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjYzXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk3OVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4OTZcIixcbiAgICAgIFwibmFtZVwiOiBcImdlYXJcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImdlYXJcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NjRcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTgwXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTg5N1wiLFxuICAgICAgXCJuYW1lXCI6IFwic21hbGxjaXJjbGUtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJzbWFsbGNpcmNsZS1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NjVcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTgxXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTg5OFwiLFxuICAgICAgXCJuYW1lXCI6IFwibWFwLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibWFwLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY2NlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5ODJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1ODk5XCIsXG4gICAgICBcIm5hbWVcIjogXCJtYXBcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm1hcFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY2N1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5ODNcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1ODI1XCIsXG4gICAgICBcIm5hbWVcIjogXCJyZWZyZXNoLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwicmVmcmVzaC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NTZcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTY2XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTgyNlwiLFxuICAgICAgXCJuYW1lXCI6IFwicmVmcmVzaFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwicmVmcmVzaFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY1N1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NjdcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1ODA4XCIsXG4gICAgICBcIm5hbWVcIjogXCJjbG91ZC11cGxvYWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNsb3VkLXVwbG9hZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY0NVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NDlcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1ODA5XCIsXG4gICAgICBcIm5hbWVcIjogXCJjbG91ZC1kb3dubG9hZC1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNsb3VkLWRvd25sb2FkLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY0NlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NTBcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1ODEwXCIsXG4gICAgICBcIm5hbWVcIjogXCJjbG91ZC1kb3dubG9hZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2xvdWQtZG93bmxvYWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NDdcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTUxXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTgxMVwiLFxuICAgICAgXCJuYW1lXCI6IFwiY2xvdWQtdXBsb2FkLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2xvdWQtdXBsb2FkLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY0OFwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NTJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODU1ODEzXCIsXG4gICAgICBcIm5hbWVcIjogXCJyZWRvXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJyZWRvXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjRhXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk1NFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4MTRcIixcbiAgICAgIFwibmFtZVwiOiBcImltYWdlcy1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImltYWdlcy1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NGJcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTU1XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTgxNVwiLFxuICAgICAgXCJuYW1lXCI6IFwidW5kby1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInVuZG8tZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjRjXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk1NlxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4MTZcIixcbiAgICAgIFwibmFtZVwiOiBcIm1vcmVcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm1vcmVcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NGRcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTU3XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTgxN1wiLFxuICAgICAgXCJuYW1lXCI6IFwibW9yZS1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm1vcmUtZmlsbGVkXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjRlXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk1OFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4MThcIixcbiAgICAgIFwibmFtZVwiOiBcInVuZG9cIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInVuZG9cIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NGZcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTU5XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTgxOVwiLFxuICAgICAgXCJuYW1lXCI6IFwiaW1hZ2VzXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJpbWFnZXNcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NTBcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTYwXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTgyMVwiLFxuICAgICAgXCJuYW1lXCI6IFwicGFwZXJjbGlwXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJwYXBlcmNsaXBcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2NTJcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTYyXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg1NTgyMlwiLFxuICAgICAgXCJuYW1lXCI6IFwic2V0dGluZ3NcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcInNldHRpbmdzXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjUzXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk2M1xuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4MjNcIixcbiAgICAgIFwibmFtZVwiOiBcInNlYXJjaFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic2VhcmNoXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjU0XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk2NFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NTU4MjRcIixcbiAgICAgIFwibmFtZVwiOiBcInJlZG8tZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJyZWRvLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY1NVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NjVcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODQxNzAyXCIsXG4gICAgICBcIm5hbWVcIjogXCJsaXN0XCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJsaXN0XCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjQ0XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODk0OFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4NDE0ODlcIixcbiAgICAgIFwibmFtZVwiOiBcIm1haWwtb3Blbi1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm1haWwtb3Blbi1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2M2FcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTM4XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg0MTQ5MVwiLFxuICAgICAgXCJuYW1lXCI6IFwiaGFuZC10aHVtYnNkb3duLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiaGFuZC1kb3duLWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTYzY1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NDBcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODQxNDkyXCIsXG4gICAgICBcIm5hbWVcIjogXCJoYW5kLXRodW1ic2Rvd25cIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImhhbmQtZG93blwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTYzZFwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NDFcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODQxNDkzXCIsXG4gICAgICBcIm5hbWVcIjogXCJoYW5kLXRodW1ic3VwLWZpbGxlZFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiaGFuZC11cC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2M2VcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTQyXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDg0MTQ5NFwiLFxuICAgICAgXCJuYW1lXCI6IFwiaGFuZC10aHVtYnN1cFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiaGFuZC11cFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTYzZlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NDNcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODQxNDk2XCIsXG4gICAgICBcIm5hbWVcIjogXCJoZWFydC1maWxsZWRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImhlYXJ0LWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY0MVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NDVcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODQxNDk4XCIsXG4gICAgICBcIm5hbWVcIjogXCJtYWlsLW9wZW5cIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcIm1haWwtb3BlblwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTY0M1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5NDdcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODQxNDg4XCIsXG4gICAgICBcIm5hbWVcIjogXCJoZWFydFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiaGVhcnRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2MzlcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTM3XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDgzOTk2M1wiLFxuICAgICAgXCJuYW1lXCI6IFwibG9vcFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwibG9vcFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTYzM1wiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5MzFcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODM5ODY2XCIsXG4gICAgICBcIm5hbWVcIjogXCJwdWxsZG93blwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwicHVsbGRvd25cIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2MzJcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTMwXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDgxMzc5OFwiLFxuICAgICAgXCJuYW1lXCI6IFwic2NhblwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic2NhblwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTYyYVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5MjJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODEzNzg2XCIsXG4gICAgICBcIm5hbWVcIjogXCJiYXJzXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJiYXJzXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjI3XCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODkxOVxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4MTM3ODhcIixcbiAgICAgIFwibmFtZVwiOiBcImNhcnQtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjYXJ0LWZpbGxlZFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTYyOVwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5MjFcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODEzNzkwXCIsXG4gICAgICBcIm5hbWVcIjogXCJjaGVja2JveFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwiY2hlY2tib3hcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2MmJcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTIzXG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDgxMzc5MVwiLFxuICAgICAgXCJuYW1lXCI6IFwiY2hlY2tib3gtZmlsbGVkXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJjaGVja2JveC1maWxsZWRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2MmNcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTI0XG4gICAgfSxcbiAgICB7XG4gICAgICBcImljb25faWRcIjogXCIyNDgxMzc5NFwiLFxuICAgICAgXCJuYW1lXCI6IFwic2hvcFwiLFxuICAgICAgXCJmb250X2NsYXNzXCI6IFwic2hvcFwiLFxuICAgICAgXCJ1bmljb2RlXCI6IFwiZTYyZlwiLFxuICAgICAgXCJ1bmljb2RlX2RlY2ltYWxcIjogNTg5MjdcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiaWNvbl9pZFwiOiBcIjI0ODEzNzk1XCIsXG4gICAgICBcIm5hbWVcIjogXCJoZWFkcGhvbmVzXCIsXG4gICAgICBcImZvbnRfY2xhc3NcIjogXCJoZWFkcGhvbmVzXCIsXG4gICAgICBcInVuaWNvZGVcIjogXCJlNjMwXCIsXG4gICAgICBcInVuaWNvZGVfZGVjaW1hbFwiOiA1ODkyOFxuICAgIH0sXG4gICAge1xuICAgICAgXCJpY29uX2lkXCI6IFwiMjQ4MTM3OTZcIixcbiAgICAgIFwibmFtZVwiOiBcImNhcnRcIixcbiAgICAgIFwiZm9udF9jbGFzc1wiOiBcImNhcnRcIixcbiAgICAgIFwidW5pY29kZVwiOiBcImU2MzFcIixcbiAgICAgIFwidW5pY29kZV9kZWNpbWFsXCI6IDU4OTI5XG4gICAgfVxuICBdXG59XG4iLCI8dGVtcGxhdGU+XG5cdDwhLS0gI2lmZGVmIEFQUC1OVlVFIC0tPlxuXHQ8dGV4dCA6c3R5bGU9XCJ7IGNvbG9yOiBjb2xvciwgJ2ZvbnQtc2l6ZSc6IGljb25TaXplIH1cIiBjbGFzcz1cInVuaS1pY29uc1wiIEBjbGljaz1cIl9vbkNsaWNrXCI+e3t1bmljb2RlfX08L3RleHQ+XG5cdDwhLS0gI2VuZGlmIC0tPlxuXHQ8IS0tICNpZm5kZWYgQVBQLU5WVUUgLS0+XG5cdDx0ZXh0IDpzdHlsZT1cInsgY29sb3I6IGNvbG9yLCAnZm9udC1zaXplJzogaWNvblNpemUgfVwiIGNsYXNzPVwidW5pLWljb25zXCIgOmNsYXNzPVwiWyd1bml1aS0nK3R5cGUsY3VzdG9tUHJlZml4LGN1c3RvbVByZWZpeD90eXBlOicnXVwiIEBjbGljaz1cIl9vbkNsaWNrXCI+PC90ZXh0PlxuXHQ8IS0tICNlbmRpZiAtLT5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcblx0aW1wb3J0IGljb25zIGZyb20gJy4vaWNvbnMuanMnO1xuXHRjb25zdCBnZXRWYWwgPSAodmFsKSA9PiB7XG5cdFx0Y29uc3QgcmVnID0gL15bMC05XSokL2dcblx0XHRyZXR1cm4gKHR5cGVvZiB2YWwgPT09ICdudW1iZXInIHx844CAcmVnLnRlc3QodmFsKSApPyB2YWwgKyAncHgnIDogdmFsO1xuXHR9IFxyXG5cdC8vICNpZmRlZiBBUFAtTlZVRVxyXG5cdHZhciBkb21Nb2R1bGUgPSB3ZWV4LnJlcXVpcmVNb2R1bGUoJ2RvbScpO1xyXG5cdGltcG9ydCBpY29uVXJsIGZyb20gJy4vdW5paWNvbnMudHRmJ1xyXG5cdGRvbU1vZHVsZS5hZGRSdWxlKCdmb250RmFjZScsIHtcclxuXHRcdCdmb250RmFtaWx5JzogXCJ1bmlpY29uc1wiLFxyXG5cdFx0J3NyYyc6IFwidXJsKCdcIitpY29uVXJsK1wiJylcIlxyXG5cdH0pO1xyXG5cdC8vICNlbmRpZlxyXG5cclxuXHQvKipcclxuXHQgKiBJY29ucyDlm77moIdcclxuXHQgKiBAZGVzY3JpcHRpb24g55So5LqO5bGV56S6IGljb25zIOWbvuagh1xyXG5cdCAqIEB0dXRvcmlhbCBodHRwczovL2V4dC5kY2xvdWQubmV0LmNuL3BsdWdpbj9pZD0yOFxyXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBzaXplIOWbvuagh+Wkp+Wwj1xyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0eXBlIOWbvuagh+WbvuahiO+8jOWPguiAg+ekuuS+i1xyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBjb2xvciDlm77moIfpopzoibJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGN1c3RvbVByZWZpeCDoh6rlrprkuYnlm77moIdcblx0ICogQGV2ZW50IHtGdW5jdGlvbn0gY2xpY2sg54K55Ye7IEljb24g6Kem5Y+R5LqL5Lu2XHJcblx0ICovXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0bmFtZTogJ1VuaUljb25zJyxcclxuXHRcdGVtaXRzOlsnY2xpY2snXSxcclxuXHRcdHByb3BzOiB7XHJcblx0XHRcdHR5cGU6IHtcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJydcclxuXHRcdFx0fSxcclxuXHRcdFx0Y29sb3I6IHtcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJyMzMzMzMzMnXHJcblx0XHRcdH0sXHJcblx0XHRcdHNpemU6IHtcclxuXHRcdFx0XHR0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IDE2XHJcblx0XHRcdH0sXG5cdFx0XHRjdXN0b21QcmVmaXg6e1xuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRpY29uczogaWNvbnMuZ2x5cGhzXHJcblx0XHRcdH1cclxuXHRcdH0sXG5cdFx0Y29tcHV0ZWQ6e1xuXHRcdFx0dW5pY29kZSgpe1xuXHRcdFx0XHRsZXQgY29kZSA9IHRoaXMuaWNvbnMuZmluZCh2PT52LmZvbnRfY2xhc3MgPT09IHRoaXMudHlwZSlcblx0XHRcdFx0aWYoY29kZSl7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZXNjYXBlKGAldSR7Y29kZS51bmljb2RlfWApXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHR9LFxuXHRcdFx0aWNvblNpemUoKXtcblx0XHRcdFx0cmV0dXJuIGdldFZhbCh0aGlzLnNpemUpXG5cdFx0XHR9XG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0X29uQ2xpY2soKSB7XHJcblx0XHRcdFx0dGhpcy4kZW1pdCgnY2xpY2snKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuXHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXG5cdEBpbXBvcnQgJy4vdW5paWNvbnMuY3NzJztcclxuXHRAZm9udC1mYWNlIHtcclxuXHRcdGZvbnQtZmFtaWx5OiB1bmlpY29ucztcclxuXHRcdHNyYzogdXJsKCcuL3VuaWljb25zLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcclxuXHR9XHJcblxyXG5cdC8qICNlbmRpZiAqL1xuXHQudW5pLWljb25zIHtcclxuXHRcdGZvbnQtZmFtaWx5OiB1bmlpY29ucztcclxuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHR9XHJcblxyXG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxyXG5cdDx2aWV3XHJcblx0XHRjbGFzcz1cInVuaS1lYXN5aW5wdXRcIlxyXG5cdFx0OmNsYXNzPVwieyAndW5pLWVhc3lpbnB1dC1lcnJvcic6IG1zZyB9XCJcclxuXHRcdDpzdHlsZT1cImJveFN0eWxlXCJcclxuXHQ+XHJcblx0XHQ8dmlld1xyXG5cdFx0XHRjbGFzcz1cInVuaS1lYXN5aW5wdXRfX2NvbnRlbnRcIlxyXG5cdFx0XHQ6Y2xhc3M9XCJpbnB1dENvbnRlbnRDbGFzc1wiXHJcblx0XHRcdDpzdHlsZT1cImlucHV0Q29udGVudFN0eWxlXCJcclxuXHRcdD5cclxuXHRcdFx0PHNsb3QgbmFtZT1cInByZWZpeEljb25cIj5cclxuXHRcdFx0XHQ8dW5pLWljb25zXHJcblx0XHRcdFx0XHR2LWlmPVwicHJlZml4SWNvblwiXHJcblx0XHRcdFx0XHRjbGFzcz1cImNvbnRlbnQtY2xlYXItaWNvblwiXHJcblx0XHRcdFx0XHQ6dHlwZT1cInByZWZpeEljb25cIlxyXG5cdFx0XHRcdFx0Y29sb3I9XCIjYzBjNGNjXCJcclxuXHRcdFx0XHRcdEBjbGljaz1cIm9uQ2xpY2tJY29uKCdwcmVmaXgnKVwiXHJcblx0XHRcdFx0XHRzaXplPVwiMjJcIlxyXG5cdFx0XHRcdD48L3VuaS1pY29ucz5cclxuXHRcdFx0PC9zbG90PlxyXG5cdFx0XHQ8dGV4dGFyZWFcclxuXHRcdFx0XHR2LWlmPVwidHlwZSA9PT0gJ3RleHRhcmVhJ1wiXHJcblx0XHRcdFx0Y2xhc3M9XCJ1bmktZWFzeWlucHV0X19jb250ZW50LXRleHRhcmVhXCJcclxuXHRcdFx0XHQ6Y2xhc3M9XCJ7ICdpbnB1dC1wYWRkaW5nJzogaW5wdXRCb3JkZXIgfVwiXHJcblx0XHRcdFx0Om5hbWU9XCJuYW1lXCJcclxuXHRcdFx0XHQ6dmFsdWU9XCJ2YWxcIlxyXG5cdFx0XHRcdDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHQ6cGxhY2Vob2xkZXJTdHlsZT1cInBsYWNlaG9sZGVyU3R5bGVcIlxyXG5cdFx0XHRcdDpkaXNhYmxlZD1cImRpc2FibGVkXCJcclxuXHRcdFx0XHRwbGFjZWhvbGRlci1jbGFzcz1cInVuaS1lYXN5aW5wdXRfX3BsYWNlaG9sZGVyLWNsYXNzXCJcclxuXHRcdFx0XHQ6bWF4bGVuZ3RoPVwiaW5wdXRNYXhsZW5ndGhcIlxyXG5cdFx0XHRcdDpmb2N1cz1cImZvY3VzZWRcIlxyXG5cdFx0XHRcdDphdXRvSGVpZ2h0PVwiYXV0b0hlaWdodFwiXHJcblx0XHRcdFx0QGlucHV0PVwib25JbnB1dFwiXHJcblx0XHRcdFx0QGJsdXI9XCJfQmx1clwiXHJcblx0XHRcdFx0QGZvY3VzPVwiX0ZvY3VzXCJcclxuXHRcdFx0XHRAY29uZmlybT1cIm9uQ29uZmlybVwiXHJcblx0XHRcdD48L3RleHRhcmVhPlxyXG5cdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHR2LWVsc2VcclxuXHRcdFx0XHQ6dHlwZT1cInR5cGUgPT09ICdwYXNzd29yZCcgPyAndGV4dCcgOiB0eXBlXCJcclxuXHRcdFx0XHRjbGFzcz1cInVuaS1lYXN5aW5wdXRfX2NvbnRlbnQtaW5wdXRcIlxyXG5cdFx0XHRcdDpzdHlsZT1cImlucHV0U3R5bGVcIlxyXG5cdFx0XHRcdDpuYW1lPVwibmFtZVwiXHJcblx0XHRcdFx0OnZhbHVlPVwidmFsXCJcclxuXHRcdFx0XHQ6cGFzc3dvcmQ9XCIhc2hvd1Bhc3N3b3JkICYmIHR5cGUgPT09ICdwYXNzd29yZCdcIlxyXG5cdFx0XHRcdDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHQ6cGxhY2Vob2xkZXJTdHlsZT1cInBsYWNlaG9sZGVyU3R5bGVcIlxyXG5cdFx0XHRcdHBsYWNlaG9sZGVyLWNsYXNzPVwidW5pLWVhc3lpbnB1dF9fcGxhY2Vob2xkZXItY2xhc3NcIlxyXG5cdFx0XHRcdDpkaXNhYmxlZD1cImRpc2FibGVkXCJcclxuXHRcdFx0XHQ6bWF4bGVuZ3RoPVwiaW5wdXRNYXhsZW5ndGhcIlxyXG5cdFx0XHRcdDpmb2N1cz1cImZvY3VzZWRcIlxyXG5cdFx0XHRcdDpjb25maXJtVHlwZT1cImNvbmZpcm1UeXBlXCJcclxuXHRcdFx0XHRAZm9jdXM9XCJfRm9jdXNcIlxyXG5cdFx0XHRcdEBibHVyPVwiX0JsdXJcIlxyXG5cdFx0XHRcdEBpbnB1dD1cIm9uSW5wdXRcIlxyXG5cdFx0XHRcdEBjb25maXJtPVwib25Db25maXJtXCJcclxuXHRcdFx0Lz5cclxuXHRcdFx0PHRlbXBsYXRlIHYtaWY9XCJ0eXBlID09PSAncGFzc3dvcmQnICYmIHBhc3N3b3JkSWNvblwiPlxyXG5cdFx0XHRcdDwhLS0g5byA5ZCv5a+G56CB5pe25pi+56S65bCP55y8552bIC0tPlxyXG5cdFx0XHRcdDx1bmktaWNvbnNcclxuXHRcdFx0XHRcdHYtaWY9XCJpc1ZhbFwiXHJcblx0XHRcdFx0XHRjbGFzcz1cImNvbnRlbnQtY2xlYXItaWNvblwiXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJ7ICdpcy10ZXh0YXJlYS1pY29uJzogdHlwZSA9PT0gJ3RleHRhcmVhJyB9XCJcclxuXHRcdFx0XHRcdDp0eXBlPVwic2hvd1Bhc3N3b3JkID8gJ2V5ZS1zbGFzaC1maWxsZWQnIDogJ2V5ZS1maWxsZWQnXCJcclxuXHRcdFx0XHRcdDpzaXplPVwiMjJcIlxyXG5cdFx0XHRcdFx0OmNvbG9yPVwiZm9jdXNTaG93ID8gcHJpbWFyeUNvbG9yIDogJyNjMGM0Y2MnXCJcclxuXHRcdFx0XHRcdEBjbGljaz1cIm9uRXllc1wiXHJcblx0XHRcdFx0PlxyXG5cdFx0XHRcdDwvdW5pLWljb25zPlxyXG5cdFx0XHQ8L3RlbXBsYXRlPlxyXG5cdFx0XHQ8dGVtcGxhdGUgdi1lbHNlLWlmPVwic3VmZml4SWNvbiB8fCAkc2xvdHMuc3VmZml4SWNvblwiPlxyXG5cdFx0XHRcdDxzbG90IG5hbWU9XCJzdWZmaXhJY29uXCI+XHJcblx0XHRcdFx0XHQ8dW5pLWljb25zXHJcblx0XHRcdFx0XHRcdHYtaWY9XCJzdWZmaXhJY29uXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjb250ZW50LWNsZWFyLWljb25cIlxyXG5cdFx0XHRcdFx0XHQ6dHlwZT1cInN1ZmZpeEljb25cIlxyXG5cdFx0XHRcdFx0XHRjb2xvcj1cIiNjMGM0Y2NcIlxyXG5cdFx0XHRcdFx0XHRAY2xpY2s9XCJvbkNsaWNrSWNvbignc3VmZml4JylcIlxyXG5cdFx0XHRcdFx0XHRzaXplPVwiMjJcIlxyXG5cdFx0XHRcdFx0PjwvdW5pLWljb25zPlxyXG5cdFx0XHRcdDwvc2xvdD5cclxuXHRcdFx0PC90ZW1wbGF0ZT5cclxuXHRcdFx0PHRlbXBsYXRlIHYtZWxzZT5cclxuXHRcdFx0XHQ8dW5pLWljb25zXHJcblx0XHRcdFx0XHR2LWlmPVwiY2xlYXJhYmxlICYmIGlzVmFsICYmICFkaXNhYmxlZCAmJiB0eXBlICE9PSAndGV4dGFyZWEnXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwiY29udGVudC1jbGVhci1pY29uXCJcclxuXHRcdFx0XHRcdDpjbGFzcz1cInsgJ2lzLXRleHRhcmVhLWljb24nOiB0eXBlID09PSAndGV4dGFyZWEnIH1cIlxyXG5cdFx0XHRcdFx0dHlwZT1cImNsZWFyXCJcclxuXHRcdFx0XHRcdDpzaXplPVwiY2xlYXJTaXplXCJcclxuXHRcdFx0XHRcdDpjb2xvcj1cIm1zZyA/ICcjZGQ1MjRkJyA6IGZvY3VzU2hvdyA/IHByaW1hcnlDb2xvciA6ICcjYzBjNGNjJ1wiXHJcblx0XHRcdFx0XHRAY2xpY2s9XCJvbkNsZWFyXCJcclxuXHRcdFx0XHQ+PC91bmktaWNvbnM+XHJcblx0XHRcdDwvdGVtcGxhdGU+XHJcblx0XHRcdDxzbG90IG5hbWU9XCJyaWdodFwiPjwvc2xvdD5cclxuXHRcdDwvdmlldz5cclxuXHQ8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG4vKipcclxuICogRWFzeWlucHV0IOi+k+WFpeahhlxyXG4gKiBAZGVzY3JpcHRpb24g5q2k57uE5Lu25Y+v5Lul5a6e546w6KGo5Y2V55qE6L6T5YWl5LiO5qCh6aqM77yM5YyF5ousIFwidGV4dFwiIOWSjCBcInRleHRhcmVhXCIg57G75Z6L44CCXHJcbiAqIEB0dXRvcmlhbCBodHRwczovL2V4dC5kY2xvdWQubmV0LmNuL3BsdWdpbj9pZD0zNDU1XHJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfVx0dmFsdWVcdOi+k+WFpeWGheWuuVxyXG4gKiBAcHJvcGVydHkge1N0cmluZyB9XHR0eXBlXHTovpPlhaXmoYbnmoTnsbvlnovvvIjpu5jorqR0ZXh077yJIHBhc3N3b3JkL3RleHQvdGV4dGFyZWEvLi5cclxuICogXHRAdmFsdWUgdGV4dFx0XHRcdOaWh+acrOi+k+WFpemUruebmFxyXG4gKiBcdEB2YWx1ZSB0ZXh0YXJlYVx05aSa6KGM5paH5pys6L6T5YWl6ZSu55uYXHJcbiAqIFx0QHZhbHVlIHBhc3N3b3JkXHTlr4bnoIHovpPlhaXplK7nm5hcclxuICogXHRAdmFsdWUgbnVtYmVyXHRcdOaVsOWtl+i+k+WFpemUruebmO+8jOazqOaEj2lPU+S4imFwcC12dWXlvLnlh7rnmoTmlbDlrZfplK7nm5jlubbpnZ455a6r5qC85pa55byPXHJcbiAqIFx0QHZhbHVlIGlkY2FyZFx0XHTouqvku73or4HovpPlhaXplK7nm5jvvIzkv6HjgIHmlK/ku5jlrp3jgIHnmb7luqbjgIFRUeWwj+eoi+W6j1xyXG4gKiBcdEB2YWx1ZSBkaWdpdFx0XHTluKblsI/mlbDngrnnmoTmlbDlrZfplK7nm5hcdO+8jEFwcOeahG52dWXpobXpnaLjgIHlvq7kv6HjgIHmlK/ku5jlrp3jgIHnmb7luqbjgIHlpLTmnaHjgIFRUeWwj+eoi+W6j+aUr+aMgVxyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59XHRjbGVhcmFibGVcdOaYr+WQpuaYvuekuuWPs+S+p+a4heepuuWGheWuueeahOWbvuagh+aOp+S7tu+8jOeCueWHu+WPr+a4heepuui+k+WFpeahhuWGheWuue+8iOm7mOiupHRydWXvvIlcclxuICogQHByb3BlcnR5IHtCb29sZWFufVx0YXV0b0hlaWdodFx05piv5ZCm6Ieq5Yqo5aKe6auY6L6T5YWl5Yy65Z+f77yMdHlwZeS4unRleHRhcmVh5pe25pyJ5pWI77yI6buY6K6kdHJ1Ze+8iVxyXG4gKiBAcHJvcGVydHkge1N0cmluZyB9XHRwbGFjZWhvbGRlclx06L6T5YWl5qGG55qE5o+Q56S65paH5a2XXHJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nIH1cdHBsYWNlaG9sZGVyU3R5bGVcdHBsYWNlaG9sZGVy55qE5qC35byPKOWGheiBlOagt+W8j++8jOWtl+espuS4sinvvIzlpoJcImNvbG9yOiAjZGRkXCJcclxuICogQHByb3BlcnR5IHtCb29sZWFufVx0Zm9jdXNcdOaYr+WQpuiHquWKqOiOt+W+l+eEpueCue+8iOm7mOiupGZhbHNl77yJXHJcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn1cdGRpc2FibGVkXHTmmK/lkKbnpoHnlKjvvIjpu5jorqRmYWxzZe+8iVxyXG4gKiBAcHJvcGVydHkge051bWJlciB9XHRtYXhsZW5ndGhcdOacgOWkp+i+k+WFpemVv+W6pu+8jOiuvue9ruS4uiAtMSDnmoTml7blgJnkuI3pmZDliLbmnIDlpKfplb/luqbvvIjpu5jorqQxNDDvvIlcclxuICogQHByb3BlcnR5IHtTdHJpbmcgfVx0Y29uZmlybVR5cGVcdOiuvue9rumUruebmOWPs+S4i+inkuaMiemSrueahOaWh+Wtl++8jOS7heWcqHR5cGU9XCJ0ZXh0XCLml7bnlJ/mlYjvvIjpu5jorqRkb25l77yJXHJcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyIH1cdGNsZWFyU2l6ZVx05riF6Zmk5Zu+5qCH55qE5aSn5bCP77yM5Y2V5L2NcHjvvIjpu5jorqQxNe+8iVxyXG4gKiBAcHJvcGVydHkge1N0cmluZ31cdHByZWZpeEljb25cdOi+k+WFpeahhuWktOmDqOWbvuagh1xyXG4gKiBAcHJvcGVydHkge1N0cmluZ31cdHN1ZmZpeEljb25cdOi+k+WFpeahhuWwvumDqOWbvuagh1xyXG4gKiBAcHJvcGVydHkge1N0cmluZ31cdHByaW1hcnlDb2xvclx06K6+572u5Li76aKY6Imy77yI6buY6K6kIzI5NzlmZu+8iVxyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59XHR0cmltXHTmmK/lkKboh6rliqjljrvpmaTkuKTnq6/nmoTnqbrmoLxcclxuICogQHZhbHVlIGJvdGhcdOWOu+mZpOS4pOerr+epuuagvFxyXG4gKiBAdmFsdWUgbGVmdFx05Y676Zmk5bem5L6n56m65qC8XHJcbiAqIEB2YWx1ZSByaWdodFx05Y676Zmk5Y+z5L6n56m65qC8XHJcbiAqIEB2YWx1ZSBzdGFydFx05Y676Zmk5bem5L6n56m65qC8XHJcbiAqIEB2YWx1ZSBlbmRcdFx05Y676Zmk5Y+z5L6n56m65qC8XHJcbiAqIEB2YWx1ZSBhbGxcdFx05Y676Zmk5YWo6YOo56m65qC8XHJcbiAqIEB2YWx1ZSBub25lXHTkuI3ljrvpmaTnqbrmoLxcclxuICogQHByb3BlcnR5IHtCb29sZWFufVx0aW5wdXRCb3JkZXJcdOaYr+WQpuaYvuekumlucHV06L6T5YWl5qGG55qE6L655qGG77yI6buY6K6kdHJ1Ze+8iVxyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59XHRwYXNzd29yZEljb25cdHR5cGU9cGFzc3dvcmTml7bmmK/lkKbmmL7npLrlsI/nnLznnZvlm77moIdcclxuICogQHByb3BlcnR5IHtPYmplY3R9XHRzdHlsZXNcdOiHquWumuS5ieminOiJslxyXG4gKiBAZXZlbnQge0Z1bmN0aW9ufVx0aW5wdXRcdOi+k+WFpeahhuWGheWuueWPkeeUn+WPmOWMluaXtuinpuWPkVxyXG4gKiBAZXZlbnQge0Z1bmN0aW9ufVx0Zm9jdXNcdOi+k+WFpeahhuiOt+W+l+eEpueCueaXtuinpuWPkVxyXG4gKiBAZXZlbnQge0Z1bmN0aW9ufVx0Ymx1clx06L6T5YWl5qGG5aSx5Y6754Sm54K55pe26Kem5Y+RXHJcbiAqIEBldmVudCB7RnVuY3Rpb259XHRjb25maXJtXHTngrnlh7vlrozmiJDmjInpkq7ml7bop6blj5FcclxuICogQGV2ZW50IHtGdW5jdGlvbn1cdGljb25DbGlja1x054K55Ye75Zu+5qCH5pe26Kem5Y+RXHJcbiAqIEBzbG90IHByZWZpeEljb24g6L6T5YWl5qGG5aS06YOo5o+S5qe9XHJcbiAqIEBzbG90IHN1ZmZpeEljb24g6L6T5YWl5qGG5bC+6YOo5o+S5qe9XHJcbiAqIEBleGFtcGxlIDx1bmktZWFzeWlucHV0IHYtbW9kZWw9XCJtb2JpbGVcIj48L3VuaS1lYXN5aW5wdXQ+XHJcbiAqL1xyXG5mdW5jdGlvbiBvYmoyc3RyQ2xhc3Mob2JqKSB7XHJcblx0bGV0IGNsYXNzZXNzID0gXCJcIjtcclxuXHRmb3IgKGxldCBrZXkgaW4gb2JqKSB7XHJcblx0XHRjb25zdCB2YWwgPSBvYmpba2V5XTtcclxuXHRcdGlmICh2YWwpIHtcclxuXHRcdFx0Y2xhc3Nlc3MgKz0gYCR7a2V5fSBgO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gY2xhc3Nlc3M7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9iajJzdHJTdHlsZShvYmopIHtcclxuXHRsZXQgc3R5bGUgPSBcIlwiO1xyXG5cdGZvciAobGV0IGtleSBpbiBvYmopIHtcclxuXHRcdGNvbnN0IHZhbCA9IG9ialtrZXldO1xyXG5cdFx0c3R5bGUgKz0gYCR7a2V5fToke3ZhbH07YDtcclxuXHR9XHJcblx0cmV0dXJuIHN0eWxlO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHRuYW1lOiBcInVuaS1lYXN5aW5wdXRcIixcclxuXHRlbWl0czogW1xyXG5cdFx0XCJjbGlja1wiLFxyXG5cdFx0XCJpY29uQ2xpY2tcIixcclxuXHRcdFwidXBkYXRlOm1vZGVsVmFsdWVcIixcclxuXHRcdFwiaW5wdXRcIixcclxuXHRcdFwiZm9jdXNcIixcclxuXHRcdFwiYmx1clwiLFxyXG5cdFx0XCJjb25maXJtXCIsXHJcblx0XHRcImNsZWFyXCIsXHJcblx0XHRcImV5ZXNcIixcclxuXHRcdFwiY2hhbmdlXCIsXHJcblx0XSxcclxuXHRtb2RlbDoge1xyXG5cdFx0cHJvcDogXCJtb2RlbFZhbHVlXCIsXHJcblx0XHRldmVudDogXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLFxyXG5cdH0sXHJcblx0b3B0aW9uczoge1xyXG5cdFx0dmlydHVhbEhvc3Q6IHRydWUsXHJcblx0fSxcclxuXHRpbmplY3Q6IHtcclxuXHRcdGZvcm06IHtcclxuXHRcdFx0ZnJvbTogXCJ1bmlGb3JtXCIsXHJcblx0XHRcdGRlZmF1bHQ6IG51bGwsXHJcblx0XHR9LFxyXG5cdFx0Zm9ybUl0ZW06IHtcclxuXHRcdFx0ZnJvbTogXCJ1bmlGb3JtSXRlbVwiLFxyXG5cdFx0XHRkZWZhdWx0OiBudWxsLFxyXG5cdFx0fSxcclxuXHR9LFxyXG5cdHByb3BzOiB7XHJcblx0XHRuYW1lOiBTdHJpbmcsXHJcblx0XHR2YWx1ZTogW051bWJlciwgU3RyaW5nXSxcclxuXHRcdG1vZGVsVmFsdWU6IFtOdW1iZXIsIFN0cmluZ10sXHJcblx0XHR0eXBlOiB7XHJcblx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0ZGVmYXVsdDogXCJ0ZXh0XCIsXHJcblx0XHR9LFxyXG5cdFx0Y2xlYXJhYmxlOiB7XHJcblx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdGRlZmF1bHQ6IHRydWUsXHJcblx0XHR9LFxyXG5cdFx0YXV0b0hlaWdodDoge1xyXG5cdFx0XHR0eXBlOiBCb29sZWFuLFxyXG5cdFx0XHRkZWZhdWx0OiBmYWxzZSxcclxuXHRcdH0sXHJcblx0XHRwbGFjZWhvbGRlcjoge1xyXG5cdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdGRlZmF1bHQ6IFwiIFwiLFxyXG5cdFx0fSxcclxuXHRcdHBsYWNlaG9sZGVyU3R5bGU6IFN0cmluZyxcclxuXHRcdGZvY3VzOiB7XHJcblx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdGRlZmF1bHQ6IGZhbHNlLFxyXG5cdFx0fSxcclxuXHRcdGRpc2FibGVkOiB7XHJcblx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdGRlZmF1bHQ6IGZhbHNlLFxyXG5cdFx0fSxcclxuXHRcdG1heGxlbmd0aDoge1xyXG5cdFx0XHR0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxyXG5cdFx0XHRkZWZhdWx0OiAxNDAsXHJcblx0XHR9LFxyXG5cdFx0Y29uZmlybVR5cGU6IHtcclxuXHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRkZWZhdWx0OiBcImRvbmVcIixcclxuXHRcdH0sXHJcblx0XHRjbGVhclNpemU6IHtcclxuXHRcdFx0dHlwZTogW051bWJlciwgU3RyaW5nXSxcclxuXHRcdFx0ZGVmYXVsdDogMjQsXHJcblx0XHR9LFxyXG5cdFx0aW5wdXRCb3JkZXI6IHtcclxuXHRcdFx0dHlwZTogQm9vbGVhbixcclxuXHRcdFx0ZGVmYXVsdDogdHJ1ZSxcclxuXHRcdH0sXHJcblx0XHRwcmVmaXhJY29uOiB7XHJcblx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0ZGVmYXVsdDogXCJcIixcclxuXHRcdH0sXHJcblx0XHRzdWZmaXhJY29uOiB7XHJcblx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0ZGVmYXVsdDogXCJcIixcclxuXHRcdH0sXHJcblx0XHR0cmltOiB7XHJcblx0XHRcdHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLFxyXG5cdFx0XHRkZWZhdWx0OiB0cnVlLFxyXG5cdFx0fSxcclxuXHRcdHBhc3N3b3JkSWNvbjoge1xyXG5cdFx0XHR0eXBlOiBCb29sZWFuLFxyXG5cdFx0XHRkZWZhdWx0OiB0cnVlLFxyXG5cdFx0fSxcclxuXHRcdHByaW1hcnlDb2xvcjoge1xyXG5cdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdGRlZmF1bHQ6IFwiIzI5NzlmZlwiLFxyXG5cdFx0fSxcclxuXHRcdHN0eWxlczoge1xyXG5cdFx0XHR0eXBlOiBPYmplY3QsXHJcblx0XHRcdGRlZmF1bHQoKSB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGNvbG9yOiBcIiMzMzNcIixcclxuXHRcdFx0XHRcdGRpc2FibGVDb2xvcjogXCIjRjdGNkY2XCIsXHJcblx0XHRcdFx0XHRib3JkZXJDb2xvcjogXCIjZTVlNWU1XCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSxcclxuXHRcdH0sXHJcblx0XHRlcnJvck1lc3NhZ2U6IHtcclxuXHRcdFx0dHlwZTogW1N0cmluZywgQm9vbGVhbl0sXHJcblx0XHRcdGRlZmF1bHQ6IFwiXCIsXHJcblx0XHR9LFxyXG5cdH0sXHJcblx0ZGF0YSgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGZvY3VzZWQ6IGZhbHNlLFxyXG5cdFx0XHR2YWw6IFwiXCIsXHJcblx0XHRcdHNob3dNc2c6IFwiXCIsXHJcblx0XHRcdGJvcmRlcjogZmFsc2UsXHJcblx0XHRcdGlzRmlyc3RCb3JkZXI6IGZhbHNlLFxyXG5cdFx0XHRzaG93Q2xlYXJJY29uOiBmYWxzZSxcclxuXHRcdFx0c2hvd1Bhc3N3b3JkOiBmYWxzZSxcclxuXHRcdFx0Zm9jdXNTaG93OiBmYWxzZSxcclxuXHRcdFx0bG9jYWxNc2c6IFwiXCIsXHJcblx0XHR9O1xyXG5cdH0sXHJcblx0Y29tcHV0ZWQ6IHtcclxuXHRcdC8vIOi+k+WFpeahhuWGheaYr+WQpuacieWAvFxyXG5cdFx0aXNWYWwoKSB7XHJcblx0XHRcdGNvbnN0IHZhbCA9IHRoaXMudmFsO1xyXG5cdFx0XHQvLyBmaXhlZCBieSBtZWhhb3RpYW4g5aSE55CG5YC85Li6MOeahOaDheWGte+8jOWtl+espuS4sjDkuI3lnKjlpITnkIbojIPlm7RcclxuXHRcdFx0aWYgKHZhbCB8fCB2YWwgPT09IDApIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9LFxyXG5cclxuXHRcdG1zZygpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ2NvbXB1dGVkJywgdGhpcy5mb3JtLCB0aGlzLmZvcm1JdGVtKTtcclxuXHRcdFx0Ly8gaWYgKHRoaXMuZm9ybSkge1xyXG5cdFx0XHQvLyBcdHJldHVybiB0aGlzLmVycm9yTWVzc2FnZSB8fCB0aGlzLmZvcm1JdGVtLmVyck1zZztcclxuXHRcdFx0Ly8gfVxyXG5cdFx0XHQvLyBUT0RPIOWkhOeQhuWktOadoSBmb3JtSXRlbSDkuK0gZXJyTXNnIOS4jeabtOaWsOeahOmXrumimFxyXG5cdFx0XHRyZXR1cm4gdGhpcy5sb2NhbE1zZyB8fCB0aGlzLmVycm9yTWVzc2FnZTtcclxuXHRcdH0sXHJcblx0XHQvLyDlm6DkuLp1bmlhcHDnmoRpbnB1dOe7hOS7tueahG1heGxlbmd0aOe7hOS7tuW/hemhu+imgeaVsOWAvO+8jOi/memHjOi9rOS4uuaVsOWAvO+8jOeUqOaIt+WPr+S7peS8oOWFpeWtl+espuS4suaVsOWAvFxyXG5cdFx0aW5wdXRNYXhsZW5ndGgoKSB7XHJcblx0XHRcdHJldHVybiBOdW1iZXIodGhpcy5tYXhsZW5ndGgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyDlpITnkIblpJblsYLmoLflvI/nmoRzdHlsZVxyXG5cdFx0Ym94U3R5bGUoKSB7XHJcblx0XHRcdHJldHVybiBgY29sb3I6JHtcclxuXHRcdFx0XHR0aGlzLmlucHV0Qm9yZGVyICYmIHRoaXMubXNnID8gXCIjZTQzZDMzXCIgOiB0aGlzLnN0eWxlcy5jb2xvclxyXG5cdFx0XHR9O2A7XHJcblx0XHR9LFxyXG5cdFx0Ly8gaW5wdXQg5YaF5a6555qE57G75ZKM5qC35byP5aSE55CGXHJcblx0XHRpbnB1dENvbnRlbnRDbGFzcygpIHtcclxuXHRcdFx0cmV0dXJuIG9iajJzdHJDbGFzcyh7XHJcblx0XHRcdFx0XCJpcy1pbnB1dC1ib3JkZXJcIjogdGhpcy5pbnB1dEJvcmRlcixcclxuXHRcdFx0XHRcImlzLWlucHV0LWVycm9yLWJvcmRlclwiOiB0aGlzLmlucHV0Qm9yZGVyICYmIHRoaXMubXNnLFxyXG5cdFx0XHRcdFwiaXMtdGV4dGFyZWFcIjogdGhpcy50eXBlID09PSBcInRleHRhcmVhXCIsXHJcblx0XHRcdFx0XCJpcy1kaXNhYmxlZFwiOiB0aGlzLmRpc2FibGVkLFxyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblx0XHRpbnB1dENvbnRlbnRTdHlsZSgpIHtcclxuXHRcdFx0Y29uc3QgZm9jdXNDb2xvciA9IHRoaXMuZm9jdXNTaG93XHJcblx0XHRcdFx0PyB0aGlzLnByaW1hcnlDb2xvclxyXG5cdFx0XHRcdDogdGhpcy5zdHlsZXMuYm9yZGVyQ29sb3I7XHJcblx0XHRcdGNvbnN0IGJvcmRlckNvbG9yID0gdGhpcy5pbnB1dEJvcmRlciAmJiB0aGlzLm1zZyA/IFwiI2RkNTI0ZFwiIDogZm9jdXNDb2xvcjtcclxuXHRcdFx0cmV0dXJuIG9iajJzdHJTdHlsZSh7XHJcblx0XHRcdFx0XCJib3JkZXItY29sb3JcIjogYm9yZGVyQ29sb3IgfHwgXCIjZTVlNWU1XCIsXHJcblx0XHRcdFx0XCJiYWNrZ3JvdW5kLWNvbG9yXCI6IHRoaXMuZGlzYWJsZWRcclxuXHRcdFx0XHRcdD8gdGhpcy5zdHlsZXMuZGlzYWJsZUNvbG9yXHJcblx0XHRcdFx0XHQ6IHRoaXMuc3R5bGVzLmJhY2tncm91bmRDb2xvcixcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0Ly8gaW5wdXTlj7PkvqfmoLflvI9cclxuXHRcdGlucHV0U3R5bGUoKSB7XHJcblx0XHRcdGNvbnN0IHBhZGRpbmdSaWdodCA9XHJcblx0XHRcdFx0dGhpcy50eXBlID09PSBcInBhc3N3b3JkXCIgfHwgdGhpcy5jbGVhcmFibGUgfHwgdGhpcy5wcmVmaXhJY29uXHJcblx0XHRcdFx0XHQ/IFwiXCJcclxuXHRcdFx0XHRcdDogXCIxMHB4XCI7XHJcblx0XHRcdHJldHVybiBvYmoyc3RyU3R5bGUoe1xyXG5cdFx0XHRcdFwicGFkZGluZy1yaWdodFwiOiBwYWRkaW5nUmlnaHQsXHJcblx0XHRcdFx0XCJwYWRkaW5nLWxlZnRcIjogdGhpcy5wcmVmaXhJY29uID8gXCJcIiA6IFwiMTBweFwiLFxyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblx0fSxcclxuXHR3YXRjaDoge1xyXG5cdFx0dmFsdWUobmV3VmFsKSB7XHJcblx0XHRcdHRoaXMudmFsID0gbmV3VmFsO1xyXG5cdFx0fSxcclxuXHRcdG1vZGVsVmFsdWUobmV3VmFsKSB7XHJcblx0XHRcdHRoaXMudmFsID0gbmV3VmFsO1xyXG5cdFx0fSxcclxuXHRcdGZvY3VzKG5ld1ZhbCkge1xyXG5cdFx0XHR0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5mb2N1c2VkID0gdGhpcy5mb2N1cztcclxuXHRcdFx0XHR0aGlzLmZvY3VzU2hvdyA9IHRoaXMuZm9jdXM7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHR9LFxyXG5cdGNyZWF0ZWQoKSB7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHRcdC8vIFRPRE8g5aSE55CG5aS05p2hdnVlMyBjb21wdXRlZCDkuI3nm5HlkKwgaW5qZWN0IOabtOaUueeahOmXrumimO+8iGZvcm1JdGVtLmVyck1zZ++8iVxyXG5cdFx0aWYgKHRoaXMuZm9ybSAmJiB0aGlzLmZvcm1JdGVtKSB7XHJcblx0XHRcdHRoaXMuJHdhdGNoKFwiZm9ybUl0ZW0uZXJyTXNnXCIsIChuZXdWYWwpID0+IHtcclxuXHRcdFx0XHR0aGlzLmxvY2FsTXNnID0gbmV3VmFsO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9LFxyXG5cdG1vdW50ZWQoKSB7XHJcblx0XHR0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcblx0XHRcdHRoaXMuZm9jdXNlZCA9IHRoaXMuZm9jdXM7XHJcblx0XHRcdHRoaXMuZm9jdXNTaG93ID0gdGhpcy5mb2N1cztcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0bWV0aG9kczoge1xyXG5cdFx0LyoqXHJcblx0XHQgKiDliJ3lp4vljJblj5jph4/lgLxcclxuXHRcdCAqL1xyXG5cdFx0aW5pdCgpIHtcclxuXHRcdFx0aWYgKHRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZSA9PT0gMCkge1xyXG5cdFx0XHRcdHRoaXMudmFsID0gdGhpcy52YWx1ZTtcclxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm1vZGVsVmFsdWUgfHwgdGhpcy5tb2RlbFZhbHVlID09PSAwKSB7XHJcblx0XHRcdFx0dGhpcy52YWwgPSB0aGlzLm1vZGVsVmFsdWU7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy52YWwgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICog54K55Ye75Zu+5qCH5pe26Kem5Y+RXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdHlwZVxyXG5cdFx0ICovXHJcblx0XHRvbkNsaWNrSWNvbih0eXBlKSB7XHJcblx0XHRcdHRoaXMuJGVtaXQoXCJpY29uQ2xpY2tcIiwgdHlwZSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICog5pi+56S66ZqQ6JeP5YaF5a6577yM5a+G56CB5qGG5pe255Sf5pWIXHJcblx0XHQgKi9cclxuXHRcdG9uRXllcygpIHtcclxuXHRcdFx0dGhpcy5zaG93UGFzc3dvcmQgPSAhdGhpcy5zaG93UGFzc3dvcmQ7XHJcblx0XHRcdHRoaXMuJGVtaXQoXCJleWVzXCIsIHRoaXMuc2hvd1Bhc3N3b3JkKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDovpPlhaXml7bop6blj5FcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG5cdFx0ICovXHJcblx0XHRvbklucHV0KGV2ZW50KSB7XHJcblx0XHRcdGxldCB2YWx1ZSA9IGV2ZW50LmRldGFpbC52YWx1ZTtcclxuXHRcdFx0Ly8g5Yik5pat5piv5ZCm5Y676Zmk56m65qC8XHJcblx0XHRcdGlmICh0aGlzLnRyaW0pIHtcclxuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMudHJpbSA9PT0gXCJib29sZWFuXCIgJiYgdGhpcy50cmltKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHRoaXMudHJpbVN0cih2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0eXBlb2YgdGhpcy50cmltID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHRoaXMudHJpbVN0cih2YWx1ZSwgdGhpcy50cmltKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZXJyTXNnKSB0aGlzLmVyck1zZyA9IFwiXCI7XHJcblx0XHRcdHRoaXMudmFsID0gdmFsdWU7XHJcblx0XHRcdC8vIFRPRE8g5YW85a65IHZ1ZTJcclxuXHRcdFx0dGhpcy4kZW1pdChcImlucHV0XCIsIHZhbHVlKTtcclxuXHRcdFx0Ly8gVE9ET+OAgOWFvOWuueOAgHZ1ZTNcclxuXHRcdFx0dGhpcy4kZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIHZhbHVlKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDlpJbpg6josIPnlKjmlrnms5VcclxuXHRcdCAqIOiOt+WPlueEpueCueaXtuinpuWPkVxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XHJcblx0XHQgKi9cclxuXHRcdG9uRm9jdXMoKSB7XHJcblx0XHRcdHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy4kZW1pdChcImZvY3VzXCIsIG51bGwpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRfRm9jdXMoZXZlbnQpIHtcclxuXHRcdFx0dGhpcy5mb2N1c1Nob3cgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLiRlbWl0KFwiZm9jdXNcIiwgZXZlbnQpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIOWklumDqOiwg+eUqOaWueazlVxyXG5cdFx0ICog5aSx5Y6754Sm54K55pe26Kem5Y+RXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcclxuXHRcdCAqL1xyXG5cdFx0b25CbHVyKCkge1xyXG5cdFx0XHR0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy4kZW1pdChcImZvY3VzXCIsIG51bGwpO1xyXG5cdFx0fSxcclxuXHRcdF9CbHVyKGV2ZW50KSB7XHJcblx0XHRcdGxldCB2YWx1ZSA9IGV2ZW50LmRldGFpbC52YWx1ZTtcclxuXHRcdFx0dGhpcy5mb2N1c1Nob3cgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy4kZW1pdChcImJsdXJcIiwgZXZlbnQpO1xyXG5cdFx0XHQvLyDmoLnmja7nsbvlnovov5Tlm57lgLzvvIzlnKhldmVudOS4reiOt+WPlueahOWAvOeQhuiuuuS4iuiusumDveaYr3N0cmluZ1xyXG5cdFx0XHR0aGlzLiRlbWl0KFwiY2hhbmdlXCIsIHRoaXMudmFsKTtcclxuXHRcdFx0Ly8g5aSx5Y6754Sm54K55pe25Y+C5LiO6KGo5Y2V5qCh6aqMXHJcblx0XHRcdGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtSXRlbSkge1xyXG5cdFx0XHRcdGNvbnN0IHsgdmFsaWRhdGVUcmlnZ2VyIH0gPSB0aGlzLmZvcm07XHJcblx0XHRcdFx0aWYgKHZhbGlkYXRlVHJpZ2dlciA9PT0gXCJibHVyXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMuZm9ybUl0ZW0ub25GaWVsZENoYW5nZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIOaMieS4i+mUruebmOeahOWPkemAgemUrlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGVcclxuXHRcdCAqL1xyXG5cdFx0b25Db25maXJtKGUpIHtcclxuXHRcdFx0dGhpcy4kZW1pdChcImNvbmZpcm1cIiwgdGhpcy52YWwpO1xyXG5cdFx0XHR0aGlzLiRlbWl0KFwiY2hhbmdlXCIsIHRoaXMudmFsKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiDmuIXnkIblhoXlrrlcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG5cdFx0ICovXHJcblx0XHRvbkNsZWFyKGV2ZW50KSB7XHJcblx0XHRcdHRoaXMudmFsID0gXCJcIjtcclxuXHRcdFx0Ly8gVE9ETyDlhbzlrrkgdnVlMlxyXG5cdFx0XHR0aGlzLiRlbWl0KFwiaW5wdXRcIiwgXCJcIik7XHJcblx0XHRcdC8vIFRPRE8g5YW85a65IHZ1ZTJcclxuXHRcdFx0Ly8gVE9ET+OAgOWFvOWuueOAgHZ1ZTNcclxuXHRcdFx0dGhpcy4kZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIFwiXCIpO1xyXG5cdFx0XHQvLyDngrnlh7vlj4nlj7fop6blj5FcclxuXHRcdFx0dGhpcy4kZW1pdChcImNsZWFyXCIpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIOWOu+mZpOepuuagvFxyXG5cdFx0ICovXHJcblx0XHR0cmltU3RyKHN0ciwgcG9zID0gXCJib3RoXCIpIHtcclxuXHRcdFx0aWYgKHBvcyA9PT0gXCJib3RoXCIpIHtcclxuXHRcdFx0XHRyZXR1cm4gc3RyLnRyaW0oKTtcclxuXHRcdFx0fSBlbHNlIGlmIChwb3MgPT09IFwibGVmdFwiKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN0ci50cmltTGVmdCgpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHBvcyA9PT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN0ci50cmltUmlnaHQoKTtcclxuXHRcdFx0fSBlbHNlIGlmIChwb3MgPT09IFwic3RhcnRcIikge1xyXG5cdFx0XHRcdHJldHVybiBzdHIudHJpbVN0YXJ0KCk7XHJcblx0XHRcdH0gZWxzZSBpZiAocG9zID09PSBcImVuZFwiKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN0ci50cmltRW5kKCk7XHJcblx0XHRcdH0gZWxzZSBpZiAocG9zID09PSBcImFsbFwiKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHBvcyA9PT0gXCJub25lXCIpIHtcclxuXHRcdFx0XHRyZXR1cm4gc3RyO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzdHI7XHJcblx0XHR9LFxyXG5cdH0sXHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbiR1bmktZXJyb3I6ICNlNDNkMzM7XHJcbiR1bmktYm9yZGVyLTE6ICNkY2RmZTYgIWRlZmF1bHQ7XHJcblxyXG4udW5pLWVhc3lpbnB1dCB7XHJcblx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdC8qICNlbmRpZiAqL1xyXG5cdGZsZXg6IDE7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0Y29sb3I6ICMzMzM7XHJcblx0Zm9udC1zaXplOiAxNHB4O1xyXG59XHJcblxyXG4udW5pLWVhc3lpbnB1dF9fY29udGVudCB7XHJcblx0ZmxleDogMTtcclxuXHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0d2lkdGg6IDEwMCU7XHJcblx0ZGlzcGxheTogZmxleDtcclxuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cdC8vIG1pbi1oZWlnaHQ6IDM2cHg7XHJcblx0LyogI2VuZGlmICovXHJcblx0ZmxleC1kaXJlY3Rpb246IHJvdztcclxuXHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdC8vIOWkhOeQhmJvcmRlcuWKqOeUu+WImuW8gOWni+aYvuekuum7keiJsueahOmXrumimFxyXG5cdGJvcmRlci1jb2xvcjogI2ZmZjtcclxuXHR0cmFuc2l0aW9uLXByb3BlcnR5OiBib3JkZXItY29sb3I7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcclxufVxyXG5cclxuLnVuaS1lYXN5aW5wdXRfX2NvbnRlbnQtaW5wdXQge1xyXG5cdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHR3aWR0aDogYXV0bztcclxuXHQvKiAjZW5kaWYgKi9cclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRmbGV4OiAxO1xyXG5cdGxpbmUtaGVpZ2h0OiAxO1xyXG5cdGZvbnQtc2l6ZTogMTRweDtcclxuXHRoZWlnaHQ6IDM1cHg7XHJcblx0Ly8gbWluLWhlaWdodDogMzZweDtcclxufVxyXG5cclxuLnVuaS1lYXN5aW5wdXRfX3BsYWNlaG9sZGVyLWNsYXNzIHtcclxuXHRjb2xvcjogIzk5OTtcclxuXHRmb250LXNpemU6IDEycHg7XHJcblx0Ly8gZm9udC13ZWlnaHQ6IDIwMDtcclxufVxyXG5cclxuLmlzLXRleHRhcmVhIHtcclxuXHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxufVxyXG5cclxuLmlzLXRleHRhcmVhLWljb24ge1xyXG5cdG1hcmdpbi10b3A6IDVweDtcclxufVxyXG5cclxuLnVuaS1lYXN5aW5wdXRfX2NvbnRlbnQtdGV4dGFyZWEge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdGZsZXg6IDE7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRmb250LXNpemU6IDE0cHg7XHJcblx0bWFyZ2luOiA2cHg7XHJcblx0bWFyZ2luLWxlZnQ6IDA7XHJcblx0aGVpZ2h0OiA4MHB4O1xyXG5cdG1pbi1oZWlnaHQ6IDgwcHg7XHJcblx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdG1pbi1oZWlnaHQ6IDgwcHg7XHJcblx0d2lkdGg6IGF1dG87XHJcblx0LyogI2VuZGlmICovXHJcbn1cclxuXHJcbi5pbnB1dC1wYWRkaW5nIHtcclxuXHRwYWRkaW5nLWxlZnQ6IDEwcHg7XHJcbn1cclxuXHJcbi5jb250ZW50LWNsZWFyLWljb24ge1xyXG5cdHBhZGRpbmc6IDAgNXB4O1xyXG59XHJcblxyXG4ubGFiZWwtaWNvbiB7XHJcblx0bWFyZ2luLXJpZ2h0OiA1cHg7XHJcblx0bWFyZ2luLXRvcDogLTFweDtcclxufVxyXG5cclxuLy8g5pi+56S66L655qGGXHJcbi5pcy1pbnB1dC1ib3JkZXIge1xyXG5cdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRkaXNwbGF5OiBmbGV4O1xyXG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0LyogI2VuZGlmICovXHJcblx0ZmxleC1kaXJlY3Rpb246IHJvdztcclxuXHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICR1bmktYm9yZGVyLTE7XHJcblx0Ym9yZGVyLXJhZGl1czogNHB4O1xyXG5cdC8qICNpZmRlZiBNUC1BTElQQVkgKi9cclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdC8qICNlbmRpZiAqL1xyXG59XHJcblxyXG4udW5pLWVycm9yLW1lc3NhZ2Uge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRib3R0b206IC0xN3B4O1xyXG5cdGxlZnQ6IDA7XHJcblx0bGluZS1oZWlnaHQ6IDEycHg7XHJcblx0Y29sb3I6ICR1bmktZXJyb3I7XHJcblx0Zm9udC1zaXplOiAxMnB4O1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcbn1cclxuXHJcbi51bmktZXJyb3ItbXNnLS1ib2VkZXIge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRib3R0b206IDA7XHJcblx0bGluZS1oZWlnaHQ6IDIycHg7XHJcbn1cclxuXHJcbi5pcy1pbnB1dC1lcnJvci1ib3JkZXIge1xyXG5cdGJvcmRlci1jb2xvcjogJHVuaS1lcnJvcjtcclxuXHJcblx0LnVuaS1lYXN5aW5wdXRfX3BsYWNlaG9sZGVyLWNsYXNzIHtcclxuXHRcdGNvbG9yOiBtaXgoI2ZmZiwgJHVuaS1lcnJvciwgNTAlKTtcclxuXHR9XHJcbn1cclxuXHJcbi51bmktZWFzeWlucHV0LS1ib3JkZXIge1xyXG5cdG1hcmdpbi1ib3R0b206IDA7XHJcblx0cGFkZGluZzogMTBweCAxNXB4O1xyXG5cdC8vIHBhZGRpbmctYm90dG9tOiAwO1xyXG5cdGJvcmRlci10b3A6IDFweCAjZWVlIHNvbGlkO1xyXG59XHJcblxyXG4udW5pLWVhc3lpbnB1dC1lcnJvciB7XHJcblx0cGFkZGluZy1ib3R0b206IDA7XHJcbn1cclxuXHJcbi5pcy1maXJzdC1ib3JkZXIge1xyXG5cdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRib3JkZXI6IG5vbmU7XHJcblx0LyogI2VuZGlmICovXHJcblx0LyogI2lmZGVmIEFQUC1OVlVFICovXHJcblx0Ym9yZGVyLXdpZHRoOiAwO1xyXG5cdC8qICNlbmRpZiAqL1xyXG59XHJcblxyXG4uaXMtZGlzYWJsZWQge1xyXG5cdGJhY2tncm91bmQtY29sb3I6ICNmN2Y2ZjY7XHJcblx0Y29sb3I6ICNkNWQ1ZDU7XHJcblxyXG5cdC51bmktZWFzeWlucHV0X19wbGFjZWhvbGRlci1jbGFzcyB7XHJcblx0XHRjb2xvcjogI2Q1ZDVkNTtcclxuXHRcdGZvbnQtc2l6ZTogMTJweDtcclxuXHR9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwidmFyIHBhdHRlcm4gPSB7XHJcblx0ZW1haWw6IC9eXFxTKz9AXFxTKz9cXC5cXFMrPyQvLFxyXG5cdGlkY2FyZDogL15bMS05XVxcZHs1fSgxOHwxOXwoWzIzXVxcZCkpXFxkezJ9KCgwWzEtOV0pfCgxMHwxMXwxMikpKChbMC0yXVsxLTldKXwxMHwyMHwzMHwzMSlcXGR7M31bMC05WHhdJC8sXHJcblx0dXJsOiBuZXcgUmVnRXhwKFxyXG5cdFx0XCJeKD8hbWFpbHRvOikoPzooPzpodHRwfGh0dHBzfGZ0cCk6Ly98Ly8pKD86XFxcXFMrKD86OlxcXFxTKik/QCk/KD86KD86KD86WzEtOV1cXFxcZD98MVxcXFxkXFxcXGR8MlswMV1cXFxcZHwyMlswLTNdKSg/OlxcXFwuKD86MT9cXFxcZHsxLDJ9fDJbMC00XVxcXFxkfDI1WzAtNV0pKXsyfSg/OlxcXFwuKD86WzAtOV1cXFxcZD98MVxcXFxkXFxcXGR8MlswLTRdXFxcXGR8MjVbMC00XSkpfCg/Oig/OlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmMC05XSstKikqW2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldKykoPzpcXFxcLig/OlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmMC05XSstKikqW2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldKykqKD86XFxcXC4oPzpbYS16XFxcXHUwMGExLVxcXFx1ZmZmZl17Mix9KSkpfGxvY2FsaG9zdCkoPzo6XFxcXGR7Miw1fSk/KD86KC98XFxcXD98IylbXlxcXFxzXSopPyRcIixcclxuXHRcdCdpJylcclxufTtcclxuXHJcbmNvbnN0IEZPUk1BVF9NQVBQSU5HID0ge1xyXG5cdFwiaW50XCI6ICdpbnRlZ2VyJyxcclxuXHRcImJvb2xcIjogJ2Jvb2xlYW4nLFxyXG5cdFwiZG91YmxlXCI6ICdudW1iZXInLFxyXG5cdFwibG9uZ1wiOiAnbnVtYmVyJyxcclxuXHRcInBhc3N3b3JkXCI6ICdzdHJpbmcnXHJcblx0Ly8gXCJmaWxldXJsc1wiOiAnYXJyYXknXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2UoYXJncywgcmVzb3VyY2VzID0gJycpIHtcclxuXHR2YXIgZGVmYXVsdE1lc3NhZ2UgPSBbJ2xhYmVsJ11cclxuXHRkZWZhdWx0TWVzc2FnZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRpZiAoYXJnc1tpdGVtXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFyZ3NbaXRlbV0gPSAnJ1xyXG5cdFx0fVxyXG5cdH0pXHJcblxyXG5cdGxldCBzdHIgPSByZXNvdXJjZXNcclxuXHRmb3IgKGxldCBrZXkgaW4gYXJncykge1xyXG5cdFx0bGV0IHJlZyA9IG5ldyBSZWdFeHAoJ3snICsga2V5ICsgJ30nKVxyXG5cdFx0c3RyID0gc3RyLnJlcGxhY2UocmVnLCBhcmdzW2tleV0pXHJcblx0fVxyXG5cdHJldHVybiBzdHJcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFbXB0eVZhbHVlKHZhbHVlLCB0eXBlKSB7XHJcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiAhdmFsdWUubGVuZ3RoKSB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlmICh0eXBlID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCkge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmNvbnN0IHR5cGVzID0ge1xyXG5cdGludGVnZXIodmFsdWUpIHtcclxuXHRcdHJldHVybiB0eXBlcy5udW1iZXIodmFsdWUpICYmIHBhcnNlSW50KHZhbHVlLCAxMCkgPT09IHZhbHVlO1xyXG5cdH0sXHJcblx0c3RyaW5nKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcclxuXHR9LFxyXG5cdG51bWJlcih2YWx1ZSkge1xyXG5cdFx0aWYgKGlzTmFOKHZhbHVlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcclxuXHR9LFxyXG5cdFwiYm9vbGVhblwiOiBmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xyXG5cdH0sXHJcblx0XCJmbG9hdFwiOiBmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHR5cGVzLm51bWJlcih2YWx1ZSkgJiYgIXR5cGVzLmludGVnZXIodmFsdWUpO1xyXG5cdH0sXHJcblx0YXJyYXkodmFsdWUpIHtcclxuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxuXHR9LFxyXG5cdG9iamVjdCh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIXR5cGVzLmFycmF5KHZhbHVlKTtcclxuXHR9LFxyXG5cdGRhdGUodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU7XHJcblx0fSxcclxuXHR0aW1lc3RhbXAodmFsdWUpIHtcclxuXHRcdGlmICghdGhpcy5pbnRlZ2VyKHZhbHVlKSB8fCBNYXRoLmFicyh2YWx1ZSkudG9TdHJpbmcoKS5sZW5ndGggPiAxNikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2VcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH0sXHJcblx0ZmlsZSh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZS51cmwgPT09ICdzdHJpbmcnO1xyXG5cdH0sXHJcblx0ZW1haWwodmFsdWUpIHtcclxuXHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICEhdmFsdWUubWF0Y2gocGF0dGVybi5lbWFpbCkgJiYgdmFsdWUubGVuZ3RoIDwgMjU1O1xyXG5cdH0sXHJcblx0dXJsKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhIXZhbHVlLm1hdGNoKHBhdHRlcm4udXJsKTtcclxuXHR9LFxyXG5cdHBhdHRlcm4ocmVnLCB2YWx1ZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIG5ldyBSZWdFeHAocmVnKS50ZXN0KHZhbHVlKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0bWV0aG9kKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xyXG5cdH0sXHJcblx0aWRjYXJkKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhIXZhbHVlLm1hdGNoKHBhdHRlcm4uaWRjYXJkKTtcclxuXHR9LFxyXG5cdCd1cmwtaHR0cHMnKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy51cmwodmFsdWUpICYmIHZhbHVlLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJyk7XHJcblx0fSxcclxuXHQndXJsLXNjaGVtZScodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5zdGFydHNXaXRoKCc6Ly8nKTtcclxuXHR9LFxyXG5cdCd1cmwtd2ViJyh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuY2xhc3MgUnVsZVZhbGlkYXRvciB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuXHRcdHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlXHJcblx0fVxyXG5cclxuXHRhc3luYyB2YWxpZGF0ZVJ1bGUoZmllbGRLZXksIGZpZWxkVmFsdWUsIHZhbHVlLCBkYXRhLCBhbGxEYXRhKSB7XHJcblx0XHR2YXIgcmVzdWx0ID0gbnVsbFxyXG5cclxuXHRcdGxldCBydWxlcyA9IGZpZWxkVmFsdWUucnVsZXNcclxuXHJcblx0XHRsZXQgaGFzUmVxdWlyZWQgPSBydWxlcy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcclxuXHRcdFx0cmV0dXJuIGl0ZW0ucmVxdWlyZWRcclxuXHRcdH0pXHJcblx0XHRpZiAoaGFzUmVxdWlyZWQgPCAwKSB7XHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdFxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR2YXIgbWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VcclxuXHJcblx0XHRpZiAocnVsZXMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gbWVzc2FnZVsnZGVmYXVsdCddXHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRsZXQgcnVsZSA9IHJ1bGVzW2ldXHJcblx0XHRcdGxldCB2dCA9IHRoaXMuX2dldFZhbGlkYXRlVHlwZShydWxlKVxyXG5cclxuXHRcdFx0T2JqZWN0LmFzc2lnbihydWxlLCB7XHJcblx0XHRcdFx0bGFiZWw6IGZpZWxkVmFsdWUubGFiZWwgfHwgYFtcIiR7ZmllbGRLZXl9XCJdYFxyXG5cdFx0XHR9KVxyXG5cclxuXHRcdFx0aWYgKFJ1bGVWYWxpZGF0b3JIZWxwZXJbdnRdKSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gUnVsZVZhbGlkYXRvckhlbHBlclt2dF0ocnVsZSwgdmFsdWUsIG1lc3NhZ2UpXHJcblx0XHRcdFx0aWYgKHJlc3VsdCAhPSBudWxsKSB7XHJcblx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHJ1bGUudmFsaWRhdGVFeHByKSB7XHJcblx0XHRcdFx0bGV0IG5vdyA9IERhdGUubm93KClcclxuXHRcdFx0XHRsZXQgcmVzdWx0RXhwciA9IHJ1bGUudmFsaWRhdGVFeHByKHZhbHVlLCBhbGxEYXRhLCBub3cpXHJcblx0XHRcdFx0aWYgKHJlc3VsdEV4cHIgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLl9nZXRNZXNzYWdlKHJ1bGUsIHJ1bGUuZXJyb3JNZXNzYWdlIHx8IHRoaXMuX21lc3NhZ2VbJ2RlZmF1bHQnXSlcclxuXHRcdFx0XHRcdGJyZWFrXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAocnVsZS52YWxpZGF0ZUZ1bmN0aW9uKSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZUZ1bmN0aW9uKHJ1bGUsIHZhbHVlLCBkYXRhLCBhbGxEYXRhLCB2dClcclxuXHRcdFx0XHRpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXN1bHQgIT09IG51bGwpIHtcclxuXHRcdFx0cmVzdWx0ID0gbWVzc2FnZS5UQUcgKyByZXN1bHRcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0XHJcblx0fVxyXG5cclxuXHRhc3luYyB2YWxpZGF0ZUZ1bmN0aW9uKHJ1bGUsIHZhbHVlLCBkYXRhLCBhbGxEYXRhLCB2dCkge1xyXG5cdFx0bGV0IHJlc3VsdCA9IG51bGxcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCBjYWxsYmFja01lc3NhZ2UgPSBudWxsXHJcblx0XHRcdGNvbnN0IHJlcyA9IGF3YWl0IHJ1bGUudmFsaWRhdGVGdW5jdGlvbihydWxlLCB2YWx1ZSwgYWxsRGF0YSB8fCBkYXRhLCAobWVzc2FnZSkgPT4ge1xyXG5cdFx0XHRcdGNhbGxiYWNrTWVzc2FnZSA9IG1lc3NhZ2VcclxuXHRcdFx0fSlcclxuXHRcdFx0aWYgKGNhbGxiYWNrTWVzc2FnZSB8fCAodHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgJiYgcmVzKSB8fCByZXMgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5fZ2V0TWVzc2FnZShydWxlLCBjYWxsYmFja01lc3NhZ2UgfHwgcmVzLCB2dClcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXN1bHQgPSB0aGlzLl9nZXRNZXNzYWdlKHJ1bGUsIGUubWVzc2FnZSwgdnQpXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0XHJcblx0fVxyXG5cclxuXHRfZ2V0TWVzc2FnZShydWxlLCBtZXNzYWdlLCB2dCkge1xyXG5cdFx0cmV0dXJuIGZvcm1hdE1lc3NhZ2UocnVsZSwgbWVzc2FnZSB8fCBydWxlLmVycm9yTWVzc2FnZSB8fCB0aGlzLl9tZXNzYWdlW3Z0XSB8fCBtZXNzYWdlWydkZWZhdWx0J10pXHJcblx0fVxyXG5cclxuXHRfZ2V0VmFsaWRhdGVUeXBlKHJ1bGUpIHtcclxuXHRcdHZhciByZXN1bHQgPSAnJ1xyXG5cdFx0aWYgKHJ1bGUucmVxdWlyZWQpIHtcclxuXHRcdFx0cmVzdWx0ID0gJ3JlcXVpcmVkJ1xyXG5cdFx0fSBlbHNlIGlmIChydWxlLmZvcm1hdCkge1xyXG5cdFx0XHRyZXN1bHQgPSAnZm9ybWF0J1xyXG5cdFx0fSBlbHNlIGlmIChydWxlLmFycmF5VHlwZSkge1xyXG5cdFx0XHRyZXN1bHQgPSAnYXJyYXlUeXBlRm9ybWF0J1xyXG5cdFx0fSBlbHNlIGlmIChydWxlLnJhbmdlKSB7XHJcblx0XHRcdHJlc3VsdCA9ICdyYW5nZSdcclxuXHRcdH0gZWxzZSBpZiAocnVsZS5tYXhpbXVtICE9PSB1bmRlZmluZWQgfHwgcnVsZS5taW5pbXVtICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmVzdWx0ID0gJ3JhbmdlTnVtYmVyJ1xyXG5cdFx0fSBlbHNlIGlmIChydWxlLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkIHx8IHJ1bGUubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmVzdWx0ID0gJ3JhbmdlTGVuZ3RoJ1xyXG5cdFx0fSBlbHNlIGlmIChydWxlLnBhdHRlcm4pIHtcclxuXHRcdFx0cmVzdWx0ID0gJ3BhdHRlcm4nXHJcblx0XHR9IGVsc2UgaWYgKHJ1bGUudmFsaWRhdGVGdW5jdGlvbikge1xyXG5cdFx0XHRyZXN1bHQgPSAndmFsaWRhdGVGdW5jdGlvbidcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHRcclxuXHR9XHJcbn1cclxuXHJcbmNvbnN0IFJ1bGVWYWxpZGF0b3JIZWxwZXIgPSB7XHJcblx0cmVxdWlyZWQocnVsZSwgdmFsdWUsIG1lc3NhZ2UpIHtcclxuXHRcdGlmIChydWxlLnJlcXVpcmVkICYmIGlzRW1wdHlWYWx1ZSh2YWx1ZSwgcnVsZS5mb3JtYXQgfHwgdHlwZW9mIHZhbHVlKSkge1xyXG5cdFx0XHRyZXR1cm4gZm9ybWF0TWVzc2FnZShydWxlLCBydWxlLmVycm9yTWVzc2FnZSB8fCBtZXNzYWdlLnJlcXVpcmVkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbFxyXG5cdH0sXHJcblxyXG5cdHJhbmdlKHJ1bGUsIHZhbHVlLCBtZXNzYWdlKSB7XHJcblx0XHRjb25zdCB7XHJcblx0XHRcdHJhbmdlLFxyXG5cdFx0XHRlcnJvck1lc3NhZ2VcclxuXHRcdH0gPSBydWxlO1xyXG5cclxuXHRcdGxldCBsaXN0ID0gbmV3IEFycmF5KHJhbmdlLmxlbmd0aCk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gPSByYW5nZVtpXTtcclxuXHRcdFx0aWYgKHR5cGVzLm9iamVjdChpdGVtKSAmJiBpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRsaXN0W2ldID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsaXN0W2ldID0gaXRlbTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCByZXN1bHQgPSBmYWxzZVxyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcblx0XHRcdHJlc3VsdCA9IChuZXcgU2V0KHZhbHVlLmNvbmNhdChsaXN0KSkuc2l6ZSA9PT0gbGlzdC5sZW5ndGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGxpc3QuaW5kZXhPZih2YWx1ZSkgPiAtMSkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXJlc3VsdCkge1xyXG5cdFx0XHRyZXR1cm4gZm9ybWF0TWVzc2FnZShydWxlLCBlcnJvck1lc3NhZ2UgfHwgbWVzc2FnZVsnZW51bSddKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbFxyXG5cdH0sXHJcblxyXG5cdHJhbmdlTnVtYmVyKHJ1bGUsIHZhbHVlLCBtZXNzYWdlKSB7XHJcblx0XHRpZiAoIXR5cGVzLm51bWJlcih2YWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIGZvcm1hdE1lc3NhZ2UocnVsZSwgcnVsZS5lcnJvck1lc3NhZ2UgfHwgbWVzc2FnZS5wYXR0ZXJuLm1pc21hdGNoKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQge1xyXG5cdFx0XHRtaW5pbXVtLFxyXG5cdFx0XHRtYXhpbXVtLFxyXG5cdFx0XHRleGNsdXNpdmVNaW5pbXVtLFxyXG5cdFx0XHRleGNsdXNpdmVNYXhpbXVtXHJcblx0XHR9ID0gcnVsZTtcclxuXHRcdGxldCBtaW4gPSBleGNsdXNpdmVNaW5pbXVtID8gdmFsdWUgPD0gbWluaW11bSA6IHZhbHVlIDwgbWluaW11bTtcclxuXHRcdGxldCBtYXggPSBleGNsdXNpdmVNYXhpbXVtID8gdmFsdWUgPj0gbWF4aW11bSA6IHZhbHVlID4gbWF4aW11bTtcclxuXHJcblx0XHRpZiAobWluaW11bSAhPT0gdW5kZWZpbmVkICYmIG1pbikge1xyXG5cdFx0XHRyZXR1cm4gZm9ybWF0TWVzc2FnZShydWxlLCBydWxlLmVycm9yTWVzc2FnZSB8fCBtZXNzYWdlWydudW1iZXInXVtleGNsdXNpdmVNaW5pbXVtID9cclxuXHRcdFx0XHQnZXhjbHVzaXZlTWluaW11bScgOiAnbWluaW11bSdcclxuXHRcdFx0XSlcclxuXHRcdH0gZWxzZSBpZiAobWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIG1heCkge1xyXG5cdFx0XHRyZXR1cm4gZm9ybWF0TWVzc2FnZShydWxlLCBydWxlLmVycm9yTWVzc2FnZSB8fCBtZXNzYWdlWydudW1iZXInXVtleGNsdXNpdmVNYXhpbXVtID9cclxuXHRcdFx0XHQnZXhjbHVzaXZlTWF4aW11bScgOiAnbWF4aW11bSdcclxuXHRcdFx0XSlcclxuXHRcdH0gZWxzZSBpZiAobWluaW11bSAhPT0gdW5kZWZpbmVkICYmIG1heGltdW0gIT09IHVuZGVmaW5lZCAmJiAobWluIHx8IG1heCkpIHtcclxuXHRcdFx0cmV0dXJuIGZvcm1hdE1lc3NhZ2UocnVsZSwgcnVsZS5lcnJvck1lc3NhZ2UgfHwgbWVzc2FnZVsnbnVtYmVyJ10ucmFuZ2UpXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGxcclxuXHR9LFxyXG5cclxuXHRyYW5nZUxlbmd0aChydWxlLCB2YWx1ZSwgbWVzc2FnZSkge1xyXG5cdFx0aWYgKCF0eXBlcy5zdHJpbmcodmFsdWUpICYmICF0eXBlcy5hcnJheSh2YWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIGZvcm1hdE1lc3NhZ2UocnVsZSwgcnVsZS5lcnJvck1lc3NhZ2UgfHwgbWVzc2FnZS5wYXR0ZXJuLm1pc21hdGNoKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbWluID0gcnVsZS5taW5MZW5ndGg7XHJcblx0XHRsZXQgbWF4ID0gcnVsZS5tYXhMZW5ndGg7XHJcblx0XHRsZXQgdmFsID0gdmFsdWUubGVuZ3RoO1xyXG5cclxuXHRcdGlmIChtaW4gIT09IHVuZGVmaW5lZCAmJiB2YWwgPCBtaW4pIHtcclxuXHRcdFx0cmV0dXJuIGZvcm1hdE1lc3NhZ2UocnVsZSwgcnVsZS5lcnJvck1lc3NhZ2UgfHwgbWVzc2FnZVsnbGVuZ3RoJ10ubWluTGVuZ3RoKVxyXG5cdFx0fSBlbHNlIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiB2YWwgPiBtYXgpIHtcclxuXHRcdFx0cmV0dXJuIGZvcm1hdE1lc3NhZ2UocnVsZSwgcnVsZS5lcnJvck1lc3NhZ2UgfHwgbWVzc2FnZVsnbGVuZ3RoJ10ubWF4TGVuZ3RoKVxyXG5cdFx0fSBlbHNlIGlmIChtaW4gIT09IHVuZGVmaW5lZCAmJiBtYXggIT09IHVuZGVmaW5lZCAmJiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCkpIHtcclxuXHRcdFx0cmV0dXJuIGZvcm1hdE1lc3NhZ2UocnVsZSwgcnVsZS5lcnJvck1lc3NhZ2UgfHwgbWVzc2FnZVsnbGVuZ3RoJ10ucmFuZ2UpXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGxcclxuXHR9LFxyXG5cclxuXHRwYXR0ZXJuKHJ1bGUsIHZhbHVlLCBtZXNzYWdlKSB7XHJcblx0XHRpZiAoIXR5cGVzWydwYXR0ZXJuJ10ocnVsZS5wYXR0ZXJuLCB2YWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIGZvcm1hdE1lc3NhZ2UocnVsZSwgcnVsZS5lcnJvck1lc3NhZ2UgfHwgbWVzc2FnZS5wYXR0ZXJuLm1pc21hdGNoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbFxyXG5cdH0sXHJcblxyXG5cdGZvcm1hdChydWxlLCB2YWx1ZSwgbWVzc2FnZSkge1xyXG5cdFx0dmFyIGN1c3RvbVR5cGVzID0gT2JqZWN0LmtleXModHlwZXMpO1xyXG5cdFx0dmFyIGZvcm1hdCA9IEZPUk1BVF9NQVBQSU5HW3J1bGUuZm9ybWF0XSA/IEZPUk1BVF9NQVBQSU5HW3J1bGUuZm9ybWF0XSA6IChydWxlLmZvcm1hdCB8fCBydWxlLmFycmF5VHlwZSk7XHJcblxyXG5cdFx0aWYgKGN1c3RvbVR5cGVzLmluZGV4T2YoZm9ybWF0KSA+IC0xKSB7XHJcblx0XHRcdGlmICghdHlwZXNbZm9ybWF0XSh2YWx1ZSkpIHtcclxuXHRcdFx0XHRyZXR1cm4gZm9ybWF0TWVzc2FnZShydWxlLCBydWxlLmVycm9yTWVzc2FnZSB8fCBtZXNzYWdlLnR5cGVFcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbFxyXG5cdH0sXHJcblxyXG5cdGFycmF5VHlwZUZvcm1hdChydWxlLCB2YWx1ZSwgbWVzc2FnZSkge1xyXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG5cdFx0XHRyZXR1cm4gZm9ybWF0TWVzc2FnZShydWxlLCBydWxlLmVycm9yTWVzc2FnZSB8fCBtZXNzYWdlLnR5cGVFcnJvcik7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBlbGVtZW50ID0gdmFsdWVbaV07XHJcblx0XHRcdGxldCBmb3JtYXRSZXN1bHQgPSB0aGlzLmZvcm1hdChydWxlLCBlbGVtZW50LCBtZXNzYWdlKVxyXG5cdFx0XHRpZiAoZm9ybWF0UmVzdWx0ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZvcm1hdFJlc3VsdFxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGxcclxuXHR9XHJcbn1cclxuXHJcbmNsYXNzIFNjaGVtYVZhbGlkYXRvciBleHRlbmRzIFJ1bGVWYWxpZGF0b3Ige1xyXG5cclxuXHRjb25zdHJ1Y3RvcihzY2hlbWEsIG9wdGlvbnMpIHtcclxuXHRcdHN1cGVyKFNjaGVtYVZhbGlkYXRvci5tZXNzYWdlKTtcclxuXHJcblx0XHR0aGlzLl9zY2hlbWEgPSBzY2hlbWFcclxuXHRcdHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IG51bGxcclxuXHR9XHJcblxyXG5cdHVwZGF0ZVNjaGVtYShzY2hlbWEpIHtcclxuXHRcdHRoaXMuX3NjaGVtYSA9IHNjaGVtYVxyXG5cdH1cclxuXHJcblx0YXN5bmMgdmFsaWRhdGUoZGF0YSwgYWxsRGF0YSkge1xyXG5cdFx0bGV0IHJlc3VsdCA9IHRoaXMuX2NoZWNrRmllbGRJblNjaGVtYShkYXRhKVxyXG5cdFx0aWYgKCFyZXN1bHQpIHtcclxuXHRcdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5pbnZva2VWYWxpZGF0ZShkYXRhLCBmYWxzZSwgYWxsRGF0YSlcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQubGVuZ3RoID8gcmVzdWx0WzBdIDogbnVsbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgdmFsaWRhdGVBbGwoZGF0YSwgYWxsRGF0YSkge1xyXG5cdFx0bGV0IHJlc3VsdCA9IHRoaXMuX2NoZWNrRmllbGRJblNjaGVtYShkYXRhKVxyXG5cdFx0aWYgKCFyZXN1bHQpIHtcclxuXHRcdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5pbnZva2VWYWxpZGF0ZShkYXRhLCB0cnVlLCBhbGxEYXRhKVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdFxyXG5cdH1cclxuXHJcblx0YXN5bmMgdmFsaWRhdGVVcGRhdGUoZGF0YSwgYWxsRGF0YSkge1xyXG5cdFx0bGV0IHJlc3VsdCA9IHRoaXMuX2NoZWNrRmllbGRJblNjaGVtYShkYXRhKVxyXG5cdFx0aWYgKCFyZXN1bHQpIHtcclxuXHRcdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5pbnZva2VWYWxpZGF0ZVVwZGF0ZShkYXRhLCBmYWxzZSwgYWxsRGF0YSlcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQubGVuZ3RoID8gcmVzdWx0WzBdIDogbnVsbFxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW52b2tlVmFsaWRhdGUoZGF0YSwgYWxsLCBhbGxEYXRhKSB7XHJcblx0XHRsZXQgcmVzdWx0ID0gW11cclxuXHRcdGxldCBzY2hlbWEgPSB0aGlzLl9zY2hlbWFcclxuXHRcdGZvciAobGV0IGtleSBpbiBzY2hlbWEpIHtcclxuXHRcdFx0bGV0IHZhbHVlID0gc2NoZW1hW2tleV1cclxuXHRcdFx0bGV0IGVycm9yTWVzc2FnZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVSdWxlKGtleSwgdmFsdWUsIGRhdGFba2V5XSwgZGF0YSwgYWxsRGF0YSlcclxuXHRcdFx0aWYgKGVycm9yTWVzc2FnZSAhPSBudWxsKSB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goe1xyXG5cdFx0XHRcdFx0a2V5LFxyXG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHRpZiAoIWFsbCkgYnJlYWtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdFxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW52b2tlVmFsaWRhdGVVcGRhdGUoZGF0YSwgYWxsLCBhbGxEYXRhKSB7XHJcblx0XHRsZXQgcmVzdWx0ID0gW11cclxuXHRcdGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcblx0XHRcdGxldCBlcnJvck1lc3NhZ2UgPSBhd2FpdCB0aGlzLnZhbGlkYXRlUnVsZShrZXksIHRoaXMuX3NjaGVtYVtrZXldLCBkYXRhW2tleV0sIGRhdGEsIGFsbERhdGEpXHJcblx0XHRcdGlmIChlcnJvck1lc3NhZ2UgIT0gbnVsbCkge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHtcclxuXHRcdFx0XHRcdGtleSxcclxuXHRcdFx0XHRcdGVycm9yTWVzc2FnZVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0aWYgKCFhbGwpIGJyZWFrXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHRcclxuXHR9XHJcblxyXG5cdF9jaGVja0ZpZWxkSW5TY2hlbWEoZGF0YSkge1xyXG5cdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKVxyXG5cdFx0dmFyIGtleXMyID0gT2JqZWN0LmtleXModGhpcy5fc2NoZW1hKVxyXG5cdFx0aWYgKG5ldyBTZXQoa2V5cy5jb25jYXQoa2V5czIpKS5zaXplID09PSBrZXlzMi5sZW5ndGgpIHtcclxuXHRcdFx0cmV0dXJuICcnXHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIG5vRXhpc3RGaWVsZHMgPSBrZXlzLmZpbHRlcigoa2V5KSA9PiB7XHJcblx0XHRcdHJldHVybiBrZXlzMi5pbmRleE9mKGtleSkgPCAwO1xyXG5cdFx0fSlcclxuXHRcdHZhciBlcnJvck1lc3NhZ2UgPSBmb3JtYXRNZXNzYWdlKHtcclxuXHRcdFx0ZmllbGQ6IEpTT04uc3RyaW5naWZ5KG5vRXhpc3RGaWVsZHMpXHJcblx0XHR9LCBTY2hlbWFWYWxpZGF0b3IubWVzc2FnZS5UQUcgKyBTY2hlbWFWYWxpZGF0b3IubWVzc2FnZVsnZGVmYXVsdEludmFsaWQnXSlcclxuXHRcdHJldHVybiBbe1xyXG5cdFx0XHRrZXk6ICdpbnZhbGlkJyxcclxuXHRcdFx0ZXJyb3JNZXNzYWdlXHJcblx0XHR9XVxyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gTWVzc2FnZSgpIHtcclxuXHRyZXR1cm4ge1xyXG5cdFx0VEFHOiBcIlwiLFxyXG5cdFx0ZGVmYXVsdDogJ+mqjOivgemUmeivrycsXHJcblx0XHRkZWZhdWx0SW52YWxpZDogJ+aPkOS6pOeahOWtl+autXtmaWVsZH3lnKjmlbDmja7lupPkuK3lubbkuI3lrZjlnKgnLFxyXG5cdFx0dmFsaWRhdGVGdW5jdGlvbjogJ+mqjOivgeaXoOaViCcsXHJcblx0XHRyZXF1aXJlZDogJ3tsYWJlbH3lv4XloasnLFxyXG5cdFx0J2VudW0nOiAne2xhYmVsfei2heWHuuiMg+WbtCcsXHJcblx0XHR0aW1lc3RhbXA6ICd7bGFiZWx95qC85byP5peg5pWIJyxcclxuXHRcdHdoaXRlc3BhY2U6ICd7bGFiZWx95LiN6IO95Li656m6JyxcclxuXHRcdHR5cGVFcnJvcjogJ3tsYWJlbH3nsbvlnovml6DmlYgnLFxyXG5cdFx0ZGF0ZToge1xyXG5cdFx0XHRmb3JtYXQ6ICd7bGFiZWx95pel5pyfe3ZhbHVlfeagvOW8j+aXoOaViCcsXHJcblx0XHRcdHBhcnNlOiAne2xhYmVsfeaXpeacn+aXoOazleino+aekCx7dmFsdWV95peg5pWIJyxcclxuXHRcdFx0aW52YWxpZDogJ3tsYWJlbH3ml6XmnJ97dmFsdWV95peg5pWIJ1xyXG5cdFx0fSxcclxuXHRcdGxlbmd0aDoge1xyXG5cdFx0XHRtaW5MZW5ndGg6ICd7bGFiZWx96ZW/5bqm5LiN6IO95bCR5LqOe21pbkxlbmd0aH0nLFxyXG5cdFx0XHRtYXhMZW5ndGg6ICd7bGFiZWx96ZW/5bqm5LiN6IO96LaF6L+He21heExlbmd0aH0nLFxyXG5cdFx0XHRyYW5nZTogJ3tsYWJlbH3lv4Xpobvku4vkuo57bWluTGVuZ3RofeWSjHttYXhMZW5ndGh95LmL6Ze0J1xyXG5cdFx0fSxcclxuXHRcdG51bWJlcjoge1xyXG5cdFx0XHRtaW5pbXVtOiAne2xhYmVsfeS4jeiDveWwj+S6jnttaW5pbXVtfScsXHJcblx0XHRcdG1heGltdW06ICd7bGFiZWx95LiN6IO95aSn5LqOe21heGltdW19JyxcclxuXHRcdFx0ZXhjbHVzaXZlTWluaW11bTogJ3tsYWJlbH3kuI3og73lsI/kuo7nrYnkuo57bWluaW11bX0nLFxyXG5cdFx0XHRleGNsdXNpdmVNYXhpbXVtOiAne2xhYmVsfeS4jeiDveWkp+S6juetieS6jnttYXhpbXVtfScsXHJcblx0XHRcdHJhbmdlOiAne2xhYmVsfeW/hemhu+S7i+S6jnttaW5pbXVtfWFuZHttYXhpbXVtfeS5i+mXtCdcclxuXHRcdH0sXHJcblx0XHRwYXR0ZXJuOiB7XHJcblx0XHRcdG1pc21hdGNoOiAne2xhYmVsfeagvOW8j+S4jeWMuemFjSdcclxuXHRcdH1cclxuXHR9O1xyXG59XHJcblxyXG5cclxuU2NoZW1hVmFsaWRhdG9yLm1lc3NhZ2UgPSBuZXcgTWVzc2FnZSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2NoZW1hVmFsaWRhdG9yXG4iLCIvKipcclxuICog566A5Y2V5aSE55CG5a+56LGh5ou36LSdXHJcbiAqIEBwYXJhbSB7T2JlamN0fSDooqvmi7fotJ3lr7nosaFcclxuICogQEByZXR1cm4ge09iamVjdH0g5ou36LSd5a+56LGhXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZGVlcENvcHkgPSAodmFsKSA9PiB7XHJcblx0cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsKSlcclxufVxyXG4vKipcclxuICog6L+H5ruk5pWw5a2X57G75Z6LXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQg5pWw5a2X57G75Z6LXHJcbiAqIEBAcmV0dXJuIHtCb29sZWFufSDov5Tlm57mmK/lkKbkuLrmlbDlrZfnsbvlnotcclxuICovXHJcbmV4cG9ydCBjb25zdCB0eXBlRmlsdGVyID0gKGZvcm1hdCkgPT4ge1xyXG5cdHJldHVybiBmb3JtYXQgPT09ICdpbnQnIHx8IGZvcm1hdCA9PT0gJ2RvdWJsZScgfHwgZm9ybWF0ID09PSAnbnVtYmVyJyB8fCBmb3JtYXQgPT09ICd0aW1lc3RhbXAnO1xyXG59XHJcblxyXG4vKipcclxuICog5oqKIHZhbHVlIOi9rOaNouaIkOaMh+WumueahOexu+Wei++8jOeUqOS6juWkhOeQhuWIneWni+WAvO+8jOWOn+WboOaYr+WIneWni+WAvOmcgOimgeWFpeW6k+S4jeiDveS4uiB1bmRlZmluZWRcclxuICogQHBhcmFtIHtTdHJpbmd9IGtleSDlrZfmrrXlkI1cclxuICogQHBhcmFtIHthbnl9IHZhbHVlIOWtl+auteWAvFxyXG4gKiBAcGFyYW0ge09iamVjdH0gcnVsZXMg6KGo5Y2V5qCh6aqM6KeE5YiZXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0VmFsdWUgPSAoa2V5LCB2YWx1ZSwgcnVsZXMpID0+IHtcclxuXHRjb25zdCBpc1J1bGVOdW1UeXBlID0gcnVsZXMuZmluZCh2YWwgPT4gdmFsLmZvcm1hdCAmJiB0eXBlRmlsdGVyKHZhbC5mb3JtYXQpKTtcclxuXHRjb25zdCBpc1J1bGVCb29sVHlwZSA9IHJ1bGVzLmZpbmQodmFsID0+ICh2YWwuZm9ybWF0ICYmIHZhbC5mb3JtYXQgPT09ICdib29sZWFuJykgfHwgdmFsLmZvcm1hdCA9PT0gJ2Jvb2wnKTtcclxuXHQvLyDovpPlhaXnsbvlnovkuLogbnVtYmVyXHJcblx0aWYgKCEhaXNSdWxlTnVtVHlwZSkge1xyXG5cdFx0aWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xyXG5cdFx0XHR2YWx1ZSA9IG51bGxcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHZhbHVlID0gaXNOdW1iZXIoTnVtYmVyKHZhbHVlKSkgPyBOdW1iZXIodmFsdWUpIDogdmFsdWVcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIOi+k+WFpeexu+Wei+S4uiBib29sZWFuXHJcblx0aWYgKCEhaXNSdWxlQm9vbFR5cGUpIHtcclxuXHRcdHZhbHVlID0gaXNCb29sZWFuKHZhbHVlKSA/IHZhbHVlIDogZmFsc2VcclxuXHR9XHJcblxyXG5cdHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOiOt+WPluihqOWNleaVsOaNrlxyXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gbmFtZSDnnJ/lrp7lkI3np7DvvIzpnIDopoHkvb/nlKggcmVhbE5hbWUg6I635Y+WXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIOWOn+Wni+aVsOaNrlxyXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgIOmcgOimgeiuvue9rueahOWAvFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHNldERhdGFWYWx1ZSA9IChmaWVsZCwgZm9ybWRhdGEsIHZhbHVlKSA9PiB7XHJcblx0Zm9ybWRhdGFbZmllbGRdID0gdmFsdWVcclxuXHRyZXR1cm4gdmFsdWUgfHwgJydcclxufVxyXG5cclxuLyoqXHJcbiAqIOiOt+WPluihqOWNleaVsOaNrlxyXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gZmllbGQg55yf5a6e5ZCN56ew77yM6ZyA6KaB5L2/55SoIHJlYWxOYW1lIOiOt+WPllxyXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSDljp/lp4vmlbDmja5cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXREYXRhVmFsdWUgPSAoZmllbGQsIGRhdGEpID0+IHtcclxuXHRyZXR1cm4gb2JqR2V0KGRhdGEsIGZpZWxkKVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W6KGo5Y2V57G75Z6LXHJcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBmaWVsZCDnnJ/lrp7lkI3np7DvvIzpnIDopoHkvb/nlKggcmVhbE5hbWUg6I635Y+WXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0RGF0YVZhbHVlVHlwZSA9IChmaWVsZCwgZGF0YSkgPT4ge1xyXG5cdGNvbnN0IHZhbHVlID0gZ2V0RGF0YVZhbHVlKGZpZWxkLCBkYXRhKVxyXG5cdHJldHVybiB7XHJcblx0XHR0eXBlOiB0eXBlKHZhbHVlKSxcclxuXHRcdHZhbHVlXHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W6KGo5Y2V5Y+v55So55qE55yf5a6ebmFtZVxyXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gbmFtZSDooajljZVuYW1lXHJcbiAqIEBAcmV0dXJuIHtTdHJpbmd9IOihqOWNleWPr+eUqOeahOecn+Wunm5hbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCByZWFsTmFtZSA9IChuYW1lLCBkYXRhID0ge30pID0+IHtcblx0Y29uc3QgYmFzZV9uYW1lID0gX2Jhc2VQYXRoKG5hbWUpXG5cdGlmICh0eXBlb2YgYmFzZV9uYW1lID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KGJhc2VfbmFtZSkgJiYgYmFzZV9uYW1lLmxlbmd0aCA+IDEpIHtcclxuXHRcdGNvbnN0IHJlYWxuYW1lID0gYmFzZV9uYW1lLnJlZHVjZSgoYSwgYikgPT4gYSArPSBgIyR7Yn1gLCAnX2Zvcm1kYXRhXycpXHJcblx0XHRyZXR1cm4gcmVhbG5hbWVcclxuXHR9XHJcblx0cmV0dXJuIGJhc2VfbmFtZVswXSB8fCBuYW1lXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDliKTmlq3mmK/lkKbooajljZXlj6/nlKjnmoTnnJ/lrp5uYW1lXHJcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBuYW1lIOihqOWNlW5hbWVcclxuICogQEByZXR1cm4ge1N0cmluZ30g6KGo5Y2V5Y+v55So55qE55yf5a6ebmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzUmVhbE5hbWUgPSAobmFtZSkgPT4ge1xyXG5cdGNvbnN0IHJlZyA9IC9eX2Zvcm1kYXRhXyMqL1xyXG5cdHJldHVybiByZWcudGVzdChuYW1lKVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W6KGo5Y2V5pWw5o2u55qE5Y6f5aeL5qC85byPXHJcbiAqIEBAcmV0dXJuIHtPYmplY3R8QXJyYXl9IG9iamVjdCDpnIDopoHop6PmnpDnmoTmlbDmja5cclxuICovXHJcbmV4cG9ydCBjb25zdCByYXdEYXRhID0gKG9iamVjdCA9IHt9LCBuYW1lKSA9PiB7XHJcblx0bGV0IG5ld0RhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iamVjdCkpXG5cdGxldCBmb3JtRGF0YSA9IHt9XHJcblx0Zm9yKGxldCBpIGluIG5ld0RhdGEpe1xuXHRcdGxldCBwYXRoID0gbmFtZTJhcnIoaSlcblx0XHRvYmpTZXQoZm9ybURhdGEscGF0aCxuZXdEYXRhW2ldKVxuXHR9XG5cdHJldHVybiBmb3JtRGF0YVxufVxyXG5cclxuLyoqXHJcbiAqIOecn+Wunm5hbWXov5jljp/kuLogYXJyYXlcclxuICogQHBhcmFtIHsqfSBuYW1lIFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG5hbWUyYXJyID0gKG5hbWUpID0+IHtcclxuXHRsZXQgZmllbGQgPSBuYW1lLnJlcGxhY2UoJ19mb3JtZGF0YV8jJywgJycpXHJcblx0ZmllbGQgPSBmaWVsZC5zcGxpdCgnIycpLm1hcCh2ID0+IChpc051bWJlcih2KSA/IE51bWJlcih2KSA6IHYpKVxyXG5cdHJldHVybiBmaWVsZFxyXG59XHJcblxyXG4vKipcclxuICog5a+56LGh5Lit6K6+572u5YC8XHJcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmplY3Qg5rqQ5pWw5o2uXHJcbiAqIEBwYXJhbSB7U3RyaW5nfCBBcnJheX0gcGF0aCAnYS5iLmMnIOaIliBbJ2EnLDAsJ2InLCdjJ11cclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIOmcgOimgeiuvue9rueahOWAvFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG9ialNldCA9IChvYmplY3QsIHBhdGgsIHZhbHVlKSA9PiB7XHJcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSByZXR1cm4gb2JqZWN0O1xyXG5cdF9iYXNlUGF0aChwYXRoKS5yZWR1Y2UoKG8sIGssIGksIF8pID0+IHtcclxuXHRcdGlmIChpID09PSBfLmxlbmd0aCAtIDEpIHsgXG5cdFx0XHQvLyDoi6XpgY3ljobnu5PmnZ/nm7TmjqXotYvlgLxcclxuXHRcdFx0b1trXSA9IHZhbHVlXHJcblx0XHRcdHJldHVybiBudWxsXHJcblx0XHR9IGVsc2UgaWYgKGsgaW4gbykgeyBcblx0XHRcdC8vIOiLpeWtmOWcqOWvueW6lOi3r+W+hO+8jOWImei/lOWbnuaJvuWIsOeahOWvueixoe+8jOi/m+ihjOS4i+S4gOasoemBjeWOhlxyXG5cdFx0XHRyZXR1cm4gb1trXVxyXG5cdFx0fSBlbHNlIHsgXG5cdFx0XHQvLyDoi6XkuI3lrZjlnKjlr7nlupTot6/lvoTvvIzliJnliJvlu7rlr7nlupTlr7nosaHvvIzoi6XkuIvkuIDot6/lvoTmmK/mlbDlrZfvvIzmlrDlr7nosaHotYvlgLzkuLrnqbrmlbDnu4TvvIzlkKbliJnotYvlgLzkuLrnqbrlr7nosaFcclxuXHRcdFx0b1trXSA9IC9eWzAtOV17MSx9JC8udGVzdChfW2kgKyAxXSkgPyBbXSA6IHt9XHJcblx0XHRcdHJldHVybiBvW2tdXHJcblx0XHR9XHJcblx0fSwgb2JqZWN0KVxyXG5cdC8vIOi/lOWbnm9iamVjdFxyXG5cdHJldHVybiBvYmplY3Q7XHJcbn1cclxuXHJcbi8vIOWkhOeQhiBwYXRo77yMIHBhdGjmnInkuInnp43lvaLlvI/vvJonYVswXS5iLmMn44CBJ2EuMC5iLmMnIOWSjCBbJ2EnLCcwJywnYicsJ2MnXe+8jOmcgOimgee7n+S4gOWkhOeQhuaIkOaVsOe7hO+8jOS+v+S6juWQjue7reS9v+eUqFxyXG5mdW5jdGlvbiBfYmFzZVBhdGgocGF0aCkge1xyXG5cdC8vIOiLpeaYr+aVsOe7hO+8jOWImeebtOaOpei/lOWbnlxyXG5cdGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSByZXR1cm4gcGF0aFxyXG5cdC8vIOiLpeaciSAnWycsJ10n77yM5YiZ5pu/5o2i5oiQ5bCGICdbJyDmm7/mjaLmiJAgJy4nLOWOu+aOiSAnXSdcclxuXHRyZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFsvZywgJy4nKS5yZXBsYWNlKC9cXF0vZywgJycpLnNwbGl0KCcuJylcclxufVxyXG5cclxuLyoqXHJcbiAqIOS7juWvueixoeS4reiOt+WPluWAvFxyXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqZWN0IOa6kOaVsOaNrlxyXG4gKiBAcGFyYW0ge1N0cmluZ3wgQXJyYXl9IHBhdGggJ2EuYi5jJyDmiJYgWydhJywwLCdiJywnYyddXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0VmFsIOWmguaenOaXoOazleS7juiwg+eUqOmTvuS4reiOt+WPluWAvOeahOm7mOiupOWAvFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG9iakdldCA9IChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWwgPSAndW5kZWZpbmVkJykgPT4ge1xyXG5cdC8vIOWFiOWwhnBhdGjlpITnkIbmiJDnu5/kuIDmoLzlvI9cclxuXHRsZXQgbmV3UGF0aCA9IF9iYXNlUGF0aChwYXRoKVxyXG5cdC8vIOmAkuW9kuWkhOeQhu+8jOi/lOWbnuacgOWQjue7k+aenFxyXG5cdGxldCB2YWwgPSBuZXdQYXRoLnJlZHVjZSgobywgaykgPT4ge1xyXG5cdFx0cmV0dXJuIChvIHx8IHt9KVtrXVxyXG5cdH0sIG9iamVjdCk7XHJcblx0cmV0dXJuICF2YWwgfHwgdmFsICE9PSB1bmRlZmluZWQgPyB2YWwgOiBkZWZhdWx0VmFsXHJcbn1cclxuXHJcblxyXG4vKipcclxuICog5piv5ZCm5Li6IG51bWJlciDnsbvlnosgXHJcbiAqIEBwYXJhbSB7YW55fSBudW0g6ZyA6KaB5Yik5pat55qE5YC8XHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59IOaYr+WQpuS4uiBudW1iZXJcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc051bWJlciA9IChudW0pID0+IHtcclxuXHRyZXR1cm4gIWlzTmFOKE51bWJlcihudW0pKVxyXG59XHJcblxyXG4vKipcclxuICog5piv5ZCm5Li6IGJvb2xlYW4g57G75Z6LIFxyXG4gKiBAcGFyYW0ge2FueX0gYm9vbCDpnIDopoHliKTmlq3nmoTlgLxcclxuICogQHJldHVybiB7Qm9vbGVhbn0g5piv5ZCm5Li6IGJvb2xlYW5cclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0Jvb2xlYW4gPSAoYm9vbCkgPT4ge1xyXG5cdHJldHVybiAodHlwZW9mIGJvb2wgPT09ICdib29sZWFuJylcclxufVxyXG4vKipcclxuICog5piv5ZCm5pyJ5b+F5aGr5a2X5q61XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBydWxlcyDop4TliJlcclxuICogQHJldHVybiB7Qm9vbGVhbn0g5piv5ZCm5pyJ5b+F5aGr5a2X5q61XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNSZXF1aXJlZEZpZWxkID0gKHJ1bGVzKSA9PiB7XHJcblx0bGV0IGlzTm9GaWVsZCA9IGZhbHNlO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IHJ1bGVEYXRhID0gcnVsZXNbaV07XHJcblx0XHRpZiAocnVsZURhdGEucmVxdWlyZWQpIHtcclxuXHRcdFx0aXNOb0ZpZWxkID0gdHJ1ZTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBpc05vRmllbGQ7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICog6I635Y+W5pWw5o2u57G75Z6LXHJcbiAqIEBwYXJhbSB7QW55fSBvYmog6ZyA6KaB6I635Y+W5pWw5o2u57G75Z6L55qE5YC8XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdHlwZSA9IChvYmopID0+IHtcclxuXHR2YXIgY2xhc3MydHlwZSA9IHt9O1xyXG5cclxuXHQvLyDnlJ/miJBjbGFzczJ0eXBl5pig5bCEXHJcblx0XCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yXCIuc3BsaXQoXCIgXCIpLm1hcChmdW5jdGlvbihpdGVtLCBpbmRleCkge1xyXG5cdFx0Y2xhc3MydHlwZVtcIltvYmplY3QgXCIgKyBpdGVtICsgXCJdXCJdID0gaXRlbS50b0xvd2VyQ2FzZSgpO1xyXG5cdH0pXHJcblx0aWYgKG9iaiA9PSBudWxsKSB7XHJcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcclxuXHR9XHJcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cclxuXHRcdGNsYXNzMnR5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8IFwib2JqZWN0XCIgOlxyXG5cdFx0dHlwZW9mIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWIpOaWreS4pOS4quWAvOaYr+WQpuebuOetiVxyXG4gKiBAcGFyYW0ge2FueX0gYSDlgLwgIFxyXG4gKiBAcGFyYW0ge2FueX0gYiDlgLwgIFxyXG4gKiBAcmV0dXJuIHtCb29sZWFufSDmmK/lkKbnm7jnrYlcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0VxdWFsID0gKGEsIGIpID0+IHtcclxuXHQvL+WmguaenGHlkoxi5pys5p2l5bCx5YWo562JXHJcblx0aWYgKGEgPT09IGIpIHtcclxuXHRcdC8v5Yik5pat5piv5ZCm5Li6MOWSjC0wXHJcblx0XHRyZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XHJcblx0fVxyXG5cdC8v5Yik5pat5piv5ZCm5Li6bnVsbOWSjHVuZGVmaW5lZFxyXG5cdGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSB7XHJcblx0XHRyZXR1cm4gYSA9PT0gYjtcclxuXHR9XHJcblx0Ly/mjqXkuIvmnaXliKTmlq1h5ZKMYueahOaVsOaNruexu+Wei1xyXG5cdHZhciBjbGFzc05hbWVBID0gdG9TdHJpbmcuY2FsbChhKSxcclxuXHRcdGNsYXNzTmFtZUIgPSB0b1N0cmluZy5jYWxsKGIpO1xyXG5cdC8v5aaC5p6c5pWw5o2u57G75Z6L5LiN55u4562J77yM5YiZ6L+U5ZueZmFsc2VcclxuXHRpZiAoY2xhc3NOYW1lQSAhPT0gY2xhc3NOYW1lQikge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHQvL+WmguaenOaVsOaNruexu+Wei+ebuOetie+8jOWGjeagueaNruS4jeWQjOaVsOaNruexu+Wei+WIhuWIq+WIpOaWrVxyXG5cdHN3aXRjaCAoY2xhc3NOYW1lQSkge1xyXG5cdFx0Y2FzZSAnW29iamVjdCBSZWdFeHBdJzpcclxuXHRcdGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XHJcblx0XHRcdC8v6L+b6KGM5a2X56ym5Liy6L2s5o2i5q+U6L6DXHJcblx0XHRcdHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcclxuXHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XHJcblx0XHRcdC8v6L+b6KGM5pWw5a2X6L2s5o2i5q+U6L6DLOWIpOaWreaYr+WQpuS4uk5hTlxyXG5cdFx0XHRpZiAoK2EgIT09ICthKSB7XHJcblx0XHRcdFx0cmV0dXJuICtiICE9PSArYjtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL+WIpOaWreaYr+WQpuS4ujDmiJYtMFxyXG5cdFx0XHRyZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xyXG5cdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XHJcblx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcclxuXHRcdFx0cmV0dXJuICthID09PSArYjtcclxuXHR9XHJcblx0Ly/lpoLmnpzmmK/lr7nosaHnsbvlnotcclxuXHRpZiAoY2xhc3NOYW1lQSA9PSAnW29iamVjdCBPYmplY3RdJykge1xyXG5cdFx0Ly/ojrflj5Zh5ZKMYueahOWxnuaAp+mVv+W6plxyXG5cdFx0dmFyIHByb3BzQSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLFxyXG5cdFx0XHRwcm9wc0IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKTtcclxuXHRcdGlmIChwcm9wc0EubGVuZ3RoICE9IHByb3BzQi5sZW5ndGgpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wc0EubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIHByb3BOYW1lID0gcHJvcHNBW2ldO1xyXG5cdFx0XHQvL+WmguaenOWvueW6lOWxnuaAp+WvueW6lOWAvOS4jeebuOetie+8jOWImei/lOWbnmZhbHNlXHJcblx0XHRcdGlmIChhW3Byb3BOYW1lXSAhPT0gYltwcm9wTmFtZV0pIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHQvL+WmguaenOaYr+aVsOe7hOexu+Wei1xyXG5cdGlmIChjbGFzc05hbWVBID09ICdbb2JqZWN0IEFycmF5XScpIHtcclxuXHRcdGlmIChhLnRvU3RyaW5nKCkgPT0gYi50b1N0cmluZygpKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxuIiwiPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwidW5pLWZvcm1zXCI+XHJcblx0XHQ8Zm9ybT5cclxuXHRcdFx0PHNsb3Q+PC9zbG90PlxyXG5cdFx0PC9mb3JtPlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcblx0aW1wb3J0IFZhbGlkYXRvciBmcm9tICcuL3ZhbGlkYXRlLmpzJztcclxuXHRpbXBvcnQge1xyXG5cdFx0ZGVlcENvcHksXHJcblx0XHRnZXRWYWx1ZSxcclxuXHRcdGlzUmVxdWlyZWRGaWVsZCxcclxuXHRcdHNldERhdGFWYWx1ZSxcclxuXHRcdGdldERhdGFWYWx1ZSxcclxuXHRcdHJlYWxOYW1lLFxyXG5cdFx0aXNSZWFsTmFtZSxcclxuXHRcdHJhd0RhdGEsXHJcblx0XHRpc0VxdWFsXHJcblx0fSBmcm9tICcuL3V0aWxzLmpzJ1xyXG5cclxuXHQvLyAjaWZuZGVmIFZVRTNcclxuXHQvLyDlkI7nu63kvJrmhaLmhaLlup/lvIPov5nkuKrmlrnms5VcclxuXHRpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XHJcblx0VnVlLnByb3RvdHlwZS5iaW5kZGF0YSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBmb3JtTmFtZSkge1xyXG5cdFx0aWYgKGZvcm1OYW1lKSB7XHJcblx0XHRcdHRoaXMuJHJlZnNbZm9ybU5hbWVdLnNldFZhbHVlKG5hbWUsIHZhbHVlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxldCBmb3JtVm07XHJcblx0XHRcdGZvciAobGV0IGkgaW4gdGhpcy4kcmVmcykge1xyXG5cdFx0XHRcdGNvbnN0IHZtID0gdGhpcy4kcmVmc1tpXTtcclxuXHRcdFx0XHRpZiAodm0gJiYgdm0uJG9wdGlvbnMgJiYgdm0uJG9wdGlvbnMubmFtZSA9PT0gJ3VuaUZvcm1zJykge1xyXG5cdFx0XHRcdFx0Zm9ybVZtID0gdm07XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFmb3JtVm0pIHJldHVybiBjb25zb2xlLmVycm9yKCflvZPliY0gdW5pLWZyb21zIOe7hOS7tue8uuWwkSByZWYg5bGe5oCnJyk7XHJcblx0XHRcdGZvcm1WbS5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XHJcblx0XHR9XHJcblx0fTtcclxuXHQvLyAjZW5kaWZcclxuXHQvKipcclxuXHQgKiBGb3JtcyDooajljZVcclxuXHQgKiBAZGVzY3JpcHRpb24g55Sx6L6T5YWl5qGG44CB6YCJ5oup5Zmo44CB5Y2V6YCJ5qGG44CB5aSa6YCJ5qGG562J5o6n5Lu257uE5oiQ77yM55So5Lul5pS26ZuG44CB5qCh6aqM44CB5o+Q5Lqk5pWw5o2uXHJcblx0ICogQHR1dG9yaWFsIGh0dHBzOi8vZXh0LmRjbG91ZC5uZXQuY24vcGx1Z2luP2lkPTI3NzNcclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcnVsZXNcdOihqOWNleagoemqjOinhOWImVxyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB2YWxpZGF0ZVRyaWdnZXIgPSBbYmluZHxzdWJtaXR8Ymx1cl1cdOagoemqjOinpuWPkeWZqOaWueW8jyDpu5jorqQgc3VibWl0XHJcblx0ICogQHZhbHVlIGJpbmRcdFx05Y+R55Sf5Y+Y5YyW5pe26Kem5Y+RXHJcblx0ICogQHZhbHVlIHN1Ym1pdFx05o+Q5Lqk5pe26Kem5Y+RXHJcblx0ICogQHZhbHVlIGJsdXJcdCAg5aSx5Y6754Sm54K55pe26Kem5Y+RXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGxhYmVsUG9zaXRpb24gPSBbdG9wfGxlZnRdXHRsYWJlbCDkvY3nva4g6buY6K6kIGxlZnRcclxuXHQgKiBAdmFsdWUgdG9wXHRcdOmhtumDqOaYvuekuiBsYWJlbFxyXG5cdCAqIEB2YWx1ZSBsZWZ0XHTlt6bkvqfmmL7npLogbGFiZWxcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbGFiZWxXaWR0aFx0bGFiZWwg5a695bqm77yM6buY6K6kIDY1cHhcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbGFiZWxBbGlnbiA9IFtsZWZ0fGNlbnRlcnxyaWdodF1cdGxhYmVsIOWxheS4reaWueW8jyAg6buY6K6kIGxlZnRcclxuXHQgKiBAdmFsdWUgbGVmdFx0XHRsYWJlbCDlt6bkvqfmmL7npLpcclxuXHQgKiBAdmFsdWUgY2VudGVyXHRsYWJlbCDlsYXkuK1cclxuXHQgKiBAdmFsdWUgcmlnaHRcdFx0bGFiZWwg5Y+z5L6n5a+56b2QXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGVyclNob3dUeXBlID0gW3VuZGVydGV4dHx0b2FzdHxtb2RhbF1cdOagoemqjOmUmeivr+S/oeaBr+aPkOekuuaWueW8j1xyXG5cdCAqIEB2YWx1ZSB1bmRlcnRleHRcdOmUmeivr+S/oeaBr+WcqOW6lemDqOaYvuekulxyXG5cdCAqIEB2YWx1ZSB0b2FzdFx0XHRcdOmUmeivr+S/oeaBr3RvYXN05pi+56S6XHJcblx0ICogQHZhbHVlIG1vZGFsXHRcdFx06ZSZ6K+v5L+h5oGvbW9kYWzmmL7npLpcclxuXHQgKiBAZXZlbnQge0Z1bmN0aW9ufSBzdWJtaXRcdOaPkOS6pOaXtuinpuWPkVxyXG5cdCAqIEBldmVudCB7RnVuY3Rpb259IHZhbGlkYXRlXHTmoKHpqoznu5Pmnpzlj5HnlJ/lj5jljJbop6blj5FcclxuXHQgKi9cclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRuYW1lOiAndW5pRm9ybXMnLFxyXG5cdFx0ZW1pdHM6IFsndmFsaWRhdGUnLCAnc3VibWl0J10sXHJcblx0XHRvcHRpb25zOiB7XHJcblx0XHRcdHZpcnR1YWxIb3N0OiB0cnVlXHJcblx0XHR9LFxyXG5cdFx0cHJvcHM6IHtcclxuXHRcdFx0Ly8g5Y2z5bCG5byD55SoXHJcblx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0dHlwZTogT2JqZWN0LFxyXG5cdFx0XHRcdGRlZmF1bHQgKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyB2dWUzIOabv+aNoiB2YWx1ZSDlsZ7mgKdcclxuXHRcdFx0bW9kZWxWYWx1ZToge1xyXG5cdFx0XHRcdHR5cGU6IE9iamVjdCxcclxuXHRcdFx0XHRkZWZhdWx0ICgpIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gMS40LjAg5byA5aeL5bCG5LiN5pSv5oyBIHYtbW9kZWwg77yM5LiU5bqf5byDIHZhbHVlIOWSjCBtb2RlbFZhbHVlXHJcblx0XHRcdG1vZGVsOiB7XHJcblx0XHRcdFx0dHlwZTogT2JqZWN0LFxyXG5cdFx0XHRcdGRlZmF1bHQgKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDooajljZXmoKHpqozop4TliJlcclxuXHRcdFx0cnVsZXM6IHtcclxuXHRcdFx0XHR0eXBlOiBPYmplY3QsXHJcblx0XHRcdFx0ZGVmYXVsdCAoKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4ge307XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+agoemqjOmUmeivr+S/oeaBr+aPkOekuuaWueW8jyDpu5jorqQgdW5kZXJ0ZXh0IOWPluWAvCBbdW5kZXJ0ZXh0fHRvYXN0fG1vZGFsXVxyXG5cdFx0XHRlcnJTaG93VHlwZToge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAndW5kZXJ0ZXh0J1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDmoKHpqozop6blj5HlmajmlrnlvI8g6buY6K6kIGJpbmQg5Y+W5YC8IFtiaW5kfHN1Ym1pdF1cclxuXHRcdFx0dmFsaWRhdGVUcmlnZ2VyOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICdzdWJtaXQnXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIGxhYmVsIOS9jee9ru+8jOm7mOiupCBsZWZ0IOWPluWAvCAgdG9wL2xlZnRcclxuXHRcdFx0bGFiZWxQb3NpdGlvbjoge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAnbGVmdCdcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gbGFiZWwg5a695bqmXHJcblx0XHRcdGxhYmVsV2lkdGg6IHtcclxuXHRcdFx0XHR0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIGxhYmVsIOWxheS4reaWueW8j++8jOm7mOiupCBsZWZ0IOWPluWAvCBsZWZ0L2NlbnRlci9yaWdodFxyXG5cdFx0XHRsYWJlbEFsaWduOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICdsZWZ0J1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRib3JkZXI6IHtcclxuXHRcdFx0XHR0eXBlOiBCb29sZWFuLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRwcm92aWRlKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHVuaUZvcm06IHRoaXNcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Ly8g6KGo5Y2V5pys5Zyw5YC855qE6K6w5b2V77yM5LiN5bqU6K+l5LiO5Lyg5aaC55qE5YC86L+b6KGM5YWz6IGUXHJcblx0XHRcdFx0Zm9ybURhdGE6IHt9LFxyXG5cdFx0XHRcdGZvcm1SdWxlczoge31cclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblx0XHRjb21wdXRlZDoge1xyXG5cdFx0XHQvLyDorqHnrpfmlbDmja7mupDlj5jljJbnmoRcclxuXHRcdFx0bG9jYWxEYXRhKCkge1xyXG5cdFx0XHRcdGNvbnN0IGxvY2FsVmFsID0gdGhpcy5tb2RlbCB8fCB0aGlzLm1vZGVsVmFsdWUgfHwgdGhpcy52YWx1ZVxyXG5cdFx0XHRcdGlmIChsb2NhbFZhbCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGRlZXBDb3B5KGxvY2FsVmFsKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4ge31cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdHdhdGNoOiB7XHJcblx0XHRcdC8vIOebkeWQrOaVsOaNruWPmOWMliAs5pqC5pe25LiN5L2/55So77yM6ZyA6KaB5Y2V54us6LWL5YC8XHJcblx0XHRcdC8vIGxvY2FsRGF0YToge30sXHJcblx0XHRcdC8vIOebkeWQrOinhOWImeWPmOWMllxyXG5cdFx0XHRydWxlczoge1xyXG5cdFx0XHRcdGhhbmRsZXI6IGZ1bmN0aW9uKHZhbCwgb2xkVmFsKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldFJ1bGVzKHZhbClcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGRlZXA6IHRydWUsXHJcblx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRjcmVhdGVkKCkge1xyXG5cdFx0XHQvLyAjaWZkZWYgVlVFM1xyXG5cdFx0XHRsZXQgZ2V0YmluZGRhdGEgPSBnZXRBcHAoKS4kdm0uJC5hcHBDb250ZXh0LmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLmJpbmRkYXRhXHJcblx0XHRcdGlmICghZ2V0YmluZGRhdGEpIHtcclxuXHRcdFx0XHRnZXRBcHAoKS4kdm0uJC5hcHBDb250ZXh0LmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLmJpbmRkYXRhID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGZvcm1OYW1lKSB7XHJcblx0XHRcdFx0XHRpZiAoZm9ybU5hbWUpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy4kcmVmc1tmb3JtTmFtZV0uc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bGV0IGZvcm1WbTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSBpbiB0aGlzLiRyZWZzKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3Qgdm0gPSB0aGlzLiRyZWZzW2ldO1xyXG5cdFx0XHRcdFx0XHRcdGlmICh2bSAmJiB2bS4kb3B0aW9ucyAmJiB2bS4kb3B0aW9ucy5uYW1lID09PSAndW5pRm9ybXMnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtVm0gPSB2bTtcclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoIWZvcm1WbSkgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ+W9k+WJjSB1bmktZnJvbXMg57uE5Lu257y65bCRIHJlZiDlsZ7mgKcnKTtcclxuXHRcdFx0XHRcdFx0Zm9ybVZtLnNldFZhbHVlKG5hbWUsIHZhbHVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gI2VuZGlmXHJcblxyXG5cdFx0XHQvLyDlrZDnu4Tku7blrp7kvovmlbDnu4RcclxuXHRcdFx0dGhpcy5jaGlsZHJlbnMgPSBbXVxuXHRcdFx0Ly8gVE9ETyDlhbzlrrnml6fniYggdW5pLWRhdGEtcGlja2VyICzmlrDniYjmnKzkuK3ml6DmlYjvvIzlj6rmmK/pgb/lhY3miqXplJlcblx0XHRcdHRoaXMuaW5wdXRDaGlsZHJlbnMgPSBbXVxyXG5cdFx0XHR0aGlzLnNldFJ1bGVzKHRoaXMucnVsZXMpXHJcblx0XHR9LFxyXG5cdFx0bWV0aG9kczoge1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog5aSW6YOo6LCD55So5pa55rOVXHJcblx0XHRcdCAqIOiuvue9ruinhOWImSDvvIzkuLvopoHnlKjkuo7lsI/nqIvluo/oh6rlrprkuYnmo4Dpqozop4TliJlcclxuXHRcdFx0ICogQHBhcmFtIHtBcnJheX0gcnVsZXMg6KeE5YiZ5rqQ5pWw5o2uXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRzZXRSdWxlcyhydWxlcykge1xyXG5cdFx0XHRcdC8vIFRPRE8g5pyJ5Y+v6IO95a2Q57uE5Lu25ZCI5bm26KeE5YiZ55qE5pe25py65q+U6L+Z5Liq6KaB5pep77yM5omA5Lul6ZyA6KaB5ZCI5bm25a+56LGhIO+8jOiAjOS4jeaYr+ebtOaOpei1i+WAvO+8jOWPr+iDveS8muiiq+imhuebllxyXG5cdFx0XHRcdHRoaXMuZm9ybVJ1bGVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5mb3JtUnVsZXMsIHJ1bGVzKVxyXG5cdFx0XHRcdC8vIOWIneWni+WMluagoemqjOWHveaVsFxyXG5cdFx0XHRcdHRoaXMudmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcihydWxlcyk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog5aSW6YOo6LCD55So5pa55rOVXHJcblx0XHRcdCAqIOiuvue9ruaVsOaNru+8jOeUqOS6juiuvue9ruihqOWNleaVsOaNru+8jOWFrOW8gOe7meeUqOaIt+S9v+eUqCDvvIwg5LiN5pSv5oyB5Zyo5Yqo5oCB6KGo5Y2V5Lit5L2/55SoXHJcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcclxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRzZXRWYWx1ZShrZXksIHZhbHVlKSB7XHJcblx0XHRcdFx0bGV0IGV4YW1wbGUgPSB0aGlzLmNoaWxkcmVucy5maW5kKGNoaWxkID0+IGNoaWxkLm5hbWUgPT09IGtleSk7XHJcblx0XHRcdFx0aWYgKCFleGFtcGxlKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0XHR0aGlzLmZvcm1EYXRhW2tleV0gPSBnZXRWYWx1ZShrZXksIHZhbHVlLCAodGhpcy5mb3JtUnVsZXNba2V5XSAmJiB0aGlzLmZvcm1SdWxlc1trZXldLnJ1bGVzKSB8fCBbXSlcclxuXHRcdFx0XHRyZXR1cm4gZXhhbXBsZS5vbkZpZWxkQ2hhbmdlKHRoaXMuZm9ybURhdGFba2V5XSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog5aSW6YOo6LCD55So5pa55rOVXHJcblx0XHRcdCAqIOaJi+WKqOaPkOS6pOagoemqjOihqOWNlVxyXG5cdFx0XHQgKiDlr7nmlbTkuKrooajljZXov5vooYzmoKHpqoznmoTmlrnms5XvvIzlj4LmlbDkuLrkuIDkuKrlm57osIPlh73mlbDjgIJcclxuXHRcdFx0ICogQHBhcmFtIHtBcnJheX0ga2VlcGl0ZW0g5L+d55WZ5LiN5Y+C5LiO5qCh6aqM55qE5a2X5q61XHJcblx0XHRcdCAqIEBwYXJhbSB7dHlwZX0gY2FsbGJhY2sg5pa55rOV5Zue6LCDXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR2YWxpZGF0ZShrZWVwaXRlbSwgY2FsbGJhY2spIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGVja0FsbCh0aGlzLmZvcm1EYXRhLCBrZWVwaXRlbSwgY2FsbGJhY2spO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOWklumDqOiwg+eUqOaWueazlVxyXG5cdFx0XHQgKiDpg6jliIbooajljZXmoKHpqoxcclxuXHRcdFx0ICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IHByb3BzIOmcgOimgeagoemqjOeahOWtl+autVxyXG5cdFx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSDlm57osIPlh73mlbBcclxuXHRcdFx0ICovXHJcblx0XHRcdHZhbGlkYXRlRmllbGQocHJvcHMgPSBbXSwgY2FsbGJhY2spIHtcclxuXHRcdFx0XHRwcm9wcyA9IFtdLmNvbmNhdChwcm9wcyk7XHJcblx0XHRcdFx0bGV0IGludmFsaWRGaWVsZHMgPSB7fTtcclxuXHRcdFx0XHR0aGlzLmNoaWxkcmVucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgbmFtZSA9IHJlYWxOYW1lKGl0ZW0ubmFtZSlcclxuXHRcdFx0XHRcdGlmIChwcm9wcy5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xyXG5cdFx0XHRcdFx0XHRpbnZhbGlkRmllbGRzID0gT2JqZWN0LmFzc2lnbih7fSwgaW52YWxpZEZpZWxkcywge1xyXG5cdFx0XHRcdFx0XHRcdFtuYW1lXTogdGhpcy5mb3JtRGF0YVtuYW1lXVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGVja0FsbChpbnZhbGlkRmllbGRzLCBbXSwgY2FsbGJhY2spO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOWklumDqOiwg+eUqOaWueazlVxyXG5cdFx0XHQgKiDnp7vpmaTooajljZXpobnnmoTmoKHpqoznu5PmnpzjgILkvKDlhaXlvoXnp7vpmaTnmoTooajljZXpobnnmoQgcHJvcCDlsZ7mgKfmiJbogIUgcHJvcCDnu4TmiJDnmoTmlbDnu4TvvIzlpoLkuI3kvKDliJnnp7vpmaTmlbTkuKrooajljZXnmoTmoKHpqoznu5PmnpxcclxuXHRcdFx0ICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IHByb3BzIOmcgOimgeenu+mZpOagoemqjOeahOWtl+autSDvvIzkuI3loavkuLrmiYDmnIlcclxuXHRcdFx0ICovXHJcblx0XHRcdGNsZWFyVmFsaWRhdGUocHJvcHMgPSBbXSkge1xyXG5cdFx0XHRcdHByb3BzID0gW10uY29uY2F0KHByb3BzKTtcclxuXHRcdFx0XHR0aGlzLmNoaWxkcmVucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHByb3BzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRpdGVtLmVyck1zZyA9ICcnO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgbmFtZSA9IHJlYWxOYW1lKGl0ZW0ubmFtZSlcclxuXHRcdFx0XHRcdFx0aWYgKHByb3BzLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XHJcblx0XHRcdFx0XHRcdFx0aXRlbS5lcnJNc2cgPSAnJztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOWklumDqOiwg+eUqOaWueazlSDvvIzljbPlsIblup/lvINcclxuXHRcdFx0ICog5omL5Yqo5o+Q5Lqk5qCh6aqM6KGo5Y2VXHJcblx0XHRcdCAqIOWvueaVtOS4quihqOWNlei/m+ihjOagoemqjOeahOaWueazle+8jOWPguaVsOS4uuS4gOS4quWbnuiwg+WHveaVsOOAglxyXG5cdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBrZWVwaXRlbSDkv53nlZnkuI3lj4LkuI7moKHpqoznmoTlrZfmrrVcclxuXHRcdFx0ICogQHBhcmFtIHt0eXBlfSBjYWxsYmFjayDmlrnms5Xlm57osINcclxuXHRcdFx0ICovXHJcblx0XHRcdHN1Ym1pdChrZWVwaXRlbSwgY2FsbGJhY2ssIHR5cGUpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpIGluIHRoaXMuZGF0YVZhbHVlKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRGF0YSA9IHRoaXMuY2hpbGRyZW5zLmZpbmQodiA9PiB2Lm5hbWUgPT09IGkpO1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW1EYXRhKSB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmZvcm1EYXRhW2ldID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1EYXRhW2ldID0gdGhpcy5fZ2V0VmFsdWUoaSwgdGhpcy5kYXRhVmFsdWVbaV0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIXR5cGUpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUud2Fybignc3VibWl0IOaWueazleWNs+WwhuW6n+W8g++8jOivt+S9v+eUqHZhbGlkYXRl5pa55rOV5Luj5pu/77yBJyk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGVja0FsbCh0aGlzLmZvcm1EYXRhLCBrZWVwaXRlbSwgY2FsbGJhY2ssICdzdWJtaXQnKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIOagoemqjOaJgOaciVxyXG5cdFx0XHRhc3luYyBjaGVja0FsbChpbnZhbGlkRmllbGRzLCBrZWVwaXRlbSwgY2FsbGJhY2ssIHR5cGUpIHtcclxuXHRcdFx0XHQvLyDkuI3lrZjlnKjmoKHpqozop4TliJkg77yM5YiZ5YGc5q2i5qCh6aqM5rWB56iLXHJcblx0XHRcdFx0aWYgKCF0aGlzLnZhbGlkYXRvcikgcmV0dXJuXHJcblx0XHRcdFx0bGV0IGNoaWxkcmVucyA9IFtdXHJcblx0XHRcdFx0Ly8g5aSE55CG5Y+C5LiO5qCh6aqM55qEaXRlbeWunuS+i1xyXG5cdFx0XHRcdGZvciAobGV0IGkgaW4gaW52YWxpZEZpZWxkcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuY2hpbGRyZW5zLmZpbmQodiA9PiByZWFsTmFtZSh2Lm5hbWUpID09PSBpKVxyXG5cdFx0XHRcdFx0aWYgKGl0ZW0pIHtcclxuXHRcdFx0XHRcdFx0Y2hpbGRyZW5zLnB1c2goaXRlbSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIOWmguaenHZhbGlkYXRl56ys5LiA5Liq5Y+C5pWw5pivZnVuY2lvbnQgLOmCo+Wwsei1sOWbnuiwg1xyXG5cdFx0XHRcdGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIGtlZXBpdGVtID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjayA9IGtlZXBpdGVtO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bGV0IHByb21pc2U7XHJcblx0XHRcdFx0Ly8g5aaC5p6c5LiN5a2Y5Zyo5Zue6LCD77yM6YKj5LmI5L2/55SoIFByb21pc2Ug5pa55byP6L+U5ZueXHJcblx0XHRcdFx0aWYgKCFjYWxsYmFjayAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicgJiYgUHJvbWlzZSkge1xyXG5cdFx0XHRcdFx0cHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbih2YWxpZCwgaW52YWxpZEZpZWxkcykge1xyXG5cdFx0XHRcdFx0XHRcdCF2YWxpZCA/IHJlc29sdmUoaW52YWxpZEZpZWxkcykgOiByZWplY3QodmFsaWQpO1xyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRsZXQgcmVzdWx0cyA9IFtdO1xyXG5cdFx0XHRcdC8vIOmBv+WFjeW8leeUqOmUmeS5sSDvvIzlu7rorq7mi7fotJ3lr7nosaHlpITnkIZcclxuXHRcdFx0XHRsZXQgdGVtcEZvcm1EYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnZhbGlkRmllbGRzKSlcclxuXHRcdFx0XHQvLyDmiYDmnInlrZDnu4Tku7blj4LkuI7moKHpqows5L2/55SoIGZvciDlj6/ku6Xkvb/nlKggIGF3aWF0XHJcblx0XHRcdFx0Zm9yIChsZXQgaSBpbiBjaGlsZHJlbnMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNoaWxkID0gY2hpbGRyZW5zW2ldXHJcblx0XHRcdFx0XHRsZXQgbmFtZSA9IHJlYWxOYW1lKGNoaWxkLm5hbWUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgY2hpbGQub25GaWVsZENoYW5nZSh0ZW1wRm9ybURhdGFbbmFtZV0pO1xyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCkge1xyXG5cdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuXHRcdFx0XHRcdFx0Ly8gdG9hc3QgLG1vZGFsIOWPqumcgOimgeaJp+ihjOesrOS4gOasoeWwseWPr+S7pVxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5lcnJTaG93VHlwZSA9PT0gJ3RvYXN0JyB8fCB0aGlzLmVyclNob3dUeXBlID09PSAnbW9kYWwnKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSByZXN1bHRzID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoa2VlcGl0ZW0pKSB7XHJcblx0XHRcdFx0XHRrZWVwaXRlbS5mb3JFYWNoKHYgPT4ge1xyXG5cdFx0XHRcdFx0XHRsZXQgdk5hbWUgPSByZWFsTmFtZSh2KTtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlID0gZ2V0RGF0YVZhbHVlKHYsIHRoaXMubG9jYWxEYXRhKVxyXG5cdFx0XHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdHRlbXBGb3JtRGF0YVt2TmFtZV0gPSB2YWx1ZVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRPRE8gc3VibWl0IOWNs+WwhuW6n+W8g1xyXG5cdFx0XHRcdGlmICh0eXBlID09PSAnc3VibWl0Jykge1xyXG5cdFx0XHRcdFx0dGhpcy4kZW1pdCgnc3VibWl0Jywge1xyXG5cdFx0XHRcdFx0XHRkZXRhaWw6IHtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdGVtcEZvcm1EYXRhLFxyXG5cdFx0XHRcdFx0XHRcdGVycm9yczogcmVzdWx0c1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy4kZW1pdCgndmFsaWRhdGUnLCByZXN1bHRzKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIGNvbnN0IHJlc2V0Rm9ybURhdGEgPSByYXdEYXRhKHRlbXBGb3JtRGF0YSwgdGhpcy5sb2NhbERhdGEsIHRoaXMubmFtZSlcclxuXHRcdFx0XHRsZXQgcmVzZXRGb3JtRGF0YSA9IHt9XHJcblx0XHRcdFx0cmVzZXRGb3JtRGF0YSA9IHJhd0RhdGEodGVtcEZvcm1EYXRhLCB0aGlzLm5hbWUpXHJcblx0XHRcdFx0Y2FsbGJhY2sgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmIGNhbGxiYWNrKHJlc3VsdHMsIHJlc2V0Rm9ybURhdGEpO1xyXG5cclxuXHRcdFx0XHRpZiAocHJvbWlzZSAmJiBjYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2U7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog6L+U5ZuedmFsaWRhdGXkuovku7ZcclxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IHJlc3VsdFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dmFsaWRhdGVDaGVjayhyZXN1bHQpIHtcclxuXHRcdFx0XHR0aGlzLiRlbWl0KCd2YWxpZGF0ZScsIHJlc3VsdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdF9nZXRWYWx1ZTogZ2V0VmFsdWUsXHJcblx0XHRcdF9pc1JlcXVpcmVkRmllbGQ6IGlzUmVxdWlyZWRGaWVsZCxcclxuXHRcdFx0X3NldERhdGFWYWx1ZTogc2V0RGF0YVZhbHVlLFxyXG5cdFx0XHRfZ2V0RGF0YVZhbHVlOiBnZXREYXRhVmFsdWUsXHJcblx0XHRcdF9yZWFsTmFtZTogcmVhbE5hbWUsXHJcblx0XHRcdF9pc1JlYWxOYW1lOiBpc1JlYWxOYW1lLFxyXG5cdFx0XHRfaXNFcXVhbDogaXNFcXVhbFxyXG5cdFx0fVxyXG5cdH07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcblx0LnVuaS1mb3JtcyB7fVxyXG48L3N0eWxlPlxuIiwiaW1wb3J0IHR5cGUgeyBMb2dpblJlc3VsdCB9IGZyb20gJ0AvdHlwZXMvbWVtYmVyJ1xyXG5pbXBvcnQgeyBodHRwIH0gZnJvbSAnQC91dGlscy9odHRwJ1xyXG5pbXBvcnQgeyB1c2VNZW1iZXJTdG9yZSB9IGZyb20gJ0Avc3RvcmVzJ1xyXG5cclxudHlwZSBMb2dpbld4TWluUGFyYW1zID0ge1xyXG4gIGNvZGU6IHN0cmluZ1xyXG4gIGVuY3J5cHRlZERhdGE/OiBzdHJpbmdcclxuICBpdj86IHN0cmluZ1xyXG59XHJcbi8qKlxyXG4gKiDlsI/nqIvluo/nmbvlvZVcclxuICogQHBhcmFtIGRhdGEg6K+35rGC5Y+C5pWwXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcG9zdExvZ2luV3hNaW5BUEkgPSAoZGF0YTogTG9naW5XeE1pblBhcmFtcykgPT4ge1xyXG4gIHJldHVybiBodHRwPExvZ2luUmVzdWx0Pih7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJy9sb2dpbi93eE1pbicsXHJcbiAgICBkYXRhLFxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDlsI/nqIvluo/nmbvlvZVf5YaF5rWL54mIXHJcbiAqIEBwYXJhbSBwaG9uZU51bWJlciDmqKHmi5/miYvmnLrlj7fnoIFcclxuICovXHJcbmV4cG9ydCBjb25zdCBwb3N0TG9naW5XeE1pblNpbXBsZUFQSSA9IChwaG9uZU51bWJlcjogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8TG9naW5SZXN1bHQ+KHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnL2xvZ2luL3d4TWluL3NpbXBsZScsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgIHBob25lTnVtYmVyLFxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcblxyXG50eXBlIExvZ2luUGFyYW1zID0ge1xyXG4gIHVzZXJuYW1lOiBzdHJpbmdcclxuICBwYXNzd29yZDogc3RyaW5nXHJcbiAgY2FwdGNoYTogc3RyaW5nXHJcbiAga2VlcDogYm9vbGVhblxyXG4gIGxvYWRpbmc6IGJvb2xlYW5cclxuICBjYXB0Y2hhX2lkOiBzdHJpbmdcclxufVxyXG4vKipcclxuICog5Lyg57uf55m75b2VLeeUqOaIt+WQjSvlr4bnoIFcclxuICogQHBhcmFtIGRhdGEg6K+35rGC5Y+C5pWwXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcG9zdExvZ2luQVBJID0gKGRhdGE6IExvZ2luUGFyYW1zKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8eyB1c2VySW5mbzogTG9naW5SZXN1bHQgfT4oe1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICcvYWRtaW4vaW5kZXgvbG9naW4nLFxyXG4gICAgZGF0YSxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W6aqM6K+B56CB5Zu+54mHXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0VmVyaWZ5Q29kZUltZyA9IChjYXB0Y2hhX2lkOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gaHR0cDxhbnk+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IGAvYXBpL2NvbW1vbi9jYXB0Y2hhP3NlcnZlcj0xJmlkPSR7Y2FwdGNoYV9pZH0mbT1gICsgTWF0aC5yYW5kb20oKSxcclxuICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJywgLy/orr7nva7lk43lupTnsbvlnotcclxuICB9KVxyXG59XHJcbi8qKlxyXG4gKiDliLfmlrB0b2tlblxyXG4gKiBAcGFyYW0gZGF0YSDor7fmsYLlj4LmlbBcclxuICovXHJcbmV4cG9ydCBjb25zdCByZWZyZXNoVG9rZW4gPSAoKSA9PiB7XHJcbiAgY29uc3QgbWVtYmVyU3RvcmUgPSB1c2VNZW1iZXJTdG9yZSgpXHJcbiAgY29uc3QgcmVmcmVzaFRva2VuID0gbWVtYmVyU3RvcmUucHJvZmlsZT8ucmVmcmVzaFRva2VuXHJcblxyXG4gIHJldHVybiBodHRwPHsgdG9rZW46IHN0cmluZzsgdHlwZTogc3RyaW5nIH0+KHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnL2FwaS9jb21tb24vcmVmcmVzaFRva2VuJyxcclxuICAgIGRhdGE6IHsgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuIH0sXHJcbiAgfSlcclxufVxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBnZXRWZXJpZnlDb2RlSW1nLCBwb3N0TG9naW5BUEkgfSBmcm9tICdAL3NlcnZpY2VzL2xvZ2luJ1xyXG5pbXBvcnQgeyB1c2VNZW1iZXJTdG9yZSB9IGZyb20gJ0Avc3RvcmVzJ1xyXG5pbXBvcnQgdHlwZSB7IExvZ2luUmVzdWx0IH0gZnJvbSAnQC90eXBlcy9tZW1iZXInXHJcbmltcG9ydCB7IG9uTG9hZCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyByZWFjdGl2ZSwgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSlcclxuY29uc3QgdmVyaWZ5Q29kZUltZyA9IHJlZignJylcclxuY29uc3QgZGF0YSA9IHJlYWN0aXZlKHsgY2FwdGNoYV9pZDogJ2YyZGQzOWNlLTBkM2UtNGMxZS05MTZjLWI1MDA5MGE3NTkwcycgfSlcclxub25Mb2FkKCgpID0+IHtcclxuICBfZ2V0VmVyaWZ5Q29kZUltZygpXHJcbn0pXHJcbi8vIOiOt+WPlumqjOivgeeggVxyXG5jb25zdCBfZ2V0VmVyaWZ5Q29kZUltZyA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSAoYXdhaXQgZ2V0VmVyaWZ5Q29kZUltZyhkYXRhLmNhcHRjaGFfaWQpKSBhcyBhbnlcclxuICBjb25zdCBhcnJheUJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHJlcylcclxuICBjb25zdCBiYXNlNjQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyB1bmkuYXJyYXlCdWZmZXJUb0Jhc2U2NChhcnJheUJ1ZmZlcikgLy/ov5nph4zpnIDopoHmt7vliqDliY3nvIBcclxuICB2ZXJpZnlDb2RlSW1nLnZhbHVlID0gYmFzZTY0XHJcbn1cclxuXHJcbmNvbnN0IGxvZ2luU3VjY2VzcyA9IChwcm9maWxlOiBMb2dpblJlc3VsdCkgPT4ge1xyXG4gIC8vIOS/neWtmOS8muWRmOS/oeaBr1xyXG4gIGNvbnN0IG1lbWJlclN0b3JlID0gdXNlTWVtYmVyU3RvcmUoKVxyXG4gIG1lbWJlclN0b3JlLnNldFByb2ZpbGUocHJvZmlsZSlcclxuICAvLyDmiJDlip/mj5DnpLpcclxuICB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ3N1Y2Nlc3MnLCB0aXRsZTogJ+eZu+W9leaIkOWKnycgfSlcclxuICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvbG9naW4vbG9naW4udnVlOjI4Jywn55m75b2V5oiQ5YqfJywgcHJvZmlsZSlcclxuXHJcbiAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyDpobXpnaLot7PovaxcclxuICAgIC8vIHVuaS5zd2l0Y2hUYWIoeyB1cmw6ICcvcGFnZXMvbXkvbXknIH0pXHJcbiAgICB1bmkubmF2aWdhdGVCYWNrKClcclxuICB9LCA1MDApXHJcbn1cclxuXHJcbi8vIOS8oOe7n+ihqOWNleeZu+W9le+8jOa1i+ivlei0puWPt++8mjEzMTIzNDU2Nzg5IOWvhuegge+8mjEyMzQ1Nu+8jOa1i+ivlei0puWPt+S7heW8gOWPkeWtpuS5oOS9v+eUqOOAglxyXG5jb25zdCBmb3JtID0gcmVmKHtcclxuICBhY2NvdW50OiAnYWRtaW4nLFxyXG4gIHBhc3N3b3JkOiAnJyxcclxuICBjYXB0Y2hhOiAnJyxcclxufSlcclxuXHJcbi8vIOihqOWNleaPkOS6pFxyXG5jb25zdCBvblN1Ym1pdCA9IGFzeW5jICgpID0+IHtcclxuICBpZiAobG9hZGluZy52YWx1ZSkge1xyXG4gICAgLy/liKTmlq3mmK/lkKbliqDovb3kuK3vvIzpgb/lhY3ph43lpI3ngrnlh7vor7fmsYJcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBpZiAoZm9ybS52YWx1ZS5hY2NvdW50ID09ICcnKSB7XHJcbiAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgaWNvbjogJ25vbmUnLFxyXG4gICAgICBwb3NpdGlvbjogJ2JvdHRvbScsXHJcbiAgICAgIHRpdGxlOiAn55So5oi35ZCN5LiN6IO95Li656m6JyxcclxuICAgIH0pXHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKGZvcm0udmFsdWUucGFzc3dvcmQgPT0gJycpIHtcclxuICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICBpY29uOiAnbm9uZScsXHJcbiAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcclxuICAgICAgdGl0bGU6ICflr4bnoIHkuI3og73kuLrnqbonLFxyXG4gICAgfSlcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBpZiAoZm9ybS52YWx1ZS5wYXNzd29yZC5sZW5ndGggPCA2KSB7XHJcbiAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgaWNvbjogJ25vbmUnLFxyXG4gICAgICBwb3NpdGlvbjogJ2JvdHRvbScsXHJcbiAgICAgIHRpdGxlOiAn5a+G56CB6ZW/5bqm5LiN6IO95bCP5LqONuS9jScsXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlXHJcbiAgY29uc3QgcGFyYW0gPSB7XHJcbiAgICB1c2VybmFtZTogZm9ybS52YWx1ZS5hY2NvdW50LFxyXG4gICAgcGFzc3dvcmQ6IGZvcm0udmFsdWUucGFzc3dvcmQsXHJcbiAgICBjYXB0Y2hhOiBmb3JtLnZhbHVlLmNhcHRjaGEsXHJcbiAgICBrZWVwOiB0cnVlLFxyXG4gICAgbG9hZGluZzogdHJ1ZSxcclxuICAgIGNhcHRjaGFfaWQ6IGRhdGEuY2FwdGNoYV9pZCxcclxuICB9XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgcG9zdExvZ2luQVBJKHBhcmFtKVxyXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIC8vIOW9k2NvZGXkuLow5pe25by556qX5o+Q56S66ZSZ6K+vbXNnXHJcbiAgaWYgKHJlcy5jb2RlID09PSAxKSB7XHJcbiAgICBsb2dpblN1Y2Nlc3MocmVzLmRhdGEudXNlckluZm8pXHJcbiAgfSBlbHNlIHtcclxuICAgIHVuaS5zaG93VG9hc3Qoe1xyXG4gICAgICB0aXRsZTogcmVzLm1zZyxcclxuICAgICAgaWNvbjogJ25vbmUnLFxyXG4gICAgfSlcclxuICAgIC8vIOWIt+aWsOmqjOivgeeggVxyXG4gICAgX2dldFZlcmlmeUNvZGVJbWcoKVxyXG4gIH1cclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cInZpZXdwb3J0XCI+XHJcbiAgICA8dmlldyBjbGFzcz1cImxvZ29cIj5cclxuICAgICAgPGltYWdlIHNyYz1cIkAvc3RhdGljL2ltYWdlcy9sb2dvLnBuZ1wiPjwvaW1hZ2U+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyBjbGFzcz1cImxvZ2luXCI+XHJcbiAgICAgIDwhLS0g572R6aG156uv6KGo5Y2V55m75b2VIC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cImlucHV0LWJveCBwYWRkaW5nLWxyXCI+XHJcbiAgICAgICAgPHVuaS1mb3JtcyA6bW9kZWxWYWx1ZT1cImZvcm1cIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiY3UtZm9ybS1ncm91cCBtYXJnaW4tdG9wXCI+XHJcbiAgICAgICAgICAgIDx1bmktaWNvbnMgY2xhc3M9XCJ1bmktaWNvblwiIHR5cGU9XCJwZXJzb25cIiBzaXplPVwiMzBcIiBjb2xvcj1cIiM5OTlcIj48L3VuaS1pY29ucz5cclxuICAgICAgICAgICAgPHVuaS1lYXN5aW5wdXQgcGxhY2Vob2xkZXI9XCLotKblj7dcIiB2LW1vZGVsPVwiZm9ybS5hY2NvdW50XCIgLz5cclxuICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImN1LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPHVuaS1pY29ucyBjbGFzcz1cInVuaS1pY29uXCIgdHlwZT1cImxvY2tlZFwiIHNpemU9XCIzMFwiIGNvbG9yPVwiIzk5OVwiPjwvdW5pLWljb25zPlxyXG4gICAgICAgICAgICA8dW5pLWVhc3lpbnB1dCBwbGFjZWhvbGRlcj1cIuWvhueggVwiIHR5cGU9XCJwYXNzd29yZFwiIHYtbW9kZWw9XCJmb3JtLnBhc3N3b3JkXCIgLz5cclxuICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImN1LWZvcm0tZ3JvdXAgc29saWQtYm90dG9tXCI+XHJcbiAgICAgICAgICAgIDx1bmktaWNvbnMgY2xhc3M9XCJ1bmktaWNvblwiIHR5cGU9XCJtb3JlLWZpbGxlZFwiIHNpemU9XCIzMFwiIGNvbG9yPVwiIzk5OVwiPjwvdW5pLWljb25zPlxyXG4gICAgICAgICAgICA8dW5pLWVhc3lpbnB1dCBwbGFjZWhvbGRlcj1cIumqjOivgeeggVwiIHYtbW9kZWw9XCJmb3JtLmNhcHRjaGFcIiAvPlxyXG4gICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9J2N1LWJ0biBiZy1sb2dpbi16bCBzaGFkb3cnPumqjOivgeeggTwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPGltYWdlXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdS1idG4gY2FwdGNoYUltZ1wiXHJcbiAgICAgICAgICAgICAgOnNyYz1cInZlcmlmeUNvZGVJbWdcIlxyXG4gICAgICAgICAgICAgIEBjbGljaz1cIl9nZXRWZXJpZnlDb2RlSW1nXCJcclxuICAgICAgICAgICAgPjwvaW1hZ2U+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC91bmktZm9ybXM+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPCEtLSA8aW5wdXQgdi1tb2RlbD1cImZvcm0uYWNjb3VudFwiIGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl55So5oi35ZCNL+aJi+acuuWPt+eggVwiIC8+IC0tPlxyXG4gICAgICA8IS0tIDxpbnB1dCB2LW1vZGVsPVwiZm9ybS5wYXNzd29yZFwiIGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIHBhc3N3b3JkIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5a+G56CBXCIgLz4gLS0+XHJcbiAgICAgIDxidXR0b24gQHRhcD1cIm9uU3VibWl0XCIgY2xhc3M9XCJidXR0b24gcGhvbmVcIiA6bG9hZGluZz1cImxvYWRpbmdcIj7nmbvlvZU8L2J1dHRvbj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0aXBzXCI+55m75b2VL+azqOWGjOWNs+inhuS4uuS9oOWQjOaEj+OAiuacjeWKoeadoeasvuOAi+WSjOOAiuiLsemAlOS7k+W6k+makOengeWNj+iuruOAizwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgcGFkZGluZzogMjBycHggNDBycHg7XHJcbn1cclxuXHJcbi5sb2dvIHtcclxuICBmbGV4OiAxO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBpbWFnZSB7XHJcbiAgICB3aWR0aDogMzIwcnB4O1xyXG4gICAgaGVpZ2h0OiAxMjBycHg7XHJcbiAgICBtYXJnaW4tdG9wOiAxMHZoO1xyXG4gIH1cclxufVxyXG5cclxuLmxvZ2luIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgaGVpZ2h0OiA2MHZoO1xyXG4gIHBhZGRpbmc6IDEwcnB4IDIwcnB4IDIwcnB4O1xyXG5cclxuICAuaW5wdXQge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDgwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDcycnB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcclxuICAgIHBhZGRpbmctbGVmdDogMzBycHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICB9XHJcblxyXG4gIC5idXR0b24ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiA4MHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiA3MnJweDtcclxuICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgLmljb24ge1xyXG4gICAgICBmb250LXNpemU6IDQwcnB4O1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IDZycHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAucGhvbmUge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI4YmI5YztcclxuICB9XHJcblxyXG4gIC53ZWNoYXQge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzA2YzA1ZjtcclxuICB9XHJcblxyXG4gIC5leHRyYSB7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgcGFkZGluZzogNzBycHggNzBycHggMDtcclxuICAgIC5jYXB0aW9uIHtcclxuICAgICAgd2lkdGg6IDQ0MHJweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICAgIGJvcmRlci10b3A6IDFycHggc29saWQgI2RkZDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM5OTk7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgdGV4dCB7XHJcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTQwJSk7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgdG9wOiAtMTJycHg7XHJcbiAgICAgICAgbGVmdDogNTAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLm9wdGlvbnMge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgbWFyZ2luLXRvcDogNzBycHg7XHJcbiAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAmOjphZnRlciB7XHJcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmljb24ge1xyXG4gICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICBjb2xvcjogIzQ0NDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgICAgICY6OmJlZm9yZSB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIHdpZHRoOiA4MHJweDtcclxuICAgICAgICBoZWlnaHQ6IDgwcnB4O1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDZycHg7XHJcbiAgICAgICAgZm9udC1zaXplOiA0MHJweDtcclxuICAgICAgICBib3JkZXI6IDFycHggc29saWQgIzQ0NDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5pY29uLXdlaXhpbjo6YmVmb3JlIHtcclxuICAgICAgYm9yZGVyLWNvbG9yOiAjMDZjMDVmO1xyXG4gICAgICBjb2xvcjogIzA2YzA1ZjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi50aXBzIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgYm90dG9tOiA4MHJweDtcclxuICBsZWZ0OiAyMHJweDtcclxuICByaWdodDogMjBycHg7XHJcbiAgZm9udC1zaXplOiAyMnJweDtcclxuICBjb2xvcjogIzk5OTtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5wYWRkaW5nLWxyIHtcclxuICBwYWRkaW5nLWxlZnQ6IDQwcnB4O1xyXG4gIHBhZGRpbmctcmlnaHQ6IDQwcnB4O1xyXG59XHJcblxyXG4uY3UtYnRuIHtcclxuICBtYXJnaW4tdG9wOiAxMHJweDtcclxuICBtYXJnaW4tYm90dG9tOiAxMHJweDtcclxuICBoZWlnaHQ6IDYwcnB4O1xyXG4gIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4ucm91bmQge1xyXG4gIGJvcmRlci1yYWRpdXM6IDMwcnB4O1xyXG59XHJcblxyXG4uaW5wdXQtYm94IHtcclxuICAuY3UtZm9ybS1ncm91cCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBib3JkZXItYm90dG9tOiAjY2NjIHNvbGlkIDAuNXB4O1xyXG5cclxuICAgIC51bmktaWNvbiB7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi50b3AtYmcge1xyXG4gIG1hcmdpbi10b3A6IDIwcnB4O1xyXG4gIHdpZHRoOiA3NTBycHg7XHJcbiAgaGVpZ2h0OiAxMjBycHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cclxuICAubG9nby1pY29uIHtcclxuICAgIHdpZHRoOiAyNDhycHg7XHJcbiAgICBoZWlnaHQ6IDEwMHJweDtcclxuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XHJcbiAgfVxyXG59XHJcblxyXG4uY2FwdGNoYUltZyB7XHJcbiAgd2lkdGg6IDE2MHJweDtcclxuICBoZWlnaHQ6IDYwcnB4O1xyXG59XHJcblxyXG4uYmctbG9naW4temwge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgIzcyN2NmYiwgIzQ2ZDBlZCk7XHJcbiAgY29sb3I6ICNmZmZmZmY7XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgZ2V0VmVyaWZ5Q29kZUltZywgcG9zdExvZ2luQVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9sb2dpbidcclxuaW1wb3J0IHsgdXNlTWVtYmVyU3RvcmUgfSBmcm9tICdAL3N0b3JlcydcclxuaW1wb3J0IHR5cGUgeyBMb2dpblJlc3VsdCB9IGZyb20gJ0AvdHlwZXMvbWVtYmVyJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgcmVhY3RpdmUsIHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IHZlcmlmeUNvZGVJbWcgPSByZWYoJycpXHJcbmNvbnN0IGRhdGEgPSByZWFjdGl2ZSh7IGNhcHRjaGFfaWQ6ICdmMmRkMzljZS0wZDNlLTRjMWUtOTE2Yy1iNTAwOTBhNzU5MHMnIH0pXHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgX2dldFZlcmlmeUNvZGVJbWcoKVxyXG59KVxyXG4vLyDojrflj5bpqozor4HnoIFcclxuY29uc3QgX2dldFZlcmlmeUNvZGVJbWcgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gKGF3YWl0IGdldFZlcmlmeUNvZGVJbWcoZGF0YS5jYXB0Y2hhX2lkKSkgYXMgYW55XHJcbiAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgVWludDhBcnJheShyZXMpXHJcbiAgY29uc3QgYmFzZTY0ID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgdW5pLmFycmF5QnVmZmVyVG9CYXNlNjQoYXJyYXlCdWZmZXIpIC8v6L+Z6YeM6ZyA6KaB5re75Yqg5YmN57yAXHJcbiAgdmVyaWZ5Q29kZUltZy52YWx1ZSA9IGJhc2U2NFxyXG59XHJcblxyXG5jb25zdCBsb2dpblN1Y2Nlc3MgPSAocHJvZmlsZTogTG9naW5SZXN1bHQpID0+IHtcclxuICAvLyDkv53lrZjkvJrlkZjkv6Hmga9cclxuICBjb25zdCBtZW1iZXJTdG9yZSA9IHVzZU1lbWJlclN0b3JlKClcclxuICBtZW1iZXJTdG9yZS5zZXRQcm9maWxlKHByb2ZpbGUpXHJcbiAgLy8g5oiQ5Yqf5o+Q56S6XHJcbiAgdW5pLnNob3dUb2FzdCh7IGljb246ICdzdWNjZXNzJywgdGl0bGU6ICfnmbvlvZXmiJDlip8nIH0pXHJcbiAgY29uc29sZS5sb2coJ+eZu+W9leaIkOWKnycsIHByb2ZpbGUpXHJcblxyXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8g6aG16Z2i6Lez6L2sXHJcbiAgICAvLyB1bmkuc3dpdGNoVGFiKHsgdXJsOiAnL3BhZ2VzL215L215JyB9KVxyXG4gICAgdW5pLm5hdmlnYXRlQmFjaygpXHJcbiAgfSwgNTAwKVxyXG59XHJcblxyXG4vLyDkvKDnu5/ooajljZXnmbvlvZXvvIzmtYvor5XotKblj7fvvJoxMzEyMzQ1Njc4OSDlr4bnoIHvvJoxMjM0NTbvvIzmtYvor5XotKblj7fku4XlvIDlj5HlrabkuaDkvb/nlKjjgIJcclxuY29uc3QgZm9ybSA9IHJlZih7XHJcbiAgYWNjb3VudDogJ2FkbWluJyxcclxuICBwYXNzd29yZDogJycsXHJcbiAgY2FwdGNoYTogJycsXHJcbn0pXHJcblxyXG4vLyDooajljZXmj5DkuqRcclxuY29uc3Qgb25TdWJtaXQgPSBhc3luYyAoKSA9PiB7XHJcbiAgaWYgKGxvYWRpbmcudmFsdWUpIHtcclxuICAgIC8v5Yik5pat5piv5ZCm5Yqg6L295Lit77yM6YG/5YWN6YeN5aSN54K55Ye76K+35rGCXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgaWYgKGZvcm0udmFsdWUuYWNjb3VudCA9PSAnJykge1xyXG4gICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgIGljb246ICdub25lJyxcclxuICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICB0aXRsZTogJ+eUqOaIt+WQjeS4jeiDveS4uuepuicsXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGlmIChmb3JtLnZhbHVlLnBhc3N3b3JkID09ICcnKSB7XHJcbiAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgaWNvbjogJ25vbmUnLFxyXG4gICAgICBwb3NpdGlvbjogJ2JvdHRvbScsXHJcbiAgICAgIHRpdGxlOiAn5a+G56CB5LiN6IO95Li656m6JyxcclxuICAgIH0pXHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgaWYgKGZvcm0udmFsdWUucGFzc3dvcmQubGVuZ3RoIDwgNikge1xyXG4gICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgIGljb246ICdub25lJyxcclxuICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICB0aXRsZTogJ+WvhueggemVv+W6puS4jeiDveWwj+S6jjbkvY0nLFxyXG4gICAgfSlcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBsb2FkaW5nLnZhbHVlID0gdHJ1ZVxyXG4gIGNvbnN0IHBhcmFtID0ge1xyXG4gICAgdXNlcm5hbWU6IGZvcm0udmFsdWUuYWNjb3VudCxcclxuICAgIHBhc3N3b3JkOiBmb3JtLnZhbHVlLnBhc3N3b3JkLFxyXG4gICAgY2FwdGNoYTogZm9ybS52YWx1ZS5jYXB0Y2hhLFxyXG4gICAga2VlcDogdHJ1ZSxcclxuICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICBjYXB0Y2hhX2lkOiBkYXRhLmNhcHRjaGFfaWQsXHJcbiAgfVxyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IHBvc3RMb2dpbkFQSShwYXJhbSlcclxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcclxuICAvLyDlvZNjb2Rl5Li6MOaXtuW8ueeql+aPkOekuumUmeivr21zZ1xyXG4gIGlmIChyZXMuY29kZSA9PT0gMSkge1xyXG4gICAgbG9naW5TdWNjZXNzKHJlcy5kYXRhLnVzZXJJbmZvKVxyXG4gIH0gZWxzZSB7XHJcbiAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgdGl0bGU6IHJlcy5tc2csXHJcbiAgICAgIGljb246ICdub25lJyxcclxuICAgIH0pXHJcbiAgICAvLyDliLfmlrDpqozor4HnoIFcclxuICAgIF9nZXRWZXJpZnlDb2RlSW1nKClcclxuICB9XHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJsb2dvXCI+XHJcbiAgICAgIDxpbWFnZSBzcmM9XCJAL3N0YXRpYy9pbWFnZXMvbG9nby5wbmdcIj48L2ltYWdlPlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJsb2dpblwiPlxyXG4gICAgICA8IS0tIOe9kemhteerr+ihqOWNleeZu+W9lSAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpbnB1dC1ib3ggcGFkZGluZy1sclwiPlxyXG4gICAgICAgIDx1bmktZm9ybXMgOm1vZGVsVmFsdWU9XCJmb3JtXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImN1LWZvcm0tZ3JvdXAgbWFyZ2luLXRvcFwiPlxyXG4gICAgICAgICAgICA8dW5pLWljb25zIGNsYXNzPVwidW5pLWljb25cIiB0eXBlPVwicGVyc29uXCIgc2l6ZT1cIjMwXCIgY29sb3I9XCIjOTk5XCI+PC91bmktaWNvbnM+XHJcbiAgICAgICAgICAgIDx1bmktZWFzeWlucHV0IHBsYWNlaG9sZGVyPVwi6LSm5Y+3XCIgdi1tb2RlbD1cImZvcm0uYWNjb3VudFwiIC8+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJjdS1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDx1bmktaWNvbnMgY2xhc3M9XCJ1bmktaWNvblwiIHR5cGU9XCJsb2NrZWRcIiBzaXplPVwiMzBcIiBjb2xvcj1cIiM5OTlcIj48L3VuaS1pY29ucz5cclxuICAgICAgICAgICAgPHVuaS1lYXN5aW5wdXQgcGxhY2Vob2xkZXI9XCLlr4bnoIFcIiB0eXBlPVwicGFzc3dvcmRcIiB2LW1vZGVsPVwiZm9ybS5wYXNzd29yZFwiIC8+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJjdS1mb3JtLWdyb3VwIHNvbGlkLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICA8dW5pLWljb25zIGNsYXNzPVwidW5pLWljb25cIiB0eXBlPVwibW9yZS1maWxsZWRcIiBzaXplPVwiMzBcIiBjb2xvcj1cIiM5OTlcIj48L3VuaS1pY29ucz5cclxuICAgICAgICAgICAgPHVuaS1lYXN5aW5wdXQgcGxhY2Vob2xkZXI9XCLpqozor4HnoIFcIiB2LW1vZGVsPVwiZm9ybS5jYXB0Y2hhXCIgLz5cclxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPSdjdS1idG4gYmctbG9naW4temwgc2hhZG93Jz7pqozor4HnoIE8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDxpbWFnZVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3UtYnRuIGNhcHRjaGFJbWdcIlxyXG4gICAgICAgICAgICAgIDpzcmM9XCJ2ZXJpZnlDb2RlSW1nXCJcclxuICAgICAgICAgICAgICBAY2xpY2s9XCJfZ2V0VmVyaWZ5Q29kZUltZ1wiXHJcbiAgICAgICAgICAgID48L2ltYWdlPlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdW5pLWZvcm1zPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDwhLS0gPGlucHV0IHYtbW9kZWw9XCJmb3JtLmFjY291bnRcIiBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeeUqOaIt+WQjS/miYvmnLrlj7fnoIFcIiAvPiAtLT5cclxuICAgICAgPCEtLSA8aW5wdXQgdi1tb2RlbD1cImZvcm0ucGFzc3dvcmRcIiBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBwYXNzd29yZCBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWvhueggVwiIC8+IC0tPlxyXG4gICAgICA8YnV0dG9uIEB0YXA9XCJvblN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIHBob25lXCIgOmxvYWRpbmc9XCJsb2FkaW5nXCI+55m75b2VPC9idXR0b24+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwidGlwc1wiPueZu+W9lS/ms6jlhozljbPop4bkuLrkvaDlkIzmhI/jgIrmnI3liqHmnaHmrL7jgIvlkozjgIroi7HpgJTku5PlupPpmpDnp4HljY/orq7jgIs8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbnBhZ2Uge1xyXG4gIGhlaWdodDogMTAwJTtcclxufVxyXG5cclxuLnZpZXdwb3J0IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIHBhZGRpbmc6IDIwcnB4IDQwcnB4O1xyXG59XHJcblxyXG4ubG9nbyB7XHJcbiAgZmxleDogMTtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgaW1hZ2Uge1xyXG4gICAgd2lkdGg6IDMyMHJweDtcclxuICAgIGhlaWdodDogMTIwcnB4O1xyXG4gICAgbWFyZ2luLXRvcDogMTB2aDtcclxuICB9XHJcbn1cclxuXHJcbi5sb2dpbiB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogNjB2aDtcclxuICBwYWRkaW5nOiAxMHJweCAyMHJweCAyMHJweDtcclxuXHJcbiAgLmlucHV0IHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiA4MHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiA3MnJweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcnB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMjBycHg7XHJcbiAgfVxyXG5cclxuICAuYnV0dG9uIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogODBycHg7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogNzJycHg7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuICAgIC5pY29uIHtcclxuICAgICAgZm9udC1zaXplOiA0MHJweDtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiA2cnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnBob25lIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyOGJiOWM7XHJcbiAgfVxyXG5cclxuICAud2VjaGF0IHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMwNmMwNWY7XHJcbiAgfVxyXG5cclxuICAuZXh0cmEge1xyXG4gICAgZmxleDogMTtcclxuICAgIHBhZGRpbmc6IDcwcnB4IDcwcnB4IDA7XHJcbiAgICAuY2FwdGlvbiB7XHJcbiAgICAgIHdpZHRoOiA0NDBycHg7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgICBib3JkZXItdG9wOiAxcnB4IHNvbGlkICNkZGQ7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjOTk5O1xyXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgIHRleHQge1xyXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC00MCUpO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIHRvcDogLTEycnB4O1xyXG4gICAgICAgIGxlZnQ6IDUwJTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5vcHRpb25zIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbi10b3A6IDcwcnB4O1xyXG4gICAgICBidXR0b24ge1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgJjo6YWZ0ZXIge1xyXG4gICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblxyXG4gICAgICAmOjpiZWZvcmUge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICB3aWR0aDogODBycHg7XHJcbiAgICAgICAgaGVpZ2h0OiA4MHJweDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiA2cnB4O1xyXG4gICAgICAgIGZvbnQtc2l6ZTogNDBycHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcnB4IHNvbGlkICM0NDQ7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuaWNvbi13ZWl4aW46OmJlZm9yZSB7XHJcbiAgICAgIGJvcmRlci1jb2xvcjogIzA2YzA1ZjtcclxuICAgICAgY29sb3I6ICMwNmMwNWY7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4udGlwcyB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGJvdHRvbTogODBycHg7XHJcbiAgbGVmdDogMjBycHg7XHJcbiAgcmlnaHQ6IDIwcnB4O1xyXG4gIGZvbnQtc2l6ZTogMjJycHg7XHJcbiAgY29sb3I6ICM5OTk7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4ucGFkZGluZy1sciB7XHJcbiAgcGFkZGluZy1sZWZ0OiA0MHJweDtcclxuICBwYWRkaW5nLXJpZ2h0OiA0MHJweDtcclxufVxyXG5cclxuLmN1LWJ0biB7XHJcbiAgbWFyZ2luLXRvcDogMTBycHg7XHJcbiAgbWFyZ2luLWJvdHRvbTogMTBycHg7XHJcbiAgaGVpZ2h0OiA2MHJweDtcclxuICBmb250LXNpemU6IDI0cnB4O1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG5cclxuLnJvdW5kIHtcclxuICBib3JkZXItcmFkaXVzOiAzMHJweDtcclxufVxyXG5cclxuLmlucHV0LWJveCB7XHJcbiAgLmN1LWZvcm0tZ3JvdXAge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogI2NjYyBzb2xpZCAwLjVweDtcclxuXHJcbiAgICAudW5pLWljb24ge1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgcGFkZGluZzogMjBycHg7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4udG9wLWJnIHtcclxuICBtYXJnaW4tdG9wOiAyMHJweDtcclxuICB3aWR0aDogNzUwcnB4O1xyXG4gIGhlaWdodDogMTIwcnB4O1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgLmxvZ28taWNvbiB7XHJcbiAgICB3aWR0aDogMjQ4cnB4O1xyXG4gICAgaGVpZ2h0OiAxMDBycHg7XHJcbiAgICBvYmplY3QtZml0OiBjb250YWluO1xyXG4gIH1cclxufVxyXG5cclxuLmNhcHRjaGFJbWcge1xyXG4gIHdpZHRoOiAxNjBycHg7XHJcbiAgaGVpZ2h0OiA2MHJweDtcclxufVxyXG5cclxuLmJnLWxvZ2luLXpsIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICM3MjdjZmIsICM0NmQwZWQpO1xyXG4gIGNvbG9yOiAjZmZmZmZmO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsImltcG9ydCB7IGh0dHAgfSBmcm9tICdAL3V0aWxzL2h0dHAnXHJcbmltcG9ydCB0eXBlIHsgUGFnZVBhcmFtcyB9IGZyb20gJ0AvdHlwZXMvZ2xvYmFsJ1xyXG5pbXBvcnQgdHlwZSB7IEhvdFJlc3VsdCB9IGZyb20gJ0AvdHlwZXMvaG90J1xyXG5cclxudHlwZSBIb3RQYXJhbXMgPSBQYWdlUGFyYW1zICYgeyBzdWJUeXBlPzogc3RyaW5nIH1cclxuLyoqXHJcbiAqIOmAmueUqOeDremXqOaOqOiNkOexu+Wei1xyXG4gKiBAcGFyYW0gdXJsIOivt+axguWcsOWdgFxyXG4gKiBAcGFyYW0gZGF0YSDor7fmsYLlj4LmlbBcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRIb3RSZWNvbW1lbmRBUEkgPSAodXJsOiBzdHJpbmcsIGRhdGE/OiBIb3RQYXJhbXMpID0+IHtcclxuICByZXR1cm4gaHR0cDxIb3RSZXN1bHQ+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmwsXHJcbiAgICBkYXRhLFxyXG4gIH0pXHJcbn1cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgZ2V0SG90UmVjb21tZW5kQVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9ob3QnXHJcbmltcG9ydCB0eXBlIHsgU3ViVHlwZUl0ZW0gfSBmcm9tICdAL3R5cGVzL2hvdCdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbi8vIOeDremXqOaOqOiNkOmhtSDmoIfpopjlkox1cmxcclxuY29uc3QgdXJsTWFwID0gW1xyXG4gIHsgdHlwZTogJzEnLCB0aXRsZTogJ+eJueaDoOaOqOiNkCcsIHVybDogJy9ob3QvcHJlZmVyZW5jZScgfSxcclxuICB7IHR5cGU6ICcyJywgdGl0bGU6ICfniIbmrL7mjqjojZAnLCB1cmw6ICcvaG90L2luVm9ndWUnIH0sXHJcbiAgeyB0eXBlOiAnMycsIHRpdGxlOiAn5LiA56uZ5Lmw5YWoJywgdXJsOiAnL2hvdC9vbmVTdG9wJyB9LFxyXG4gIHsgdHlwZTogJzQnLCB0aXRsZTogJ+aWsOmynOWlveeJqScsIHVybDogJy9ob3QvbmV3JyB9LFxyXG5dXHJcblxyXG4vLyB1bmlhcHAg6I635Y+W6aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIHR5cGU6IHN0cmluZ1xyXG59PigpXHJcbi8vIF9fZl9fKCdsb2cnLCdhdCBwYWdlcy9ob3QvaG90LnZ1ZToxOScscXVlcnkpXHJcbmNvbnN0IGN1cnJVcmxNYXAgPSB1cmxNYXAuZmluZCgodikgPT4gdi50eXBlID09PSBxdWVyeS50eXBlKVxyXG4vLyDliqjmgIHorr7nva7moIfpophcclxudW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7IHRpdGxlOiBjdXJyVXJsTWFwIS50aXRsZSB9KVxyXG5cclxuLy8g5o6o6I2Q5bCB6Z2i5Zu+XHJcbmNvbnN0IGJhbm5lclBpY3R1cmUgPSByZWYoJycpXHJcbi8vIOaOqOiNkOmAiemhuVxyXG5jb25zdCBzdWJUeXBlcyA9IHJlZjwoU3ViVHlwZUl0ZW0gJiB7IGZpbmlzaD86IGJvb2xlYW4gfSlbXT4oW10pXHJcbi8vIOmrmOS6rueahOS4i+agh1xyXG5jb25zdCBhY3RpdmVJbmRleCA9IHJlZigwKVxyXG4vLyDojrflj5bng63pl6jmjqjojZDmlbDmja5cclxuY29uc3QgZ2V0SG90UmVjb21tZW5kRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRIb3RSZWNvbW1lbmRBUEkoY3VyclVybE1hcCEudXJsLCB7XHJcbiAgICAvLyDmioDlt6fvvJrnjq/looPlj5jph4/vvIzlvIDlj5Hnjq/looPvvIzkv67mlLnliJ3lp4vpobXpnaLmlrnkvr/mtYvor5XliIbpobXnu5PmnZ9cclxuICAgIHBhZ2U6IGltcG9ydC5tZXRhLmVudi5ERVYgPyAzMCA6IDEsXHJcbiAgICBwYWdlU2l6ZTogMTAsXHJcbiAgfSlcclxuICAvLyBfX2ZfXygnbG9nJywnYXQgcGFnZXMvaG90L2hvdC52dWU6MzcnLHJlcy5yZXN1bHQudGl0bGUpXHJcbiAgYmFubmVyUGljdHVyZS52YWx1ZSA9IHJlcy5yZXN1bHQuYmFubmVyUGljdHVyZVxyXG4gIHN1YlR5cGVzLnZhbHVlID0gcmVzLnJlc3VsdC5zdWJUeXBlc1xyXG59XHJcblxyXG4vLyDpobXpnaLliqDovb1cclxub25Mb2FkKCgpID0+IHtcclxuICBnZXRIb3RSZWNvbW1lbmREYXRhKClcclxufSlcclxuXHJcbi8vIOa7muWKqOinpuW6lVxyXG5jb25zdCBvblNjcm9sbHRvbG93ZXIgPSBhc3luYyAoKSA9PiB7XHJcbiAgLy8g6I635Y+W5b2T5YmN6YCJ6aG5XHJcbiAgY29uc3QgY3VycnN1YlR5cGVzID0gc3ViVHlwZXMudmFsdWVbYWN0aXZlSW5kZXgudmFsdWVdXHJcbiAgLy8g5YiG6aG15p2h5Lu2XHJcbiAgaWYgKGN1cnJzdWJUeXBlcy5nb29kc0l0ZW1zLnBhZ2UgPCBjdXJyc3ViVHlwZXMuZ29vZHNJdGVtcy5wYWdlcykge1xyXG4gICAgLy8g5b2T5YmN6aG156CB57Sv5YqgXHJcbiAgICBjdXJyc3ViVHlwZXMuZ29vZHNJdGVtcy5wYWdlKytcclxuICB9IGVsc2Uge1xyXG4gICAgLy8g5qCH6K6w5bey57uT5p2fXHJcbiAgICBjdXJyc3ViVHlwZXMuZmluaXNoID0gdHJ1ZVxyXG4gICAgLy8g6YCA5Ye65bm26L275o+Q56S6XHJcbiAgICByZXR1cm4gdW5pLnNob3dUb2FzdCh7IGljb246ICdub25lJywgdGl0bGU6ICfmsqHmnInmm7TlpJrmlbDmja7kuoZ+JyB9KVxyXG4gIH1cclxuXHJcbiAgLy8g6LCD55SoQVBJ5Lyg5Y+CXHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SG90UmVjb21tZW5kQVBJKGN1cnJVcmxNYXAhLnVybCwge1xyXG4gICAgc3ViVHlwZTogY3VycnN1YlR5cGVzLmlkLFxyXG4gICAgcGFnZTogY3VycnN1YlR5cGVzLmdvb2RzSXRlbXMucGFnZSxcclxuICAgIHBhZ2VTaXplOiBjdXJyc3ViVHlwZXMuZ29vZHNJdGVtcy5wYWdlU2l6ZSxcclxuICB9KVxyXG4gIC8vIOaWsOeahOWIl+ihqOmAiemhuVxyXG4gIGNvbnN0IG5ld3N1YlR5cGVzID0gcmVzLnJlc3VsdC5zdWJUeXBlc1thY3RpdmVJbmRleC52YWx1ZV1cclxuICAvLyDmlbDnu4Tov73liqBcclxuICBjdXJyc3ViVHlwZXMuZ29vZHNJdGVtcy5pdGVtcy5wdXNoKC4uLm5ld3N1YlR5cGVzLmdvb2RzSXRlbXMuaXRlbXMpXHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPCEtLSDmjqjojZDlsIHpnaLlm74gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cImNvdmVyXCI+XHJcbiAgICAgIDxpbWFnZSBjbGFzcz1cImltYWdlXCIgbW9kZT1cIndpZHRoRml4XCIgOnNyYz1cImJhbm5lclBpY3R1cmVcIj48L2ltYWdlPlxyXG4gICAgPC92aWV3PlxyXG4gICAgPCEtLSDmjqjojZDpgInpobkgLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cInRhYnNcIj5cclxuICAgICAgPHRleHRcclxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gc3ViVHlwZXNcIlxyXG4gICAgICAgIDprZXk9XCJpdGVtLmlkXCJcclxuICAgICAgICBjbGFzcz1cInRleHRcIlxyXG4gICAgICAgIDpjbGFzcz1cInsgYWN0aXZlOiBpbmRleCA9PT0gYWN0aXZlSW5kZXggfVwiXHJcbiAgICAgICAgQHRhcD1cImFjdGl2ZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgID57eyBpdGVtLnRpdGxlIH19PC90ZXh0XHJcbiAgICAgID5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g5o6o6I2Q5YiX6KGoIC0tPlxyXG4gICAgPHNjcm9sbC12aWV3XHJcbiAgICAgIGVuYWJsZS1iYWNrLXRvLXRvcFxyXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gc3ViVHlwZXNcIlxyXG4gICAgICA6a2V5PVwiaXRlbS5pZFwiXHJcbiAgICAgIHYtc2hvdz1cImFjdGl2ZUluZGV4ID09PSBpbmRleFwiXHJcbiAgICAgIHNjcm9sbC15XHJcbiAgICAgIGNsYXNzPVwic2Nyb2xsLXZpZXdcIlxyXG4gICAgICBAc2Nyb2xsdG9sb3dlcj1cIm9uU2Nyb2xsdG9sb3dlclwiXHJcbiAgICA+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiZ29vZHNcIj5cclxuICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0b3JcIlxyXG4gICAgICAgICAgdi1mb3I9XCJnb29kcyBpbiBpdGVtLmdvb2RzSXRlbXMuaXRlbXNcIlxyXG4gICAgICAgICAgOmtleT1cImdvb2RzLmlkXCJcclxuICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzL2dvb2RzL2dvb2RzP2lkPSR7Z29vZHMuaWR9YFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGltYWdlIGNsYXNzPVwidGh1bWJcIiA6c3JjPVwiZ29vZHMucGljdHVyZVwiPjwvaW1hZ2U+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXNcIj57eyBnb29kcy5uYW1lIH19PC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInN5bWJvbFwiPsKlPC90ZXh0PlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlclwiPnt7IGdvb2RzLnByaWNlIH19PC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+XHJcbiAgICAgICAge3sgaXRlbS5maW5pc2ggPyAn5rKh5pyJ5pu05aSa5pWw5o2u5LqGficgOiAn5q2j5Zyo5Yqg6L29Li4uJyB9fVxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3Njcm9sbC12aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcclxufVxyXG4udmlld3BvcnQge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgcGFkZGluZzogMTgwcnB4IDAgMDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuLmNvdmVyIHtcclxuICB3aWR0aDogNzUwcnB4O1xyXG4gIGhlaWdodDogMjI1cnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDAgMCA0MHJweCA0MHJweDtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogMDtcclxuICAuaW1hZ2Uge1xyXG4gICAgd2lkdGg6IDc1MHJweDtcclxuICB9XHJcbn1cclxuLnNjcm9sbC12aWV3IHtcclxuICBmbGV4OiAxO1xyXG59XHJcbi50YWJzIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xyXG4gIGhlaWdodDogMTAwcnB4O1xyXG4gIGxpbmUtaGVpZ2h0OiA5MHJweDtcclxuICBtYXJnaW46IDAgMjBycHg7XHJcbiAgZm9udC1zaXplOiAyOHJweDtcclxuICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICBib3gtc2hhZG93OiAwIDRycHggNXJweCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuMyk7XHJcbiAgY29sb3I6ICMzMzM7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgei1pbmRleDogOTtcclxuICAudGV4dCB7XHJcbiAgICBtYXJnaW46IDAgMjBycHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgfVxyXG4gIC5hY3RpdmUge1xyXG4gICAgJjo6YWZ0ZXIge1xyXG4gICAgICBjb250ZW50OiAnJztcclxuICAgICAgd2lkdGg6IDQwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDRycHg7XHJcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGxlZnQ6IDUwJTtcclxuICAgICAgYm90dG9tOiAyNHJweDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuLmdvb2RzIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtd3JhcDogd3JhcDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgcGFkZGluZzogMCAyMHJweCAyMHJweDtcclxuICAubmF2aWdhdG9yIHtcclxuICAgIHdpZHRoOiAzNDVycHg7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIG1hcmdpbi10b3A6IDIwcnB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIH1cclxuICAudGh1bWIge1xyXG4gICAgd2lkdGg6IDMwNXJweDtcclxuICAgIGhlaWdodDogMzA1cnB4O1xyXG4gIH1cclxuICAubmFtZSB7XHJcbiAgICBoZWlnaHQ6IDg4cnB4O1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICB9XHJcbiAgLnByaWNlIHtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgICBmb250LXNpemU6IDMwcnB4O1xyXG4gIH1cclxuICAuc3ltYm9sIHtcclxuICAgIGZvbnQtc2l6ZTogNzAlO1xyXG4gIH1cclxuICAuZGVjaW1hbCB7XHJcbiAgICBmb250LXNpemU6IDcwJTtcclxuICB9XHJcbn1cclxuXHJcbi5sb2FkaW5nLXRleHQge1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBmb250LXNpemU6IDI4cnB4O1xyXG4gIGNvbG9yOiAjNjY2O1xyXG4gIHBhZGRpbmc6IDIwcnB4IDAgNTBycHg7XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgZ2V0SG90UmVjb21tZW5kQVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9ob3QnXHJcbmltcG9ydCB0eXBlIHsgU3ViVHlwZUl0ZW0gfSBmcm9tICdAL3R5cGVzL2hvdCdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbi8vIOeDremXqOaOqOiNkOmhtSDmoIfpopjlkox1cmxcclxuY29uc3QgdXJsTWFwID0gW1xyXG4gIHsgdHlwZTogJzEnLCB0aXRsZTogJ+eJueaDoOaOqOiNkCcsIHVybDogJy9ob3QvcHJlZmVyZW5jZScgfSxcclxuICB7IHR5cGU6ICcyJywgdGl0bGU6ICfniIbmrL7mjqjojZAnLCB1cmw6ICcvaG90L2luVm9ndWUnIH0sXHJcbiAgeyB0eXBlOiAnMycsIHRpdGxlOiAn5LiA56uZ5Lmw5YWoJywgdXJsOiAnL2hvdC9vbmVTdG9wJyB9LFxyXG4gIHsgdHlwZTogJzQnLCB0aXRsZTogJ+aWsOmynOWlveeJqScsIHVybDogJy9ob3QvbmV3JyB9LFxyXG5dXHJcblxyXG4vLyB1bmlhcHAg6I635Y+W6aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIHR5cGU6IHN0cmluZ1xyXG59PigpXHJcbi8vIGNvbnNvbGUubG9nKHF1ZXJ5KVxyXG5jb25zdCBjdXJyVXJsTWFwID0gdXJsTWFwLmZpbmQoKHYpID0+IHYudHlwZSA9PT0gcXVlcnkudHlwZSlcclxuLy8g5Yqo5oCB6K6+572u5qCH6aKYXHJcbnVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogY3VyclVybE1hcCEudGl0bGUgfSlcclxuXHJcbi8vIOaOqOiNkOWwgemdouWbvlxyXG5jb25zdCBiYW5uZXJQaWN0dXJlID0gcmVmKCcnKVxyXG4vLyDmjqjojZDpgInpoblcclxuY29uc3Qgc3ViVHlwZXMgPSByZWY8KFN1YlR5cGVJdGVtICYgeyBmaW5pc2g/OiBib29sZWFuIH0pW10+KFtdKVxyXG4vLyDpq5jkuq7nmoTkuIvmoIdcclxuY29uc3QgYWN0aXZlSW5kZXggPSByZWYoMClcclxuLy8g6I635Y+W54Ot6Zeo5o6o6I2Q5pWw5o2uXHJcbmNvbnN0IGdldEhvdFJlY29tbWVuZERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SG90UmVjb21tZW5kQVBJKGN1cnJVcmxNYXAhLnVybCwge1xyXG4gICAgLy8g5oqA5ben77ya546v5aKD5Y+Y6YeP77yM5byA5Y+R546v5aKD77yM5L+u5pS55Yid5aeL6aG16Z2i5pa55L6/5rWL6K+V5YiG6aG157uT5p2fXHJcbiAgICBwYWdlOiBpbXBvcnQubWV0YS5lbnYuREVWID8gMzAgOiAxLFxyXG4gICAgcGFnZVNpemU6IDEwLFxyXG4gIH0pXHJcbiAgLy8gY29uc29sZS5sb2cocmVzLnJlc3VsdC50aXRsZSlcclxuICBiYW5uZXJQaWN0dXJlLnZhbHVlID0gcmVzLnJlc3VsdC5iYW5uZXJQaWN0dXJlXHJcbiAgc3ViVHlwZXMudmFsdWUgPSByZXMucmVzdWx0LnN1YlR5cGVzXHJcbn1cclxuXHJcbi8vIOmhtemdouWKoOi9vVxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIGdldEhvdFJlY29tbWVuZERhdGEoKVxyXG59KVxyXG5cclxuLy8g5rua5Yqo6Kem5bqVXHJcbmNvbnN0IG9uU2Nyb2xsdG9sb3dlciA9IGFzeW5jICgpID0+IHtcclxuICAvLyDojrflj5blvZPliY3pgInpoblcclxuICBjb25zdCBjdXJyc3ViVHlwZXMgPSBzdWJUeXBlcy52YWx1ZVthY3RpdmVJbmRleC52YWx1ZV1cclxuICAvLyDliIbpobXmnaHku7ZcclxuICBpZiAoY3VycnN1YlR5cGVzLmdvb2RzSXRlbXMucGFnZSA8IGN1cnJzdWJUeXBlcy5nb29kc0l0ZW1zLnBhZ2VzKSB7XHJcbiAgICAvLyDlvZPliY3pobXnoIHntK/liqBcclxuICAgIGN1cnJzdWJUeXBlcy5nb29kc0l0ZW1zLnBhZ2UrK1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyDmoIforrDlt7Lnu5PmnZ9cclxuICAgIGN1cnJzdWJUeXBlcy5maW5pc2ggPSB0cnVlXHJcbiAgICAvLyDpgIDlh7rlubbovbvmj5DnpLpcclxuICAgIHJldHVybiB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ25vbmUnLCB0aXRsZTogJ+ayoeacieabtOWkmuaVsOaNruS6hn4nIH0pXHJcbiAgfVxyXG5cclxuICAvLyDosIPnlKhBUEnkvKDlj4JcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRIb3RSZWNvbW1lbmRBUEkoY3VyclVybE1hcCEudXJsLCB7XHJcbiAgICBzdWJUeXBlOiBjdXJyc3ViVHlwZXMuaWQsXHJcbiAgICBwYWdlOiBjdXJyc3ViVHlwZXMuZ29vZHNJdGVtcy5wYWdlLFxyXG4gICAgcGFnZVNpemU6IGN1cnJzdWJUeXBlcy5nb29kc0l0ZW1zLnBhZ2VTaXplLFxyXG4gIH0pXHJcbiAgLy8g5paw55qE5YiX6KGo6YCJ6aG5XHJcbiAgY29uc3QgbmV3c3ViVHlwZXMgPSByZXMucmVzdWx0LnN1YlR5cGVzW2FjdGl2ZUluZGV4LnZhbHVlXVxyXG4gIC8vIOaVsOe7hOi/veWKoFxyXG4gIGN1cnJzdWJUeXBlcy5nb29kc0l0ZW1zLml0ZW1zLnB1c2goLi4ubmV3c3ViVHlwZXMuZ29vZHNJdGVtcy5pdGVtcylcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cInZpZXdwb3J0XCI+XHJcbiAgICA8IS0tIOaOqOiNkOWwgemdouWbviAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiY292ZXJcIj5cclxuICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2VcIiBtb2RlPVwid2lkdGhGaXhcIiA6c3JjPVwiYmFubmVyUGljdHVyZVwiPjwvaW1hZ2U+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tIOaOqOiNkOmAiemhuSAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwidGFic1wiPlxyXG4gICAgICA8dGV4dFxyXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBzdWJUeXBlc1wiXHJcbiAgICAgICAgOmtleT1cIml0ZW0uaWRcIlxyXG4gICAgICAgIGNsYXNzPVwidGV4dFwiXHJcbiAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IGluZGV4ID09PSBhY3RpdmVJbmRleCB9XCJcclxuICAgICAgICBAdGFwPVwiYWN0aXZlSW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgPnt7IGl0ZW0udGl0bGUgfX08L3RleHRcclxuICAgICAgPlxyXG4gICAgPC92aWV3PlxyXG4gICAgPCEtLSDmjqjojZDliJfooaggLS0+XHJcbiAgICA8c2Nyb2xsLXZpZXdcclxuICAgICAgZW5hYmxlLWJhY2stdG8tdG9wXHJcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBzdWJUeXBlc1wiXHJcbiAgICAgIDprZXk9XCJpdGVtLmlkXCJcclxuICAgICAgdi1zaG93PVwiYWN0aXZlSW5kZXggPT09IGluZGV4XCJcclxuICAgICAgc2Nyb2xsLXlcclxuICAgICAgY2xhc3M9XCJzY3JvbGwtdmlld1wiXHJcbiAgICAgIEBzY3JvbGx0b2xvd2VyPVwib25TY3JvbGx0b2xvd2VyXCJcclxuICAgID5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJnb29kc1wiPlxyXG4gICAgICAgIDxuYXZpZ2F0b3JcclxuICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICBjbGFzcz1cIm5hdmlnYXRvclwiXHJcbiAgICAgICAgICB2LWZvcj1cImdvb2RzIGluIGl0ZW0uZ29vZHNJdGVtcy5pdGVtc1wiXHJcbiAgICAgICAgICA6a2V5PVwiZ29vZHMuaWRcIlxyXG4gICAgICAgICAgOnVybD1cImAvcGFnZXMvZ29vZHMvZ29vZHM/aWQ9JHtnb29kcy5pZH1gXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8aW1hZ2UgY2xhc3M9XCJ0aHVtYlwiIDpzcmM9XCJnb29kcy5waWN0dXJlXCI+PC9pbWFnZT5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwibmFtZSBlbGxpcHNpc1wiPnt7IGdvb2RzLm5hbWUgfX08L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInByaWNlXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sXCI+wqU8L3RleHQ+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibnVtYmVyXCI+e3sgZ29vZHMucHJpY2UgfX08L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5cclxuICAgICAgICB7eyBpdGVtLmZpbmlzaCA/ICfmsqHmnInmm7TlpJrmlbDmja7kuoZ+JyA6ICfmraPlnKjliqDovb0uLi4nIH19XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvc2Nyb2xsLXZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbnBhZ2Uge1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xyXG59XHJcbi52aWV3cG9ydCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBwYWRkaW5nOiAxODBycHggMCAwO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4uY292ZXIge1xyXG4gIHdpZHRoOiA3NTBycHg7XHJcbiAgaGVpZ2h0OiAyMjVycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogMCAwIDQwcnB4IDQwcnB4O1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGxlZnQ6IDA7XHJcbiAgdG9wOiAwO1xyXG4gIC5pbWFnZSB7XHJcbiAgICB3aWR0aDogNzUwcnB4O1xyXG4gIH1cclxufVxyXG4uc2Nyb2xsLXZpZXcge1xyXG4gIGZsZXg6IDE7XHJcbn1cclxuLnRhYnMge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XHJcbiAgaGVpZ2h0OiAxMDBycHg7XHJcbiAgbGluZS1oZWlnaHQ6IDkwcnB4O1xyXG4gIG1hcmdpbjogMCAyMHJweDtcclxuICBmb250LXNpemU6IDI4cnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJveC1zaGFkb3c6IDAgNHJweCA1cnB4IHJnYmEoMjAwLCAyMDAsIDIwMCwgMC4zKTtcclxuICBjb2xvcjogIzMzMztcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiA5O1xyXG4gIC50ZXh0IHtcclxuICAgIG1hcmdpbjogMCAyMHJweDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB9XHJcbiAgLmFjdGl2ZSB7XHJcbiAgICAmOjphZnRlciB7XHJcbiAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICB3aWR0aDogNDBycHg7XHJcbiAgICAgIGhlaWdodDogNHJweDtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSk7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgbGVmdDogNTAlO1xyXG4gICAgICBib3R0b206IDI0cnB4O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4uZ29vZHMge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC13cmFwOiB3cmFwO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBwYWRkaW5nOiAwIDIwcnB4IDIwcnB4O1xyXG4gIC5uYXZpZ2F0b3Ige1xyXG4gICAgd2lkdGg6IDM0NXJweDtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgbWFyZ2luLXRvcDogMjBycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgfVxyXG4gIC50aHVtYiB7XHJcbiAgICB3aWR0aDogMzA1cnB4O1xyXG4gICAgaGVpZ2h0OiAzMDVycHg7XHJcbiAgfVxyXG4gIC5uYW1lIHtcclxuICAgIGhlaWdodDogODhycHg7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gIH1cclxuICAucHJpY2Uge1xyXG4gICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICBjb2xvcjogI2NmNDQ0NDtcclxuICAgIGZvbnQtc2l6ZTogMzBycHg7XHJcbiAgfVxyXG4gIC5zeW1ib2wge1xyXG4gICAgZm9udC1zaXplOiA3MCU7XHJcbiAgfVxyXG4gIC5kZWNpbWFsIHtcclxuICAgIGZvbnQtc2l6ZTogNzAlO1xyXG4gIH1cclxufVxyXG5cclxuLmxvYWRpbmctdGV4dCB7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgY29sb3I6ICM2NjY7XHJcbiAgcGFkZGluZzogMjBycHggMCA1MHJweDtcclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcbiAgPHZpZXdcclxuICAgIGNsYXNzPVwidmstZGF0YS1nb29kcy1za3UtcG9wdXBcIlxyXG4gICAgY2F0Y2h0b3VjaG1vdmU9XCJ0cnVlXCJcclxuICAgIDpjbGFzcz1cInZhbHVlQ29tICYmIGNvbXBsZXRlID8gJ3Nob3cnIDogJ25vbmUnXCJcclxuICAgIEB0b3VjaG1vdmUuc3RvcC5wcmV2ZW50PVwibW92ZUhhbmRsZVwiXHJcbiAgICBAY2xpY2suc3RvcD1cInN0b3BcIlxyXG4gID5cclxuICAgIDwhLS0g6aG16Z2i5YaF5a655byA5aeLIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJtYXNrXCIgQGNsaWNrPVwiY2xvc2UoJ21hc2snKVwiPjwvdmlldz5cclxuICAgIDx2aWV3XHJcbiAgICAgIGNsYXNzPVwibGF5ZXIgYXR0ci1jb250ZW50XCJcclxuICAgICAgOmNsYXNzPVwieyAnc2FmZS1hcmVhLWluc2V0LWJvdHRvbSc6IHNhZmVBcmVhSW5zZXRCb3R0b20gfVwiXHJcbiAgICAgIDpzdHlsZT1cIntcclxuICAgICAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyArICdycHggJyArIGJvcmRlclJhZGl1cyArICdycHggMCAwJyxcclxuICAgICAgICBwYWRkaW5nQm90dG9tOiBzYWZlQm90dG9tICsgJ3B4JyxcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwic3BlY2lmaWNhdGlvbi13cmFwcGVyXCI+XHJcbiAgICAgICAgPHNjcm9sbC12aWV3IGNsYXNzPVwic3BlY2lmaWNhdGlvbi13cmFwcGVyLWNvbnRlbnRcIiBzY3JvbGwteT1cInRydWVcIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwic3BlY2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJzcGVjaWZpY2F0aW9uLWxlZnRcIj5cclxuICAgICAgICAgICAgICA8aW1hZ2VcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZHVjdC1pbWdcIlxyXG4gICAgICAgICAgICAgICAgOnNyYz1cInNlbGVjdFNob3AuaW1hZ2UgPyBzZWxlY3RTaG9wLmltYWdlIDogZ29vZHNJbmZvW2dvb2RzVGh1bWJOYW1lXVwiXHJcbiAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7IGJhY2tncm91bmRDb2xvcjogZ29vZHNUaHVtYkJhY2tncm91bmRDb2xvciB9XCJcclxuICAgICAgICAgICAgICAgIG1vZGU9XCJhc3BlY3RGaWxsXCJcclxuICAgICAgICAgICAgICAgIEBjbGljaz1cInByZXZpZXdJbWFnZVwiXHJcbiAgICAgICAgICAgICAgPjwvaW1hZ2U+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJzcGVjaWZpY2F0aW9uLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZS1jb250ZW50XCIgOnN0eWxlPVwieyBjb2xvcjogdGhlbWVDb2xvckZuKCdwcmljZUNvbG9yJykgfVwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJzaWduXCI+wqU8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cInByaWNlXCIgOmNsYXNzPVwicHJpY2VDb20ubGVuZ3RoID4gMTYgPyAncHJpY2UyJyA6ICcnXCI+e3tcclxuICAgICAgICAgICAgICAgICAgcHJpY2VDb21cclxuICAgICAgICAgICAgICAgIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImludmVudG9yeVwiIHYtaWY9XCIhaGlkZVN0b2NrXCI+e3sgc3RvY2tUZXh0IH1977yae3sgc3RvY2tDb20gfX08L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpbnZlbnRvcnlcIiB2LWVsc2U+PC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiY2hvb3NlXCIgdi1zaG93PVwiaXNNYW55Q29tXCI+5bey6YCJ77yae3sgc2VsZWN0QXJyLmpvaW4oJyAnKSB9fTwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwic3BlY2lmaWNhdGlvbi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgdi1zaG93PVwiaXNNYW55Q29tXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNwZWNpZmljYXRpb24taXRlbVwiXHJcbiAgICAgICAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgxKSBpbiBnb29kc0luZm9bc3BlY0xpc3ROYW1lXVwiXHJcbiAgICAgICAgICAgICAgOmtleT1cImluZGV4MVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIml0ZW0tdGl0bGVcIj57eyBpdGVtLm5hbWUgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1jb250ZW50XCJcclxuICAgICAgICAgICAgICAgICAgdi1mb3I9XCIoaXRlbV92YWx1ZSwgaW5kZXgyKSBpbiBpdGVtLmxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICA6a2V5PVwiaW5kZXgyXCJcclxuICAgICAgICAgICAgICAgICAgOmNsYXNzPVwiW1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1fdmFsdWUuaXNob3cgPyAnJyA6ICdub2FjdGl2ZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1YkluZGV4W2luZGV4MV0gPT0gaW5kZXgyID8gJ2FjdGl2ZWQnIDogJycsXHJcbiAgICAgICAgICAgICAgICAgIF1cIlxyXG4gICAgICAgICAgICAgICAgICA6c3R5bGU9XCJbXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbV92YWx1ZS5pc2hvdyA/ICcnIDogdGhlbWVDb2xvckZuKCdkaXNhYmxlU3R5bGUnKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtX3ZhbHVlLmlzaG93ID8gdGhlbWVDb2xvckZuKCdidG5TdHlsZScpIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViSW5kZXhbaW5kZXgxXSA9PSBpbmRleDIgPyB0aGVtZUNvbG9yRm4oJ2FjdGl2ZWRTdHlsZScpIDogJycsXHJcbiAgICAgICAgICAgICAgICAgIF1cIlxyXG4gICAgICAgICAgICAgICAgICBAY2xpY2s9XCJza3VDbGljayhpdGVtX3ZhbHVlLCBpbmRleDEsIGluZGV4MilcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBpdGVtX3ZhbHVlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJudW1iZXItYm94LXZpZXdcIj5cclxuICAgICAgICAgICAgICA8dmlldyBzdHlsZT1cImZsZXg6IDFcIj7mlbDph488L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXcgc3R5bGU9XCJmbGV4OiA0OyB0ZXh0LWFsaWduOiByaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgPHZrLWRhdGEtaW5wdXQtbnVtYmVyLWJveFxyXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0TnVtXCJcclxuICAgICAgICAgICAgICAgICAgOm1pbj1cIm1pbkJ1eU51bSB8fCAxXCJcclxuICAgICAgICAgICAgICAgICAgOm1heD1cIm1heEJ1eU51bUNvbVwiXHJcbiAgICAgICAgICAgICAgICAgIDpzdGVwPVwic3RlcEJ1eU51bSB8fCAxXCJcclxuICAgICAgICAgICAgICAgICAgOnN0ZXAtc3RyaWN0bHk9XCJzdGVwU3RyaWN0bHlcIlxyXG4gICAgICAgICAgICAgICAgICA6cG9zaXRpdmUtaW50ZWdlcj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBAY2hhbmdlPVwibnVtQ2hhbmdlXCJcclxuICAgICAgICAgICAgICAgID48L3ZrLWRhdGEtaW5wdXQtbnVtYmVyLWJveD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3Njcm9sbC12aWV3PlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiY2xvc2VcIiBAY2xpY2s9XCJjbG9zZSgnY2xvc2UnKVwiIHYtaWY9XCJzaG93Q2xvc2UgIT0gZmFsc2VcIlxyXG4gICAgICAgICAgPjxpbWFnZSBjbGFzcz1cImNsb3NlLWl0ZW1cIiA6c3JjPVwiY2xvc2VJbWFnZVwiPjwvaW1hZ2VcclxuICAgICAgICA+PC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICA8dmlldyBjbGFzcz1cImJ0bi13cmFwcGVyXCIgdi1pZj1cIm91dEZvU3RvY2sgfHwgbW9kZSA9PSA0XCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJzdXJlXCIgc3R5bGU9XCJjb2xvcjogI2ZmZmZmZjsgYmFja2dyb3VuZC1jb2xvcjogI2NjY2NjY1wiPnt7XHJcbiAgICAgICAgICBub1N0b2NrVGV4dFxyXG4gICAgICAgIH19PC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiYnRuLXdyYXBwZXJcIiB2LWVsc2UtaWY9XCJtb2RlID09IDFcIj5cclxuICAgICAgICA8dmlld1xyXG4gICAgICAgICAgY2xhc3M9XCJzdXJlIGFkZC1jYXJ0XCJcclxuICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMzhycHggMHJweCAwcnB4IDM4cnB4XCJcclxuICAgICAgICAgIDpzdHlsZT1cIntcclxuICAgICAgICAgICAgY29sb3I6IHRoZW1lQ29sb3JGbignYWRkQ2FydENvbG9yJyksXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWVDb2xvckZuKCdhZGRDYXJ0QmFja2dyb3VuZENvbG9yJyksXHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICAgIEBjbGljaz1cImFkZENhcnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGFkZENhcnRUZXh0IH19XHJcbiAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICA8dmlld1xyXG4gICAgICAgICAgY2xhc3M9XCJzdXJlXCJcclxuICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMHJweCAzOHJweCAzOHJweCAwcnB4XCJcclxuICAgICAgICAgIDpzdHlsZT1cIntcclxuICAgICAgICAgICAgY29sb3I6IHRoZW1lQ29sb3JGbignYnV5Tm93Q29sb3InKSxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZUNvbG9yRm4oJ2J1eU5vd0JhY2tncm91bmRDb2xvcicpLFxyXG4gICAgICAgICAgfVwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJidXlOb3dcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGJ1eU5vd1RleHQgfX1cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJidG4td3JhcHBlclwiIHYtZWxzZS1pZj1cIm1vZGUgPT0gMlwiPlxyXG4gICAgICAgIDx2aWV3XHJcbiAgICAgICAgICBjbGFzcz1cInN1cmUgYWRkLWNhcnRcIlxyXG4gICAgICAgICAgOnN0eWxlPVwie1xyXG4gICAgICAgICAgICBjb2xvcjogdGhlbWVDb2xvckZuKCdhZGRDYXJ0Q29sb3InKSxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZUNvbG9yRm4oJ2FkZENhcnRCYWNrZ3JvdW5kQ29sb3InKSxcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgQGNsaWNrPVwiYWRkQ2FydFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgYWRkQ2FydFRleHQgfX1cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJidG4td3JhcHBlclwiIHYtZWxzZS1pZj1cIm1vZGUgPT0gM1wiPlxyXG4gICAgICAgIDx2aWV3XHJcbiAgICAgICAgICBjbGFzcz1cInN1cmVcIlxyXG4gICAgICAgICAgOnN0eWxlPVwie1xyXG4gICAgICAgICAgICBjb2xvcjogdGhlbWVDb2xvckZuKCdidXlOb3dDb2xvcicpLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lQ29sb3JGbignYnV5Tm93QmFja2dyb3VuZENvbG9yJyksXHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICAgIEBjbGljaz1cImJ1eU5vd1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgYnV5Tm93VGV4dCB9fVxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPCEtLSDpobXpnaLlhoXlrrnnu5PmnZ8gLS0+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuLyogZXNsaW50LWRpc2FibGUgKi9cclxudmFyIHZrIC8vIHZr5L6d6LWWXHJcbnZhciBnb29kc0NhY2hlID0ge30gLy8g5pys5Zyw5ZWG5ZOB57yT5a2YXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBuYW1lOiAndmstZGF0YS1nb29kcy1za3UtcG9wdXAnLFxyXG4gIGVtaXRzOiBbXHJcbiAgICAndXBkYXRlOm1vZGVsVmFsdWUnLFxyXG4gICAgJ2lucHV0JyxcclxuICAgICd1cGRhdGUtZ29vZHMnLFxyXG4gICAgJ29wZW4nLFxyXG4gICAgJ2Nsb3NlJyxcclxuICAgICdhZGQtY2FydCcsXHJcbiAgICAnYnV5LW5vdycsXHJcbiAgICAnY2FydCcsXHJcbiAgICAnYnV5JyxcclxuICAgICdudW0tY2hhbmdlJyxcclxuICBdLFxyXG4gIHByb3BzOiB7XHJcbiAgICAvLyB0cnVlIOe7hOS7tuaYvuekuiBmYWxzZSDnu4Tku7bpmpDol49cclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIFR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIG1vZGVsVmFsdWU6IHtcclxuICAgICAgVHlwZTogQm9vbGVhbixcclxuICAgICAgZGVmYXVsdDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgLy8gdmvkupHlh73mlbDot6/nlLHmqKHlvI/lj4LmlbDlvIDlp4stLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8g5ZWG5ZOBaWRcclxuICAgIGdvb2RzSWQ6IHtcclxuICAgICAgVHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiAnJyxcclxuICAgIH0sXHJcbiAgICAvLyB2a+i3r+eUseaooeW8j+ahhuaetuS4i+eahOS6keWHveaVsOWcsOWdgFxyXG4gICAgYWN0aW9uOiB7XHJcbiAgICAgIFR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJycsXHJcbiAgICB9LFxyXG4gICAgLy8gdmvkupHlh73mlbDot6/nlLHmqKHlvI/lj4LmlbDnu5PmnZ8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8g6K+l5ZWG5ZOB5bey5oqi5a6M5pe255qE5oyJ6ZKu5paH5a2XXHJcbiAgICBub1N0b2NrVGV4dDoge1xyXG4gICAgICBUeXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6ICfor6XllYblk4Hlt7LmiqLlrownLFxyXG4gICAgfSxcclxuICAgIC8vIOW6k+WtmOaWh+Wtl1xyXG4gICAgc3RvY2tUZXh0OiB7XHJcbiAgICAgIFR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJ+W6k+WtmCcsXHJcbiAgICB9LFxyXG4gICAgLy8g5ZWG5ZOB6KGoaWTnmoTlrZfmrrXlkI1cclxuICAgIGdvb2RzSWROYW1lOiB7XHJcbiAgICAgIFR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJ19pZCcsXHJcbiAgICB9LFxyXG4gICAgLy8gc2t16KGoaWTnmoTlrZfmrrXlkI1cclxuICAgIHNrdUlkTmFtZToge1xyXG4gICAgICBUeXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6ICdfaWQnLFxyXG4gICAgfSxcclxuICAgIC8vIHNrdV9saXN055qE5a2X5q615ZCNXHJcbiAgICBza3VMaXN0TmFtZToge1xyXG4gICAgICBUeXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6ICdza3VfbGlzdCcsXHJcbiAgICB9LFxyXG4gICAgLy8gc3BlY19saXN055qE5a2X5q615ZCNXHJcbiAgICBzcGVjTGlzdE5hbWU6IHtcclxuICAgICAgVHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiAnc3BlY19saXN0JyxcclxuICAgIH0sXHJcbiAgICAvLyDlupPlrZjnmoTlrZfmrrXlkI0g6buY6K6kIHN0b2NrXHJcbiAgICBzdG9ja05hbWU6IHtcclxuICAgICAgVHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiAnc3RvY2snLFxyXG4gICAgfSxcclxuICAgIC8vIHNrdee7hOWQiOi3r+W+hOeahOWtl+auteWQjVxyXG4gICAgc2t1QXJyTmFtZToge1xyXG4gICAgICBUeXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6ICdza3VfbmFtZV9hcnInLFxyXG4gICAgfSxcclxuICAgIC8vIOm7mOiupOWNleinhOagvOaXtueahOinhOagvOe7hOWQjeensFxyXG4gICAgZGVmYXVsdFNpbmdsZVNrdU5hbWU6IHtcclxuICAgICAgVHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiAn6buY6K6kJyxcclxuICAgIH0sXHJcbiAgICAvLyDmqKHlvI8gMTrpg73mmL7npLogIDI65Y+q5pi+56S66LSt54mp6L2mIDM65Y+q5pi+56S656uL5Y2z6LSt5LmwIDQ65pi+56S657y66LSn5oyJ6ZKuIOm7mOiupCAxXHJcbiAgICBtb2RlOiB7XHJcbiAgICAgIFR5cGU6IE51bWJlcixcclxuICAgICAgZGVmYXVsdDogMSxcclxuICAgIH0sXHJcbiAgICAvLyDngrnlh7vpga7nvanmmK/lkKblhbPpl63nu4Tku7YgdHJ1ZSDlhbPpl60gZmFsc2Ug5LiN5YWz6ZetIOm7mOiupHRydWVcclxuICAgIG1hc2tDbG9zZUFibGU6IHtcclxuICAgICAgVHlwZTogQm9vbGVhbixcclxuICAgICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICAvLyDpobbpg6jlnIbop5LlgLxcclxuICAgIGJvcmRlclJhZGl1czoge1xyXG4gICAgICBUeXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxyXG4gICAgICBkZWZhdWx0OiAwLFxyXG4gICAgfSxcclxuICAgIC8vIOWVhuWTgee8qeeVpeWbvuWtl+auteWQjSjmnKrpgInmi6lza3Xml7YpXHJcbiAgICBnb29kc1RodW1iTmFtZToge1xyXG4gICAgICBUeXBlOiBbU3RyaW5nXSxcclxuICAgICAgZGVmYXVsdDogJ2dvb2RzX3RodW1iJyxcclxuICAgIH0sXHJcbiAgICAvLyDllYblk4HnvKnnlaXlm77og4zmma/popzoibLvvIzlpoIjOTk5OTk5XHJcbiAgICBnb29kc1RodW1iQmFja2dyb3VuZENvbG9yOiB7XHJcbiAgICAgIFR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJ3RyYW5zcGFyZW50JyxcclxuICAgIH0sXHJcbiAgICAvLyDmnIDlsI/otK3kubDmlbDph48g6buY6K6kIDFcclxuICAgIG1pbkJ1eU51bToge1xyXG4gICAgICBUeXBlOiBbTnVtYmVyLCBTdHJpbmddLFxyXG4gICAgICBkZWZhdWx0OiAxLFxyXG4gICAgfSxcclxuICAgIC8vIOacgOWkp+i0reS5sOaVsOmHjyDpu5jorqQgMTAwMDAwXHJcbiAgICBtYXhCdXlOdW06IHtcclxuICAgICAgVHlwZTogW051bWJlciwgU3RyaW5nXSxcclxuICAgICAgZGVmYXVsdDogMTAwMDAwLFxyXG4gICAgfSxcclxuICAgIC8vIOatpei/m+WZqOatpemVvyDpu5jorqQgMVxyXG4gICAgc3RlcEJ1eU51bToge1xyXG4gICAgICBUeXBlOiBbTnVtYmVyLCBTdHJpbmddLFxyXG4gICAgICBkZWZhdWx0OiAxLFxyXG4gICAgfSxcclxuICAgIC8vIOaYr+WQpuWPquiDvei+k+WFpSBzdGVwIOeahOWAjeaVsFxyXG4gICAgc3RlcFN0cmljdGx5OiB7XHJcbiAgICAgIFR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIC8vIOiHquWumuS5ieiOt+WPluWVhuWTgeS/oeaBr+eahOWHveaVsCzmlK/ku5jlrp3lsI/nqIvluo/kuI3mlK/mjIHor6XlsZ7mgKcs6K+35L2/55SobG9jYWxkYXRh5bGe5oCnXHJcbiAgICBjdXN0b21BY3Rpb246IHtcclxuICAgICAgVHlwZTogW0Z1bmN0aW9uXSxcclxuICAgICAgZGVmYXVsdDogbnVsbCxcclxuICAgIH0sXHJcbiAgICAvLyDmnKzlnLDmlbDmja7mupBcclxuICAgIGxvY2FsZGF0YToge1xyXG4gICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICB9LFxyXG4gICAgLy8g5Lu35qC855qE5a2X5L2T6aKc6ImyXHJcbiAgICBwcmljZUNvbG9yOiB7XHJcbiAgICAgIFR5cGU6IFN0cmluZyxcclxuICAgIH0sXHJcbiAgICAvLyDnq4vljbPotK3kubDmjInpkq7nmoTmloflrZdcclxuICAgIGJ1eU5vd1RleHQ6IHtcclxuICAgICAgVHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiAn56uL5Y2z6LSt5LmwJyxcclxuICAgIH0sXHJcbiAgICAvLyDnq4vljbPotK3kubDmjInpkq7nmoTlrZfkvZPpopzoibJcclxuICAgIGJ1eU5vd0NvbG9yOiB7XHJcbiAgICAgIFR5cGU6IFN0cmluZyxcclxuICAgIH0sXHJcbiAgICAvLyDnq4vljbPotK3kubDmjInpkq7nmoTog4zmma/popzoibJcclxuICAgIGJ1eU5vd0JhY2tncm91bmRDb2xvcjoge1xyXG4gICAgICBUeXBlOiBTdHJpbmcsXHJcbiAgICB9LFxyXG4gICAgLy8g5Yqg5YWl6LSt54mp6L2m5oyJ6ZKu55qE5paH5a2XXHJcbiAgICBhZGRDYXJ0VGV4dDoge1xyXG4gICAgICBUeXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6ICfliqDlhaXotK3nianovaYnLFxyXG4gICAgfSxcclxuICAgIC8vIOWKoOWFpei0reeJqei9puaMiemSrueahOWtl+S9k+minOiJslxyXG4gICAgYWRkQ2FydENvbG9yOiB7XHJcbiAgICAgIFR5cGU6IFN0cmluZyxcclxuICAgIH0sXHJcbiAgICAvLyDliqDlhaXotK3nianovabmjInpkq7nmoTog4zmma/popzoibJcclxuICAgIGFkZENhcnRCYWNrZ3JvdW5kQ29sb3I6IHtcclxuICAgICAgVHlwZTogU3RyaW5nLFxyXG4gICAgfSxcclxuICAgIC8vIOS4jeWPr+eCueWHu+aXtizmjInpkq7nmoTmoLflvI9cclxuICAgIGRpc2FibGVTdHlsZToge1xyXG4gICAgICBUeXBlOiBPYmplY3QsXHJcbiAgICAgIGRlZmF1bHQ6IG51bGwsXHJcbiAgICB9LFxyXG4gICAgLy8g5oyJ6ZKu54K55Ye75pe255qE5qC35byPXHJcbiAgICBhY3RpdmVkU3R5bGU6IHtcclxuICAgICAgVHlwZTogT2JqZWN0LFxyXG4gICAgICBkZWZhdWx0OiBudWxsLFxyXG4gICAgfSxcclxuICAgIC8vIOaMiemSruW4uOaAgeeahOagt+W8j1xyXG4gICAgYnRuU3R5bGU6IHtcclxuICAgICAgVHlwZTogT2JqZWN0LFxyXG4gICAgICBkZWZhdWx0OiBudWxsLFxyXG4gICAgfSxcclxuICAgIC8vIOaYr+WQpuaYvuekuuWPs+S4iuinkuWFs+mXreaMiemSrlxyXG4gICAgc2hvd0Nsb3NlOiB7XHJcbiAgICAgIFR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgLy8g5YWz6Zet5oyJ6ZKu55qE5Zu+54mH5Zyw5Z2AIGh0dHBzOi8vaW1nLmFsaWNkbi5jb20vaW1nZXh0cmEvaTEvMTIxMDIyNjg3L08xQ04wMUltTjBPMTFWaWdxd3pwTGlLXyEhMTIxMDIyNjg3LnBuZ1xyXG4gICAgY2xvc2VJbWFnZToge1xyXG4gICAgICBUeXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ29BQUFBcUNBWUFBQURGdzhsYkFBQUV5VWxFUVZSNDJzU1plV3dOVVJUR3A0T3F0Qm83c1NYRUxyYWdka3BRc1JSSjFacjRoeUppSjlZZ3hOSWcxcUFOaVQrRTFpNUlZMGtWVld0UUVidUVLTEZHVVNIMjcvQU5ONVBYbVR2enVwemtsL3RtOHQ2Yjc1MTdsbnZ2QzBsS1NqSjhXbW5RQVVTREZxQUJxQUxLZ2w4Z0Q3d0U5MEUyU0FlWHdGZjFTeElTRXJRZVZ0S0h3Q2d3RnNTRFNJZjNoWUZLb0NrWURCYURkeUFWaUhkdWVIbW9GNkZ0d0RMUTIzYi9FN2dNN29JY2VqSUVSSURhb0JGb0M4cUE4bUE4U1FOejZXMVhDOUdZK25DUUNDWUFrL2MrZ0YwZ0Jad0gzMTIrSXhSMEJDUEJVSWFIMkErd0hzeEhDSHh4K2dMVDVRR042YTJKZkc4dXZWQ0R3czlvaURRWWx4a01HZkh5UXZBUmxBRFR3Y1hrNU9UNmZvVjJrUzhBVFhpZHltbGN5ZW4xYS9Kamw5SUpoM2hQa2pFTFlxTzhDdTBLampOWnZ0RVR3NWpGQldYUG1HU1RHUUtTZU9uNWlRMGtWTEwwQ0lOZlBOY1BiRE1LeVJDYkd6RU1CSitaRDhjQ2hZRmRxR1RxZnNXVDhvdFBHb1ZzRUhzTXd4REZzM3NoTnN4SjZCclEwUG84T0dVVWtWSHNOQ1ZtbCtjbnRCMWpVV3duMkdFVXNURU1yQVNiREsrMkNDUTBrWVg2bmZMTGlzTW1LcVVyMFM2ME0rakcxMHZBbStKU0NhOCt4N0NLbHpId2FrdFY2RGlPYnpVelBKSXhGTzFCUTEyd0d0VFJlTzlHZXRWZ1kva2pOSnpaYmNXbVRqSGZ4dzUxQXNScXZMOGVPQXRtc0p1RnUzZzFsKzFaTEI1ZURUVlozSzBQN3RMMFRrV09wU2c2MWtWa0J0dXVOUnRoR3Mrd3RKU1Q1YVFJN2NFYmtrUlhOWVZLZ1g2a0lkWXVVaFl6TVF3eE44dGlFeENMRnFITmVTRjkvYWVtMEJ6R3A1UFlRQ0o3Yy9Hc2sxUmZ1U0Q2VTFkTnBjRGY5WmlnVG1LYk1SWjlpVlRzSHNjR0psdVcyRk1mMVNTUVdHbkJtYUI2a0NKVlRWVk5KWkUrK0N4OWRyRWxsUzFLTUNJTnBVUkZtRWJCV0E2M0Z6OXM5NWNHSWRKZ3AvelhtVDRwWmNPdlNVenVadHRUYmJsbW5jM1BJamptaWREWHZLZ2RoTWgwSmRienVDaldyYk5PVm92alM1UDdia1BKL21CRVNrejJCTzAxNjZ5Yk5lSjQzMVMycSswMU5udHVJcTNFMGFtemppWnRrOXRzc1d5VER6TzQ1MjViQUNLOU5BVW42OFR0a05ocEVYcE9TYWdSbWwrUzZpTFNTZXdlSHYyNDJRaGwxM3JSeXZvRHZEbEt5VFFueS9aUUorMWlIN3ZWYkV4N09SNVVpS1ZJTzdWaWNndkhDdHdydWRsb01JVjcvMHVhZFZZVzU3TzRXdnZpOHY0cHltbEtrcnB3dnNEZUxMWkFZMnBrd2JBQjNQU1FmQys0Y0g3bDRrMVpIOHprWlJxOGVjTytaNXJONDBKSnFuWEZ1R2ZheFBDVExqY24wT1pPcG5Bclh3OEhZNHBhSWJ3NUNjTWdYcTZITjIvbXQ2K1hHTHJOMTV0QnJ5SVVHYXZNcENUcmZLY0RDS2tBY2VBOVM4bmhBT2VoaFNVeWhYcGtCeHhuUDRZTTFJbnVnUDdjQmtqQlBjcVZVV0ZZQ0VST3hYaVF6NUpsWFYrSWZLaDdtcGZKYWMrbFo2Vjg3UVhWQ2xCa1RjN1lXc1dUUFNEeWl0ZnpVVGxKbGo4VGJ2RTZqbHVET2R3WitqWDU3R0xPM0FEZXV5WnJEWWk4NnZWODFGRDJVVkdzbVQrNVpsMEJua2hvc2VPRWFvZ0w0NnBxTzR2L0lxVUV5YWxJUjRoODVCZ2pIdjYrYVVXUk1iYjdFc3RYNk8wY3BUMUdjbzByeThmV3lnTERNam1EblFlQnQzUWU3dVZma2V1Z0R3Vkxjc1Z6R3N1d0xYYlYrSTYzWE5Ba0c1ci9odmdScWdxV3M2cEpQS3JzYnZ6L1E2eXl1bjB3L2g2bFArQm56ckNwZlBNVDJMOEZHQUE3azFHWi92bmFxQUFBQUFCSlJVNUVya0pnZ2c9PScsXHJcbiAgICB9LFxyXG4gICAgLy8g5piv5ZCm6ZqQ6JeP5bqT5a2Y5pi+56S6XHJcbiAgICBoaWRlU3RvY2s6IHtcclxuICAgICAgVHlwZTogQm9vbGVhbixcclxuICAgICAgZGVmYXVsdDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgLy8g6aKc6Imy5Li76aKYXHJcbiAgICB0aGVtZToge1xyXG4gICAgICBUeXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6ICdkZWZhdWx0JyxcclxuICAgIH0sXHJcbiAgICAvLyDor7fmsYLkuK3nmoTmj5DnpLpcclxuICAgIGFjdGlvblRpcHM6IHtcclxuICAgICAgVHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiAn6K+35rGC5LitLi4uJyxcclxuICAgIH0sXHJcbiAgICAvLyDpu5jorqTpgInkuK3nmoRTS1VcclxuICAgIGRlZmF1bHRTZWxlY3Q6IHtcclxuICAgICAgVHlwZTogT2JqZWN0LFxyXG4gICAgfSxcclxuICAgIC8vIOaYr+WQpuS9v+eUqOe8k+WtmFxyXG4gICAgdXNlQ2FjaGU6IHtcclxuICAgICAgVHlwZTogQm9vbGVhbixcclxuICAgICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOm7mOiupOWVhuWTgSzorr7nva7or6XlgLzlj6/lv6vpgJ/lsZXnpLrllYblk4FcclxuICAgICAqIOmAu+i+kTog5YWI5bGV56S6IGRlZmF1bHRHb29kcyDkv6Hmga8s5YaN5Y+W5pWw5o2u5bqTLOWGjeabtOaWsOmhtemdoijpgJrluLjkuLrmm7TmlrDlupPlrZgpXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRHb29kczoge1xyXG4gICAgICBUeXBlOiBPYmplY3QsXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDph5Hpop3mmK/lkKbpnIDopoHpmaTku6UxMDBcclxuICAgICAqIDE66YeR6aKd5Lya6Zmk5LulMTAwXHJcbiAgICAgKiAwOumHkemineS4jeS8mumZpOS7pTEwMFxyXG4gICAgICovXHJcbiAgICBhbW91bnRUeXBlOiB7XHJcbiAgICAgIFR5cGU6IE51bWJlcixcclxuICAgICAgZGVmYXVsdDogMSxcclxuICAgIH0sXHJcbiAgICAvLyDmr4/mrKHpgInmi6nlroxTS1XlkI7vvIzotK3kubDmlbDph4/lvZIx77yM5aaC5p6c5pyJ5pyA5bCP6LSt5Lmw5pWw6YeP77yM5YiZ6K6+572u5Li65pyA5bCP6LSt5Lmw5pWw6YePXHJcbiAgICBzZWxlY3RlZEluaXQ6IHtcclxuICAgICAgVHlwZTogQm9vbGVhbixcclxuICAgICAgZGVmYXVsdDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgLy8g5piv5ZCm5byA5ZCv5bqV6YOo5a6J5YWo5Yy66YCC6YWN77yM6buY6K6kdHJ1ZVxyXG4gICAgc2FmZUFyZWFJbnNldEJvdHRvbToge1xyXG4gICAgICBUeXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgfSxcclxuICB9LFxyXG4gIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzYWZlQm90dG9tOiAwLCAgLy8g55WZ5Ye65bqV6YOo5a6J5YWo6Led56a7XHJcbiAgICAgIGNvbXBsZXRlOiBmYWxzZSwgLy8g57uE5Lu25piv5ZCm5Yqg6L295a6M5oiQXHJcbiAgICAgIGdvb2RzSW5mbzoge30sIC8vIOWVhuWTgeS/oeaBr1xyXG4gICAgICBpc1Nob3c6IGZhbHNlLCAvLyB0cnVlIOaYvuekuiBmYWxzZSDpmpDol49cclxuICAgICAgaW5pdEtleTogdHJ1ZSwgLy8g5piv5ZCm6ZyA6KaB5Yid5aeL5YyWIHRydWUg5pivIGZhbHNlIOWQplxyXG4gICAgICAvLyAjaWZuZGVmIE1QLUJBSURVXHJcbiAgICAgIHNob3BJdGVtSW5mbzoge30sIC8vIOWtmOaUvuimgeWSjOmAieS4reeahOWAvOi/m+ihjOWMuemFjeeahOaVsOaNru+8iOWboOeZvuW6puWwj+eoi+W6j3NldERhdGHkuI3mlK/mjIHkuK3mloflrZfmrrXvvIzmlYXkuI3nvJbor5FzaG9wSXRlbUluZm/lj5jph4/vvIlcclxuICAgICAgLy8gI2VuZGlmXHJcbiAgICAgIHNlbGVjdEFycjogW10sIC8vIOWtmOaUvuiiq+mAieS4reeahOWAvFxyXG4gICAgICBzdWJJbmRleDogW10sIC8vIOaYr+WQpumAieS4rSDlm6DkuLrkuI3noa7lrprmmK/lpJrop4TmoLzov5jmmK/ljZXop4TmoLzvvIzmiYDku6Xov5nph4zlrprkuYnmlbDnu4TmnaXliKTmlq1cclxuICAgICAgc2VsZWN0U2hvcDoge30sIC8vIOWtmOaUvuacgOWQjumAieS4reeahOWVhuWTgVxyXG4gICAgICBzZWxlY3ROdW06IHRoaXMubWluQnV5TnVtIHx8IDEsIC8vIOmAieS4reaVsOmHj1xyXG4gICAgICBvdXRGb1N0b2NrOiBmYWxzZSwgLy8g5piv5ZCm5YWo6YOoc2t16YO957y66LSnXHJcbiAgICAgIG9wZW5UaW1lOiAwLFxyXG4gICAgICB0aGVtZUNvbG9yOiB7XHJcbiAgICAgICAgLy8g6buY6K6k5Li76aKYXHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgcHJpY2VDb2xvcjogJ3JnYigyNTQsIDg2LCAxMCknLFxyXG4gICAgICAgICAgYnV5Tm93Q29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgIGJ1eU5vd0JhY2tncm91bmRDb2xvcjogJ3JnYigyNTQsIDg2LCAxMCknLFxyXG4gICAgICAgICAgYWRkQ2FydENvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICBhZGRDYXJ0QmFja2dyb3VuZENvbG9yOiAncmdiKDI1NSwgMTQ4LCAyKScsXHJcbiAgICAgICAgICBidG5TdHlsZToge1xyXG4gICAgICAgICAgICBjb2xvcjogJyMzMzMzMzMnLFxyXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmNGY0ZjQnLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBhY3RpdmVkU3R5bGU6IHtcclxuICAgICAgICAgICAgY29sb3I6ICdyZ2IoMjU0LCA4NiwgMTApJyxcclxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICdyZ2IoMjU0LCA4NiwgMTApJyxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTQsODYsMTAsMC4xKScsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGlzYWJsZVN0eWxlOiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAnI2MzYzNjMycsXHJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2Y2ZjZmNicsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmNmY2ZjYnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOe6oum7keS4u+mimFxyXG4gICAgICAgICdyZWQtYmxhY2snOiB7XHJcbiAgICAgICAgICBwcmljZUNvbG9yOiAncmdiKDI1NSwgNjgsIDY4KScsXHJcbiAgICAgICAgICBidXlOb3dDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgYnV5Tm93QmFja2dyb3VuZENvbG9yOiAncmdiKDI1NSwgNjgsIDY4KScsXHJcbiAgICAgICAgICBhZGRDYXJ0Q29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgIGFkZENhcnRCYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoODUsIDg1LCA4NSknLFxyXG4gICAgICAgICAgYWN0aXZlZFN0eWxlOiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAncmdiKDI1NSwgNjgsIDY4KScsXHJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiAncmdiKDI1NSwgNjgsIDY4KScsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LDY4LDY4LDAuMSknLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOm7keeZveS4u+mimFxyXG4gICAgICAgICdibGFjay13aGl0ZSc6IHtcclxuICAgICAgICAgIHByaWNlQ29sb3I6ICdyZ2IoNDcsIDQ3LCA1MiknLFxyXG4gICAgICAgICAgYnV5Tm93Q29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgIGJ1eU5vd0JhY2tncm91bmRDb2xvcjogJ3JnYig0NywgNDcsIDUyKScsXHJcbiAgICAgICAgICBhZGRDYXJ0Q29sb3I6ICdyZ2IoNDcsIDQ3LCA1MiknLFxyXG4gICAgICAgICAgYWRkQ2FydEJhY2tncm91bmRDb2xvcjogJ3JnYigyMzUsIDIzNiwgMjQyKScsXHJcbiAgICAgICAgICAvLyBidG5TdHlsZTp7XHJcbiAgICAgICAgICAvLyBcdGNvbG9yOlwicmdiKDQ3LCA0NywgNTIpXCIsXHJcbiAgICAgICAgICAvLyBcdGJvcmRlckNvbG9yOlwicmdiYSgyMzUsMjM2LDI0MiwwLjUpXCIsXHJcbiAgICAgICAgICAvLyBcdGJhY2tncm91bmRDb2xvcjpcInJnYmEoMjM1LDIzNiwyNDIsMC41KVwiLFxyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICAgIGFjdGl2ZWRTdHlsZToge1xyXG4gICAgICAgICAgICBjb2xvcjogJ3JnYig0NywgNDcsIDUyKScsXHJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiAncmdiYSg0Nyw0Nyw1MiwwLjEyKScsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoNDcsNDcsNTIsMC4xMiknLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOWSluWVoeiJsuS4u+mimFxyXG4gICAgICAgIGNvZmZlZToge1xyXG4gICAgICAgICAgcHJpY2VDb2xvcjogJ3JnYigxOTUsIDE2NywgMTA1KScsXHJcbiAgICAgICAgICBidXlOb3dDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgYnV5Tm93QmFja2dyb3VuZENvbG9yOiAncmdiKDE5NSwgMTY3LCAxMDUpJyxcclxuICAgICAgICAgIGFkZENhcnRDb2xvcjogJ3JnYigxOTUsIDE2NywgMTA1KScsXHJcbiAgICAgICAgICBhZGRDYXJ0QmFja2dyb3VuZENvbG9yOiAncmdiKDI0MywgMjM4LCAyMjUpJyxcclxuICAgICAgICAgIGFjdGl2ZWRTdHlsZToge1xyXG4gICAgICAgICAgICBjb2xvcjogJ3JnYigxOTUsIDE2NywgMTA1KScsXHJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiAncmdiKDE5NSwgMTY3LCAxMDUpJyxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxOTUsIDE2NywgMTA1LDAuMSknLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOa1hee7v+iJsuS4u+mimFxyXG4gICAgICAgIGdyZWVuOiB7XHJcbiAgICAgICAgICBwcmljZUNvbG9yOiAncmdiKDk5LCAxOTAsIDExNCknLFxyXG4gICAgICAgICAgYnV5Tm93Q29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgIGJ1eU5vd0JhY2tncm91bmRDb2xvcjogJ3JnYig5OSwgMTkwLCAxMTQpJyxcclxuICAgICAgICAgIGFkZENhcnRDb2xvcjogJ3JnYig5OSwgMTkwLCAxMTQpJyxcclxuICAgICAgICAgIGFkZENhcnRCYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoMjI1LCAyNDQsIDIyNyknLFxyXG4gICAgICAgICAgYWN0aXZlZFN0eWxlOiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAncmdiKDk5LCAxOTAsIDExNCknLFxyXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ3JnYig5OSwgMTkwLCAxMTQpJyxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSg5OSwgMTkwLCAxMTQsMC4xKScsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9XHJcbiAgfSxcclxuICBjcmVhdGVkKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICB2ayA9IHRoYXQudmtcclxuICAgIGlmICh0aGF0LnZhbHVlQ29tKSB7XHJcbiAgICAgIHRoYXQub3BlbigpXHJcbiAgICB9XHJcbiAgICAvLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuICAgIGNvbnN0IHtzYWZlQXJlYUluc2V0c30gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKVxyXG4gICAgLy8g5bqV6YOo5a6J5YWo6Led56a7XHJcbiAgICB0aGF0LnNhZmVCb3R0b20gPSBzYWZlQXJlYUluc2V0cy5ib3R0b21cclxuICB9LFxyXG4gIG1vdW50ZWQoKSB7fSxcclxuICBtZXRob2RzOiB7XHJcbiAgICAvLyDliJ3lp4vljJZcclxuICAgIGluaXQobm90QXV0b0NsaWNrKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICAvLyDmuIXnqbrkuYvliY3nmoTmlbDmja5cclxuICAgICAgdGhhdC5zZWxlY3RBcnIgPSBbXVxyXG4gICAgICB0aGF0LnN1YkluZGV4ID0gW11cclxuICAgICAgdGhhdC5zZWxlY3RTaG9wID0ge31cclxuICAgICAgdGhhdC5zZWxlY3ROdW0gPSB0aGF0Lm1pbkJ1eU51bSB8fCAxXHJcbiAgICAgIHRoYXQub3V0Rm9TdG9jayA9IGZhbHNlXHJcbiAgICAgIHRoYXQuc2hvcEl0ZW1JbmZvID0ge31cclxuICAgICAgbGV0IHNwZWNMaXN0TmFtZSA9IHRoYXQuc3BlY0xpc3ROYW1lXHJcbiAgICAgIHRoYXQuZ29vZHNJbmZvW3NwZWNMaXN0TmFtZV0ubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgdGhhdC5zZWxlY3RBcnIucHVzaCgnJylcclxuICAgICAgICB0aGF0LnN1YkluZGV4LnB1c2goLTEpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoYXQuY2hlY2tJdGVtKCkgLy8g6K6h566Xc2t16YeM6Z2i6KeE5qC85b2i5oiQ6Lev5b6EXHJcbiAgICAgIHRoYXQuY2hlY2tJbnBhdGgoLTEpIC8vIOS8oC0x5piv5Li65LqG5LiN6Lez6L+H5b6q546vXHJcbiAgICAgIGlmICghbm90QXV0b0NsaWNrKSB0aGF0LmF1dG9DbGlja1NrdSgpIC8vIOiHquWKqOmAieaLqXNrdeetlueVpVxyXG4gICAgfSxcclxuICAgIC8vIOS9v+eUqHZr6Lev55Sx5qih5byP5qGG5p626I635Y+W5ZWG5ZOB5L+h5oGvXHJcbiAgICBmaW5kR29vZHNJbmZvKG9iaiA9IHt9KSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBsZXQgeyB1c2VDYWNoZSB9ID0gb2JqXHJcbiAgICAgIGlmICh0eXBlb2YgdmsgPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB0aGF0LnRvYXN0KCdjdXN0b20tYWN0aW9u5b+F6aG75pivZnVuY3Rpb24nLCAnbm9uZScpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHsgYWN0aW9uVGlwcyB9ID0gdGhhdFxyXG4gICAgICBsZXQgYWN0aW9uVGl0bGUgPSAnJ1xyXG4gICAgICBsZXQgYWN0aW9uQW9hZGluZyA9IGZhbHNlXHJcbiAgICAgIGlmIChhY3Rpb25UaXBzICE9PSAnY3VzdG9tJykge1xyXG4gICAgICAgIGFjdGlvblRpdGxlID0gdXNlQ2FjaGUgPyAnJyA6ICfor7fmsYLkuK0uLi4nXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWN0aW9uQW9hZGluZyA9IHVzZUNhY2hlID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgdmsuY2FsbEZ1bmN0aW9uKHtcclxuICAgICAgICB1cmw6IHRoYXQuYWN0aW9uLFxyXG4gICAgICAgIHRpdGxlOiBhY3Rpb25UaXRsZSxcclxuICAgICAgICBsb2FkaW5nOiBhY3Rpb25Bb2FkaW5nLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGdvb2RzX2lkOiB0aGF0Lmdvb2RzSWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICAgIHRoYXQudXBkYXRlR29vZHNJbmZvKGRhdGEuZ29vZHNJbmZvKVxyXG4gICAgICAgICAgLy8g5pu05paw57yT5a2YXHJcbiAgICAgICAgICBnb29kc0NhY2hlW3RoYXQuZ29vZHNJZF0gPSBkYXRhLmdvb2RzSW5mb1xyXG4gICAgICAgICAgdGhhdC4kZW1pdCgndXBkYXRlLWdvb2RzJywgZGF0YS5nb29kc0luZm8pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWlsKCkge1xyXG4gICAgICAgICAgdGhhdC51cGRhdGVWYWx1ZShmYWxzZSlcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIHVwZGF0ZVZhbHVlKHZhbHVlKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGF0LiRlbWl0KCdvcGVuJywgdHJ1ZSlcclxuICAgICAgICB0aGF0LiRlbWl0KCdpbnB1dCcsIHRydWUpXHJcbiAgICAgICAgdGhhdC4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0cnVlKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoYXQuJGVtaXQoJ2lucHV0JywgZmFsc2UpXHJcbiAgICAgICAgdGhhdC4kZW1pdCgnY2xvc2UnLCAnY2xvc2UnKVxyXG4gICAgICAgIHRoYXQuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZmFsc2UpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvLyDmm7TmlrDllYblk4Hkv6Hmga8o5bqT5a2Y44CB5ZCN56ew44CB5Zu+54mHKVxyXG4gICAgdXBkYXRlR29vZHNJbmZvKGdvb2RzSW5mbykge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgLy8gZ29vZHNJbmZvLnNrdV9saXN0Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgLy8gXHRpdGVtLnNrdV9uYW1lX2FyciA9IFtcIjIwbWwv55O2XCJdO1xyXG4gICAgICAvLyB9KTtcclxuICAgICAgbGV0IHsgc2t1TGlzdE5hbWUgfSA9IHRoYXRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoYXQuZ29vZHNJbmZvKSA9PT0gJ3t9JyB8fFxyXG4gICAgICAgIHRoYXQuZ29vZHNJbmZvW3RoYXQuZ29vZHNJZE5hbWVdICE9PSBnb29kc0luZm9bdGhhdC5nb29kc0lkTmFtZV1cclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhhdC5nb29kc0luZm8gPSBnb29kc0luZm9cclxuICAgICAgICB0aGF0LmluaXRLZXkgPSB0cnVlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhhdC5nb29kc0luZm9bc2t1TGlzdE5hbWVdID0gZ29vZHNJbmZvW3NrdUxpc3ROYW1lXVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGF0LmluaXRLZXkpIHtcclxuICAgICAgICB0aGF0LmluaXRLZXkgPSBmYWxzZVxyXG4gICAgICAgIHRoYXQuaW5pdCgpXHJcbiAgICAgIH1cclxuICAgICAgLy8g5pu05paw6YCJ5Litc2t155qE5bqT5a2Y5L+h5oGvXHJcbiAgICAgIGxldCBzZWxlY3Rfc2t1X2luZm8gPSB0aGF0LmdldExpc3RJdGVtKFxyXG4gICAgICAgIHRoYXQuZ29vZHNJbmZvW3NrdUxpc3ROYW1lXSxcclxuICAgICAgICB0aGF0LnNrdUlkTmFtZSxcclxuICAgICAgICB0aGF0LnNlbGVjdFNob3BbdGhhdC5za3VJZE5hbWVdLFxyXG4gICAgICApXHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhhdC5zZWxlY3RTaG9wLCBzZWxlY3Rfc2t1X2luZm8pXHJcbiAgICAgIHRoYXQuZGVmYXVsdFNlbGVjdFNrdSgpXHJcbiAgICAgIHRoYXQuY29tcGxldGUgPSB0cnVlXHJcbiAgICB9LFxyXG4gICAgYXN5bmMgb3BlbigpIHtcclxuICAgICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAgIHRoYXQub3BlblRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgICBsZXQgZmluZEdvb2RzSW5mb1J1biA9IHRydWVcclxuICAgICAgbGV0IHNrdUxpc3ROYW1lID0gdGhhdC5za3VMaXN0TmFtZVxyXG4gICAgICAvLyDlhYjojrflj5bnvJPlrZjkuK3nmoTllYblk4Hkv6Hmga9cclxuICAgICAgbGV0IHVzZUNhY2hlID0gZmFsc2VcclxuICAgICAgbGV0IGdvb2RzSW5mbyA9IGdvb2RzQ2FjaGVbdGhhdC5nb29kc0lkXVxyXG4gICAgICBpZiAoZ29vZHNJbmZvICYmIHRoYXQudXNlQ2FjaGUpIHtcclxuICAgICAgICB1c2VDYWNoZSA9IHRydWVcclxuICAgICAgICB0aGF0LnVwZGF0ZUdvb2RzSW5mbyhnb29kc0luZm8pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhhdC5jb21wbGV0ZSA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoYXQuY3VzdG9tQWN0aW9uICYmIHR5cGVvZiB0aGF0LmN1c3RvbUFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBnb29kc0luZm8gPSBhd2FpdCB0aGF0XHJcbiAgICAgICAgICAgIC5jdXN0b21BY3Rpb24oe1xyXG4gICAgICAgICAgICAgIHVzZUNhY2hlLFxyXG4gICAgICAgICAgICAgIGdvb2RzSWQ6IHRoYXQuZ29vZHNJZCxcclxuICAgICAgICAgICAgICBnb29kc0luZm8sXHJcbiAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGF0LmNsb3NlKClcclxuICAgICAgICAgICAgICAgIH0sIDUwMClcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5jbG9zZSgpXHJcbiAgICAgICAgICAgICAgfSwgNTAwKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgbGV0IHsgbWVzc2FnZSA9ICcnIH0gPSBlcnJcclxuICAgICAgICAgIGlmIChtZXNzYWdlLmluZGV4T2YoJy5jYXRjaCBpcyBub3QgYSBmdW5jdGlvbicpID4gLTEpIHtcclxuICAgICAgICAgICAgdGhhdC50b2FzdCgnY3VzdG9tLWFjdGlvbuW/hemhu+i/lOWbnuS4gOS4qlByb21pc2UnLCAnbm9uZScpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHRoYXQuY2xvc2UoKVxyXG4gICAgICAgICAgICB9LCA1MDApXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDmm7TmlrDnvJPlrZhcclxuICAgICAgICBnb29kc0NhY2hlW3RoYXQuZ29vZHNJZF0gPSBnb29kc0luZm9cclxuICAgICAgICBpZiAoZ29vZHNJbmZvICYmIHR5cGVvZiBnb29kc0luZm8gPT0gJ29iamVjdCcgJiYgSlNPTi5zdHJpbmdpZnkoZ29vZHNJbmZvKSAhPSAne30nKSB7XHJcbiAgICAgICAgICBmaW5kR29vZHNJbmZvUnVuID0gZmFsc2VcclxuICAgICAgICAgIHRoYXQudXBkYXRlR29vZHNJbmZvKGdvb2RzSW5mbylcclxuICAgICAgICAgIHRoYXQudXBkYXRlVmFsdWUodHJ1ZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhhdC50b2FzdCgn5pyq6I635Y+W5Yiw5ZWG5ZOB5L+h5oGvJywgJ25vbmUnKVxyXG4gICAgICAgICAgdGhhdC4kZW1pdCgnaW5wdXQnLCBmYWxzZSlcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhhdC5sb2NhbGRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoYXQubG9jYWxkYXRhICE9PSBudWxsKSB7XHJcbiAgICAgICAgZ29vZHNJbmZvID0gdGhhdC5sb2NhbGRhdGFcclxuICAgICAgICBpZiAoZ29vZHNJbmZvICYmIHR5cGVvZiBnb29kc0luZm8gPT0gJ29iamVjdCcgJiYgSlNPTi5zdHJpbmdpZnkoZ29vZHNJbmZvKSAhPSAne30nKSB7XHJcbiAgICAgICAgICBmaW5kR29vZHNJbmZvUnVuID0gZmFsc2VcclxuICAgICAgICAgIHRoYXQudXBkYXRlR29vZHNJbmZvKGdvb2RzSW5mbylcclxuICAgICAgICAgIHRoYXQudXBkYXRlVmFsdWUodHJ1ZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhhdC50b2FzdCgn5pyq6I635Y+W5Yiw5ZWG5ZOB5L+h5oGvJywgJ25vbmUnKVxyXG4gICAgICAgICAgdGhhdC4kZW1pdCgnaW5wdXQnLCBmYWxzZSlcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoZmluZEdvb2RzSW5mb1J1bikgdGhhdC5maW5kR29vZHNJbmZvKHsgdXNlQ2FjaGUgfSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIOebkeWQrCAtIOW8ueWHuuWxguaUtui1t1xyXG4gICAgY2xvc2Uocykge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgaWYgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGhhdC5vcGVuVGltZSA8IDQwMCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChzID09ICdtYXNrJykge1xyXG4gICAgICAgIGlmICh0aGF0Lm1hc2tDbG9zZUFibGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICB0aGF0LiRlbWl0KCdpbnB1dCcsIGZhbHNlKVxyXG4gICAgICAgICAgdGhhdC4kZW1pdCgnY2xvc2UnLCAnbWFzaycpXHJcbiAgICAgICAgICB0aGF0LiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGF0LiRlbWl0KCdpbnB1dCcsIGZhbHNlKVxyXG4gICAgICAgIHRoYXQuJGVtaXQoJ2Nsb3NlJywgJ2Nsb3NlJylcclxuICAgICAgICB0aGF0LiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW92ZUhhbmRsZSgpIHtcclxuICAgICAgLy/npoHmraLniLblhYPntKDmu5HliqhcclxuICAgIH0sXHJcbiAgICAvLyBza3XmjInpkq7nmoTngrnlh7vkuovku7ZcclxuICAgIHNrdUNsaWNrKHZhbHVlLCBpbmRleDEsIGluZGV4Mikge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgaWYgKHZhbHVlLmlzaG93KSB7XHJcbiAgICAgICAgaWYgKHRoYXQuc2VsZWN0QXJyW2luZGV4MV0gIT0gdmFsdWUubmFtZSkge1xyXG4gICAgICAgICAgdGhhdC4kc2V0KHRoYXQuc2VsZWN0QXJyLCBpbmRleDEsIHZhbHVlLm5hbWUpXHJcbiAgICAgICAgICB0aGF0LiRzZXQodGhhdC5zdWJJbmRleCwgaW5kZXgxLCBpbmRleDIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoYXQuJHNldCh0aGF0LnNlbGVjdEFyciwgaW5kZXgxLCAnJylcclxuICAgICAgICAgIHRoYXQuJHNldCh0aGF0LnN1YkluZGV4LCBpbmRleDEsIC0xKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGF0LmNoZWNrSW5wYXRoKGluZGV4MSlcclxuICAgICAgICAvLyDlpoLmnpzlhajpg6jpgInlroxcclxuICAgICAgICB0aGF0LmNoZWNrU2VsZWN0U2hvcCgpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvLyDmo4DmtYvmmK/lkKblt7Lnu4/pgInlroxza3VcclxuICAgIGNoZWNrU2VsZWN0U2hvcCgpIHtcclxuICAgICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAgIC8vIOWmguaenOWFqOmDqOmAieWujFxyXG4gICAgICBpZiAodGhhdC5zZWxlY3RBcnIuZXZlcnkoKGl0ZW0pID0+IGl0ZW0gIT0gJycpKSB7XHJcbiAgICAgICAgdGhhdC5zZWxlY3RTaG9wID0gdGhhdC5zaG9wSXRlbUluZm9bdGhhdC5nZXRBcnJheVRvU3RpbmcodGhhdC5zZWxlY3RBcnIpXVxyXG4gICAgICAgIGxldCBzdG9jayA9IHRoYXQuc2VsZWN0U2hvcFt0aGF0LnN0b2NrTmFtZV1cclxuICAgICAgICBpZiAodHlwZW9mIHN0b2NrICE9PSAndW5kZWZpbmVkJyAmJiB0aGF0LnNlbGVjdE51bSA+IHN0b2NrKSB7XHJcbiAgICAgICAgICB0aGF0LnNlbGVjdE51bSA9IHN0b2NrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGF0LnNlbGVjdE51bSA+IHRoYXQubWF4QnV5TnVtKSB7XHJcbiAgICAgICAgICB0aGF0LnNlbGVjdE51bSA9IHRoYXQubWF4QnV5TnVtXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGF0LnNlbGVjdE51bSA8IHRoYXQubWluQnV5TnVtKSB7XHJcbiAgICAgICAgICB0aGF0LnNlbGVjdE51bSA9IHRoYXQubWluQnV5TnVtXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGF0LnNlbGVjdGVkSW5pdCkge1xyXG4gICAgICAgICAgdGhhdC5zZWxlY3ROdW0gPSB0aGF0Lm1pbkJ1eU51bSB8fCAxXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoYXQuc2VsZWN0U2hvcCA9IHt9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvLyDmo4Dmn6Xot6/lvoRcclxuICAgIGNoZWNrSW5wYXRoKGNsaWNrSW5kZXgpIHtcclxuICAgICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAgIGxldCBzcGVjTGlzdE5hbWUgPSB0aGF0LnNwZWNMaXN0TmFtZVxyXG4gICAgICAvL2NvbnNvbGUudGltZSgn562b6YCJ5Y+v6YCJ6Lev5b6E6ZyA6KaB55qE5pe26Ze05pivJyk7XHJcbiAgICAgIC8v5b6q546v5omA5pyJ5bGe5oCn5Yik5pat5ZOq5Lqb5bGe5oCn5Y+v6YCJXHJcbiAgICAgIC8v5b2T5YmN6YCJ5Lit55qE5YWE5byf6IqC54K55ZKM5bey6YCJ5Lit5bGe5oCn5LiN6ZyA6KaB5b6q546vXHJcbiAgICAgIGxldCBzcGVjTGlzdCA9IHRoYXQuZ29vZHNJbmZvW3NwZWNMaXN0TmFtZV1cclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNwZWNMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGkgPT0gY2xpY2tJbmRleCkge1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxlbjIgPSBzcGVjTGlzdFtpXS5saXN0Lmxlbmd0aFxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVuMjsgaisrKSB7XHJcbiAgICAgICAgICBpZiAodGhhdC5zdWJJbmRleFtpXSAhPSAtMSAmJiBqID09IHRoYXQuc3ViSW5kZXhbaV0pIHtcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBjaG9vc2VkX2NvcHkgPSBbLi4udGhhdC5zZWxlY3RBcnJdXHJcbiAgICAgICAgICB0aGF0LiRzZXQoY2hvb3NlZF9jb3B5LCBpLCBzcGVjTGlzdFtpXS5saXN0W2pdLm5hbWUpXHJcbiAgICAgICAgICBsZXQgY2hvb3NlZF9jb3B5MiA9IGNob29zZWRfY29weS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtICE9PSAnJyAmJiB0eXBlb2YgaXRlbSAhPT0gJ3VuZGVmaW5lZCcsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBpZiAodGhhdC5zaG9wSXRlbUluZm8uaGFzT3duUHJvcGVydHkodGhhdC5nZXRBcnJheVRvU3RpbmcoY2hvb3NlZF9jb3B5MikpKSB7XHJcbiAgICAgICAgICAgIHNwZWNMaXN0W2ldLmxpc3Rbal0uaXNob3cgPSB0cnVlXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzcGVjTGlzdFtpXS5saXN0W2pdLmlzaG93ID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhhdC4kc2V0KHRoYXQuZ29vZHNJbmZvLCBzcGVjTGlzdE5hbWUsIHNwZWNMaXN0KVxyXG4gICAgICAvLyBjb25zb2xlLnRpbWVFbmQoJ+etm+mAieWPr+mAiei3r+W+hOmcgOimgeeahOaXtumXtOaYrycpO1xyXG4gICAgfSxcclxuICAgIC8vIOiuoeeul3NrdemHjOmdouinhOagvOW9ouaIkOi3r+W+hFxyXG4gICAgY2hlY2tJdGVtKCkge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgLy8gY29uc29sZS50aW1lKCforqHnrpfmnInlpJrlsI/np43lj6/pgInot6/lvoTpnIDopoHnmoTml7bpl7TmmK8nKTtcclxuICAgICAgbGV0IHsgc3RvY2tOYW1lIH0gPSB0aGF0XHJcbiAgICAgIGxldCBza3VMaXN0TmFtZSA9IHRoYXQuc2t1TGlzdE5hbWVcclxuICAgICAgLy8g5Y676Zmk5bqT5a2Y5bCP5LqO562J5LqOMOeahOWVhuWTgXNrdVxyXG4gICAgICBsZXQgb3JpZ2luYWxTa3VMaXN0ID0gdGhhdC5nb29kc0luZm9bc2t1TGlzdE5hbWVdXHJcbiAgICAgIGxldCBza3VMaXN0ID0gW11cclxuICAgICAgbGV0IHN0b2NrTnVtID0gMFxyXG4gICAgICBvcmlnaW5hbFNrdUxpc3QubWFwKChza3VJdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChza3VJdGVtW3N0b2NrTmFtZV0gPiAwKSB7XHJcbiAgICAgICAgICBza3VMaXN0LnB1c2goc2t1SXRlbSlcclxuICAgICAgICAgIHN0b2NrTnVtICs9IHNrdUl0ZW1bc3RvY2tOYW1lXVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKHN0b2NrTnVtIDw9IDApIHtcclxuICAgICAgICB0aGF0Lm91dEZvU3RvY2sgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgLy8g6K6h566X5pyJ5aSa5bCP56eN5Y+v6YCJ6Lev5b6EXHJcbiAgICAgIGxldCByZXN1bHQgPSBza3VMaXN0LnJlZHVjZShcclxuICAgICAgICAoYXJycywgaXRlbXMpID0+IHtcclxuICAgICAgICAgIHJldHVybiBhcnJzLmNvbmNhdChcclxuICAgICAgICAgICAgaXRlbXNbdGhhdC5za3VBcnJOYW1lXS5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgKGFyciwgaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyci5jb25jYXQoXHJcbiAgICAgICAgICAgICAgICAgIGFyci5tYXAoKGl0ZW0yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yip55So5a+56LGh5bGe5oCn55qE5ZSv5LiA5oCn5a6e546w5LqM57u05pWw57uE5Y676YeNXHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygxLHRoYXQuc2hvcEl0ZW1JbmZvLHRoYXQuZ2V0QXJyYXlUb1N0aW5nKFsuLi5pdGVtMiwgaXRlbV0pLGl0ZW0yLGl0ZW0saXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhhdC5zaG9wSXRlbUluZm8uaGFzT3duUHJvcGVydHkodGhhdC5nZXRBcnJheVRvU3RpbmcoWy4uLml0ZW0yLCBpdGVtXSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGF0LnNob3BJdGVtSW5mb1t0aGF0LmdldEFycmF5VG9TdGluZyhbLi4uaXRlbTIsIGl0ZW1dKV0gPSBpdGVtc1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLml0ZW0yLCBpdGVtXVxyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFtbXV0sXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBbW11dLFxyXG4gICAgICApXHJcbiAgICAgIC8vIGNvbnNvbGUudGltZUVuZCgn6K6h566X5pyJ5aSa5bCP56eN5Y+v6YCJ6Lev5b6E6ZyA6KaB55qE5pe26Ze05pivJyk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXJyYXlUb1N0aW5nKGFycikge1xyXG4gICAgICBsZXQgc3RyID0gJydcclxuICAgICAgYXJyLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpdGVtID0gaXRlbS5yZXBsYWNlKC9cXC4vZywgJ+OAgicpXHJcbiAgICAgICAgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAgICAgIHN0ciArPSBpdGVtXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHN0ciArPSAnLCcgKyBpdGVtXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm4gc3RyXHJcbiAgICB9LFxyXG4gICAgLy8g5qOA5rWLc2t16YCJ6aG55piv5ZCm5bey5YWo6YOo6YCJ5a6MLOS4lOacieW6k+WtmFxyXG4gICAgY2hlY2tTZWxlY3RDb21wbGV0ZShvYmogPSB7fSkge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgbGV0IGNsaWNrVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcbiAgICAgIGlmICh0aGF0LmNsaWNrVGltZSAmJiBjbGlja1RpbWUgLSB0aGF0LmNsaWNrVGltZSA8IDQwMCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICAgIHRoYXQuY2xpY2tUaW1lID0gY2xpY2tUaW1lXHJcbiAgICAgIGxldCB7IHNlbGVjdFNob3AsIHNlbGVjdE51bSwgc3RvY2tUZXh0LCBzdG9ja05hbWUgfSA9IHRoYXRcclxuICAgICAgaWYgKCFzZWxlY3RTaG9wIHx8ICFzZWxlY3RTaG9wW3RoYXQuc2t1SWROYW1lXSkge1xyXG4gICAgICAgIHRoYXQudG9hc3QoJ+ivt+WFiOmAieaLqeWvueW6lOinhOagvCcsICdub25lJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0TnVtIDw9IDApIHtcclxuICAgICAgICB0aGF0LnRvYXN0KCfotK3kubDmlbDph4/lv4Xpobs+MCcsICdub25lJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICAvLyDliKTmlq3lupPlrZhcclxuICAgICAgaWYgKHNlbGVjdE51bSA+IHNlbGVjdFNob3Bbc3RvY2tOYW1lXSkge1xyXG4gICAgICAgIHRoYXQudG9hc3Qoc3RvY2tUZXh0ICsgJ+S4jei2sycsICdub25lJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09ICdmdW5jdGlvbicpIG9iai5zdWNjZXNzKHNlbGVjdFNob3ApXHJcbiAgICB9LFxyXG4gICAgLy8g5Yqg5YWl6LSt54mp6L2mXHJcbiAgICBhZGRDYXJ0KCkge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgdGhhdC5jaGVja1NlbGVjdENvbXBsZXRlKHtcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoc2VsZWN0U2hvcCkge1xyXG4gICAgICAgICAgc2VsZWN0U2hvcC5idXlfbnVtID0gdGhhdC5zZWxlY3ROdW1cclxuICAgICAgICAgIHRoYXQuJGVtaXQoJ2FkZC1jYXJ0Jywgc2VsZWN0U2hvcClcclxuICAgICAgICAgIHRoYXQuJGVtaXQoJ2NhcnQnLCBzZWxlY3RTaG9wKVxyXG4gICAgICAgICAgLy8gc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgIC8vIFx0dGhhdC5pbml0KCk7XHJcbiAgICAgICAgICAvLyB9LCAzMDApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgLy8g56uL5Y2z6LSt5LmwXHJcbiAgICBidXlOb3coKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICB0aGF0LmNoZWNrU2VsZWN0Q29tcGxldGUoe1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChzZWxlY3RTaG9wKSB7XHJcbiAgICAgICAgICBzZWxlY3RTaG9wLmJ1eV9udW0gPSB0aGF0LnNlbGVjdE51bVxyXG4gICAgICAgICAgdGhhdC4kZW1pdCgnYnV5LW5vdycsIHNlbGVjdFNob3ApXHJcbiAgICAgICAgICB0aGF0LiRlbWl0KCdidXknLCBzZWxlY3RTaG9wKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgLy8g5by556qXXHJcbiAgICB0b2FzdCh0aXRsZSwgaWNvbikge1xyXG4gICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgaWNvbjogaWNvbixcclxuICAgICAgfSlcclxuICAgIH0sXHJcbiAgICAvLyDojrflj5blr7nosaHmlbDnu4TkuK3nmoTmn5DkuIDkuKppdGVtLOagueaNruaMh+WumueahOmUruWAvFxyXG4gICAgZ2V0TGlzdEl0ZW0obGlzdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgbGV0IGl0ZW1cclxuICAgICAgZm9yIChsZXQgaSBpbiBsaXN0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGxpc3RbaV1ba2V5XSkgPT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBpdGVtID0gbGlzdFtpXVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAobGlzdFtpXVtrZXldID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpdGVtID0gbGlzdFtpXVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaXRlbVxyXG4gICAgfSxcclxuICAgIGdldExpc3RJbmRleChsaXN0LCBrZXksIHZhbHVlKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBsZXQgaW5kZXggPSAtMVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAobGlzdFtpXVtrZXldID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgaW5kZXggPSBpXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW5kZXhcclxuICAgIH0sXHJcbiAgICAvLyDoh6rliqjpgInmi6lza3XliY3mj5DmmK/lj6rmnInkuIDnu4Rza3Us6buY6K6k6Ieq5Yqo6YCJ5oup5pyA5YmN6Z2i55qE5pyJ5bqT5a2Y55qEc2t1XHJcbiAgICBhdXRvQ2xpY2tTa3UoKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBsZXQgeyBzdG9ja05hbWUgfSA9IHRoYXRcclxuICAgICAgbGV0IHNrdUxpc3QgPSB0aGF0Lmdvb2RzSW5mb1t0aGF0LnNrdUxpc3ROYW1lXVxyXG4gICAgICBsZXQgc3BlY0xpc3RBcnIgPSB0aGF0Lmdvb2RzSW5mb1t0aGF0LnNwZWNMaXN0TmFtZV1cclxuICAgICAgaWYgKHNwZWNMaXN0QXJyLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgbGV0IHNwZWNMaXN0ID0gc3BlY0xpc3RBcnJbMF0ubGlzdFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BlY0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBza3UgPSB0aGF0LmdldExpc3RJdGVtKHNrdUxpc3QsIHRoYXQuc2t1QXJyTmFtZSwgW3NwZWNMaXN0W2ldLm5hbWVdKVxyXG4gICAgICAgICAgaWYgKHNrdSAmJiBza3Vbc3RvY2tOYW1lXSA+IDApIHtcclxuICAgICAgICAgICAgdGhhdC5za3VDbGljayhzcGVjTGlzdFtpXSwgMCwgaSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvLyDkuLvpopjpopzoibJcclxuICAgIHRoZW1lQ29sb3JGbihuYW1lKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBsZXQgeyB0aGVtZSwgdGhlbWVDb2xvciB9ID0gdGhhdFxyXG4gICAgICBsZXQgY29sb3IgPSB0aGF0W25hbWVdID8gdGhhdFtuYW1lXSA6IHRoZW1lQ29sb3JbdGhlbWVdW25hbWVdXHJcbiAgICAgIHJldHVybiBjb2xvclxyXG4gICAgfSxcclxuICAgIGRlZmF1bHRTZWxlY3RTa3UoKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBsZXQgeyBkZWZhdWx0U2VsZWN0IH0gPSB0aGF0XHJcbiAgICAgIGlmIChkZWZhdWx0U2VsZWN0ICYmIGRlZmF1bHRTZWxlY3Quc2t1ICYmIGRlZmF1bHRTZWxlY3Quc2t1Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGF0LnNlbGVjdFNrdShkZWZhdWx0U2VsZWN0KVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcblx0XHRcdCAqIOS4u+WKqOaWueazlSAtIOiuvue9rnNrdVxyXG5cdFx0XHR0aGF0LiRyZWZzLnNrdVBvcHVwLnNlbGVjdFNrdSh7XHJcblx0XHRcdFx0c2t1OltcIue6ouiJslwiLFwiMjU2R1wiLFwi5YWs5byA54mIXCJdLFxyXG5cdFx0XHRcdG51bTo1XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQgKi9cclxuICAgIHNlbGVjdFNrdShvYmogPSB7fSkge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgbGV0IHsgc2t1OiBza3VBcnIsIG51bTogc2VsZWN0TnVtIH0gPSBvYmpcclxuICAgICAgbGV0IHNwZWNMaXN0QXJyID0gdGhhdC5nb29kc0luZm9bdGhhdC5zcGVjTGlzdE5hbWVdXHJcbiAgICAgIGlmIChza3VBcnIgJiYgc3BlY0xpc3RBcnIubGVuZ3RoID09PSBza3VBcnIubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8g5YWI5riF56m6XHJcbiAgICAgICAgbGV0IHNrdUNsaWNrQXJyID0gW11cclxuICAgICAgICBsZXQgY2xpY2tLZXkgPSB0cnVlXHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNrdUFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGxldCBza3VOYW1lID0gc2t1QXJyW2luZGV4XVxyXG4gICAgICAgICAgbGV0IHNwZWNMaXN0ID0gc3BlY0xpc3RBcnJbaW5kZXhdLmxpc3RcclxuICAgICAgICAgIGxldCBpbmRleDEgPSBpbmRleFxyXG4gICAgICAgICAgbGV0IGluZGV4MiA9IHRoYXQuZ2V0TGlzdEluZGV4KHNwZWNMaXN0LCAnbmFtZScsIHNrdU5hbWUpXHJcbiAgICAgICAgICBpZiAoaW5kZXgyID09IC0xKSB7XHJcbiAgICAgICAgICAgIGNsaWNrS2V5ID0gZmFsc2VcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNrdUNsaWNrQXJyLnB1c2goe1xyXG4gICAgICAgICAgICBzcGVjOiBzcGVjTGlzdFtpbmRleDJdLFxyXG4gICAgICAgICAgICBpbmRleDE6IGluZGV4MSxcclxuICAgICAgICAgICAgaW5kZXgyOiBpbmRleDIsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xpY2tLZXkpIHtcclxuICAgICAgICAgIHRoYXQuaW5pdCh0cnVlKVxyXG4gICAgICAgICAgc2t1Q2xpY2tBcnIubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoYXQuc2t1Q2xpY2soaXRlbS5zcGVjLCBpdGVtLmluZGV4MSwgaXRlbS5pbmRleDIpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0TnVtID4gMCkgdGhhdC5zZWxlY3ROdW0gPSBzZWxlY3ROdW1cclxuICAgIH0sXHJcbiAgICBwcmljZUZpbHRlcihuID0gMCkge1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgaWYgKHR5cGVvZiBuID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgbiA9IHBhcnNlRmxvYXQobilcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhhdC5hbW91bnRUeXBlID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIG4udG9GaXhlZCgyKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAobiAvIDEwMCkudG9GaXhlZCgyKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHVzaEdvb2RzQ2FjaGUoZ29vZHNJbmZvKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBsZXQgeyBnb29kc0lkTmFtZSB9ID0gdGhhdFxyXG4gICAgICBnb29kc0NhY2hlW2dvb2RzSW5mb1tnb29kc0lkTmFtZV1dID0gZ29vZHNJbmZvXHJcbiAgICB9LFxyXG4gICAgLy8g55So5LqO6Zi75q2i5YaS5rOhXHJcbiAgICBzdG9wKCkge30sXHJcbiAgICAvLyDlm77niYfpooTop4hcclxuICAgIHByZXZpZXdJbWFnZSgpIHtcclxuICAgICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAgIGxldCB7IHNlbGVjdFNob3AsIGdvb2RzSW5mbywgZ29vZHNUaHVtYk5hbWUgfSA9IHRoYXRcclxuICAgICAgbGV0IHNyYyA9IHNlbGVjdFNob3AuaW1hZ2UgPyBzZWxlY3RTaG9wLmltYWdlIDogZ29vZHNJbmZvW2dvb2RzVGh1bWJOYW1lXVxyXG4gICAgICBpZiAoc3JjKSB7XHJcbiAgICAgICAgdW5pLnByZXZpZXdJbWFnZSh7XHJcbiAgICAgICAgICB1cmxzOiBbc3JjXSxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0TWF4U3RvY2soKSB7XHJcbiAgICAgIGxldCBtYXhTdG9jayA9IDBcclxuICAgICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAgIGxldCB7IHNlbGVjdFNob3AgPSB7fSwgZ29vZHNJbmZvID0ge30sIHNrdUxpc3ROYW1lLCBzdG9ja05hbWUgfSA9IHRoYXRcclxuICAgICAgaWYgKHNlbGVjdFNob3Bbc3RvY2tOYW1lXSkge1xyXG4gICAgICAgIG1heFN0b2NrID0gc2VsZWN0U2hvcFtzdG9ja05hbWVdXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHNrdUxpc3QgPSBnb29kc0luZm9bc2t1TGlzdE5hbWVdXHJcbiAgICAgICAgaWYgKHNrdUxpc3QgJiYgc2t1TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZXQgdmFsdWVBcnIgPSBbXVxyXG4gICAgICAgICAgc2t1TGlzdC5tYXAoKHNrdUl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHZhbHVlQXJyLnB1c2goc2t1SXRlbVtzdG9ja05hbWVdKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxldCBtYXggPSBNYXRoLm1heCguLi52YWx1ZUFycilcclxuICAgICAgICAgIG1heFN0b2NrID0gbWF4XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtYXhTdG9ja1xyXG4gICAgfSxcclxuICAgIG51bUNoYW5nZShlKSB7XHJcbiAgICAgIHRoaXMuJGVtaXQoJ251bS1jaGFuZ2UnLCBlLnZhbHVlKVxyXG4gICAgfSxcclxuICB9LFxyXG4gIC8vIOiuoeeul+WxnuaAp1xyXG4gIGNvbXB1dGVkOiB7XHJcbiAgICB2YWx1ZUNvbSgpIHtcclxuICAgICAgLy8gI2lmbmRlZiBWVUUzXHJcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlXHJcbiAgICAgIC8vICNlbmRpZlxyXG5cclxuICAgICAgLy8gI2lmZGVmIFZVRTNcclxuICAgICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZVxyXG4gICAgICAvLyAjZW5kaWZcclxuICAgIH0sXHJcbiAgICAvLyDmnIDlpKfotK3kubDmlbDph49cclxuICAgIG1heEJ1eU51bUNvbSgpIHtcclxuICAgICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAgIGxldCBtYXhTdG9jayA9IHRoYXQuZ2V0TWF4U3RvY2soKVxyXG4gICAgICBsZXQgbWF4ID0gdGhhdC5tYXhCdXlOdW0gfHwgMTAwMDAwXHJcbiAgICAgIC8vIOacgOWkp+i0reS5sOmHj+S4jeiDvei2hei/h+W9k+WJjeWVhuWTgeeahOW6k+WtmFxyXG4gICAgICBpZiAobWF4ID4gbWF4U3RvY2spIHtcclxuICAgICAgICBtYXggPSBtYXhTdG9ja1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtYXhcclxuICAgIH0sXHJcbiAgICAvLyDmmK/lkKbmmK/lpJrop4TmoLxcclxuICAgIGlzTWFueUNvbSgpIHtcclxuICAgICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAgIGxldCB7IGdvb2RzSW5mbywgZGVmYXVsdFNpbmdsZVNrdU5hbWUsIHNwZWNMaXN0TmFtZSB9ID0gdGhhdFxyXG4gICAgICBsZXQgaXNNYW55ID0gdHJ1ZVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZ29vZHNJbmZvW3NwZWNMaXN0TmFtZV0gJiZcclxuICAgICAgICBnb29kc0luZm9bc3BlY0xpc3ROYW1lXS5sZW5ndGggPT09IDEgJiZcclxuICAgICAgICBnb29kc0luZm9bc3BlY0xpc3ROYW1lXVswXS5saXN0Lmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgIGdvb2RzSW5mb1tzcGVjTGlzdE5hbWVdWzBdLm5hbWUgPT09IGRlZmF1bHRTaW5nbGVTa3VOYW1lXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlzTWFueSA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGlzTWFueVxyXG4gICAgfSxcclxuICAgIC8vIOm7mOiupOS7t+agvOWMuumXtOiuoeeul1xyXG4gICAgcHJpY2VDb20oKSB7XHJcbiAgICAgIGxldCBzdHIgPSAnJ1xyXG4gICAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICAgbGV0IHsgc2VsZWN0U2hvcCA9IHt9LCBnb29kc0luZm8gPSB7fSwgc2t1TGlzdE5hbWUsIHNrdUlkTmFtZSB9ID0gdGhhdFxyXG4gICAgICBpZiAoc2VsZWN0U2hvcFtza3VJZE5hbWVdKSB7XHJcbiAgICAgICAgc3RyID0gdGhhdC5wcmljZUZpbHRlcihzZWxlY3RTaG9wLnByaWNlKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBza3VMaXN0ID0gZ29vZHNJbmZvW3NrdUxpc3ROYW1lXVxyXG4gICAgICAgIGlmIChza3VMaXN0ICYmIHNrdUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IHZhbHVlQXJyID0gW11cclxuICAgICAgICAgIHNrdUxpc3QubWFwKChza3VJdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICB2YWx1ZUFyci5wdXNoKHNrdUl0ZW0ucHJpY2UpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGV0IG1pbiA9IHRoYXQucHJpY2VGaWx0ZXIoTWF0aC5taW4oLi4udmFsdWVBcnIpKVxyXG4gICAgICAgICAgbGV0IG1heCA9IHRoYXQucHJpY2VGaWx0ZXIoTWF0aC5tYXgoLi4udmFsdWVBcnIpKVxyXG4gICAgICAgICAgaWYgKG1pbiA9PT0gbWF4KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IG1pbiArICcnXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdHIgPSBgJHttaW59IC0gJHttYXh9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RyXHJcbiAgICB9LFxyXG4gICAgLy8g5bqT5a2Y5pi+56S6XHJcbiAgICBzdG9ja0NvbSgpIHtcclxuICAgICAgbGV0IHN0ciA9ICcnXHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBsZXQgeyBzZWxlY3RTaG9wID0ge30sIGdvb2RzSW5mbyA9IHt9LCBza3VMaXN0TmFtZSwgc3RvY2tOYW1lIH0gPSB0aGF0XHJcbiAgICAgIGlmIChzZWxlY3RTaG9wW3N0b2NrTmFtZV0pIHtcclxuICAgICAgICBzdHIgPSBzZWxlY3RTaG9wW3N0b2NrTmFtZV1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgc2t1TGlzdCA9IGdvb2RzSW5mb1tza3VMaXN0TmFtZV1cclxuICAgICAgICBpZiAoc2t1TGlzdCAmJiBza3VMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCB2YWx1ZUFyciA9IFtdXHJcbiAgICAgICAgICBza3VMaXN0Lm1hcCgoc2t1SXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgdmFsdWVBcnIucHVzaChza3VJdGVtW3N0b2NrTmFtZV0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGV0IG1pbiA9IE1hdGgubWluKC4uLnZhbHVlQXJyKVxyXG4gICAgICAgICAgbGV0IG1heCA9IE1hdGgubWF4KC4uLnZhbHVlQXJyKVxyXG4gICAgICAgICAgaWYgKG1pbiA9PT0gbWF4KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IG1pblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RyID0gYCR7bWlufSAtICR7bWF4fWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0clxyXG4gICAgfSxcclxuICB9LFxyXG4gIHdhdGNoOiB7XHJcbiAgICB2YWx1ZUNvbShuZXdWYWwsIG9sZFZhbHVlKSB7XHJcbiAgICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgICBpZiAobmV3VmFsKSB7XHJcbiAgICAgICAgdGhhdC5vcGVuKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRlZmF1bHRHb29kczoge1xyXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXHJcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChuZXdWYWwsIG9sZFZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHRoYXQgPSB0aGlzXHJcbiAgICAgICAgbGV0IHsgZ29vZHNJZE5hbWUgfSA9IHRoYXRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0eXBlb2YgbmV3VmFsID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgICAgbmV3VmFsICYmXHJcbiAgICAgICAgICBuZXdWYWxbZ29vZHNJZE5hbWVdICYmXHJcbiAgICAgICAgICAhZ29vZHNDYWNoZVtuZXdWYWxbZ29vZHNJZE5hbWVdXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhhdC5wdXNoR29vZHNDYWNoZShuZXdWYWwpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9LFxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4vKiAgc2t15by55Ye65bGCICovXHJcbi52ay1kYXRhLWdvb2RzLXNrdS1wb3B1cCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIGxlZnQ6IDA7XHJcbiAgdG9wOiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICB6LWluZGV4OiA5OTA7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAmLnNob3cge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcblxyXG4gICAgLm1hc2sge1xyXG4gICAgICBhbmltYXRpb246IHNob3dQb3B1cCAwLjJzIGxpbmVhciBib3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC5sYXllciB7XHJcbiAgICAgIGFuaW1hdGlvbjogc2hvd0xheWVyIDAuMnMgbGluZWFyIGJvdGg7XHJcbiAgICAgIGJvdHRvbTogdmFyKC0td2luZG93LWJvdHRvbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmLmhpZGUge1xyXG4gICAgLm1hc2sge1xyXG4gICAgICBhbmltYXRpb246IGhpZGVQb3B1cCAwLjJzIGxpbmVhciBib3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC5sYXllciB7XHJcbiAgICAgIGFuaW1hdGlvbjogaGlkZUxheWVyIDAuMnMgbGluZWFyIGJvdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmLm5vbmUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICB9XHJcbiAgLm1hc2sge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB6LWluZGV4OiAxO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xyXG4gIH1cclxuICAubGF5ZXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgLy8gaGVpZ2h0OiAxMDE0cnB4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIC8vIG1pbi1oZWlnaHQ6IDQwdmg7XHJcbiAgICAvLyBtYXgtaGVpZ2h0OiAxMDE0cnB4O1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgei1pbmRleDogOTk7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHJweCAxMHJweCAwIDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cclxuICAgIC5zcGVjaWZpY2F0aW9uLXdyYXBwZXIge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgcGFkZGluZzogMzBycHggMjVycHg7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIC5zcGVjaWZpY2F0aW9uLXdyYXBwZXItY29udGVudCB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgbWF4LWhlaWdodDogOTAwcnB4O1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDMwMHJweDtcclxuICAgICAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XHJcbiAgICAgICAgICAvKumakOiXj+a7mui9riovXHJcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNwZWNpZmljYXRpb24taGVhZGVyIHtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHJweDtcclxuXHJcbiAgICAgICAgICAuc3BlY2lmaWNhdGlvbi1sZWZ0IHtcclxuICAgICAgICAgICAgd2lkdGg6IDE4MHJweDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxODBycHg7XHJcbiAgICAgICAgICAgIGZsZXg6IDAgMCAxODBycHg7XHJcblxyXG4gICAgICAgICAgICAucHJvZHVjdC1pbWcge1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxODBycHg7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxODBycHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAuc3BlY2lmaWNhdGlvbi1yaWdodCB7XHJcbiAgICAgICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMzVycHggMCAyOHJweDtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuXHJcbiAgICAgICAgICAgIC5wcmljZS1jb250ZW50IHtcclxuICAgICAgICAgICAgICBjb2xvcjogI2ZlNTYwYTtcclxuICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuXHJcbiAgICAgICAgICAgICAgLnNpZ24ge1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC5wcmljZSB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogNHJweDtcclxuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNDhycHg7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC5wcmljZTIge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDRycHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDM2cnB4O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLmludmVudG9yeSB7XHJcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgICAgICAgICBjb2xvcjogIzk5OTk5OTtcclxuICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNHJweDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLmNob29zZSB7XHJcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNwZWNpZmljYXRpb24tY29udGVudCB7XHJcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xyXG5cclxuICAgICAgICAgIC5zcGVjaWZpY2F0aW9uLWl0ZW0ge1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHJweDtcclxuXHJcbiAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLml0ZW0tdGl0bGUge1xyXG4gICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcnB4O1xyXG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICAgICAgICAgICAgY29sb3I6ICM5OTk5OTk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC5pdGVtLXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgICAgICAgICBmbGV4LWZsb3c6IHdyYXA7XHJcblxyXG4gICAgICAgICAgICAgIC5pdGVtLWNvbnRlbnQge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTBycHggMzVycHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xyXG4gICAgICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcnB4O1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZycHg7XHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZjRmNGY0O1xyXG4gICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgICAgICYuYWN0aXZlZCB7XHJcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2ZlNTYwYTtcclxuICAgICAgICAgICAgICAgICAgY29sb3I6ICNmZTU2MGE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJi5ub2FjdGl2ZWQge1xyXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY2O1xyXG4gICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNmNmY2ZjY7XHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYzNjM2MzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLm51bWJlci1ib3gtdmlldyB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAzMHJweDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLmNsb3NlIHtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgdG9wOiAzMHJweDtcclxuICAgICAgICByaWdodDogMjVycHg7XHJcbiAgICAgICAgd2lkdGg6IDUwcnB4O1xyXG4gICAgICAgIGhlaWdodDogNTBycHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiA1MHJweDtcclxuICAgICAgICAuY2xvc2UtaXRlbSB7XHJcbiAgICAgICAgICB3aWR0aDogNTBycHg7XHJcbiAgICAgICAgICBoZWlnaHQ6IDUwcnB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLmJ0bi13cmFwcGVyIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTIwcnB4O1xyXG4gICAgICBmbGV4OiAwIDAgMTIwcnB4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgIHBhZGRpbmc6IDAgMjZycHg7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIC5sYXllci1idG4ge1xyXG4gICAgICAgIHdpZHRoOiAzMzVycHg7XHJcbiAgICAgICAgaGVpZ2h0OiA3NnJweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAzOHJweDtcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICBsaW5lLWhlaWdodDogNzZycHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuXHJcbiAgICAgICAgJi5hZGQtY2FydCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZiZTQ2O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5idXkge1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogI2ZlNTYwYTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLnN1cmUge1xyXG4gICAgICAgIHdpZHRoOiA2OThycHg7XHJcbiAgICAgICAgaGVpZ2h0OiA2OHJweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAzOHJweDtcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICBsaW5lLWhlaWdodDogNjhycHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmU1NjBhO1xyXG4gICAgICB9XHJcbiAgICAgIC5zdXJlLmFkZC1jYXJ0IHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZmY5NDAyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuYnRuLXdyYXBwZXIuc2FmZS1hcmVhLWluc2V0LWJvdHRvbSB7XHJcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xyXG4gICAgICBwYWRkaW5nLWJvdHRvbTogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XHJcbiAgICAgIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAa2V5ZnJhbWVzIHNob3dQb3B1cCB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgMTAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAa2V5ZnJhbWVzIGhpZGVQb3B1cCB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcblxyXG4gICAgMTAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAa2V5ZnJhbWVzIHNob3dMYXllciB7XHJcbiAgICAwJSB7XHJcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMjAlKTtcclxuICAgIH1cclxuXHJcbiAgICAxMDAlIHtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBrZXlmcmFtZXMgaGlkZUxheWVyIHtcclxuICAgIDAlIHtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xyXG4gICAgfVxyXG5cclxuICAgIDEwMCUge1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTIwJSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIi8vIGNvbnN0IGRlZmF1bHRPcHRpb24gPSB7XHJcbi8vIFx0ZHVyYXRpb246IDMwMCxcclxuLy8gXHR0aW1pbmdGdW5jdGlvbjogJ2xpbmVhcicsXHJcbi8vIFx0ZGVsYXk6IDAsXHJcbi8vIFx0dHJhbnNmb3JtT3JpZ2luOiAnNTAlIDUwJSAwJ1xyXG4vLyB9XHJcbi8vICNpZmRlZiBBUFAtTlZVRVxyXG5jb25zdCBudnVlQW5pbWF0aW9uID0gdW5pLnJlcXVpcmVOYXRpdmVQbHVnaW4oJ2FuaW1hdGlvbicpXHJcbi8vICNlbmRpZlxyXG5jbGFzcyBNUEFuaW1hdGlvbiB7XHJcblx0Y29uc3RydWN0b3Iob3B0aW9ucywgX3RoaXMpIHtcclxuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcclxuXHRcdHRoaXMuYW5pbWF0aW9uID0gdW5pLmNyZWF0ZUFuaW1hdGlvbihvcHRpb25zKVxyXG5cdFx0dGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzID0ge31cclxuXHRcdHRoaXMubmV4dCA9IDBcclxuXHRcdHRoaXMuJCA9IF90aGlzXHJcblxyXG5cdH1cclxuXHJcblx0X252dWVQdXNoQW5pbWF0ZXModHlwZSwgYXJncykge1xyXG5cdFx0bGV0IGFuaU9iaiA9IHRoaXMuY3VycmVudFN0ZXBBbmltYXRlc1t0aGlzLm5leHRdXHJcblx0XHRsZXQgc3R5bGVzID0ge31cclxuXHRcdGlmICghYW5pT2JqKSB7XHJcblx0XHRcdHN0eWxlcyA9IHtcclxuXHRcdFx0XHRzdHlsZXM6IHt9LFxyXG5cdFx0XHRcdGNvbmZpZzoge31cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c3R5bGVzID0gYW5pT2JqXHJcblx0XHR9XHJcblx0XHRpZiAoYW5pbWF0ZVR5cGVzMS5pbmNsdWRlcyh0eXBlKSkge1xyXG5cdFx0XHRpZiAoIXN0eWxlcy5zdHlsZXMudHJhbnNmb3JtKSB7XHJcblx0XHRcdFx0c3R5bGVzLnN0eWxlcy50cmFuc2Zvcm0gPSAnJ1xyXG5cdFx0XHR9XG5cdFx0XHRsZXQgdW5pdCA9ICcnXG5cdFx0XHRpZih0eXBlID09PSAncm90YXRlJyl7XG5cdFx0XHRcdHVuaXQgPSAnZGVnJ1xuXHRcdFx0fVxyXG5cdFx0XHRzdHlsZXMuc3R5bGVzLnRyYW5zZm9ybSArPSBgJHt0eXBlfSgke2FyZ3MrdW5pdH0pIGBcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHN0eWxlcy5zdHlsZXNbdHlwZV0gPSBgJHthcmdzfWBcclxuXHRcdH1cclxuXHRcdHRoaXMuY3VycmVudFN0ZXBBbmltYXRlc1t0aGlzLm5leHRdID0gc3R5bGVzXHJcblx0fVxyXG5cdF9hbmltYXRlUnVuKHN0eWxlcyA9IHt9LCBjb25maWcgPSB7fSkge1xyXG5cdFx0bGV0IHJlZiA9IHRoaXMuJC4kcmVmc1snYW5pJ10ucmVmXHJcblx0XHRpZiAoIXJlZikgcmV0dXJuXHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0bnZ1ZUFuaW1hdGlvbi50cmFuc2l0aW9uKHJlZiwge1xyXG5cdFx0XHRcdHN0eWxlcyxcclxuXHRcdFx0XHQuLi5jb25maWdcclxuXHRcdFx0fSwgcmVzID0+IHtcclxuXHRcdFx0XHRyZXNvbHZlKClcclxuXHRcdFx0fSlcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRfbnZ1ZU5leHRBbmltYXRlKGFuaW1hdGVzLCBzdGVwID0gMCwgZm4pIHtcclxuXHRcdGxldCBvYmogPSBhbmltYXRlc1tzdGVwXVxyXG5cdFx0aWYgKG9iaikge1xyXG5cdFx0XHRsZXQge1xyXG5cdFx0XHRcdHN0eWxlcyxcclxuXHRcdFx0XHRjb25maWdcclxuXHRcdFx0fSA9IG9ialxyXG5cdFx0XHR0aGlzLl9hbmltYXRlUnVuKHN0eWxlcywgY29uZmlnKS50aGVuKCgpID0+IHtcclxuXHRcdFx0XHRzdGVwICs9IDFcclxuXHRcdFx0XHR0aGlzLl9udnVlTmV4dEFuaW1hdGUoYW5pbWF0ZXMsIHN0ZXAsIGZuKVxyXG5cdFx0XHR9KVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzID0ge31cclxuXHRcdFx0dHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIGZuKClcclxuXHRcdFx0dGhpcy5pc0VuZCA9IHRydWVcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHN0ZXAoY29uZmlnID0ge30pIHtcblx0XHQvLyAjaWZuZGVmIEFQUC1OVlVFXG5cdFx0dGhpcy5hbmltYXRpb24uc3RlcChjb25maWcpXHJcblx0XHQvLyAjZW5kaWZcclxuXHRcdC8vICNpZmRlZiBBUFAtTlZVRVxyXG5cdFx0dGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzW3RoaXMubmV4dF0uY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCBjb25maWcpXG5cdFx0dGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzW3RoaXMubmV4dF0uc3R5bGVzLnRyYW5zZm9ybU9yaWdpbiA9IHRoaXMuY3VycmVudFN0ZXBBbmltYXRlc1t0aGlzLm5leHRdLmNvbmZpZy50cmFuc2Zvcm1PcmlnaW5cblx0XHR0aGlzLm5leHQrK1xyXG5cdFx0Ly8gI2VuZGlmXHJcblx0XHRyZXR1cm4gdGhpc1xyXG5cdH1cclxuXHJcblx0cnVuKGZuKSB7XHJcblx0XHQvLyAjaWZuZGVmIEFQUC1OVlVFXG5cdFx0dGhpcy4kLmFuaW1hdGlvbkRhdGEgPSB0aGlzLmFuaW1hdGlvbi5leHBvcnQoKVxyXG5cdFx0dGhpcy4kLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgZm4oKVxyXG5cdFx0fSwgdGhpcy4kLmR1cmF0aW9uVGltZSlcclxuXHRcdC8vICNlbmRpZlxyXG5cdFx0Ly8gI2lmZGVmIEFQUC1OVlVFXHJcblx0XHR0aGlzLmlzRW5kID0gZmFsc2Vcblx0XHRsZXQgcmVmID0gdGhpcy4kLiRyZWZzWydhbmknXSAmJiB0aGlzLiQuJHJlZnNbJ2FuaSddLnJlZlxuXHRcdGlmKCFyZWYpIHJldHVyblxyXG5cdFx0dGhpcy5fbnZ1ZU5leHRBbmltYXRlKHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcywgMCwgZm4pXHJcblx0XHR0aGlzLm5leHQgPSAwXHJcblx0XHQvLyAjZW5kaWZcclxuXHR9XHJcbn1cclxuXHJcblxyXG5jb25zdCBhbmltYXRlVHlwZXMxID0gWydtYXRyaXgnLCAnbWF0cml4M2QnLCAncm90YXRlJywgJ3JvdGF0ZTNkJywgJ3JvdGF0ZVgnLCAncm90YXRlWScsICdyb3RhdGVaJywgJ3NjYWxlJywgJ3NjYWxlM2QnLFxyXG5cdCdzY2FsZVgnLCAnc2NhbGVZJywgJ3NjYWxlWicsICdza2V3JywgJ3NrZXdYJywgJ3NrZXdZJywgJ3RyYW5zbGF0ZScsICd0cmFuc2xhdGUzZCcsICd0cmFuc2xhdGVYJywgJ3RyYW5zbGF0ZVknLFxyXG5cdCd0cmFuc2xhdGVaJ1xyXG5dXHJcbmNvbnN0IGFuaW1hdGVUeXBlczIgPSBbJ29wYWNpdHknLCAnYmFja2dyb3VuZENvbG9yJ11cclxuY29uc3QgYW5pbWF0ZVR5cGVzMyA9IFsnd2lkdGgnLCAnaGVpZ2h0JywgJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddXHJcbmFuaW1hdGVUeXBlczEuY29uY2F0KGFuaW1hdGVUeXBlczIsIGFuaW1hdGVUeXBlczMpLmZvckVhY2godHlwZSA9PiB7XHJcblx0TVBBbmltYXRpb24ucHJvdG90eXBlW3R5cGVdID0gZnVuY3Rpb24oLi4uYXJncykge1xyXG5cdFx0Ly8gI2lmbmRlZiBBUFAtTlZVRVxuXHRcdHRoaXMuYW5pbWF0aW9uW3R5cGVdKC4uLmFyZ3MpXG5cdFx0Ly8gI2VuZGlmXHJcblx0XHQvLyAjaWZkZWYgQVBQLU5WVUVcclxuXHRcdHRoaXMuX252dWVQdXNoQW5pbWF0ZXModHlwZSwgYXJncylcclxuXHRcdC8vICNlbmRpZlxyXG5cdFx0cmV0dXJuIHRoaXNcclxuXHR9XHJcbn0pXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5pbWF0aW9uKG9wdGlvbiwgX3RoaXMpIHtcblx0aWYoIV90aGlzKSByZXR1cm5cclxuXHRjbGVhclRpbWVvdXQoX3RoaXMudGltZXIpXHJcblx0cmV0dXJuIG5ldyBNUEFuaW1hdGlvbihvcHRpb24sIF90aGlzKVxyXG59XG4iLCI8dGVtcGxhdGU+XG5cdDx2aWV3IHYtaWY9XCJpc1Nob3d8fG9uY2VSZW5kZXJcIiB2LXNob3c9XCJpc1Nob3dcIiByZWY9XCJhbmlcIiA6YW5pbWF0aW9uPVwiYW5pbWF0aW9uRGF0YVwiIDpjbGFzcz1cImN1c3RvbUNsYXNzXCIgOnN0eWxlPVwidHJhbnNmb3JtU3R5bGVzXCIgQGNsaWNrPVwib25DbGlja1wiPjxzbG90Pjwvc2xvdD48L3ZpZXc+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY3JlYXRlQW5pbWF0aW9uIH0gZnJvbSAnLi9jcmVhdGVBbmltYXRpb24nXG5cbi8qKlxuICogVHJhbnNpdGlvbiDov4fmuKHliqjnlLtcbiAqIEBkZXNjcmlwdGlvbiDnroDljZXov4fmuKHliqjnlLvnu4Tku7ZcbiAqIEB0dXRvcmlhbCBodHRwczovL2V4dC5kY2xvdWQubmV0LmNuL3BsdWdpbj9pZD05ODVcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2hvdyA9IFtmYWxzZXx0cnVlXSDmjqfliLbnu4Tku7bmmL7npLrmiJbpmpDol49cbiAqIEBwcm9wZXJ0eSB7QXJyYXl8U3RyaW5nfSBtb2RlQ2xhc3MgPSBbZmFkZXxzbGlkZS10b3B8c2xpZGUtcmlnaHR8c2xpZGUtYm90dG9tfHNsaWRlLWxlZnR8em9vbS1pbnx6b29tLW91dF0g6L+H5rih5Yqo55S757G75Z6LXG4gKiAgQHZhbHVlIGZhZGUg5riQ6ZqQ5riQ5Ye66L+H5rihXG4gKiAgQHZhbHVlIHNsaWRlLXRvcCDnlLHkuIroh7PkuIvov4fmuKFcbiAqICBAdmFsdWUgc2xpZGUtcmlnaHQg55Sx5Y+z6Iez5bem6L+H5rihXG4gKiAgQHZhbHVlIHNsaWRlLWJvdHRvbSDnlLHkuIvoh7PkuIrov4fmuKFcbiAqICBAdmFsdWUgc2xpZGUtbGVmdCDnlLHlt6boh7Plj7Pov4fmuKFcbiAqICBAdmFsdWUgem9vbS1pbiDnlLHlsI/liLDlpKfov4fmuKFcbiAqICBAdmFsdWUgem9vbS1vdXQg55Sx5aSn5Yiw5bCP6L+H5rihXG4gKiBAcHJvcGVydHkge051bWJlcn0gZHVyYXRpb24g6L+H5rih5Yqo55S75oyB57ut5pe26Ze0XG4gKiBAcHJvcGVydHkge09iamVjdH0gc3R5bGVzIOe7hOS7tuagt+W8j++8jOWQjCBjc3Mg5qC35byP77yM5rOo5oSP5bim4oCZLeKAmOi/nuaOpeespueahOWxnuaAp+mcgOimgeS9v+eUqOWwj+mpvOWzsOWGmeazleWmgu+8mmBiYWNrZ3JvdW5kQ29sb3I6cmVkYFxuICovXG5leHBvcnQgZGVmYXVsdCB7XG5cdG5hbWU6ICd1bmlUcmFuc2l0aW9uJyxcblx0ZW1pdHM6WydjbGljaycsJ2NoYW5nZSddLFxuXHRwcm9wczoge1xuXHRcdHNob3c6IHtcblx0XHRcdHR5cGU6IEJvb2xlYW4sXG5cdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdH0sXG5cdFx0bW9kZUNsYXNzOiB7XG5cdFx0XHR0eXBlOiBbQXJyYXksIFN0cmluZ10sXG5cdFx0XHRkZWZhdWx0KCkge1xuXHRcdFx0XHRyZXR1cm4gJ2ZhZGUnXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkdXJhdGlvbjoge1xuXHRcdFx0dHlwZTogTnVtYmVyLFxuXHRcdFx0ZGVmYXVsdDogMzAwXG5cdFx0fSxcblx0XHRzdHlsZXM6IHtcblx0XHRcdHR5cGU6IE9iamVjdCxcblx0XHRcdGRlZmF1bHQoKSB7XG5cdFx0XHRcdHJldHVybiB7fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Y3VzdG9tQ2xhc3M6e1xuXHRcdFx0dHlwZTogU3RyaW5nLFxuXHRcdFx0ZGVmYXVsdDogJydcblx0XHR9LFxuXHRcdG9uY2VSZW5kZXI6e1xuXHRcdFx0dHlwZTpCb29sZWFuLFxuXHRcdFx0ZGVmYXVsdDpmYWxzZVxuXHRcdH0sXG5cdH0sXG5cdGRhdGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlzU2hvdzogZmFsc2UsXG5cdFx0XHR0cmFuc2Zvcm06ICcnLFxuXHRcdFx0b3BhY2l0eTogMSxcblx0XHRcdGFuaW1hdGlvbkRhdGE6IHt9LFxuXHRcdFx0ZHVyYXRpb25UaW1lOiAzMDAsXG5cdFx0XHRjb25maWc6IHt9XG5cdFx0fVxuXHR9LFxuXHR3YXRjaDoge1xuXHRcdHNob3c6IHtcblx0XHRcdGhhbmRsZXIobmV3VmFsKSB7XG5cdFx0XHRcdGlmIChuZXdWYWwpIHtcblx0XHRcdFx0XHR0aGlzLm9wZW4oKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIOmBv+WFjeS4iuadpeWwseaJp+ihjCBjbG9zZSzlr7zoh7TliqjnlLvplJnkubFcblx0XHRcdFx0XHRpZiAodGhpcy5pc1Nob3cpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2UoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGltbWVkaWF0ZTogdHJ1ZVxuXHRcdH1cblx0fSxcblx0Y29tcHV0ZWQ6IHtcblx0XHQvLyDnlJ/miJDmoLflvI/mlbDmja5cblx0XHRzdHlsZXNPYmplY3QoKSB7XG5cdFx0XHRsZXQgc3R5bGVzID0ge1xuXHRcdFx0XHQuLi50aGlzLnN0eWxlcyxcblx0XHRcdFx0J3RyYW5zaXRpb24tZHVyYXRpb24nOiB0aGlzLmR1cmF0aW9uIC8gMTAwMCArICdzJ1xuXHRcdFx0fVxuXHRcdFx0bGV0IHRyYW5zZm9ybSA9ICcnXG5cdFx0XHRmb3IgKGxldCBpIGluIHN0eWxlcykge1xuXHRcdFx0XHRsZXQgbGluZSA9IHRoaXMudG9MaW5lKGkpXG5cdFx0XHRcdHRyYW5zZm9ybSArPSBsaW5lICsgJzonICsgc3R5bGVzW2ldICsgJzsnXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJhbnNmb3JtXG5cdFx0fSxcblx0XHQvLyDliJ3lp4vljJbliqjnlLvmnaHku7Zcblx0XHR0cmFuc2Zvcm1TdHlsZXMoKSB7XG5cdFx0XHRyZXR1cm4gJ3RyYW5zZm9ybTonICsgdGhpcy50cmFuc2Zvcm0gKyAnOycgKyAnb3BhY2l0eTonICsgdGhpcy5vcGFjaXR5ICsgJzsnICsgdGhpcy5zdHlsZXNPYmplY3Rcblx0XHR9XG5cdH0sXG5cdGNyZWF0ZWQoKSB7XG5cdFx0Ly8g5Yqo55S76buY6K6k6YWN572uXG5cdFx0dGhpcy5jb25maWcgPSB7XG5cdFx0XHRkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcblx0XHRcdHRpbWluZ0Z1bmN0aW9uOiAnZWFzZScsXG5cdFx0XHR0cmFuc2Zvcm1PcmlnaW46ICc1MCUgNTAlJyxcblx0XHRcdGRlbGF5OiAwXG5cdFx0fVxuXHRcdHRoaXMuZHVyYXRpb25UaW1lID0gdGhpcy5kdXJhdGlvblxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0LyoqXG5cdFx0ICogIHJlZiDop6blj5Eg5Yid5aeL5YyW5Yqo55S7XG5cdFx0ICovXG5cdFx0aW5pdChvYmogPSB7fSkge1xuXHRcdFx0aWYgKG9iai5kdXJhdGlvbikge1xuXHRcdFx0XHR0aGlzLmR1cmF0aW9uVGltZSA9IG9iai5kdXJhdGlvblxuXHRcdFx0fVxuXHRcdFx0dGhpcy5hbmltYXRpb24gPSBjcmVhdGVBbmltYXRpb24oT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZywgb2JqKSx0aGlzKVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICog54K55Ye757uE5Lu26Kem5Y+R5Zue6LCDXG5cdFx0ICovXG5cdFx0b25DbGljaygpIHtcblx0XHRcdHRoaXMuJGVtaXQoJ2NsaWNrJywge1xuXHRcdFx0XHRkZXRhaWw6IHRoaXMuaXNTaG93XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogcmVmIOinpuWPkSDliqjnlLvliIbnu4Rcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gb2JqXG5cdFx0ICovXG5cdFx0c3RlcChvYmosIGNvbmZpZyA9IHt9KSB7XG5cdFx0XHRpZiAoIXRoaXMuYW5pbWF0aW9uKSByZXR1cm5cblx0XHRcdGZvciAobGV0IGkgaW4gb2JqKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYodHlwZW9mIG9ialtpXSA9PT0gJ29iamVjdCcpe1xuXHRcdFx0XHRcdFx0dGhpcy5hbmltYXRpb25baV0oLi4ub2JqW2ldKVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dGhpcy5hbmltYXRpb25baV0ob2JqW2ldKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoYOaWueazlSAke2l9IOS4jeWtmOWcqGApXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuYW5pbWF0aW9uLnN0ZXAoY29uZmlnKVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqICByZWYg6Kem5Y+RIOaJp+ihjOWKqOeUu1xuXHRcdCAqL1xuXHRcdHJ1bihmbikge1xuXHRcdFx0aWYgKCF0aGlzLmFuaW1hdGlvbikgcmV0dXJuXG5cdFx0XHR0aGlzLmFuaW1hdGlvbi5ydW4oZm4pXG5cdFx0fSxcblx0XHQvLyDlvIDlp4vov4fluqbliqjnlLtcblx0XHRvcGVuKCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpXG5cdFx0XHR0aGlzLnRyYW5zZm9ybSA9ICcnXG5cdFx0XHR0aGlzLmlzU2hvdyA9IHRydWVcblx0XHRcdGxldCB7IG9wYWNpdHksIHRyYW5zZm9ybSB9ID0gdGhpcy5zdHlsZUluaXQoZmFsc2UpXG5cdFx0XHRpZiAodHlwZW9mIG9wYWNpdHkgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHRoaXMub3BhY2l0eSA9IG9wYWNpdHlcblx0XHRcdH1cblx0XHRcdHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5cdFx0XHQvLyDnoa7kv53liqjmgIHmoLflvI/lt7Lnu4/nlJ/mlYjlkI7vvIzmiafooYzliqjnlLvvvIzlpoLmnpzkuI3liqAgbmV4dFRpY2sg77yM5Lya5a+86Ie0IHd4IOWKqOeUu+aJp+ihjOW8guW4uFxuXHRcdFx0dGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuXHRcdFx0XHQvLyBUT0RPIOWumuaXtuWZqOS/neivgeWKqOeUu+WujOWFqOaJp+ihjO+8jOebruWJjeacieS6m+mXrumimO+8jOWQjumdouS8muWPlua2iOWumuaXtuWZqFxuXHRcdFx0XHR0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hbmltYXRpb24gPSBjcmVhdGVBbmltYXRpb24odGhpcy5jb25maWcsIHRoaXMpXG5cdFx0XHRcdFx0dGhpcy50cmFuZnJvbUluaXQoZmFsc2UpLnN0ZXAoKVxuXHRcdFx0XHRcdHRoaXMuYW5pbWF0aW9uLnJ1bigpXG5cdFx0XHRcdFx0dGhpcy4kZW1pdCgnY2hhbmdlJywge1xuXHRcdFx0XHRcdFx0ZGV0YWlsOiB0aGlzLmlzU2hvd1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sIDIwKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdC8vIOWFs+mXrei/h+W6puWKqOeUu1xuXHRcdGNsb3NlKHR5cGUpIHtcblx0XHRcdGlmICghdGhpcy5hbmltYXRpb24pIHJldHVyblxuXHRcdFx0dGhpcy50cmFuZnJvbUluaXQodHJ1ZSlcblx0XHRcdFx0LnN0ZXAoKVxuXHRcdFx0XHQucnVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmlzU2hvdyA9IGZhbHNlXG5cdFx0XHRcdFx0dGhpcy5hbmltYXRpb25EYXRhID0gbnVsbFxuXHRcdFx0XHRcdHRoaXMuYW5pbWF0aW9uID0gbnVsbFxuXHRcdFx0XHRcdGxldCB7IG9wYWNpdHksIHRyYW5zZm9ybSB9ID0gdGhpcy5zdHlsZUluaXQoZmFsc2UpXG5cdFx0XHRcdFx0dGhpcy5vcGFjaXR5ID0gb3BhY2l0eSB8fCAxXG5cdFx0XHRcdFx0dGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cblx0XHRcdFx0XHR0aGlzLiRlbWl0KCdjaGFuZ2UnLCB7XG5cdFx0XHRcdFx0XHRkZXRhaWw6IHRoaXMuaXNTaG93XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSlcblx0XHR9LFxuXHRcdC8vIOWkhOeQhuWKqOeUu+W8gOWni+WJjeeahOm7mOiupOagt+W8j1xuXHRcdHN0eWxlSW5pdCh0eXBlKSB7XG5cdFx0XHRsZXQgc3R5bGVzID0ge1xuXHRcdFx0XHR0cmFuc2Zvcm06ICcnXG5cdFx0XHR9XG5cdFx0XHRsZXQgYnVpbGRTdHlsZSA9ICh0eXBlLCBtb2RlKSA9PiB7XG5cdFx0XHRcdGlmIChtb2RlID09PSAnZmFkZScpIHtcblx0XHRcdFx0XHRzdHlsZXMub3BhY2l0eSA9IHRoaXMuYW5pbWF0aW9uVHlwZSh0eXBlKVttb2RlXVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlcy50cmFuc2Zvcm0gKz0gdGhpcy5hbmltYXRpb25UeXBlKHR5cGUpW21vZGVdICsgJyAnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhpcy5tb2RlQ2xhc3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGJ1aWxkU3R5bGUodHlwZSwgdGhpcy5tb2RlQ2xhc3MpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1vZGVDbGFzcy5mb3JFYWNoKG1vZGUgPT4ge1xuXHRcdFx0XHRcdGJ1aWxkU3R5bGUodHlwZSwgbW9kZSlcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdHJldHVybiBzdHlsZXNcblx0XHR9LFxuXHRcdC8vIOWkhOeQhuWGhee9rue7hOWQiOWKqOeUu1xuXHRcdHRyYW5mcm9tSW5pdCh0eXBlKSB7XG5cdFx0XHRsZXQgYnVpbGRUcmFuZnJvbSA9ICh0eXBlLCBtb2RlKSA9PiB7XG5cdFx0XHRcdGxldCBhbmlOdW0gPSBudWxsXG5cdFx0XHRcdGlmIChtb2RlID09PSAnZmFkZScpIHtcblx0XHRcdFx0XHRhbmlOdW0gPSB0eXBlID8gMCA6IDFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhbmlOdW0gPSB0eXBlID8gJy0xMDAlJyA6ICcwJ1xuXHRcdFx0XHRcdGlmIChtb2RlID09PSAnem9vbS1pbicpIHtcblx0XHRcdFx0XHRcdGFuaU51bSA9IHR5cGUgPyAwLjggOiAxXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChtb2RlID09PSAnem9vbS1vdXQnKSB7XG5cdFx0XHRcdFx0XHRhbmlOdW0gPSB0eXBlID8gMS4yIDogMVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAobW9kZSA9PT0gJ3NsaWRlLXJpZ2h0Jykge1xuXHRcdFx0XHRcdFx0YW5pTnVtID0gdHlwZSA/ICcxMDAlJyA6ICcwJ1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAobW9kZSA9PT0gJ3NsaWRlLWJvdHRvbScpIHtcblx0XHRcdFx0XHRcdGFuaU51bSA9IHR5cGUgPyAnMTAwJScgOiAnMCdcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5hbmltYXRpb25bdGhpcy5hbmltYXRpb25Nb2RlKClbbW9kZV1dKGFuaU51bSlcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgdGhpcy5tb2RlQ2xhc3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGJ1aWxkVHJhbmZyb20odHlwZSwgdGhpcy5tb2RlQ2xhc3MpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1vZGVDbGFzcy5mb3JFYWNoKG1vZGUgPT4ge1xuXHRcdFx0XHRcdGJ1aWxkVHJhbmZyb20odHlwZSwgbW9kZSlcblx0XHRcdFx0fSlcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuYW5pbWF0aW9uXG5cdFx0fSxcblx0XHRhbmltYXRpb25UeXBlKHR5cGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZhZGU6IHR5cGUgPyAxIDogMCxcblx0XHRcdFx0J3NsaWRlLXRvcCc6IGB0cmFuc2xhdGVZKCR7dHlwZSA/ICcwJyA6ICctMTAwJSd9KWAsXG5cdFx0XHRcdCdzbGlkZS1yaWdodCc6IGB0cmFuc2xhdGVYKCR7dHlwZSA/ICcwJyA6ICcxMDAlJ30pYCxcblx0XHRcdFx0J3NsaWRlLWJvdHRvbSc6IGB0cmFuc2xhdGVZKCR7dHlwZSA/ICcwJyA6ICcxMDAlJ30pYCxcblx0XHRcdFx0J3NsaWRlLWxlZnQnOiBgdHJhbnNsYXRlWCgke3R5cGUgPyAnMCcgOiAnLTEwMCUnfSlgLFxuXHRcdFx0XHQnem9vbS1pbic6IGBzY2FsZVgoJHt0eXBlID8gMSA6IDAuOH0pIHNjYWxlWSgke3R5cGUgPyAxIDogMC44fSlgLFxuXHRcdFx0XHQnem9vbS1vdXQnOiBgc2NhbGVYKCR7dHlwZSA/IDEgOiAxLjJ9KSBzY2FsZVkoJHt0eXBlID8gMSA6IDEuMn0pYFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8g5YaF572u5Yqo55S757G75Z6L5LiO5a6e6ZmF5Yqo55S75a+55bqU5a2X5YW4XG5cdFx0YW5pbWF0aW9uTW9kZSgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZhZGU6ICdvcGFjaXR5Jyxcblx0XHRcdFx0J3NsaWRlLXRvcCc6ICd0cmFuc2xhdGVZJyxcblx0XHRcdFx0J3NsaWRlLXJpZ2h0JzogJ3RyYW5zbGF0ZVgnLFxuXHRcdFx0XHQnc2xpZGUtYm90dG9tJzogJ3RyYW5zbGF0ZVknLFxuXHRcdFx0XHQnc2xpZGUtbGVmdCc6ICd0cmFuc2xhdGVYJyxcblx0XHRcdFx0J3pvb20taW4nOiAnc2NhbGUnLFxuXHRcdFx0XHQnem9vbS1vdXQnOiAnc2NhbGUnXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyDpqbzls7DovazkuK3mqKrnur9cblx0XHR0b0xpbmUobmFtZSkge1xuXHRcdFx0cmV0dXJuIG5hbWUucmVwbGFjZSgvKFtBLVpdKS9nLCAnLSQxJykudG9Mb3dlckNhc2UoKVxuXHRcdH1cblx0fVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuXHQ8dmlldyB2LWlmPVwic2hvd1BvcHVwfHxvbmNlUmVuZGVyXCIgdi1zaG93PVwic2hvd1BvcHVwXCIgIGNsYXNzPVwidW5pLXBvcHVwXCIgOmNsYXNzPVwiW3BvcHVwc3R5bGUsIGlzRGVza3RvcCA/ICdmaXhmb3JwYy16LWluZGV4JyA6ICcnXVwiPlxuXHRcdDx2aWV3IEB0b3VjaHN0YXJ0PVwidG91Y2hzdGFydFwiPlxuXHRcdFx0PHVuaS10cmFuc2l0aW9uIGtleT1cIjFcIiB2LWlmPVwibWFza1Nob3dcIiBuYW1lPVwibWFza1wiIG1vZGUtY2xhc3M9XCJmYWRlXCIgOnN0eWxlcz1cIm1hc2tDbGFzc1wiXG5cdFx0XHRcdDpkdXJhdGlvbj1cImR1cmF0aW9uXCIgOnNob3c9XCJzaG93VHJhbnNcIiBAY2xpY2s9XCJvblRhcFwiIC8+XG5cdFx0XHQ8dW5pLXRyYW5zaXRpb24ga2V5PVwiMlwiIDptb2RlLWNsYXNzPVwiYW5pXCIgbmFtZT1cImNvbnRlbnRcIiA6c3R5bGVzPVwidHJhbnNDbGFzc1wiIDpkdXJhdGlvbj1cImR1cmF0aW9uXCJcblx0XHRcdFx0OnNob3c9XCJzaG93VHJhbnNcIiBAY2xpY2s9XCJvblRhcFwiIDpvbmNlLXJlbmRlcj1cIm9uY2VSZW5kZXJcIj5cblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktcG9wdXBfX3dyYXBwZXJcIiA6c3R5bGU9XCJ7IGJhY2tncm91bmRDb2xvcjogYmcgfVwiIDpjbGFzcz1cIltwb3B1cHN0eWxlXVwiIEBjbGljaz1cImNsZWFyXCI+XG5cdFx0XHRcdFx0PHNsb3QgLz5cblx0XHRcdFx0PC92aWV3PlxuXHRcdFx0PC91bmktdHJhbnNpdGlvbj5cblx0XHQ8L3ZpZXc+XG5cdFx0PCEtLSAjaWZkZWYgSDUgLS0+XG5cdFx0PGtleXByZXNzIHYtaWY9XCJtYXNrU2hvd1wiIEBlc2M9XCJvblRhcFwiIC8+XG5cdFx0PCEtLSAjZW5kaWYgLS0+XG5cdDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cdC8vICNpZmRlZiBINVxuXHRpbXBvcnQga2V5cHJlc3MgZnJvbSAnLi9rZXlwcmVzcy5qcydcblx0Ly8gI2VuZGlmXG5cblx0LyoqXG5cdCAqIFBvcFVwIOW8ueWHuuWxglxuXHQgKiBAZGVzY3JpcHRpb24g5by55Ye65bGC57uE5Lu277yM5Li65LqG6Kej5Yaz6YGu572p5by55bGC55qE6Zeu6aKYXG5cdCAqIEB0dXRvcmlhbCBodHRwczovL2V4dC5kY2xvdWQubmV0LmNuL3BsdWdpbj9pZD0zMjlcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHR5cGUgPSBbdG9wfGNlbnRlcnxib3R0b218bGVmdHxyaWdodHxtZXNzYWdlfGRpYWxvZ3xzaGFyZV0g5by55Ye65pa55byPXG5cdCAqIFx0QHZhbHVlIHRvcCDpobbpg6jlvLnlh7pcblx0ICogXHRAdmFsdWUgY2VudGVyIOS4remXtOW8ueWHulxuXHQgKiBcdEB2YWx1ZSBib3R0b20g5bqV6YOo5by55Ye6XG5cdCAqIFx0QHZhbHVlIGxlZnRcdFx05bem5L6n5by55Ye6XG5cdCAqIFx0QHZhbHVlIHJpZ2h0ICDlj7PkvqflvLnlh7pcblx0ICogXHRAdmFsdWUgbWVzc2FnZSDmtojmga/mj5DnpLpcblx0ICogXHRAdmFsdWUgZGlhbG9nIOWvueivneahhlxuXHQgKiBcdEB2YWx1ZSBzaGFyZSDlupXpg6jliIbkuqvnpLrkvotcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBhbmltYXRpb24gPSBbdHJ1ZXxmYWxzZV0g5piv5ZCm5byA5ZCv5Yqo55S7XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gbWFza0NsaWNrID0gW3RydWV8ZmFsc2VdIOiSmeeJiOeCueWHu+aYr+WQpuWFs+mXreW8ueeqlyjlup/lvIMpXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gaXNNYXNrQ2xpY2sgPSBbdHJ1ZXxmYWxzZV0g6JKZ54mI54K55Ye75piv5ZCm5YWz6Zet5by556qXXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSAgYmFja2dyb3VuZENvbG9yIOS4u+eql+WPo+iDjOaZr+iJslxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gIG1hc2tCYWNrZ3JvdW5kQ29sb3Ig6JKZ54mI6aKc6ImyXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2FmZUFyZWFcdFx0ICAg5piv5ZCm6YCC6YWN5bqV6YOo5a6J5YWo5Yy6XG5cdCAqIEBldmVudCB7RnVuY3Rpb259IGNoYW5nZSDmiZPlvIDlhbPpl63lvLnnqpfop6blj5HvvIxlPXtzaG93OiBmYWxzZX1cblx0ICogQGV2ZW50IHtGdW5jdGlvbn0gbWFza0NsaWNrIOeCueWHu+mBrue9qeinpuWPkVxuXHQgKi9cblxuXHRleHBvcnQgZGVmYXVsdCB7XG5cdFx0bmFtZTogJ3VuaVBvcHVwJyxcblx0XHRjb21wb25lbnRzOiB7XG5cdFx0XHQvLyAjaWZkZWYgSDVcblx0XHRcdGtleXByZXNzXG5cdFx0XHQvLyAjZW5kaWZcblx0XHR9LFxuXHRcdGVtaXRzOiBbJ2NoYW5nZScsICdtYXNrQ2xpY2snXSxcblx0XHRwcm9wczoge1xuXHRcdFx0Ly8g5byA5ZCv5Yqo55S7XG5cdFx0XHRhbmltYXRpb246IHtcblx0XHRcdFx0dHlwZTogQm9vbGVhbixcblx0XHRcdFx0ZGVmYXVsdDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC8vIOW8ueWHuuWxguexu+Wei++8jOWPr+mAieWAvO+8jHRvcDog6aG26YOo5by55Ye65bGC77ybYm90dG9t77ya5bqV6YOo5by55Ye65bGC77ybY2VudGVy77ya5YWo5bGP5by55Ye65bGCXG5cdFx0XHQvLyBtZXNzYWdlOiDmtojmga/mj5DnpLogOyBkaWFsb2cgOiDlr7nor53moYZcblx0XHRcdHR5cGU6IHtcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxuXHRcdFx0XHRkZWZhdWx0OiAnY2VudGVyJ1xuXHRcdFx0fSxcblx0XHRcdC8vIG1hc2tDbGlja1xuXHRcdFx0aXNNYXNrQ2xpY2s6IHtcblx0XHRcdFx0dHlwZTogQm9vbGVhbixcblx0XHRcdFx0ZGVmYXVsdDogbnVsbFxuXHRcdFx0fSxcblx0XHRcdC8vIFRPRE8gMiDkuKrniYjmnKzlkI7lup/lvIPlsZ7mgKcg77yM5L2/55SoIGlzTWFza0NsaWNrXG5cdFx0XHRtYXNrQ2xpY2s6IHtcblx0XHRcdFx0dHlwZTogQm9vbGVhbixcblx0XHRcdFx0ZGVmYXVsdDogbnVsbFxuXHRcdFx0fSxcblx0XHRcdGJhY2tncm91bmRDb2xvcjoge1xuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXG5cdFx0XHRcdGRlZmF1bHQ6ICdub25lJ1xuXHRcdFx0fSxcblx0XHRcdHNhZmVBcmVhOiB7XG5cdFx0XHRcdHR5cGU6IEJvb2xlYW4sXG5cdFx0XHRcdGRlZmF1bHQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRtYXNrQmFja2dyb3VuZENvbG9yOiB7XG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcblx0XHRcdFx0ZGVmYXVsdDogJ3JnYmEoMCwgMCwgMCwgMC40KSdcblx0XHRcdH0sXG5cdFx0XHQvLyDmjIflrprkvb/nlKh2LXNob3fmjIfku6TvvIzkuI3ph43mlrDmuLLmn5NQb3Dnu4Tku7Zcblx0XHRcdG9uY2VSZW5kZXI6e1xuXHRcdFx0XHR0eXBlOkJvb2xlYW4sXG5cdFx0XHRcdGRlZmF1bHQ6ZmFsc2Vcblx0XHRcdH0sXG5cdFx0fSxcblxuXHRcdHdhdGNoOiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIOebkeWQrHR5cGXnsbvlnotcblx0XHRcdCAqL1xuXHRcdFx0dHlwZToge1xuXHRcdFx0XHRoYW5kbGVyOiBmdW5jdGlvbih0eXBlKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmNvbmZpZ1t0eXBlXSkgcmV0dXJuXG5cdFx0XHRcdFx0dGhpc1t0aGlzLmNvbmZpZ1t0eXBlXV0odHJ1ZSlcblx0XHRcdFx0fSxcblx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0aXNEZXNrdG9wOiB7XG5cdFx0XHRcdGhhbmRsZXI6IGZ1bmN0aW9uKG5ld1ZhbCkge1xuXHRcdFx0XHRcdGlmICghdGhpcy5jb25maWdbbmV3VmFsXSkgcmV0dXJuXG5cdFx0XHRcdFx0dGhpc1t0aGlzLmNvbmZpZ1t0aGlzLnR5cGVdXSh0cnVlKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpbW1lZGlhdGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvKipcblx0XHRcdCAqIOebkeWQrOmBrue9qeaYr+WQpuWPr+eCueWHu1xuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IHZhbFxuXHRcdFx0ICovXG5cdFx0XHRtYXNrQ2xpY2s6IHtcblx0XHRcdFx0aGFuZGxlcjogZnVuY3Rpb24odmFsKSB7XG5cdFx0XHRcdFx0dGhpcy5ta2NsaWNrID0gdmFsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGltbWVkaWF0ZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGlzTWFza0NsaWNrOiB7XG5cdFx0XHRcdGhhbmRsZXI6IGZ1bmN0aW9uKHZhbCkge1xuXHRcdFx0XHRcdHRoaXMubWtjbGljayA9IHZhbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpbW1lZGlhdGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvLyBINSDkuIvnpoHmraLlupXpg6jmu5rliqhcblx0XHRcdHNob3dQb3B1cChzaG93KSB7XG5cdFx0XHRcdC8vICNpZmRlZiBINVxuXHRcdFx0XHQvLyBmaXggYnkgbWVoYW90aWFuIOWkhOeQhiBoNSDmu5rliqjnqb/pgI/nmoTpl67pophcblx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9IHNob3cgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJ1xuXHRcdFx0XHQvLyAjZW5kaWZcblx0XHRcdH1cblx0XHR9LFxuXHRcdGRhdGEoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkdXJhdGlvbjogMzAwLFxuXHRcdFx0XHRhbmk6IFtdLFxuXHRcdFx0XHRzaG93UG9wdXA6IGZhbHNlLFxuXHRcdFx0XHRzaG93VHJhbnM6IGZhbHNlLFxuXHRcdFx0XHRwb3B1cFdpZHRoOiAwLFxuXHRcdFx0XHRwb3B1cEhlaWdodDogMCxcblx0XHRcdFx0Y29uZmlnOiB7XG5cdFx0XHRcdFx0dG9wOiAndG9wJyxcblx0XHRcdFx0XHRib3R0b206ICdib3R0b20nLFxuXHRcdFx0XHRcdGNlbnRlcjogJ2NlbnRlcicsXG5cdFx0XHRcdFx0bGVmdDogJ2xlZnQnLFxuXHRcdFx0XHRcdHJpZ2h0OiAncmlnaHQnLFxuXHRcdFx0XHRcdG1lc3NhZ2U6ICd0b3AnLFxuXHRcdFx0XHRcdGRpYWxvZzogJ2NlbnRlcicsXG5cdFx0XHRcdFx0c2hhcmU6ICdib3R0b20nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1hc2tDbGFzczoge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiAnZml4ZWQnLFxuXHRcdFx0XHRcdGJvdHRvbTogMCxcblx0XHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0XHRyaWdodDogMCxcblx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNCknXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRyYW5zQ2xhc3M6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogJ2ZpeGVkJyxcblx0XHRcdFx0XHRsZWZ0OiAwLFxuXHRcdFx0XHRcdHJpZ2h0OiAwXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1hc2tTaG93OiB0cnVlLFxuXHRcdFx0XHRta2NsaWNrOiB0cnVlLFxuXHRcdFx0XHRwb3B1cHN0eWxlOiB0aGlzLmlzRGVza3RvcCA/ICdmaXhmb3JwYy10b3AnIDogJ3RvcCdcblx0XHRcdH1cblx0XHR9LFxuXHRcdGNvbXB1dGVkOiB7XG5cdFx0XHRpc0Rlc2t0b3AoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnBvcHVwV2lkdGggPj0gNTAwICYmIHRoaXMucG9wdXBIZWlnaHQgPj0gNTAwXG5cdFx0XHR9LFxuXHRcdFx0YmcoKSB7XG5cdFx0XHRcdGlmICh0aGlzLmJhY2tncm91bmRDb2xvciA9PT0gJycgfHwgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPT09ICdub25lJykge1xuXHRcdFx0XHRcdHJldHVybiAndHJhbnNwYXJlbnQnXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXMuYmFja2dyb3VuZENvbG9yXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtb3VudGVkKCkge1xuXHRcdFx0Y29uc3QgZml4U2l6ZSA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdHdpbmRvd1dpZHRoLFxuXHRcdFx0XHRcdHdpbmRvd0hlaWdodCxcblx0XHRcdFx0XHR3aW5kb3dUb3AsXG5cdFx0XHRcdFx0c2FmZUFyZWEsXG5cdFx0XHRcdFx0c2NyZWVuSGVpZ2h0LFxuXHRcdFx0XHRcdHNhZmVBcmVhSW5zZXRzXG5cdFx0XHRcdH0gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKVxuXHRcdFx0XHR0aGlzLnBvcHVwV2lkdGggPSB3aW5kb3dXaWR0aFxuXHRcdFx0XHR0aGlzLnBvcHVwSGVpZ2h0ID0gd2luZG93SGVpZ2h0ICsgKHdpbmRvd1RvcCB8fCAwKVxuXHRcdFx0XHQvLyBUT0RPIGZpeCBieSBtZWhhb3RpYW4g5piv5ZCm6YCC6YWN5bqV6YOo5a6J5YWo5Yy6ICznm67liY3lvq7kv6Fpb3Mg44CB5ZKMIGFwcCBpb3Mg6K6h566X5pyJ5beu5byC77yM6ZyA6KaB5qGG5p625L+u5aSNXG5cdFx0XHRcdGlmIChzYWZlQXJlYSAmJiB0aGlzLnNhZmVBcmVhKSB7XG5cdFx0XHRcdFx0Ly8gI2lmZGVmIE1QLVdFSVhJTlxuXHRcdFx0XHRcdHRoaXMuc2FmZUFyZWFJbnNldHMgPSBzY3JlZW5IZWlnaHQgLSBzYWZlQXJlYS5ib3R0b21cblx0XHRcdFx0XHQvLyAjZW5kaWZcblx0XHRcdFx0XHQvLyAjaWZuZGVmIE1QLVdFSVhJTlxuXHRcdFx0XHRcdHRoaXMuc2FmZUFyZWFJbnNldHMgPSBzYWZlQXJlYUluc2V0cy5ib3R0b21cblx0XHRcdFx0XHQvLyAjZW5kaWZcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnNhZmVBcmVhSW5zZXRzID0gMFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmaXhTaXplKClcblx0XHRcdC8vICNpZmRlZiBINVxuXHRcdFx0Ly8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZpeFNpemUpXG5cdFx0XHQvLyB0aGlzLiRvbmNlKCdob29rOmJlZm9yZURlc3Ryb3knLCAoKSA9PiB7XG5cdFx0XHQvLyBcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmaXhTaXplKVxuXHRcdFx0Ly8gfSlcblx0XHRcdC8vICNlbmRpZlxuXHRcdH0sXG5cdFx0Ly8gI2lmbmRlZiBWVUUzXG5cdFx0Ly8gVE9ETyB2dWUyXG5cdFx0ZGVzdHJveWVkKCkge1xuXHRcdFx0dGhpcy5zZXRINVZpc2libGUoKVxuXHRcdH0sXG5cdFx0Ly8gI2VuZGlmXG5cdFx0Ly8gI2lmZGVmIFZVRTNcblx0XHQvLyBUT0RPIHZ1ZTNcblx0XHR1bm1vdW50ZWQoKSB7XG5cdFx0XHR0aGlzLnNldEg1VmlzaWJsZSgpXG5cdFx0fSxcblx0XHQvLyAjZW5kaWZcblx0XHRjcmVhdGVkKCkge1xuXHRcdFx0Ly8gdGhpcy5ta2NsaWNrID0gIHRoaXMuaXNNYXNrQ2xpY2sgfHwgdGhpcy5tYXNrQ2xpY2tcblx0XHRcdGlmICh0aGlzLmlzTWFza0NsaWNrID09PSBudWxsICYmIHRoaXMubWFza0NsaWNrID09PSBudWxsKSB7XG5cdFx0XHRcdHRoaXMubWtjbGljayA9IHRydWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMubWtjbGljayA9IHRoaXMuaXNNYXNrQ2xpY2sgIT09IG51bGwgPyB0aGlzLmlzTWFza0NsaWNrIDogdGhpcy5tYXNrQ2xpY2tcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLmFuaW1hdGlvbikge1xuXHRcdFx0XHR0aGlzLmR1cmF0aW9uID0gMzAwXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmR1cmF0aW9uID0gMFxuXHRcdFx0fVxuXHRcdFx0Ly8gVE9ETyDlpITnkIYgbWVzc2FnZSDnu4Tku7bnlJ/lkb3lkajmnJ/lvILluLjnmoTpl67pophcblx0XHRcdHRoaXMubWVzc2FnZUNoaWxkID0gbnVsbFxuXHRcdFx0Ly8gVE9ETyDop6PlhrPlpLTmnaHlhpLms6HnmoTpl67pophcblx0XHRcdHRoaXMuY2xlYXJQcm9wYWdhdGlvbiA9IGZhbHNlXG5cdFx0XHR0aGlzLm1hc2tDbGFzcy5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLm1hc2tCYWNrZ3JvdW5kQ29sb3Jcblx0XHR9LFxuXHRcdG1ldGhvZHM6IHtcblx0XHRcdHNldEg1VmlzaWJsZSgpIHtcblx0XHRcdFx0Ly8gI2lmZGVmIEg1XG5cdFx0XHRcdC8vIGZpeCBieSBtZWhhb3RpYW4g5aSE55CGIGg1IOa7muWKqOepv+mAj+eahOmXrumimFxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnXG5cdFx0XHRcdC8vICNlbmRpZlxuXHRcdFx0fSxcblx0XHRcdC8qKlxuXHRcdFx0ICog5YWs55So5pa55rOV77yM5LiN5pi+56S66YGu572p5bGCXG5cdFx0XHQgKi9cblx0XHRcdGNsb3NlTWFzaygpIHtcblx0XHRcdFx0dGhpcy5tYXNrU2hvdyA9IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0LyoqXG5cdFx0XHQgKiDlhaznlKjmlrnms5XvvIzpga7nvanlsYLnpoHmraLngrnlh7tcblx0XHRcdCAqL1xuXHRcdFx0ZGlzYWJsZU1hc2soKSB7XG5cdFx0XHRcdHRoaXMubWtjbGljayA9IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0Ly8gVE9ETyBudnVlIOWPlua2iOWGkuazoVxuXHRcdFx0Y2xlYXIoZSkge1xuXHRcdFx0XHQvLyAjaWZuZGVmIEFQUC1OVlVFXG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0Ly8gI2VuZGlmXG5cdFx0XHRcdHRoaXMuY2xlYXJQcm9wYWdhdGlvbiA9IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdG9wZW4oZGlyZWN0aW9uKSB7XG5cdFx0XHRcdC8vIGZpeCBieSBtZWhhb3RpYW4g5aSE55CG5b+r6YCf5omT5byA5YWz6Zet55qE5oOF5Ya1XG5cdFx0XHRcdGlmICh0aGlzLnNob3dQb3B1cCkge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKVxuXHRcdFx0XHRcdHRoaXMuc2hvd1BvcHVwID0gZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgaW5uZXJUeXBlID0gWyd0b3AnLCAnY2VudGVyJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0JywgJ21lc3NhZ2UnLCAnZGlhbG9nJywgJ3NoYXJlJ11cblx0XHRcdFx0aWYgKCEoZGlyZWN0aW9uICYmIGlubmVyVHlwZS5pbmRleE9mKGRpcmVjdGlvbikgIT09IC0xKSkge1xuXHRcdFx0XHRcdGRpcmVjdGlvbiA9IHRoaXMudHlwZVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghdGhpcy5jb25maWdbZGlyZWN0aW9uXSkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ+e8uuWwkeexu+Wei++8micsIGRpcmVjdGlvbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzW3RoaXMuY29uZmlnW2RpcmVjdGlvbl1dKClcblx0XHRcdFx0dGhpcy4kZW1pdCgnY2hhbmdlJywge1xuXHRcdFx0XHRcdHNob3c6IHRydWUsXG5cdFx0XHRcdFx0dHlwZTogZGlyZWN0aW9uXG5cdFx0XHRcdH0pXG5cdFx0XHR9LFxuXHRcdFx0Y2xvc2UodHlwZSkge1xuXHRcdFx0XHR0aGlzLnNob3dUcmFucyA9IGZhbHNlXG5cdFx0XHRcdHRoaXMuJGVtaXQoJ2NoYW5nZScsIHtcblx0XHRcdFx0XHRzaG93OiBmYWxzZSxcblx0XHRcdFx0XHR0eXBlOiB0aGlzLnR5cGVcblx0XHRcdFx0fSlcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpXG5cdFx0XHRcdC8vIC8vIOiHquWumuS5ieWFs+mXreS6i+S7tlxuXHRcdFx0XHQvLyB0aGlzLmN1c3RvbU9wZW4gJiYgdGhpcy5jdXN0b21DbG9zZSgpXG5cdFx0XHRcdHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG5cdFx0XHRcdH0sIDMwMClcblx0XHRcdH0sXG5cdFx0XHQvLyBUT0RPIOWkhOeQhuWGkuazoeS6i+S7tu+8jOWktOadoeeahOWGkuazoeS6i+S7tuaciemXrumimCDvvIzlhYjov5nmoLflhbzlrrlcblx0XHRcdHRvdWNoc3RhcnQoKSB7XG5cdFx0XHRcdHRoaXMuY2xlYXJQcm9wYWdhdGlvbiA9IGZhbHNlXG5cdFx0XHR9LFxuXG5cdFx0XHRvblRhcCgpIHtcblx0XHRcdFx0aWYgKHRoaXMuY2xlYXJQcm9wYWdhdGlvbikge1xuXHRcdFx0XHRcdC8vIGZpeCBieSBtZWhhb3RpYW4g5YW85a65IG52dWVcblx0XHRcdFx0XHR0aGlzLmNsZWFyUHJvcGFnYXRpb24gPSBmYWxzZVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuJGVtaXQoJ21hc2tDbGljaycpXG5cdFx0XHRcdGlmICghdGhpcy5ta2NsaWNrKSByZXR1cm5cblx0XHRcdFx0dGhpcy5jbG9zZSgpXG5cdFx0XHR9LFxuXHRcdFx0LyoqXG5cdFx0XHQgKiDpobbpg6jlvLnlh7rmoLflvI/lpITnkIZcblx0XHRcdCAqL1xuXHRcdFx0dG9wKHR5cGUpIHtcblx0XHRcdFx0dGhpcy5wb3B1cHN0eWxlID0gdGhpcy5pc0Rlc2t0b3AgPyAnZml4Zm9ycGMtdG9wJyA6ICd0b3AnXG5cdFx0XHRcdHRoaXMuYW5pID0gWydzbGlkZS10b3AnXVxuXHRcdFx0XHR0aGlzLnRyYW5zQ2xhc3MgPSB7XG5cdFx0XHRcdFx0cG9zaXRpb246ICdmaXhlZCcsXG5cdFx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0XHRyaWdodDogMCxcblx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmdcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUT0RPIOWFvOWuuSB0eXBlIOWxnuaApyDvvIzlkI7nu63kvJrlup/lvINcblx0XHRcdFx0aWYgKHR5cGUpIHJldHVyblxuXHRcdFx0XHR0aGlzLnNob3dQb3B1cCA9IHRydWVcblx0XHRcdFx0dGhpcy5zaG93VHJhbnMgPSB0cnVlXG5cdFx0XHRcdHRoaXMuJG5leHRUaWNrKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5tZXNzYWdlQ2hpbGQgJiYgdGhpcy50eXBlID09PSAnbWVzc2FnZScpIHtcblx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUNoaWxkLnRpbWVyQ2xvc2UoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0sXG5cdFx0XHQvKipcblx0XHRcdCAqIOW6lemDqOW8ueWHuuagt+W8j+WkhOeQhlxuXHRcdFx0ICovXG5cdFx0XHRib3R0b20odHlwZSkge1xuXHRcdFx0XHR0aGlzLnBvcHVwc3R5bGUgPSAnYm90dG9tJ1xuXHRcdFx0XHR0aGlzLmFuaSA9IFsnc2xpZGUtYm90dG9tJ11cblx0XHRcdFx0dGhpcy50cmFuc0NsYXNzID0ge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiAnZml4ZWQnLFxuXHRcdFx0XHRcdGxlZnQ6IDAsXG5cdFx0XHRcdFx0cmlnaHQ6IDAsXG5cdFx0XHRcdFx0Ym90dG9tOiAwLFxuXHRcdFx0XHRcdHBhZGRpbmdCb3R0b206IHRoaXMuc2FmZUFyZWFJbnNldHMgKyAncHgnLFxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogdGhpcy5iZ1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFRPRE8g5YW85a65IHR5cGUg5bGe5oCnIO+8jOWQjue7reS8muW6n+W8g1xuXHRcdFx0XHRpZiAodHlwZSkgcmV0dXJuXG5cdFx0XHRcdHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuXHRcdFx0XHR0aGlzLnNob3dUcmFucyA9IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvKipcblx0XHRcdCAqIOS4remXtOW8ueWHuuagt+W8j+WkhOeQhlxuXHRcdFx0ICovXG5cdFx0XHRjZW50ZXIodHlwZSkge1xuXHRcdFx0XHR0aGlzLnBvcHVwc3R5bGUgPSAnY2VudGVyJ1xuXHRcdFx0XHR0aGlzLmFuaSA9IFsnem9vbS1vdXQnLCAnZmFkZSddXG5cdFx0XHRcdHRoaXMudHJhbnNDbGFzcyA9IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogJ2ZpeGVkJyxcblx0XHRcdFx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXG5cdFx0XHRcdFx0ZGlzcGxheTogJ2ZsZXgnLFxuXHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuXHRcdFx0XHRcdC8qICNlbmRpZiAqL1xuXHRcdFx0XHRcdGJvdHRvbTogMCxcblx0XHRcdFx0XHRsZWZ0OiAwLFxuXHRcdFx0XHRcdHJpZ2h0OiAwLFxuXHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG5cdFx0XHRcdFx0YWxpZ25JdGVtczogJ2NlbnRlcidcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUT0RPIOWFvOWuuSB0eXBlIOWxnuaApyDvvIzlkI7nu63kvJrlup/lvINcblx0XHRcdFx0aWYgKHR5cGUpIHJldHVyblxuXHRcdFx0XHR0aGlzLnNob3dQb3B1cCA9IHRydWVcblx0XHRcdFx0dGhpcy5zaG93VHJhbnMgPSB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0bGVmdCh0eXBlKSB7XG5cdFx0XHRcdHRoaXMucG9wdXBzdHlsZSA9ICdsZWZ0J1xuXHRcdFx0XHR0aGlzLmFuaSA9IFsnc2xpZGUtbGVmdCddXG5cdFx0XHRcdHRoaXMudHJhbnNDbGFzcyA9IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogJ2ZpeGVkJyxcblx0XHRcdFx0XHRsZWZ0OiAwLFxuXHRcdFx0XHRcdGJvdHRvbTogMCxcblx0XHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmJnLFxuXHRcdFx0XHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cblx0XHRcdFx0XHRkaXNwbGF5OiAnZmxleCcsXG5cdFx0XHRcdFx0ZmxleERpcmVjdGlvbjogJ2NvbHVtbidcblx0XHRcdFx0XHQvKiAjZW5kaWYgKi9cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUT0RPIOWFvOWuuSB0eXBlIOWxnuaApyDvvIzlkI7nu63kvJrlup/lvINcblx0XHRcdFx0aWYgKHR5cGUpIHJldHVyblxuXHRcdFx0XHR0aGlzLnNob3dQb3B1cCA9IHRydWVcblx0XHRcdFx0dGhpcy5zaG93VHJhbnMgPSB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0cmlnaHQodHlwZSkge1xuXHRcdFx0XHR0aGlzLnBvcHVwc3R5bGUgPSAncmlnaHQnXG5cdFx0XHRcdHRoaXMuYW5pID0gWydzbGlkZS1yaWdodCddXG5cdFx0XHRcdHRoaXMudHJhbnNDbGFzcyA9IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogJ2ZpeGVkJyxcblx0XHRcdFx0XHRib3R0b206IDAsXG5cdFx0XHRcdFx0cmlnaHQ6IDAsXG5cdFx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogdGhpcy5iZyxcblx0XHRcdFx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXG5cdFx0XHRcdFx0ZGlzcGxheTogJ2ZsZXgnLFxuXHRcdFx0XHRcdGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nXG5cdFx0XHRcdFx0LyogI2VuZGlmICovXG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVE9ETyDlhbzlrrkgdHlwZSDlsZ7mgKcg77yM5ZCO57ut5Lya5bqf5byDXG5cdFx0XHRcdGlmICh0eXBlKSByZXR1cm5cblx0XHRcdFx0dGhpcy5zaG93UG9wdXAgPSB0cnVlXG5cdFx0XHRcdHRoaXMuc2hvd1RyYW5zID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuPC9zY3JpcHQ+XG48c3R5bGUgbGFuZz1cInNjc3NcIj5cblx0LnVuaS1wb3B1cCB7XG5cdFx0cG9zaXRpb246IGZpeGVkO1xuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cblx0XHR6LWluZGV4OiA5OTtcblxuXHRcdC8qICNlbmRpZiAqL1xuXHRcdCYudG9wLFxuXHRcdCYubGVmdCxcblx0XHQmLnJpZ2h0IHtcblx0XHRcdC8qICNpZmRlZiBINSAqL1xuXHRcdFx0dG9wOiB2YXIoLS13aW5kb3ctdG9wKTtcblx0XHRcdC8qICNlbmRpZiAqL1xuXHRcdFx0LyogI2lmbmRlZiBINSAqL1xuXHRcdFx0dG9wOiAwO1xuXHRcdFx0LyogI2VuZGlmICovXG5cdFx0fVxuXG5cdFx0LnVuaS1wb3B1cF9fd3JhcHBlciB7XG5cdFx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdC8qICNlbmRpZiAqL1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0XHQvKiBpcGhvbmV4IOetieWuieWFqOWMuuiuvue9ru+8jOW6lemDqOWuieWFqOWMuumAgumFjSAqL1xuXHRcdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xuXHRcdFx0Ly8gcGFkZGluZy1ib3R0b206IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xuXHRcdFx0Ly8gcGFkZGluZy1ib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcblx0XHRcdC8qICNlbmRpZiAqL1xuXHRcdFx0Ji5sZWZ0LFxuXHRcdFx0Ji5yaWdodCB7XG5cdFx0XHRcdC8qICNpZmRlZiBINSAqL1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogdmFyKC0td2luZG93LXRvcCk7XG5cdFx0XHRcdC8qICNlbmRpZiAqL1xuXHRcdFx0XHQvKiAjaWZuZGVmIEg1ICovXG5cdFx0XHRcdHBhZGRpbmctdG9wOiAwO1xuXHRcdFx0XHQvKiAjZW5kaWYgKi9cblx0XHRcdFx0ZmxleDogMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuZml4Zm9ycGMtei1pbmRleCB7XG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xuXHRcdHotaW5kZXg6IDk5OTtcblx0XHQvKiAjZW5kaWYgKi9cblx0fVxuXG5cdC5maXhmb3JwYy10b3Age1xuXHRcdHRvcDogMDtcblx0fVxuPC9zdHlsZT5cbiIsImltcG9ydCB0eXBlIHsgR29vZHNSZXN1bHQgfSBmcm9tICdAL3R5cGVzL2dvb2RzJ1xyXG5pbXBvcnQgeyBodHRwIH0gZnJvbSAnQC91dGlscy9odHRwJ1xyXG5cclxuLyoqXHJcbiAqIOWVhuWTgeivpuaDhVxyXG4gKiBAcGFyYW0gaWQg5ZWG5ZOBaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRHb29kc0J5SWRBUEkgPSAoaWQ6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBodHRwPEdvb2RzUmVzdWx0Pih7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiAnL2dvb2RzJyxcclxuICAgIGRhdGE6IHsgaWQgfSxcclxuICB9KVxyXG59XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbi8vXHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiYWRkcmVzcy1wYW5lbFwiPlxyXG4gICAgPCEtLSDlhbPpl63mjInpkq4gLS0+XHJcbiAgICA8dGV4dCBjbGFzcz1cImNsb3NlIGljb24tY2xvc2VcIj48L3RleHQ+XHJcbiAgICA8IS0tIOagh+mimCAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwidGl0bGVcIj7phY3pgIHoh7M8L3ZpZXc+XHJcbiAgICA8IS0tIOWGheWuuSAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInVzZXJcIj7mnY7mmI4gMTM4MjQ2ODY4Njg8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJhZGRyZXNzXCI+5YyX5Lqs5biC6aG65LmJ5Yy65ZCO5rKZ5bOq5Zyw5Yy65a6J5bmz5YyX6KGXNuWPt+mZojwvdmlldz5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImljb24gaWNvbi1jaGVja2VkXCI+PC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwidXNlclwiPueOi+S4nCAxMzgyNDY4Njg2ODwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImFkZHJlc3NcIj7ljJfkuqzluILpobrkuYnljLrlkI7mspnls6rlnLDljLrlronlubPljJfooZc25Y+36ZmiPC92aWV3PlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwiaWNvbiBpY29uLXJpbmdcIj48L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyXCI+5byg5LiJIDEzODI0Njg2ODY4PC92aWV3PlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiYWRkcmVzc1wiPuWMl+S6rOW4guacnemYs+WMuuWtmeays+WuieW5s+WMl+ihlzblj7fpmaI8L3ZpZXc+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJpY29uIGljb24tcmluZ1wiPjwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24gcHJpbWFyeVwiPiDmlrDlu7rlnLDlnYAgPC92aWV3PlxyXG4gICAgICA8dmlldyB2LWlmPVwiZmFsc2VcIiBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCI+56Gu5a6aPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG4uYWRkcmVzcy1wYW5lbCB7XHJcbiAgcGFkZGluZzogMCAzMHJweDtcclxuICBib3JkZXItcmFkaXVzOiAxMHJweCAxMHJweCAwIDA7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbi50aXRsZSB7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgcGFkZGluZzogNDBycHggMDtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgZm9udC1zaXplOiAzMnJweDtcclxuICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gIGJvcmRlci1ib3R0b206IDFycHggc29saWQgI2RkZDtcclxuICBjb2xvcjogIzQ0NDtcclxufVxyXG5cclxuLmNsb3NlIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgcmlnaHQ6IDI0cnB4O1xyXG4gIHRvcDogMjRycHg7XHJcbn1cclxuXHJcbi5jb250ZW50IHtcclxuICBtaW4taGVpZ2h0OiAzMDBycHg7XHJcbiAgbWF4LWhlaWdodDogNTQwcnB4O1xyXG4gIG92ZXJmbG93OiBhdXRvO1xyXG4gIHBhZGRpbmc6IDIwcnB4O1xyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDMwcnB4IDUwcnB4IDMwcnB4IDYwcnB4O1xyXG4gICAgYmFja2dyb3VuZC1zaXplOiA0MHJweDtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNlbnRlcjtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL3BjYXBpLXhpYW90dXhpYW4tZnJvbnQtZGV2dGVzdC5pdGhlaW1hLm5ldC9taW5pYXBwL2ltYWdlcy9sb2NhdGUucG5nKTtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB9XHJcbiAgLmljb24ge1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgICBmb250LXNpemU6IDQwcnB4O1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICByaWdodDogMDtcclxuICB9XHJcbiAgLmljb24tY2hlY2tlZCB7XHJcbiAgICBjb2xvcjogIzI3YmE5YjtcclxuICB9XHJcbiAgLmljb24tcmluZyB7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuICB9XHJcbiAgLnVzZXIge1xyXG4gICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICB9XHJcbiAgLmFkZHJlc3Mge1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG4gIH1cclxufVxyXG5cclxuLmZvb3RlciB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgcGFkZGluZzogMjBycHggMCA0MHJweDtcclxuICBmb250LXNpemU6IDI4cnB4O1xyXG4gIGNvbG9yOiAjNDQ0O1xyXG5cclxuICAuYnV0dG9uIHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBoZWlnaHQ6IDcycnB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbGluZS1oZWlnaHQ6IDcycnB4O1xyXG4gICAgbWFyZ2luOiAwIDIwcnB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbiAgICBib3JkZXItcmFkaXVzOiA3MnJweDtcclxuICB9XHJcblxyXG4gIC5wcmltYXJ5IHtcclxuICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuICB9XHJcblxyXG4gIC5zZWNvbmRhcnkge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTg2ODtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuLy8g5a2Q6LCD54i2XHJcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XHJcbiAgKGV2ZW50OiAnY2xvc2UnKTogdm9pZFxyXG59PigpXHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwic2VydmljZS1wYW5lbFwiPlxyXG4gICAgPCEtLSDlhbPpl63mjInpkq4gLS0+XHJcbiAgICA8dGV4dCBjbGFzcz1cImNsb3NlIGljb24tY2xvc2VcIiBAdGFwPVwiZW1pdCgnY2xvc2UnKVwiPjwvdGV4dD5cclxuICAgIDwhLS0g5qCH6aKYIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPuacjeWKoeivtOaYjjwvdmlldz5cclxuICAgIDwhLS0g5YaF5a65IC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZHRcIj7ml6Dlv6fpgIDotKc8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJkZFwiPlxyXG4gICAgICAgICAg6Ieq5pS25Yiw5ZWG5ZOB5LmL5pel6LW3MzDlpKnlhoXvvIzlj6/lnKjnur/nlLPor7fml6Dlv6fpgIDotKfmnI3liqHvvIjpo5/lk4HnrYnnibnmrorllYblk4HpmaTlpJbvvIlcclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJkdFwiPuW/q+mAn+mAgOasvjwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImRkXCI+XHJcbiAgICAgICAgICDmlLbliLDpgIDotKfljIXoo7nlubbnoa7orqTml6Dor6/lkI7vvIzlsIblnKg0OOWwj+aXtuWGheWKnueQhumAgOasvu+8jFxyXG4gICAgICAgICAg6YCA5qy+5bCG5Y6f6Lev6L+U5Zue77yM5LiN5ZCM6ZO26KGM5aSE55CG5pe26Ze05LiN5ZCM77yM6aKE6K6hMS015Liq5bel5L2c5pel5Yiw6LSmXHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZHRcIj7mu6E4OOWFg+WFjemCrui0uTwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImRkXCI+XHJcbiAgICAgICAgICDljZXnrJTorqLljZXph5Hpop0o5LiN5ZCr6L+Q6LS5Kea7oTg45YWD5Y+v5YWN6YKu6LS577yM5LiN5ruhODjlhYPvvIwg5Y2V56yU6K6i5Y2V5pS25Y+WMTDlhYPpgq7otLlcclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5zZXJ2aWNlLXBhbmVsIHtcclxuICBwYWRkaW5nOiAwIDMwcnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4IDEwcnB4IDAgMDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxufVxyXG5cclxuLnRpdGxlIHtcclxuICBsaW5lLWhlaWdodDogMTtcclxuICBwYWRkaW5nOiA0MHJweCAwO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBmb250LXNpemU6IDMycnB4O1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZGRkO1xyXG4gIGNvbG9yOiAjNDQ0O1xyXG59XHJcblxyXG4uY2xvc2Uge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICByaWdodDogMjRycHg7XHJcbiAgdG9wOiAyNHJweDtcclxufVxyXG5cclxuLmNvbnRlbnQge1xyXG4gIHBhZGRpbmc6IDIwcnB4IDIwcnB4IDEwMHJweCAyMHJweDtcclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgbWFyZ2luLXRvcDogMjBycHg7XHJcbiAgfVxyXG5cclxuICAuZHQge1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMTBycHg7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuICAgICY6OmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICB3aWR0aDogMTBycHg7XHJcbiAgICAgIGhlaWdodDogMTBycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VhZWFlYTtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogNTAlO1xyXG4gICAgICBsZWZ0OiAtMjBycHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuZGQge1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcclxuICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuLy8g5a2Q6LCD54i2XHJcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XHJcbiAgKGV2ZW50OiAnY2xvc2UnKTogdm9pZFxyXG59PigpXHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwic2VydmljZS1wYW5lbFwiPlxyXG4gICAgPCEtLSDlhbPpl63mjInpkq4gLS0+XHJcbiAgICA8dGV4dCBjbGFzcz1cImNsb3NlIGljb24tY2xvc2VcIiBAdGFwPVwiZW1pdCgnY2xvc2UnKVwiPjwvdGV4dD5cclxuICAgIDwhLS0g5qCH6aKYIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPuacjeWKoeivtOaYjjwvdmlldz5cclxuICAgIDwhLS0g5YaF5a65IC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZHRcIj7ml6Dlv6fpgIDotKc8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJkZFwiPlxyXG4gICAgICAgICAg6Ieq5pS25Yiw5ZWG5ZOB5LmL5pel6LW3MzDlpKnlhoXvvIzlj6/lnKjnur/nlLPor7fml6Dlv6fpgIDotKfmnI3liqHvvIjpo5/lk4HnrYnnibnmrorllYblk4HpmaTlpJbvvIlcclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJkdFwiPuW/q+mAn+mAgOasvjwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImRkXCI+XHJcbiAgICAgICAgICDmlLbliLDpgIDotKfljIXoo7nlubbnoa7orqTml6Dor6/lkI7vvIzlsIblnKg0OOWwj+aXtuWGheWKnueQhumAgOasvu+8jFxyXG4gICAgICAgICAg6YCA5qy+5bCG5Y6f6Lev6L+U5Zue77yM5LiN5ZCM6ZO26KGM5aSE55CG5pe26Ze05LiN5ZCM77yM6aKE6K6hMS015Liq5bel5L2c5pel5Yiw6LSmXHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZHRcIj7mu6E4OOWFg+WFjemCrui0uTwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImRkXCI+XHJcbiAgICAgICAgICDljZXnrJTorqLljZXph5Hpop0o5LiN5ZCr6L+Q6LS5Kea7oTg45YWD5Y+v5YWN6YKu6LS577yM5LiN5ruhODjlhYPvvIwg5Y2V56yU6K6i5Y2V5pS25Y+WMTDlhYPpgq7otLlcclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLnNlcnZpY2UtcGFuZWwge1xyXG4gIHBhZGRpbmc6IDAgMzBycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogMTBycHggMTBycHggMCAwO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG59XHJcblxyXG4udGl0bGUge1xyXG4gIGxpbmUtaGVpZ2h0OiAxO1xyXG4gIHBhZGRpbmc6IDQwcnB4IDA7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGZvbnQtc2l6ZTogMzJycHg7XHJcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICBib3JkZXItYm90dG9tOiAxcnB4IHNvbGlkICNkZGQ7XHJcbiAgY29sb3I6ICM0NDQ7XHJcbn1cclxuXHJcbi5jbG9zZSB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHJpZ2h0OiAyNHJweDtcclxuICB0b3A6IDI0cnB4O1xyXG59XHJcblxyXG4uY29udGVudCB7XHJcbiAgcGFkZGluZzogMjBycHggMjBycHggMTAwcnB4IDIwcnB4O1xyXG5cclxuICAuaXRlbSB7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHJweDtcclxuICB9XHJcblxyXG4gIC5kdCB7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAxMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBjb2xvcjogIzMzMztcclxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblxyXG4gICAgJjo6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJyc7XHJcbiAgICAgIHdpZHRoOiAxMHJweDtcclxuICAgICAgaGVpZ2h0OiAxMHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFlYWVhO1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiA1MCU7XHJcbiAgICAgIGxlZnQ6IC0yMHJweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kZCB7XHJcbiAgICBsaW5lLWhlaWdodDogMS42O1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgdHlwZSB7XHJcbiAgU2t1UG9wdXBFdmVudCxcclxuICBTa3VQb3B1cEluc3RhbmNlLFxyXG4gIFNrdVBvcHVwTG9jYWxkYXRhLFxyXG59IGZyb20gJ0AvY29tcG9uZW50cy92ay1kYXRhLWdvb2RzLXNrdS1wb3B1cC92ay1kYXRhLWdvb2RzLXNrdS1wb3B1cCdcclxuaW1wb3J0IHsgcG9zdE1lbWJlckNhcnRBUEkgfSBmcm9tICdAL3NlcnZpY2VzL2NhcnQnXHJcbmltcG9ydCB7IGdldEdvb2RzQnlJZEFQSSB9IGZyb20gJ0Avc2VydmljZXMvZ29vZHMnXHJcbmltcG9ydCB0eXBlIHsgR29vZHNSZXN1bHQgfSBmcm9tICdAL3R5cGVzL2dvb2RzJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IEFkZHJlc3NQYW5lbCBmcm9tICcuL2NvbXBvbmVudHMvQWRkcmVzc1BhbmVsLnZ1ZSdcclxuaW1wb3J0IFNlcnZpY2VQYW5lbCBmcm9tICcuL2NvbXBvbmVudHMvU2VydmljZVBhbmVsLnZ1ZSdcclxuXHJcbi8vIOiOt+WPluWxj+W5lei+ueeVjOWIsOWuieWFqOWMuuWfn+i3neemu1xyXG5jb25zdCB7IHNhZmVBcmVhSW5zZXRzIH0gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKVxyXG5cclxuLy8g5o6l5pS26aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIGlkOiBzdHJpbmdcclxufT4oKVxyXG5cclxuLy8g6I635Y+W5ZWG5ZOB6K+m5oOF5L+h5oGvXHJcbmNvbnN0IGdvb2RzID0gcmVmPEdvb2RzUmVzdWx0PigpXHJcbmNvbnN0IGdldEdvb2RzQnlJZERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0R29vZHNCeUlkQVBJKHF1ZXJ5LmlkKVxyXG4gIGdvb2RzLnZhbHVlID0gcmVzLnJlc3VsdFxyXG4gIC8vIFNLVee7hOS7tuaJgOmcgOagvOW8j1xyXG4gIGxvY2FsZGF0YS52YWx1ZSA9IHtcclxuICAgIF9pZDogcmVzLnJlc3VsdC5pZCxcclxuICAgIG5hbWU6IHJlcy5yZXN1bHQubmFtZSxcclxuICAgIGdvb2RzX3RodW1iOiByZXMucmVzdWx0Lm1haW5QaWN0dXJlc1swXSxcclxuICAgIHNwZWNfbGlzdDogcmVzLnJlc3VsdC5zcGVjcy5tYXAoKHYpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiB2Lm5hbWUsXHJcbiAgICAgICAgbGlzdDogdi52YWx1ZXMsXHJcbiAgICAgIH1cclxuICAgIH0pLFxyXG4gICAgc2t1X2xpc3Q6IHJlcy5yZXN1bHQuc2t1cy5tYXAoKHYpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBfaWQ6IHYuaWQsXHJcbiAgICAgICAgZ29vZHNfaWQ6IHJlcy5yZXN1bHQuaWQsXHJcbiAgICAgICAgZ29vZHNfbmFtZTogcmVzLnJlc3VsdC5uYW1lLFxyXG4gICAgICAgIGltYWdlOiB2LnBpY3R1cmUsXHJcbiAgICAgICAgcHJpY2U6IHYucHJpY2UgKiAxMDAsIC8vIOazqOaEj++8mumcgOimgeS5mOS7pSAxMDBcclxuICAgICAgICBzdG9jazogdi5pbnZlbnRvcnksXHJcbiAgICAgICAgc2t1X25hbWVfYXJyOiB2LnNwZWNzLm1hcCgodnYpID0+IHZ2LnZhbHVlTmFtZSksXHJcbiAgICAgIH1cclxuICAgIH0pLFxyXG4gIH1cclxufVxyXG5cclxuLy8g6aG16Z2i5Yqg6L29XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0R29vZHNCeUlkRGF0YSgpXHJcbn0pXHJcblxyXG4vLyDova7mkq3lm77lj5jljJbml7ZcclxuY29uc3QgY3VycmVudEluZGV4ID0gcmVmKDApXHJcbmNvbnN0IG9uQ2hhbmdlOiBVbmlIZWxwZXIuU3dpcGVyT25DaGFuZ2UgPSAoZXYpID0+IHtcclxuICBjdXJyZW50SW5kZXgudmFsdWUgPSBldi5kZXRhaWwuY3VycmVudFxyXG59XHJcblxyXG4vLyDngrnlh7vlm77niYfml7ZcclxuY29uc3Qgb25UYXBJbWFnZSA9ICh1cmw6IHN0cmluZykgPT4ge1xyXG4gIC8vIOWkp+WbvumihOiniFxyXG4gIHVuaS5wcmV2aWV3SW1hZ2Uoe1xyXG4gICAgY3VycmVudDogdXJsLFxyXG4gICAgdXJsczogZ29vZHMudmFsdWUhLm1haW5QaWN0dXJlcyxcclxuICB9KVxyXG59XHJcblxyXG4vLyB1bmktdWkg5by55Ye65bGC57uE5Lu2IHJlZlxyXG5jb25zdCBwb3B1cCA9IHJlZjx7XHJcbiAgb3BlbjogKHR5cGU/OiBVbmlIZWxwZXIuVW5pUG9wdXBUeXBlKSA9PiB2b2lkXHJcbiAgY2xvc2U6ICgpID0+IHZvaWRcclxufT4oKVxyXG5cclxuLy8g5by55Ye65bGC5p2h5Lu25riy5p+TXHJcbmNvbnN0IHBvcHVwTmFtZSA9IHJlZjwnYWRkcmVzcycgfCAnc2VydmljZSc+KClcclxuY29uc3Qgb3BlblBvcHVwID0gKG5hbWU6IHR5cGVvZiBwb3B1cE5hbWUudmFsdWUpID0+IHtcclxuICAvLyDkv67mlLnlvLnlh7rlsYLlkI3np7BcclxuICBwb3B1cE5hbWUudmFsdWUgPSBuYW1lXHJcbiAgcG9wdXAudmFsdWU/Lm9wZW4oKVxyXG59XHJcbi8vIOaYr+WQpuaYvuekulNLVee7hOS7tlxyXG5jb25zdCBpc1Nob3dTa3UgPSByZWYoZmFsc2UpXHJcbi8vIOWVhuWTgeS/oeaBr1xyXG5jb25zdCBsb2NhbGRhdGEgPSByZWYoe30gYXMgU2t1UG9wdXBMb2NhbGRhdGEpXHJcbi8vIOaMiemSruaooeW8j1xyXG5lbnVtIFNrdU1vZGUge1xyXG4gIEJvdGggPSAxLFxyXG4gIENhcnQgPSAyLFxyXG4gIEJ1eSA9IDMsXHJcbn1cclxuY29uc3QgbW9kZSA9IHJlZjxTa3VNb2RlPihTa3VNb2RlLkNhcnQpXHJcbi8vIOaJk+W8gFNLVeW8ueeql+S/ruaUueaMiemSruaooeW8j1xyXG5jb25zdCBvcGVuU2t1UG9wdXAgPSAodmFsOiBTa3VNb2RlKSA9PiB7XHJcbiAgLy8g5pi+56S6U0tV5by556qXXHJcbiAgaXNTaG93U2t1LnZhbHVlID0gdHJ1ZVxyXG4gIC8vIOS/ruaUueaMiemSruaooeW8j1xyXG4gIG1vZGUudmFsdWUgPSB2YWxcclxufVxyXG4vLyBTS1Xnu4Tku7blrp7kvotcclxuY29uc3Qgc2t1UG9wdXBSZWYgPSByZWY8U2t1UG9wdXBJbnN0YW5jZT4oKVxyXG4vLyDorqHnrpfooqvpgInkuK3nmoTlgLxcclxuY29uc3Qgc2VsZWN0QXJyVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gc2t1UG9wdXBSZWYudmFsdWU/LnNlbGVjdEFycj8uam9pbignICcpLnRyaW0oKSB8fCAn6K+36YCJ5oup5ZWG5ZOB6KeE5qC8J1xyXG59KVxyXG4vLyDliqDlhaXotK3nianovabkuovku7ZcclxuY29uc3Qgb25BZGRDYXJ0ID0gYXN5bmMgKGV2OiBTa3VQb3B1cEV2ZW50KSA9PiB7XHJcbiAgYXdhaXQgcG9zdE1lbWJlckNhcnRBUEkoeyBza3VJZDogZXYuX2lkLCBjb3VudDogZXYuYnV5X251bSB9KVxyXG4gIHVuaS5zaG93VG9hc3QoeyB0aXRsZTogJ+a3u+WKoOaIkOWKnycgfSlcclxuICBpc1Nob3dTa3UudmFsdWUgPSBmYWxzZVxyXG59XHJcbi8vIOeri+WNs+i0reS5sFxyXG5jb25zdCBvbkJ1eU5vdyA9IChldjogU2t1UG9wdXBFdmVudCkgPT4ge1xyXG4gIHVuaS5uYXZpZ2F0ZVRvKHsgdXJsOiBgL3BhZ2VzT3JkZXIvY3JlYXRlL2NyZWF0ZT9za3VJZD0ke2V2Ll9pZH0mY291bnQ9JHtldi5idXlfbnVtfWAgfSlcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8IS0tIFNLVeW8ueeql+e7hOS7tiAtLT5cclxuICA8dmstZGF0YS1nb29kcy1za3UtcG9wdXBcclxuICAgIHYtbW9kZWw9XCJpc1Nob3dTa3VcIlxyXG4gICAgOmxvY2FsZGF0YT1cImxvY2FsZGF0YVwiXHJcbiAgICA6bW9kZT1cIm1vZGVcIlxyXG4gICAgYWRkLWNhcnQtYmFja2dyb3VuZC1jb2xvcj1cIiNGRkE4NjhcIlxyXG4gICAgYnV5LW5vdy1iYWNrZ3JvdW5kLWNvbG9yPVwiIzI3QkE5QlwiXHJcbiAgICByZWY9XCJza3VQb3B1cFJlZlwiXHJcbiAgICA6YWN0aXZlZC1zdHlsZT1cIntcclxuICAgICAgY29sb3I6ICcjMjdCQTlCJyxcclxuICAgICAgYm9yZGVyQ29sb3I6ICcjMjdCQTlCJyxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI0U5RjhGNScsXHJcbiAgICB9XCJcclxuICAgIEBhZGQtY2FydD1cIm9uQWRkQ2FydFwiXHJcbiAgICBAYnV5LW5vdz1cIm9uQnV5Tm93XCJcclxuICAvPlxyXG4gIDxzY3JvbGwtdmlldyBlbmFibGUtYmFjay10by10b3Agc2Nyb2xsLXkgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPCEtLSDln7rmnKzkv6Hmga8gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cImdvb2RzXCI+XHJcbiAgICAgIDwhLS0g5ZWG5ZOB5Li75Zu+IC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInByZXZpZXdcIj5cclxuICAgICAgICA8c3dpcGVyIEBjaGFuZ2U9XCJvbkNoYW5nZVwiIGNpcmN1bGFyPlxyXG4gICAgICAgICAgPHN3aXBlci1pdGVtIHYtZm9yPVwiaXRlbSBpbiBnb29kcz8ubWFpblBpY3R1cmVzXCIgOmtleT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2VcIiBAdGFwPVwib25UYXBJbWFnZShpdGVtKVwiIG1vZGU9XCJhc3BlY3RGaWxsXCIgOnNyYz1cIml0ZW1cIiAvPlxyXG4gICAgICAgICAgPC9zd2lwZXItaXRlbT5cclxuICAgICAgICA8L3N3aXBlcj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImluZGljYXRvclwiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJjdXJyZW50XCI+e3sgY3VycmVudEluZGV4ICsgMSB9fTwvdGV4dD5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3BsaXRcIj4vPC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0b3RhbFwiPnt7IGdvb2RzPy5tYWluUGljdHVyZXMubGVuZ3RoIH19PC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgPCEtLSDllYblk4HnroDku4sgLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sXCI+wqU8L3RleHQ+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlclwiPnt7IGdvb2RzPy5wcmljZSB9fTwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzXCI+e3sgZ29vZHM/Lm5hbWUgfX08L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJkZXNjXCI+IHt7IGdvb2RzPy5kZXNjIH19IDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgPCEtLSDmk43kvZzpnaLmnb8gLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiYWN0aW9uXCI+XHJcbiAgICAgICAgPHZpZXcgQHRhcD1cIm9wZW5Ta3VQb3B1cChTa3VNb2RlLkJvdGgpXCIgY2xhc3M9XCJpdGVtIGFycm93XCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+6YCJ5oupPC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0IGVsbGlwc2lzXCI+IHt7IHNlbGVjdEFyclRleHQgfX0gPC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8dmlldyBAdGFwPVwib3BlblBvcHVwKCdhZGRyZXNzJylcIiBjbGFzcz1cIml0ZW0gYXJyb3dcIj5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibGFiZWxcIj7pgIHoh7M8L3RleHQ+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cInRleHQgZWxsaXBzaXNcIj4g6K+36YCJ5oup5pS26I635Zyw5Z2AIDwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgQHRhcD1cIm9wZW5Qb3B1cCgnc2VydmljZScpXCIgY2xhc3M9XCJpdGVtIGFycm93XCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+5pyN5YqhPC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0IGVsbGlwc2lzXCI+IOaXoOW/p+mAgCDlv6vpgJ/pgIDmrL4g5YWN6LS55YyF6YKuIDwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuXHJcbiAgICA8IS0tIOWVhuWTgeivpuaDhSAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiZGV0YWlsIHBhbmVsXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICA8dGV4dD7or6bmg4U8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJwcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICA8IS0tIOWxnuaAp+ivpuaDhSAtLT5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiaXRlbSBpbiBnb29kcz8uZGV0YWlscy5wcm9wZXJ0aWVzXCIgOmtleT1cIml0ZW0ubmFtZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+e3sgaXRlbS5uYW1lIH19PC90ZXh0PlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInZhbHVlXCI+e3sgaXRlbS52YWx1ZSB9fTwvdGV4dD5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPCEtLSDlm77niYfor6bmg4UgLS0+XHJcbiAgICAgICAgPGltYWdlXHJcbiAgICAgICAgICBjbGFzcz1cImltYWdlXCJcclxuICAgICAgICAgIHYtZm9yPVwiaXRlbSBpbiBnb29kcz8uZGV0YWlscy5waWN0dXJlc1wiXHJcbiAgICAgICAgICA6a2V5PVwiaXRlbVwiXHJcbiAgICAgICAgICBtb2RlPVwid2lkdGhGaXhcIlxyXG4gICAgICAgICAgOnNyYz1cIml0ZW1cIlxyXG4gICAgICAgID48L2ltYWdlPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcblxyXG4gICAgPCEtLSDlkIznsbvmjqjojZAgLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cInNpbWlsYXIgcGFuZWxcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgIDx0ZXh0PuWQjOexu+aOqOiNkDwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICB2LWZvcj1cIml0ZW0gaW4gZ29vZHM/LnNpbWlsYXJQcm9kdWN0c1wiXHJcbiAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXHJcbiAgICAgICAgICBjbGFzcz1cImdvb2RzXCJcclxuICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICA6dXJsPVwiYC9wYWdlcy9nb29kcy9nb29kcz9pZD0ke2l0ZW0uaWR9YFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2VcIiBtb2RlPVwiYXNwZWN0RmlsbFwiIDpzcmM9XCJpdGVtLnBpY3R1cmVcIj48L2ltYWdlPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzXCI+e3sgaXRlbS5uYW1lIH19PC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInN5bWJvbFwiPsKlPC90ZXh0PlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlclwiPnt7IGl0ZW0ucHJpY2UgfX08L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3Njcm9sbC12aWV3PlxyXG5cclxuICA8IS0tIOeUqOaIt+aTjeS9nCAtLT5cclxuICA8dmlldyB2LWlmPVwiZ29vZHNcIiBjbGFzcz1cInRvb2xiYXJcIiA6c3R5bGU9XCJ7IHBhZGRpbmdCb3R0b206IHNhZmVBcmVhSW5zZXRzPy5ib3R0b20gKyAncHgnIH1cIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiaWNvbnNcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb25zLWJ1dHRvblwiPjx0ZXh0IGNsYXNzPVwiaWNvbi1oZWFydFwiPjwvdGV4dD7mlLbol488L2J1dHRvbj5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8bmF2aWdhdG9yIGNsYXNzPVwiaWNvbnMtYnV0dG9uXCIgdXJsPVwiL3BhZ2VzL2NhcnQvY2FydDJcIiBvcGVuLXR5cGU9XCJuYXZpZ2F0ZVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwiaWNvbi1jYXJ0XCI+PC90ZXh0Pui0reeJqei9plxyXG4gICAgICA8L25hdmlnYXRvcj5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uc1wiPlxyXG4gICAgICA8dmlldyBAdGFwPVwib3BlblNrdVBvcHVwKFNrdU1vZGUuQ2FydClcIiBjbGFzcz1cImFkZGNhcnRcIj4g5Yqg5YWl6LSt54mp6L2mIDwvdmlldz5cclxuICAgICAgPHZpZXcgQHRhcD1cIm9wZW5Ta3VQb3B1cChTa3VNb2RlLkJ1eSlcIiBjbGFzcz1cInBheW1lbnRcIj4g56uL5Y2z6LSt5LmwIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcblxyXG4gIDwhLS0gdW5pLXVpIOW8ueWHuuWxgiAtLT5cclxuICA8dW5pLXBvcHVwIHJlZj1cInBvcHVwXCIgdHlwZT1cImJvdHRvbVwiIGJhY2tncm91bmQtY29sb3I9XCIjZmZmXCI+XHJcbiAgICA8QWRkcmVzc1BhbmVsIHYtaWY9XCJwb3B1cE5hbWUgPT09ICdhZGRyZXNzJ1wiIEBjbG9zZT1cInBvcHVwPy5jbG9zZSgpXCIgLz5cclxuICAgIDxTZXJ2aWNlUGFuZWwgdi1pZj1cInBvcHVwTmFtZSA9PT0gJ3NlcnZpY2UnXCIgQGNsb3NlPVwicG9wdXA/LmNsb3NlKClcIiAvPlxyXG4gIDwvdW5pLXBvcHVwPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbnBhZ2Uge1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxufVxyXG5cclxuLnZpZXdwb3J0IHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xyXG59XHJcblxyXG4ucGFuZWwge1xyXG4gIG1hcmdpbi10b3A6IDIwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgLnRpdGxlIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiA5MHJweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgcGFkZGluZzogMzBycHggNjBycHggMzBycHggNnJweDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHRleHQge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDEwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgYm9yZGVyLWxlZnQ6IDRycHggc29saWQgIzI3YmE5YjtcclxuICAgIH1cclxuICAgIG5hdmlnYXRvciB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmFycm93IHtcclxuICAmOjphZnRlciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAzMHJweDtcclxuICAgIGNvbnRlbnQ6ICdcXGU2YzInO1xyXG4gICAgY29sb3I6ICNjY2M7XHJcbiAgICBmb250LWZhbWlseTogJ2VyYWJiaXQnICFpbXBvcnRhbnQ7XHJcbiAgICBmb250LXNpemU6IDMycnB4O1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gIH1cclxufVxyXG5cclxuLyog5ZWG5ZOB5L+h5oGvICovXHJcbi5nb29kcyB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAucHJldmlldyB7XHJcbiAgICBoZWlnaHQ6IDc1MHJweDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIC5pbWFnZSB7XHJcbiAgICAgIHdpZHRoOiA3NTBycHg7XHJcbiAgICAgIGhlaWdodDogNzUwcnB4O1xyXG4gICAgfVxyXG4gICAgLmluZGljYXRvciB7XHJcbiAgICAgIGhlaWdodDogNDBycHg7XHJcbiAgICAgIHBhZGRpbmc6IDAgMjRycHg7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA0MHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMzBycHg7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogMzBycHg7XHJcbiAgICAgIHJpZ2h0OiAzMHJweDtcclxuICAgICAgLmN1cnJlbnQge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIH1cclxuICAgICAgLnNwbGl0IHtcclxuICAgICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICAgIG1hcmdpbjogMCAxcnB4IDAgMnJweDtcclxuICAgICAgfVxyXG4gICAgICAudG90YWwge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLm1ldGEge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZWFlYWVhO1xyXG4gICAgLnByaWNlIHtcclxuICAgICAgaGVpZ2h0OiAxMzBycHg7XHJcbiAgICAgIHBhZGRpbmc6IDI1cnB4IDMwcnB4IDA7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICBmb250LXNpemU6IDM0cnB4O1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzVjOGE5O1xyXG4gICAgfVxyXG4gICAgLm51bWJlciB7XHJcbiAgICAgIGZvbnQtc2l6ZTogNTZycHg7XHJcbiAgICB9XHJcbiAgICAuYnJhbmQge1xyXG4gICAgICB3aWR0aDogMTYwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDgwcnB4O1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogMjZycHg7XHJcbiAgICAgIHJpZ2h0OiAzMHJweDtcclxuICAgIH1cclxuICAgIC5uYW1lIHtcclxuICAgICAgbWF4LWhlaWdodDogODhycHg7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbiAgICAgIG1hcmdpbjogMjBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzJycHg7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgfVxyXG4gICAgLmRlc2Mge1xyXG4gICAgICBsaW5lLWhlaWdodDogMTtcclxuICAgICAgcGFkZGluZzogMCAyMHJweCAzMHJweDtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5hY3Rpb24ge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAyMHJweDtcclxuICAgIC5pdGVtIHtcclxuICAgICAgaGVpZ2h0OiA5MHJweDtcclxuICAgICAgcGFkZGluZy1yaWdodDogNjBycHg7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFycHggc29saWQgI2VhZWFlYTtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICMzMzM7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICBib3JkZXItYm90dG9tOiAwIG5vbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5sYWJlbCB7XHJcbiAgICAgIHdpZHRoOiA2MHJweDtcclxuICAgICAgY29sb3I6ICM4OThiOTQ7XHJcbiAgICAgIG1hcmdpbjogMCAxNnJweCAwIDEwcnB4O1xyXG4gICAgfVxyXG4gICAgLnRleHQge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDE7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiDllYblk4Hor6bmg4UgKi9cclxuLmRldGFpbCB7XHJcbiAgcGFkZGluZy1sZWZ0OiAyMHJweDtcclxuICAuY29udGVudCB7XHJcbiAgICBtYXJnaW4tbGVmdDogLTIwcnB4O1xyXG4gICAgLmltYWdlIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5wcm9wZXJ0aWVzIHtcclxuICAgIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAzMHJweDtcclxuICAgIC5pdGVtIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDI7XHJcbiAgICAgIHBhZGRpbmc6IDEwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMXJweCBkYXNoZWQgI2NjYztcclxuICAgIH1cclxuICAgIC5sYWJlbCB7XHJcbiAgICAgIHdpZHRoOiAyMDBycHg7XHJcbiAgICB9XHJcbiAgICAudmFsdWUge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyog5ZCM57G75o6o6I2QICovXHJcbi5zaW1pbGFyIHtcclxuICAuY29udGVudCB7XHJcbiAgICBwYWRkaW5nOiAwIDIwcnB4IDIwcnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LXdyYXA6IHdyYXA7XHJcbiAgICAuZ29vZHMge1xyXG4gICAgICB3aWR0aDogMzQwcnB4O1xyXG4gICAgICBwYWRkaW5nOiAyNHJweCAyMHJweCAyMHJweDtcclxuICAgICAgbWFyZ2luOiAyMHJweCA3cnB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgIH1cclxuICAgIC5pbWFnZSB7XHJcbiAgICAgIHdpZHRoOiAzMDBycHg7XHJcbiAgICAgIGhlaWdodDogMjYwcnB4O1xyXG4gICAgfVxyXG4gICAgLm5hbWUge1xyXG4gICAgICBoZWlnaHQ6IDgwcnB4O1xyXG4gICAgICBtYXJnaW46IDEwcnB4IDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjMjYyNjI2O1xyXG4gICAgfVxyXG4gICAgLnByaWNlIHtcclxuICAgICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjBycHg7XHJcbiAgICAgIGNvbG9yOiAjY2Y0NDQ0O1xyXG4gICAgfVxyXG4gICAgLm51bWJlciB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAycnB4O1xyXG4gICAgfVxyXG4gIH1cclxuICBuYXZpZ2F0b3Ige1xyXG4gICAgJjpudGgtY2hpbGQoZXZlbikge1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiDlupXpg6jlt6XlhbfmoI8gKi9cclxuLnRvb2xiYXIge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBsZWZ0OiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogY2FsYygodmFyKC0td2luZG93LWJvdHRvbSkpKTtcclxuICB6LWluZGV4OiAxO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgaGVpZ2h0OiAxMDBycHg7XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICBib3JkZXItdG9wOiAxcnB4IHNvbGlkICNlYWVhZWE7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAuYnV0dG9ucyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgJiA+IHZpZXcge1xyXG4gICAgICB3aWR0aDogMjIwcnB4O1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA3MnJweDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDcycnB4O1xyXG4gICAgfVxyXG4gICAgLmFkZGNhcnQge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhODY4O1xyXG4gICAgfVxyXG4gICAgLnBheW1lbnQge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG4gICAgICBtYXJnaW4tbGVmdDogMjBycHg7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5pY29ucyB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgZmxleDogMTtcclxuICAgIC8vIOWFvOWuuSBINSDnq6/lkowgQXBwIOerr+eahOWvvOiIqumTvuaOpeagt+W8j1xyXG4gICAgLm5hdmlnYXRvci13cmFwLFxyXG4gICAgLmljb25zLWJ1dHRvbiB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgICAgcGFkZGluZzogMDtcclxuICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xyXG4gICAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgJjo6YWZ0ZXIge1xyXG4gICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGV4dCB7XHJcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICBmb250LXNpemU6IDM0cnB4O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgdHlwZSB7XHJcbiAgU2t1UG9wdXBFdmVudCxcclxuICBTa3VQb3B1cEluc3RhbmNlLFxyXG4gIFNrdVBvcHVwTG9jYWxkYXRhLFxyXG59IGZyb20gJ0AvY29tcG9uZW50cy92ay1kYXRhLWdvb2RzLXNrdS1wb3B1cC92ay1kYXRhLWdvb2RzLXNrdS1wb3B1cCdcclxuaW1wb3J0IHsgcG9zdE1lbWJlckNhcnRBUEkgfSBmcm9tICdAL3NlcnZpY2VzL2NhcnQnXHJcbmltcG9ydCB7IGdldEdvb2RzQnlJZEFQSSB9IGZyb20gJ0Avc2VydmljZXMvZ29vZHMnXHJcbmltcG9ydCB0eXBlIHsgR29vZHNSZXN1bHQgfSBmcm9tICdAL3R5cGVzL2dvb2RzJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IEFkZHJlc3NQYW5lbCBmcm9tICcuL2NvbXBvbmVudHMvQWRkcmVzc1BhbmVsLnZ1ZSdcclxuaW1wb3J0IFNlcnZpY2VQYW5lbCBmcm9tICcuL2NvbXBvbmVudHMvU2VydmljZVBhbmVsLnZ1ZSdcclxuXHJcbi8vIOiOt+WPluWxj+W5lei+ueeVjOWIsOWuieWFqOWMuuWfn+i3neemu1xyXG5jb25zdCB7IHNhZmVBcmVhSW5zZXRzIH0gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKVxyXG5cclxuLy8g5o6l5pS26aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIGlkOiBzdHJpbmdcclxufT4oKVxyXG5cclxuLy8g6I635Y+W5ZWG5ZOB6K+m5oOF5L+h5oGvXHJcbmNvbnN0IGdvb2RzID0gcmVmPEdvb2RzUmVzdWx0PigpXHJcbmNvbnN0IGdldEdvb2RzQnlJZERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0R29vZHNCeUlkQVBJKHF1ZXJ5LmlkKVxyXG4gIGdvb2RzLnZhbHVlID0gcmVzLnJlc3VsdFxyXG4gIC8vIFNLVee7hOS7tuaJgOmcgOagvOW8j1xyXG4gIGxvY2FsZGF0YS52YWx1ZSA9IHtcclxuICAgIF9pZDogcmVzLnJlc3VsdC5pZCxcclxuICAgIG5hbWU6IHJlcy5yZXN1bHQubmFtZSxcclxuICAgIGdvb2RzX3RodW1iOiByZXMucmVzdWx0Lm1haW5QaWN0dXJlc1swXSxcclxuICAgIHNwZWNfbGlzdDogcmVzLnJlc3VsdC5zcGVjcy5tYXAoKHYpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiB2Lm5hbWUsXHJcbiAgICAgICAgbGlzdDogdi52YWx1ZXMsXHJcbiAgICAgIH1cclxuICAgIH0pLFxyXG4gICAgc2t1X2xpc3Q6IHJlcy5yZXN1bHQuc2t1cy5tYXAoKHYpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBfaWQ6IHYuaWQsXHJcbiAgICAgICAgZ29vZHNfaWQ6IHJlcy5yZXN1bHQuaWQsXHJcbiAgICAgICAgZ29vZHNfbmFtZTogcmVzLnJlc3VsdC5uYW1lLFxyXG4gICAgICAgIGltYWdlOiB2LnBpY3R1cmUsXHJcbiAgICAgICAgcHJpY2U6IHYucHJpY2UgKiAxMDAsIC8vIOazqOaEj++8mumcgOimgeS5mOS7pSAxMDBcclxuICAgICAgICBzdG9jazogdi5pbnZlbnRvcnksXHJcbiAgICAgICAgc2t1X25hbWVfYXJyOiB2LnNwZWNzLm1hcCgodnYpID0+IHZ2LnZhbHVlTmFtZSksXHJcbiAgICAgIH1cclxuICAgIH0pLFxyXG4gIH1cclxufVxyXG5cclxuLy8g6aG16Z2i5Yqg6L29XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0R29vZHNCeUlkRGF0YSgpXHJcbn0pXHJcblxyXG4vLyDova7mkq3lm77lj5jljJbml7ZcclxuY29uc3QgY3VycmVudEluZGV4ID0gcmVmKDApXHJcbmNvbnN0IG9uQ2hhbmdlOiBVbmlIZWxwZXIuU3dpcGVyT25DaGFuZ2UgPSAoZXYpID0+IHtcclxuICBjdXJyZW50SW5kZXgudmFsdWUgPSBldi5kZXRhaWwuY3VycmVudFxyXG59XHJcblxyXG4vLyDngrnlh7vlm77niYfml7ZcclxuY29uc3Qgb25UYXBJbWFnZSA9ICh1cmw6IHN0cmluZykgPT4ge1xyXG4gIC8vIOWkp+WbvumihOiniFxyXG4gIHVuaS5wcmV2aWV3SW1hZ2Uoe1xyXG4gICAgY3VycmVudDogdXJsLFxyXG4gICAgdXJsczogZ29vZHMudmFsdWUhLm1haW5QaWN0dXJlcyxcclxuICB9KVxyXG59XHJcblxyXG4vLyB1bmktdWkg5by55Ye65bGC57uE5Lu2IHJlZlxyXG5jb25zdCBwb3B1cCA9IHJlZjx7XHJcbiAgb3BlbjogKHR5cGU/OiBVbmlIZWxwZXIuVW5pUG9wdXBUeXBlKSA9PiB2b2lkXHJcbiAgY2xvc2U6ICgpID0+IHZvaWRcclxufT4oKVxyXG5cclxuLy8g5by55Ye65bGC5p2h5Lu25riy5p+TXHJcbmNvbnN0IHBvcHVwTmFtZSA9IHJlZjwnYWRkcmVzcycgfCAnc2VydmljZSc+KClcclxuY29uc3Qgb3BlblBvcHVwID0gKG5hbWU6IHR5cGVvZiBwb3B1cE5hbWUudmFsdWUpID0+IHtcclxuICAvLyDkv67mlLnlvLnlh7rlsYLlkI3np7BcclxuICBwb3B1cE5hbWUudmFsdWUgPSBuYW1lXHJcbiAgcG9wdXAudmFsdWU/Lm9wZW4oKVxyXG59XHJcbi8vIOaYr+WQpuaYvuekulNLVee7hOS7tlxyXG5jb25zdCBpc1Nob3dTa3UgPSByZWYoZmFsc2UpXHJcbi8vIOWVhuWTgeS/oeaBr1xyXG5jb25zdCBsb2NhbGRhdGEgPSByZWYoe30gYXMgU2t1UG9wdXBMb2NhbGRhdGEpXHJcbi8vIOaMiemSruaooeW8j1xyXG5lbnVtIFNrdU1vZGUge1xyXG4gIEJvdGggPSAxLFxyXG4gIENhcnQgPSAyLFxyXG4gIEJ1eSA9IDMsXHJcbn1cclxuY29uc3QgbW9kZSA9IHJlZjxTa3VNb2RlPihTa3VNb2RlLkNhcnQpXHJcbi8vIOaJk+W8gFNLVeW8ueeql+S/ruaUueaMiemSruaooeW8j1xyXG5jb25zdCBvcGVuU2t1UG9wdXAgPSAodmFsOiBTa3VNb2RlKSA9PiB7XHJcbiAgLy8g5pi+56S6U0tV5by556qXXHJcbiAgaXNTaG93U2t1LnZhbHVlID0gdHJ1ZVxyXG4gIC8vIOS/ruaUueaMiemSruaooeW8j1xyXG4gIG1vZGUudmFsdWUgPSB2YWxcclxufVxyXG4vLyBTS1Xnu4Tku7blrp7kvotcclxuY29uc3Qgc2t1UG9wdXBSZWYgPSByZWY8U2t1UG9wdXBJbnN0YW5jZT4oKVxyXG4vLyDorqHnrpfooqvpgInkuK3nmoTlgLxcclxuY29uc3Qgc2VsZWN0QXJyVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gc2t1UG9wdXBSZWYudmFsdWU/LnNlbGVjdEFycj8uam9pbignICcpLnRyaW0oKSB8fCAn6K+36YCJ5oup5ZWG5ZOB6KeE5qC8J1xyXG59KVxyXG4vLyDliqDlhaXotK3nianovabkuovku7ZcclxuY29uc3Qgb25BZGRDYXJ0ID0gYXN5bmMgKGV2OiBTa3VQb3B1cEV2ZW50KSA9PiB7XHJcbiAgYXdhaXQgcG9zdE1lbWJlckNhcnRBUEkoeyBza3VJZDogZXYuX2lkLCBjb3VudDogZXYuYnV5X251bSB9KVxyXG4gIHVuaS5zaG93VG9hc3QoeyB0aXRsZTogJ+a3u+WKoOaIkOWKnycgfSlcclxuICBpc1Nob3dTa3UudmFsdWUgPSBmYWxzZVxyXG59XHJcbi8vIOeri+WNs+i0reS5sFxyXG5jb25zdCBvbkJ1eU5vdyA9IChldjogU2t1UG9wdXBFdmVudCkgPT4ge1xyXG4gIHVuaS5uYXZpZ2F0ZVRvKHsgdXJsOiBgL3BhZ2VzT3JkZXIvY3JlYXRlL2NyZWF0ZT9za3VJZD0ke2V2Ll9pZH0mY291bnQ9JHtldi5idXlfbnVtfWAgfSlcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8IS0tIFNLVeW8ueeql+e7hOS7tiAtLT5cclxuICA8dmstZGF0YS1nb29kcy1za3UtcG9wdXBcclxuICAgIHYtbW9kZWw9XCJpc1Nob3dTa3VcIlxyXG4gICAgOmxvY2FsZGF0YT1cImxvY2FsZGF0YVwiXHJcbiAgICA6bW9kZT1cIm1vZGVcIlxyXG4gICAgYWRkLWNhcnQtYmFja2dyb3VuZC1jb2xvcj1cIiNGRkE4NjhcIlxyXG4gICAgYnV5LW5vdy1iYWNrZ3JvdW5kLWNvbG9yPVwiIzI3QkE5QlwiXHJcbiAgICByZWY9XCJza3VQb3B1cFJlZlwiXHJcbiAgICA6YWN0aXZlZC1zdHlsZT1cIntcclxuICAgICAgY29sb3I6ICcjMjdCQTlCJyxcclxuICAgICAgYm9yZGVyQ29sb3I6ICcjMjdCQTlCJyxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI0U5RjhGNScsXHJcbiAgICB9XCJcclxuICAgIEBhZGQtY2FydD1cIm9uQWRkQ2FydFwiXHJcbiAgICBAYnV5LW5vdz1cIm9uQnV5Tm93XCJcclxuICAvPlxyXG4gIDxzY3JvbGwtdmlldyBlbmFibGUtYmFjay10by10b3Agc2Nyb2xsLXkgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPCEtLSDln7rmnKzkv6Hmga8gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cImdvb2RzXCI+XHJcbiAgICAgIDwhLS0g5ZWG5ZOB5Li75Zu+IC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInByZXZpZXdcIj5cclxuICAgICAgICA8c3dpcGVyIEBjaGFuZ2U9XCJvbkNoYW5nZVwiIGNpcmN1bGFyPlxyXG4gICAgICAgICAgPHN3aXBlci1pdGVtIHYtZm9yPVwiaXRlbSBpbiBnb29kcz8ubWFpblBpY3R1cmVzXCIgOmtleT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2VcIiBAdGFwPVwib25UYXBJbWFnZShpdGVtKVwiIG1vZGU9XCJhc3BlY3RGaWxsXCIgOnNyYz1cIml0ZW1cIiAvPlxyXG4gICAgICAgICAgPC9zd2lwZXItaXRlbT5cclxuICAgICAgICA8L3N3aXBlcj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImluZGljYXRvclwiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJjdXJyZW50XCI+e3sgY3VycmVudEluZGV4ICsgMSB9fTwvdGV4dD5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3BsaXRcIj4vPC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0b3RhbFwiPnt7IGdvb2RzPy5tYWluUGljdHVyZXMubGVuZ3RoIH19PC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgPCEtLSDllYblk4HnroDku4sgLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sXCI+wqU8L3RleHQ+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlclwiPnt7IGdvb2RzPy5wcmljZSB9fTwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzXCI+e3sgZ29vZHM/Lm5hbWUgfX08L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJkZXNjXCI+IHt7IGdvb2RzPy5kZXNjIH19IDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgPCEtLSDmk43kvZzpnaLmnb8gLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiYWN0aW9uXCI+XHJcbiAgICAgICAgPHZpZXcgQHRhcD1cIm9wZW5Ta3VQb3B1cChTa3VNb2RlLkJvdGgpXCIgY2xhc3M9XCJpdGVtIGFycm93XCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+6YCJ5oupPC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0IGVsbGlwc2lzXCI+IHt7IHNlbGVjdEFyclRleHQgfX0gPC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8dmlldyBAdGFwPVwib3BlblBvcHVwKCdhZGRyZXNzJylcIiBjbGFzcz1cIml0ZW0gYXJyb3dcIj5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibGFiZWxcIj7pgIHoh7M8L3RleHQ+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cInRleHQgZWxsaXBzaXNcIj4g6K+36YCJ5oup5pS26I635Zyw5Z2AIDwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgQHRhcD1cIm9wZW5Qb3B1cCgnc2VydmljZScpXCIgY2xhc3M9XCJpdGVtIGFycm93XCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+5pyN5YqhPC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0IGVsbGlwc2lzXCI+IOaXoOW/p+mAgCDlv6vpgJ/pgIDmrL4g5YWN6LS55YyF6YKuIDwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuXHJcbiAgICA8IS0tIOWVhuWTgeivpuaDhSAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiZGV0YWlsIHBhbmVsXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICA8dGV4dD7or6bmg4U8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJwcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICA8IS0tIOWxnuaAp+ivpuaDhSAtLT5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiaXRlbSBpbiBnb29kcz8uZGV0YWlscy5wcm9wZXJ0aWVzXCIgOmtleT1cIml0ZW0ubmFtZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+e3sgaXRlbS5uYW1lIH19PC90ZXh0PlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInZhbHVlXCI+e3sgaXRlbS52YWx1ZSB9fTwvdGV4dD5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPCEtLSDlm77niYfor6bmg4UgLS0+XHJcbiAgICAgICAgPGltYWdlXHJcbiAgICAgICAgICBjbGFzcz1cImltYWdlXCJcclxuICAgICAgICAgIHYtZm9yPVwiaXRlbSBpbiBnb29kcz8uZGV0YWlscy5waWN0dXJlc1wiXHJcbiAgICAgICAgICA6a2V5PVwiaXRlbVwiXHJcbiAgICAgICAgICBtb2RlPVwid2lkdGhGaXhcIlxyXG4gICAgICAgICAgOnNyYz1cIml0ZW1cIlxyXG4gICAgICAgID48L2ltYWdlPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcblxyXG4gICAgPCEtLSDlkIznsbvmjqjojZAgLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cInNpbWlsYXIgcGFuZWxcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgIDx0ZXh0PuWQjOexu+aOqOiNkDwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICB2LWZvcj1cIml0ZW0gaW4gZ29vZHM/LnNpbWlsYXJQcm9kdWN0c1wiXHJcbiAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXHJcbiAgICAgICAgICBjbGFzcz1cImdvb2RzXCJcclxuICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICA6dXJsPVwiYC9wYWdlcy9nb29kcy9nb29kcz9pZD0ke2l0ZW0uaWR9YFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2VcIiBtb2RlPVwiYXNwZWN0RmlsbFwiIDpzcmM9XCJpdGVtLnBpY3R1cmVcIj48L2ltYWdlPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzXCI+e3sgaXRlbS5uYW1lIH19PC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInN5bWJvbFwiPsKlPC90ZXh0PlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm51bWJlclwiPnt7IGl0ZW0ucHJpY2UgfX08L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3Njcm9sbC12aWV3PlxyXG5cclxuICA8IS0tIOeUqOaIt+aTjeS9nCAtLT5cclxuICA8dmlldyB2LWlmPVwiZ29vZHNcIiBjbGFzcz1cInRvb2xiYXJcIiA6c3R5bGU9XCJ7IHBhZGRpbmdCb3R0b206IHNhZmVBcmVhSW5zZXRzPy5ib3R0b20gKyAncHgnIH1cIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiaWNvbnNcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb25zLWJ1dHRvblwiPjx0ZXh0IGNsYXNzPVwiaWNvbi1oZWFydFwiPjwvdGV4dD7mlLbol488L2J1dHRvbj5cclxuICAgICAgPCEtLSAjaWZkZWYgTVAtV0VJWElOIC0tPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbnMtYnV0dG9uXCIgb3Blbi10eXBlPVwiY29udGFjdFwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwiaWNvbi1oYW5kc2V0XCI+PC90ZXh0PuWuouacjVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPCEtLSAjZW5kaWYgLS0+XHJcbiAgICAgIDxuYXZpZ2F0b3IgY2xhc3M9XCJpY29ucy1idXR0b25cIiB1cmw9XCIvcGFnZXMvY2FydC9jYXJ0MlwiIG9wZW4tdHlwZT1cIm5hdmlnYXRlXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJpY29uLWNhcnRcIj48L3RleHQ+6LSt54mp6L2mXHJcbiAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJidXR0b25zXCI+XHJcbiAgICAgIDx2aWV3IEB0YXA9XCJvcGVuU2t1UG9wdXAoU2t1TW9kZS5DYXJ0KVwiIGNsYXNzPVwiYWRkY2FydFwiPiDliqDlhaXotK3nianovaYgPC92aWV3PlxyXG4gICAgICA8dmlldyBAdGFwPVwib3BlblNrdVBvcHVwKFNrdU1vZGUuQnV5KVwiIGNsYXNzPVwicGF5bWVudFwiPiDnq4vljbPotK3kubAgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuXHJcbiAgPCEtLSB1bmktdWkg5by55Ye65bGCIC0tPlxyXG4gIDx1bmktcG9wdXAgcmVmPVwicG9wdXBcIiB0eXBlPVwiYm90dG9tXCIgYmFja2dyb3VuZC1jb2xvcj1cIiNmZmZcIj5cclxuICAgIDxBZGRyZXNzUGFuZWwgdi1pZj1cInBvcHVwTmFtZSA9PT0gJ2FkZHJlc3MnXCIgQGNsb3NlPVwicG9wdXA/LmNsb3NlKClcIiAvPlxyXG4gICAgPFNlcnZpY2VQYW5lbCB2LWlmPVwicG9wdXBOYW1lID09PSAnc2VydmljZSdcIiBAY2xvc2U9XCJwb3B1cD8uY2xvc2UoKVwiIC8+XHJcbiAgPC91bmktcG9wdXA+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XHJcbn1cclxuXHJcbi5wYW5lbCB7XHJcbiAgbWFyZ2luLXRvcDogMjBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAudGl0bGUge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBoZWlnaHQ6IDkwcnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICBwYWRkaW5nOiAzMHJweCA2MHJweCAzMHJweCA2cnB4O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgdGV4dCB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMTBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBib3JkZXItbGVmdDogNHJweCBzb2xpZCAjMjdiYTliO1xyXG4gICAgfVxyXG4gICAgbmF2aWdhdG9yIHtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uYXJyb3cge1xyXG4gICY6OmFmdGVyIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgcmlnaHQ6IDMwcnB4O1xyXG4gICAgY29udGVudDogJ1xcZTZjMic7XHJcbiAgICBjb2xvcjogI2NjYztcclxuICAgIGZvbnQtZmFtaWx5OiAnZXJhYmJpdCcgIWltcG9ydGFudDtcclxuICAgIGZvbnQtc2l6ZTogMzJycHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKiDllYblk4Hkv6Hmga8gKi9cclxuLmdvb2RzIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIC5wcmV2aWV3IHtcclxuICAgIGhlaWdodDogNzUwcnB4O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgLmltYWdlIHtcclxuICAgICAgd2lkdGg6IDc1MHJweDtcclxuICAgICAgaGVpZ2h0OiA3NTBycHg7XHJcbiAgICB9XHJcbiAgICAuaW5kaWNhdG9yIHtcclxuICAgICAgaGVpZ2h0OiA0MHJweDtcclxuICAgICAgcGFkZGluZzogMCAyNHJweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDQwcnB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAzMHJweDtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAzMHJweDtcclxuICAgICAgcmlnaHQ6IDMwcnB4O1xyXG4gICAgICAuY3VycmVudCB7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgfVxyXG4gICAgICAuc3BsaXQge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgICAgbWFyZ2luOiAwIDFycHggMCAycnB4O1xyXG4gICAgICB9XHJcbiAgICAgIC50b3RhbCB7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAubWV0YSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcnB4IHNvbGlkICNlYWVhZWE7XHJcbiAgICAucHJpY2Uge1xyXG4gICAgICBoZWlnaHQ6IDEzMHJweDtcclxuICAgICAgcGFkZGluZzogMjVycHggMzBycHggMDtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzNWM4YTk7XHJcbiAgICB9XHJcbiAgICAubnVtYmVyIHtcclxuICAgICAgZm9udC1zaXplOiA1NnJweDtcclxuICAgIH1cclxuICAgIC5icmFuZCB7XHJcbiAgICAgIHdpZHRoOiAxNjBycHg7XHJcbiAgICAgIGhlaWdodDogODBycHg7XHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiAyNnJweDtcclxuICAgICAgcmlnaHQ6IDMwcnB4O1xyXG4gICAgfVxyXG4gICAgLm5hbWUge1xyXG4gICAgICBtYXgtaGVpZ2h0OiA4OHJweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgICAgbWFyZ2luOiAyMHJweDtcclxuICAgICAgZm9udC1zaXplOiAzMnJweDtcclxuICAgICAgY29sb3I6ICMzMzM7XHJcbiAgICB9XHJcbiAgICAuZGVzYyB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgICBwYWRkaW5nOiAwIDIwcnB4IDMwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICBjb2xvcjogI2NmNDQ0NDtcclxuICAgIH1cclxuICB9XHJcbiAgLmFjdGlvbiB7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gICAgLml0ZW0ge1xyXG4gICAgICBoZWlnaHQ6IDkwcnB4O1xyXG4gICAgICBwYWRkaW5nLXJpZ2h0OiA2MHJweDtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZWFlYWVhO1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAmOmxhc3QtY2hpbGQge1xyXG4gICAgICAgIGJvcmRlci1ib3R0b206IDAgbm9uZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLmxhYmVsIHtcclxuICAgICAgd2lkdGg6IDYwcnB4O1xyXG4gICAgICBjb2xvcjogIzg5OGI5NDtcclxuICAgICAgbWFyZ2luOiAwIDE2cnB4IDAgMTBycHg7XHJcbiAgICB9XHJcbiAgICAudGV4dCB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qIOWVhuWTgeivpuaDhSAqL1xyXG4uZGV0YWlsIHtcclxuICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gIC5jb250ZW50IHtcclxuICAgIG1hcmdpbi1sZWZ0OiAtMjBycHg7XHJcbiAgICAuaW1hZ2Uge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgIH1cclxuICB9XHJcbiAgLnByb3BlcnRpZXMge1xyXG4gICAgcGFkZGluZzogMCAyMHJweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDMwcnB4O1xyXG4gICAgLml0ZW0ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBsaW5lLWhlaWdodDogMjtcclxuICAgICAgcGFkZGluZzogMTBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgICBib3JkZXItYm90dG9tOiAxcnB4IGRhc2hlZCAjY2NjO1xyXG4gICAgfVxyXG4gICAgLmxhYmVsIHtcclxuICAgICAgd2lkdGg6IDIwMHJweDtcclxuICAgIH1cclxuICAgIC52YWx1ZSB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiDlkIznsbvmjqjojZAgKi9cclxuLnNpbWlsYXIge1xyXG4gIC5jb250ZW50IHtcclxuICAgIHBhZGRpbmc6IDAgMjBycHggMjBycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtd3JhcDogd3JhcDtcclxuICAgIC5nb29kcyB7XHJcbiAgICAgIHdpZHRoOiAzNDBycHg7XHJcbiAgICAgIHBhZGRpbmc6IDI0cnB4IDIwcnB4IDIwcnB4O1xyXG4gICAgICBtYXJnaW46IDIwcnB4IDdycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgfVxyXG4gICAgLmltYWdlIHtcclxuICAgICAgd2lkdGg6IDMwMHJweDtcclxuICAgICAgaGVpZ2h0OiAyNjBycHg7XHJcbiAgICB9XHJcbiAgICAubmFtZSB7XHJcbiAgICAgIGhlaWdodDogODBycHg7XHJcbiAgICAgIG1hcmdpbjogMTBycHggMDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICMyNjI2MjY7XHJcbiAgICB9XHJcbiAgICAucHJpY2Uge1xyXG4gICAgICBsaW5lLWhlaWdodDogMTtcclxuICAgICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgICB9XHJcbiAgICAubnVtYmVyIHtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDJycHg7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5hdmlnYXRvciB7XHJcbiAgICAmOm50aC1jaGlsZChldmVuKSB7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qIOW6lemDqOW3peWFt+agjyAqL1xyXG4udG9vbGJhciB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgYm90dG9tOiBjYWxjKCh2YXIoLS13aW5kb3ctYm90dG9tKSkpO1xyXG4gIHotaW5kZXg6IDE7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBoZWlnaHQ6IDEwMHJweDtcclxuICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gIGJvcmRlci10b3A6IDFycHggc29saWQgI2VhZWFlYTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xyXG4gIC5idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAmID4gdmlldyB7XHJcbiAgICAgIHdpZHRoOiAyMjBycHg7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgbGluZS1oZWlnaHQ6IDcycnB4O1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNzJycHg7XHJcbiAgICB9XHJcbiAgICAuYWRkY2FydCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmE4Njg7XHJcbiAgICB9XHJcbiAgICAucGF5bWVudCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuICAgIH1cclxuICB9XHJcbiAgLmljb25zIHtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDIwcnB4O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgLy8g5YW85a65IEg1IOerr+WSjCBBcHAg56uv55qE5a+86Iiq6ZO+5o6l5qC35byPXHJcbiAgICAubmF2aWdhdG9yLXdyYXAsXHJcbiAgICAuaWNvbnMtYnV0dG9uIHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICBsaW5lLWhlaWdodDogMS40O1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICBtYXJnaW46IDA7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjBycHg7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAmOjphZnRlciB7XHJcbiAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0ZXh0IHtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cInVuaS1mb3Jtcy1pdGVtXCJcclxuXHRcdDpjbGFzcz1cIlsnaXMtZGlyZWN0aW9uLScgKyBsb2NhbExhYmVsUG9zICxib3JkZXI/J3VuaS1mb3Jtcy1pdGVtLS1ib3JkZXInOicnICxib3JkZXIgJiYgaXNGaXJzdEJvcmRlcj8naXMtZmlyc3QtYm9yZGVyJzonJ11cIj5cclxuXHRcdDxzbG90IG5hbWU9XCJsYWJlbFwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1mb3Jtcy1pdGVtX19sYWJlbFwiIDpjbGFzcz1cInsnbm8tbGFiZWwnOiFsYWJlbCAmJiAhaXNSZXF1aXJlZH1cIlxyXG5cdFx0XHRcdDpzdHlsZT1cInt3aWR0aDpsb2NhbExhYmVsV2lkdGgsanVzdGlmeUNvbnRlbnQ6IGxvY2FsTGFiZWxBbGlnbn1cIj5cclxuXHRcdFx0XHQ8dGV4dCB2LWlmPVwiaXNSZXF1aXJlZFwiIGNsYXNzPVwiaXMtcmVxdWlyZWRcIj4qPC90ZXh0PlxyXG5cdFx0XHRcdDx0ZXh0Pnt7bGFiZWx9fTwvdGV4dD5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC9zbG90PlxyXG5cdFx0PCEtLSAjaWZuZGVmIEFQUC1OVlVFIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ1bmktZm9ybXMtaXRlbV9fY29udGVudFwiPlxyXG5cdFx0XHQ8c2xvdD48L3Nsb3Q+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidW5pLWZvcm1zLWl0ZW1fX2Vycm9yXCIgOmNsYXNzPVwieydtc2ctLWFjdGl2ZSc6bXNnfVwiPlxyXG5cdFx0XHRcdDx0ZXh0Pnt7bXNnfX08L3RleHQ+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDwhLS0gI2VuZGlmIC0tPlxyXG5cdFx0PCEtLSAjaWZkZWYgQVBQLU5WVUUgLS0+XHJcblx0XHQ8dmlldyBjbGFzcz1cInVuaS1mb3Jtcy1pdGVtX19udXZlLWNvbnRlbnRcIj5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktZm9ybXMtaXRlbV9fY29udGVudFwiPlxyXG5cdFx0XHRcdDxzbG90Pjwvc2xvdD5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1mb3Jtcy1pdGVtX19lcnJvclwiIDpjbGFzcz1cInsnbXNnLS1hY3RpdmUnOm1zZ31cIj5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cImVycm9yLXRleHRcIj57e21zZ319PC90ZXh0PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8IS0tICNlbmRpZiAtLT5cclxuXHQ8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5cdC8qKlxyXG5cdCAqIHVuaS1mb21ycy1pdGVtIOihqOWNleWtkOe7hOS7tlxyXG5cdCAqIEBkZXNjcmlwdGlvbiB1bmktZm9tcnMtaXRlbSDooajljZXlrZDnu4Tku7bvvIzmj5Dkvpvkuobln7rnoYDluIPlsYDlt7Lnu4/moKHpqozog73liptcclxuXHQgKiBAdHV0b3JpYWwgaHR0cHM6Ly9leHQuZGNsb3VkLm5ldC5jbi9wbHVnaW4/aWQ9Mjc3M1xyXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gcmVxdWlyZWQg5piv5ZCm5b+F5aGr77yM5bem6L655pi+56S657qi6ImyXCIqXCLlj7dcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZyB9IFx0bGFiZWwgXHRcdFx0XHTovpPlhaXmoYblt6bovrnnmoTmloflrZfmj5DnpLpcclxuXHQgKiBAcHJvcGVydHkge051bWJlciB9IFx0bGFiZWxXaWR0aCBcdFx0XHRsYWJlbOeahOWuveW6pu+8jOWNleS9jXB477yI6buY6K6kNjXvvIlcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZyB9IFx0bGFiZWxBbGlnbiA9IFtsZWZ0fGNlbnRlcnxyaWdodF0gbGFiZWznmoTmloflrZflr7npvZDmlrnlvI/vvIjpu5jorqRsZWZ077yJXHJcblx0ICogXHRAdmFsdWUgbGVmdFx0XHRsYWJlbCDlt6bkvqfmmL7npLpcclxuXHQgKiBcdEB2YWx1ZSBjZW50ZXJcdGxhYmVsIOWxheS4rVxyXG5cdCAqIFx0QHZhbHVlIHJpZ2h0XHRsYWJlbCDlj7Pkvqflr7npvZBcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZyB9IFx0ZXJyb3JNZXNzYWdlIFx0XHTmmL7npLrnmoTplJnor6/mj5DnpLrlhoXlrrnvvIzlpoLmnpzkuLrnqbrlrZfnrKbkuLLmiJbogIVmYWxzZe+8jOWImeS4jeaYvuekuumUmeivr+S/oeaBr1xyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nIH0gXHRuYW1lIFx0XHRcdFx06KGo5Y2V5Z+f55qE5bGe5oCn5ZCN77yM5Zyo5L2/55So5qCh6aqM6KeE5YiZ5pe25b+F5aGrXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmcgfSBcdGxlZnRJY29uIFx0XHRcdOOAkDEuNC4w5bqf5byD44CRbGFiZWzlt6bovrnnmoTlm77moIfvvIzpmZAgdW5pLXVpIOeahOWbvuagh+WQjeensFxyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nIH0gXHRpY29uQ29sb3IgXHRcdOOAkDEuNC4w5bqf5byD44CR5bem6L656YCa6L+HaWNvbumFjee9rueahOWbvuagh+eahOminOiJsu+8iOm7mOiupCM2MDYyNjbvvIlcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gdmFsaWRhdGVUcmlnZ2VyID0gW2JpbmR8c3VibWl0fGJsdXJdXHTjgJAxLjQuMOW6n+W8g+OAkeagoemqjOinpuWPkeWZqOaWueW8jyDpu5jorqQgc3VibWl0XHJcblx0ICogXHRAdmFsdWUgYmluZCBcdOWPkeeUn+WPmOWMluaXtuinpuWPkVxyXG5cdCAqIFx0QHZhbHVlIHN1Ym1pdCDmj5DkuqTml7bop6blj5FcclxuXHQgKiBcdEB2YWx1ZSBibHVyIFx05aSx5Y6754Sm54K56Kem5Y+RXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmcgfSBcdGxhYmVsUG9zaXRpb24gPSBbdG9wfGxlZnRdIOOAkDEuNC4w5bqf5byD44CRbGFiZWznmoTmloflrZfnmoTkvY3nva7vvIjpu5jorqRsZWZ077yJXHJcblx0ICogXHRAdmFsdWUgdG9wXHTpobbpg6jmmL7npLogbGFiZWxcclxuXHQgKiBcdEB2YWx1ZSBsZWZ0XHTlt6bkvqfmmL7npLogbGFiZWxcclxuXHQgKi9cclxuXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0bmFtZTogJ3VuaUZvcm1zSXRlbScsXHJcblx0XHRvcHRpb25zOiB7XHJcblx0XHRcdHZpcnR1YWxIb3N0OiB0cnVlXHJcblx0XHR9LFxyXG5cdFx0cHJvdmlkZSgpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR1bmlGb3JtSXRlbTogdGhpc1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0aW5qZWN0OiB7XHJcblx0XHRcdGZvcm06IHtcclxuXHRcdFx0XHRmcm9tOiAndW5pRm9ybScsXHJcblx0XHRcdFx0ZGVmYXVsdDogbnVsbFxyXG5cdFx0XHR9LFxyXG5cdFx0fSxcclxuXHRcdHByb3BzOiB7XHJcblx0XHRcdC8vIOihqOWNleagoemqjOinhOWImVxyXG5cdFx0XHRydWxlczoge1xyXG5cdFx0XHRcdHR5cGU6IEFycmF5LFxyXG5cdFx0XHRcdGRlZmF1bHQgKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDooajljZXln5/nmoTlsZ7mgKflkI3vvIzlnKjkvb/nlKjmoKHpqozop4TliJnml7blv4XloatcclxuXHRcdFx0bmFtZToge1xyXG5cdFx0XHRcdHR5cGU6IFtTdHJpbmcsIEFycmF5XSxcclxuXHRcdFx0XHRkZWZhdWx0OiAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZXF1aXJlZDoge1xyXG5cdFx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdFx0ZGVmYXVsdDogZmFsc2VcclxuXHRcdFx0fSxcclxuXHRcdFx0bGFiZWw6IHtcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJydcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gbGFiZWznmoTlrr3luqYg77yM6buY6K6kIDgwXHJcblx0XHRcdGxhYmVsV2lkdGg6IHtcclxuXHRcdFx0XHR0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIGxhYmVsIOWxheS4reaWueW8j++8jOm7mOiupCBsZWZ0IOWPluWAvCBsZWZ0L2NlbnRlci9yaWdodFxyXG5cdFx0XHRsYWJlbEFsaWduOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIOW8uuWItuaYvuekuumUmeivr+S/oeaBr1xyXG5cdFx0XHRlcnJvck1lc3NhZ2U6IHtcclxuXHRcdFx0XHR0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcclxuXHRcdFx0XHRkZWZhdWx0OiAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyAxLjQuMCDlvIPnlKjvvIznu5/kuIDkvb/nlKggZm9ybSDnmoTmoKHpqozml7bmnLpcclxuXHRcdFx0Ly8gdmFsaWRhdGVUcmlnZ2VyOiB7XHJcblx0XHRcdC8vIFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHQvLyBcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdC8vIH0sXHJcblx0XHRcdC8vIDEuNC4wIOW8g+eUqO+8jOe7n+S4gOS9v+eUqCBmb3JtIOeahGxhYmVsIOS9jee9rlxyXG5cdFx0XHQvLyBsYWJlbFBvc2l0aW9uOiB7XHJcblx0XHRcdC8vIFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHQvLyBcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdC8vIH0sXHJcblx0XHRcdC8vIDEuNC4wIOS7peS4i+WxnuaAp+W3sue7j+W6n+W8g++8jOivt+S9v+eUqCAgI2xhYmVsIOaPkuanveS7o+abv1xyXG5cdFx0XHRsZWZ0SWNvbjogU3RyaW5nLFxyXG5cdFx0XHRpY29uQ29sb3I6IHtcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJyM2MDYyNjYnXHJcblx0XHRcdH0sXHJcblx0XHR9LFxyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRlcnJNc2c6ICcnLFxyXG5cdFx0XHRcdGlzUmVxdWlyZWQ6IGZhbHNlLFxyXG5cdFx0XHRcdHVzZXJSdWxlczogbnVsbCxcclxuXHRcdFx0XHRsb2NhbExhYmVsQWxpZ246ICdsZWZ0JyxcclxuXHRcdFx0XHRsb2NhbExhYmVsV2lkdGg6ICc2NXB4JyxcclxuXHRcdFx0XHRsb2NhbExhYmVsUG9zOiAnbGVmdCcsXHJcblx0XHRcdFx0Ym9yZGVyOiBmYWxzZSxcclxuXHRcdFx0XHRpc0ZpcnN0Qm9yZGVyOiBmYWxzZSxcclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblx0XHRjb21wdXRlZDoge1xyXG5cdFx0XHQvLyDlpITnkIbplJnor6/kv6Hmga9cclxuXHRcdFx0bXNnKCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9yTWVzc2FnZSB8fCB0aGlzLmVyck1zZztcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdHdhdGNoOiB7XHJcblx0XHRcdC8vIOinhOWImeWPkeeUn+WPmOWMlumAmuefpeWtkOe7hOS7tuabtOaWsFxyXG5cdFx0XHQnZm9ybS5mb3JtUnVsZXMnKHZhbCkge1xyXG5cdFx0XHRcdC8vIFRPRE8g5aSE55CG5aS05p2hdnVlMyB3YXRjaOS4jeeUn+aViOeahOmXrumimFxyXG5cdFx0XHRcdC8vICNpZm5kZWYgTVAtVE9VVElBT1xyXG5cdFx0XHRcdHRoaXMuaW5pdCgpXHJcblx0XHRcdFx0Ly8gI2VuZGlmXHJcblx0XHRcdH0sXHJcblx0XHRcdCdmb3JtLmxhYmVsV2lkdGgnKHZhbCkge1xyXG5cdFx0XHRcdC8vIOWuveW6plxyXG5cdFx0XHRcdHRoaXMubG9jYWxMYWJlbFdpZHRoID0gdGhpcy5fbGFiZWxXaWR0aFVuaXQodmFsKVxyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0J2Zvcm0ubGFiZWxQb3NpdGlvbicodmFsKSB7XHJcblx0XHRcdFx0Ly8g5qCH562+5L2N572uXHJcblx0XHRcdFx0dGhpcy5sb2NhbExhYmVsUG9zID0gdGhpcy5fbGFiZWxQb3NpdGlvbigpXHJcblx0XHRcdH0sXHJcblx0XHRcdCdmb3JtLmxhYmVsQWxpZ24nKHZhbCkge1xyXG5cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGNyZWF0ZWQoKSB7XHJcblx0XHRcdHRoaXMuaW5pdCh0cnVlKVxyXG5cdFx0XHRpZiAodGhpcy5uYW1lICYmIHRoaXMuZm9ybSkge1xyXG5cdFx0XHRcdC8vIFRPRE8g5aSE55CG5aS05p2hdnVlMyB3YXRjaOS4jeeUn+aViOeahOmXrumimFxyXG5cdFx0XHRcdC8vICNpZmRlZiBNUC1UT1VUSUFPXHJcblx0XHRcdFx0dGhpcy4kd2F0Y2goJ2Zvcm0uZm9ybVJ1bGVzJywgKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pbml0KClcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC8vICNlbmRpZlxyXG5cclxuXHRcdFx0XHQvLyDnm5HlkKzlj5jljJZcclxuXHRcdFx0XHR0aGlzLiR3YXRjaChcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdmFsID0gdGhpcy5mb3JtLl9nZXREYXRhVmFsdWUodGhpcy5uYW1lLCB0aGlzLmZvcm0ubG9jYWxEYXRhKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0KHZhbHVlLCBvbGRWYWwpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaXNFcXVhbCA9IHRoaXMuZm9ybS5faXNFcXVhbCh2YWx1ZSwgb2xkVmFsKVxyXG5cdFx0XHRcdFx0XHQvLyDnroDljZXliKTmlq3liY3lkI7lgLznmoTlj5jljJbvvIzlj6rmnInlj5HnlJ/lj5jljJbmiY3kvJrlj5HnlJ/moKHpqoxcclxuXHRcdFx0XHRcdFx0Ly8gVE9ETyAg5aaC5p6cIG9sZFZhbCA9IHVuZGVmaW5lZCDvvIzpgqPkuYjlpKfmpoLnjofmmK/mupDmlbDmja7ph4zmsqHmnInlgLzlr7zoh7Qg77yM6L+Z5Liq5oOF5Ya15LiN5ZOm5qCh6aqMICzlj6/og73kuI3kuKXosKgg77yM6ZyA6KaB5Zyo5YGa6KeC5a+fXHJcblx0XHRcdFx0XHRcdC8vIGZpeCBieSBtZWhhb3RpYW4g5pqC5pe25Y+W5raIICYmIG9sZFZhbCAhPT0gdW5kZWZpbmVkIO+8jOWmguaenGZvcm1EYXRhIOS4reS4jeWtmOWcqO+8jOWPr+iDveS8muS4jeagoemqjFxyXG5cdFx0XHRcdFx0XHRpZiAoIWlzRXF1YWwpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCB2YWwgPSB0aGlzLml0ZW1TZXRWYWx1ZSh2YWx1ZSlcclxuXHRcdFx0XHRcdFx0XHR0aGlzLm9uRmllbGRDaGFuZ2UodmFsLCBmYWxzZSlcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwge1xyXG5cdFx0XHRcdFx0XHRpbW1lZGlhdGU6IGZhbHNlXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdH0sXHJcblx0XHQvLyAjaWZuZGVmIFZVRTNcclxuXHRcdGRlc3Ryb3llZCgpIHtcclxuXHRcdFx0aWYgKHRoaXMuX19pc1VubW91bnRlZCkgcmV0dXJuXHJcblx0XHRcdHRoaXMudW5Jbml0KClcclxuXHRcdH0sXHJcblx0XHQvLyAjZW5kaWZcclxuXHRcdC8vICNpZmRlZiBWVUUzXHJcblx0XHR1bm1vdW50ZWQoKSB7XHJcblx0XHRcdHRoaXMuX19pc1VubW91bnRlZCA9IHRydWVcclxuXHRcdFx0dGhpcy51bkluaXQoKVxyXG5cdFx0fSxcclxuXHRcdC8vICNlbmRpZlxyXG5cdFx0bWV0aG9kczoge1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog5aSW6YOo6LCD55So5pa55rOVXHJcblx0XHRcdCAqIOiuvue9ruinhOWImSDvvIzkuLvopoHnlKjkuo7lsI/nqIvluo/oh6rlrprkuYnmo4Dpqozop4TliJlcclxuXHRcdFx0ICogQHBhcmFtIHtBcnJheX0gcnVsZXMg6KeE5YiZ5rqQ5pWw5o2uXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRzZXRSdWxlcyhydWxlcyA9IG51bGwpIHtcclxuXHRcdFx0XHR0aGlzLnVzZXJSdWxlcyA9IHJ1bGVzXHJcblx0XHRcdFx0dGhpcy5pbml0KGZhbHNlKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDlhbzlrrnogIHniYjmnKzooajljZXnu4Tku7ZcclxuXHRcdFx0c2V0VmFsdWUoKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3NldFZhbHVlIOaWueazleW3sue7j+W8g+eUqO+8jOivt+S9v+eUqOacgOaWsOeJiOacrOeahCB1bmktZm9ybXMg6KGo5Y2V57uE5Lu25Lul5Y+K5YW25LuW5YWz6IGU57uE5Lu244CCJyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiDlpJbpg6josIPnlKjmlrnms5VcclxuXHRcdFx0ICog5qCh6aqM5pWw5o2uXHJcblx0XHRcdCAqIEBwYXJhbSB7YW55fSB2YWx1ZSDpnIDopoHmoKHpqoznmoTmlbDmja5cclxuXHRcdFx0ICogQHBhcmFtIHtib29sZWFufSDmmK/lkKbnq4vljbPmoKHpqoxcclxuXHRcdFx0ICogQHJldHVybiB7QXJyYXl8bnVsbH0g5qCh6aqM5YaF5a65XHJcblx0XHRcdCAqL1xyXG5cdFx0XHRhc3luYyBvbkZpZWxkQ2hhbmdlKHZhbHVlLCBmb3JtdHJpZ2dlciA9IHRydWUpIHtcclxuXHRcdFx0XHRjb25zdCB7XHJcblx0XHRcdFx0XHRmb3JtRGF0YSxcclxuXHRcdFx0XHRcdGxvY2FsRGF0YSxcclxuXHRcdFx0XHRcdGVyclNob3dUeXBlLFxyXG5cdFx0XHRcdFx0dmFsaWRhdGVDaGVjayxcclxuXHRcdFx0XHRcdHZhbGlkYXRlVHJpZ2dlcixcclxuXHRcdFx0XHRcdF9pc1JlcXVpcmVkRmllbGQsXHJcblx0XHRcdFx0XHRfcmVhbE5hbWVcclxuXHRcdFx0XHR9ID0gdGhpcy5mb3JtXHJcblx0XHRcdFx0Y29uc3QgbmFtZSA9IF9yZWFsTmFtZSh0aGlzLm5hbWUpXHJcblx0XHRcdFx0aWYgKCF2YWx1ZSkge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSB0aGlzLmZvcm0uZm9ybURhdGFbbmFtZV1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZml4ZCBieSBtZWhhb3RpYW4g5LiN5Zyo5qCh6aqM5YmN5riF56m65L+h5oGv77yM6Kej5Yaz6Zeq5bGP55qE6Zeu6aKYXHJcblx0XHRcdFx0Ly8gdGhpcy5lcnJNc2cgPSAnJztcclxuXHJcblx0XHRcdFx0Ly8gZml4IGJ5IG1laGFvdGlhbiDop6PlhrPmsqHmnInmo4Dpqozop4TliJnnmoTmg4XlhrXkuIvvvIzmipvlh7rplJnor6/nmoTpl67pophcclxuXHRcdFx0XHRjb25zdCBydWxlTGVuID0gdGhpcy5pdGVtUnVsZXMucnVsZXMgJiYgdGhpcy5pdGVtUnVsZXMucnVsZXMubGVuZ3RoXHJcblx0XHRcdFx0aWYgKCF0aGlzLnZhbGlkYXRvciB8fCAhcnVsZUxlbiB8fCBydWxlTGVuID09PSAwKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdC8vIOajgOmqjOaXtuaculxyXG5cdFx0XHRcdC8vIGxldCB0cmlnZ2VyID0gdGhpcy5pc1RyaWdnZXIodGhpcy5pdGVtUnVsZXMudmFsaWRhdGVUcmlnZ2VyLCB0aGlzLnZhbGlkYXRlVHJpZ2dlciwgdmFsaWRhdGVUcmlnZ2VyKTtcclxuXHRcdFx0XHRjb25zdCBpc1JlcXVpcmVkRmllbGQgPSBfaXNSZXF1aXJlZEZpZWxkKHRoaXMuaXRlbVJ1bGVzLnJ1bGVzIHx8IFtdKTtcclxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gbnVsbDtcclxuXHRcdFx0XHQvLyDlj6rmnInnrYnkuo4gYmluZCDml7Yg77yM5omN6IO95byA5ZCv5pe25a6e5qCh6aqMXHJcblx0XHRcdFx0aWYgKHZhbGlkYXRlVHJpZ2dlciA9PT0gJ2JpbmQnIHx8IGZvcm10cmlnZ2VyKSB7XHJcblx0XHRcdFx0XHQvLyDmoKHpqozlvZPliY3ooajljZXpoblcclxuXHRcdFx0XHRcdHJlc3VsdCA9IGF3YWl0IHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlVXBkYXRlKHtcclxuXHRcdFx0XHRcdFx0XHRbbmFtZV06IHZhbHVlXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGZvcm1EYXRhXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdC8vIOWIpOaWreaYr+WQpuW/heWhqyzpnZ7lv4XloavvvIzkuI3loavkuI3moKHpqozvvIzloavlhpnmiY3moKHpqowgLOaaguaXtuWPquWkhOeQhiB1bmRlZmluZWQgIOWSjOepuueahOaDheWGtVxyXG5cdFx0XHRcdFx0aWYgKCFpc1JlcXVpcmVkRmllbGQgJiYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSkge1xyXG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBudWxsO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIOWIpOaWremUmeivr+S/oeaBr+aYvuekuuexu+Wei1xyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiByZXN1bHQuZXJyb3JNZXNzYWdlKSB7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJTaG93VHlwZSA9PT0gJ3VuZGVydGV4dCcpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyDojrflj5bplJnor6/kv6Hmga9cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmVyck1zZyA9ICFyZXN1bHQgPyAnJyA6IHJlc3VsdC5lcnJvck1lc3NhZ2U7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGVyclNob3dUeXBlID09PSAndG9hc3QnKSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogcmVzdWx0LmVycm9yTWVzc2FnZSB8fCAn5qCh6aqM6ZSZ6K+vJyxcclxuXHRcdFx0XHRcdFx0XHRcdGljb246ICdub25lJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChlcnJTaG93VHlwZSA9PT0gJ21vZGFsJykge1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmVzdWx0LmVycm9yTWVzc2FnZSB8fCAn5qCh6aqM6ZSZ6K+vJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmVyck1zZyA9ICcnXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyDpgJrnn6UgZm9ybSDnu4Tku7bmm7TmlrDkuovku7ZcclxuXHRcdFx0XHRcdHZhbGlkYXRlQ2hlY2socmVzdWx0ID8gcmVzdWx0IDogbnVsbClcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5lcnJNc2cgPSAnJ1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0ID8gcmVzdWx0IDogbnVsbDtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOWIneWni+e7hOS7tuaVsOaNrlxyXG5cdFx0XHQgKi9cclxuXHRcdFx0aW5pdCh0eXBlID0gZmFsc2UpIHtcclxuXHRcdFx0XHRjb25zdCB7XHJcblx0XHRcdFx0XHR2YWxpZGF0b3IsXHJcblx0XHRcdFx0XHRmb3JtUnVsZXMsXHJcblx0XHRcdFx0XHRjaGlsZHJlbnMsXHJcblx0XHRcdFx0XHRmb3JtRGF0YSxcclxuXHRcdFx0XHRcdGxvY2FsRGF0YSxcclxuXHRcdFx0XHRcdF9yZWFsTmFtZSxcclxuXHRcdFx0XHRcdGxhYmVsV2lkdGgsXHJcblx0XHRcdFx0XHRfZ2V0RGF0YVZhbHVlLFxyXG5cdFx0XHRcdFx0X3NldERhdGFWYWx1ZVxyXG5cdFx0XHRcdH0gPSB0aGlzLmZvcm0gfHwge31cclxuXHRcdFx0XHQvLyDlr7npvZDmlrnlvI9cclxuXHRcdFx0XHR0aGlzLmxvY2FsTGFiZWxBbGlnbiA9IHRoaXMuX2p1c3RpZnlDb250ZW50KClcclxuXHRcdFx0XHQvLyDlrr3luqZcclxuXHRcdFx0XHR0aGlzLmxvY2FsTGFiZWxXaWR0aCA9IHRoaXMuX2xhYmVsV2lkdGhVbml0KGxhYmVsV2lkdGgpXHJcblx0XHRcdFx0Ly8g5qCH562+5L2N572uXHJcblx0XHRcdFx0dGhpcy5sb2NhbExhYmVsUG9zID0gdGhpcy5fbGFiZWxQb3NpdGlvbigpXHJcblx0XHRcdFx0dGhpcy5pc1JlcXVpcmVkID0gdGhpcy5yZXF1aXJlZFxyXG5cdFx0XHRcdC8vIOWwhumcgOimgeagoemqjOeahOWtkOe7hOS7tuWKoOWFpWZvcm0g6Zif5YiXXHJcblx0XHRcdFx0dGhpcy5mb3JtICYmIHR5cGUgJiYgY2hpbGRyZW5zLnB1c2godGhpcylcclxuXHJcblx0XHRcdFx0aWYgKCF2YWxpZGF0b3IgfHwgIWZvcm1SdWxlcykgcmV0dXJuXHJcblx0XHRcdFx0Ly8g5Yik5pat56ys5LiA5LiqIGl0ZW1cclxuXHRcdFx0XHRpZiAoIXRoaXMuZm9ybS5pc0ZpcnN0Qm9yZGVyKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZvcm0uaXNGaXJzdEJvcmRlciA9IHRydWU7XHJcblx0XHRcdFx0XHR0aGlzLmlzRmlyc3RCb3JkZXIgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8g5Yik5patIGdyb3VwIOmHjOeahOesrOS4gOS4qiBpdGVtXHJcblx0XHRcdFx0aWYgKHRoaXMuZ3JvdXApIHtcclxuXHRcdFx0XHRcdGlmICghdGhpcy5ncm91cC5pc0ZpcnN0Qm9yZGVyKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZ3JvdXAuaXNGaXJzdEJvcmRlciA9IHRydWU7XHJcblx0XHRcdFx0XHRcdHRoaXMuaXNGaXJzdEJvcmRlciA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuYm9yZGVyID0gdGhpcy5mb3JtLmJvcmRlcjtcclxuXHRcdFx0XHQvLyDojrflj5blrZDln5/nmoTnnJ/lrp7lkI3np7BcclxuXHRcdFx0XHRjb25zdCBuYW1lID0gX3JlYWxOYW1lKHRoaXMubmFtZSlcclxuXHRcdFx0XHRjb25zdCBpdGVtUnVsZSA9IHRoaXMudXNlclJ1bGVzIHx8IHRoaXMucnVsZXNcclxuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1SdWxlcyA9PT0gJ29iamVjdCcgJiYgaXRlbVJ1bGUpIHtcclxuXHRcdFx0XHRcdC8vIOWtkOinhOWImeabv+aNoueItuinhOWImVxyXG5cdFx0XHRcdFx0Zm9ybVJ1bGVzW25hbWVdID0ge1xyXG5cdFx0XHRcdFx0XHRydWxlczogaXRlbVJ1bGVcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhbGlkYXRvci51cGRhdGVTY2hlbWEoZm9ybVJ1bGVzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8g5rOo5YaM5qCh6aqM6KeE5YiZXHJcblx0XHRcdFx0Y29uc3QgaXRlbVJ1bGVzID0gZm9ybVJ1bGVzW25hbWVdIHx8IHt9XHJcblx0XHRcdFx0dGhpcy5pdGVtUnVsZXMgPSBpdGVtUnVsZXNcclxuXHRcdFx0XHQvLyDms6jlhozmoKHpqozlh73mlbBcclxuXHRcdFx0XHR0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvclxyXG5cdFx0XHRcdC8vIOm7mOiupOWAvOi1i+S6iFxyXG5cdFx0XHRcdHRoaXMuaXRlbVNldFZhbHVlKF9nZXREYXRhVmFsdWUodGhpcy5uYW1lLCBsb2NhbERhdGEpKVxyXG5cdFx0XHRcdHRoaXMuaXNSZXF1aXJlZCA9IHRoaXMuX2lzUmVxdWlyZWQoKVxyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0dW5Jbml0KCkge1xyXG5cdFx0XHRcdGlmICh0aGlzLmZvcm0pIHtcclxuXHRcdFx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRcdFx0Y2hpbGRyZW5zLFxyXG5cdFx0XHRcdFx0XHRmb3JtRGF0YSxcclxuXHRcdFx0XHRcdFx0X3JlYWxOYW1lXHJcblx0XHRcdFx0XHR9ID0gdGhpcy5mb3JtXHJcblx0XHRcdFx0XHRjaGlsZHJlbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGl0ZW0gPT09IHRoaXMpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZvcm0uY2hpbGRyZW5zLnNwbGljZShpbmRleCwgMSlcclxuXHRcdFx0XHRcdFx0XHRkZWxldGUgZm9ybURhdGFbX3JlYWxOYW1lKGl0ZW0ubmFtZSldXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDorr7nva5pdGVtIOeahOWAvFxyXG5cdFx0XHRpdGVtU2V0VmFsdWUodmFsdWUpIHtcclxuXHRcdFx0XHRjb25zdCBuYW1lID0gdGhpcy5mb3JtLl9yZWFsTmFtZSh0aGlzLm5hbWUpXHJcblx0XHRcdFx0Y29uc3QgcnVsZXMgPSB0aGlzLml0ZW1SdWxlcy5ydWxlcyB8fCBbXVxyXG5cdFx0XHRcdGNvbnN0IHZhbCA9IHRoaXMuZm9ybS5fZ2V0VmFsdWUobmFtZSwgdmFsdWUsIHJ1bGVzKVxyXG5cdFx0XHRcdHRoaXMuZm9ybS5fc2V0RGF0YVZhbHVlKG5hbWUsIHRoaXMuZm9ybS5mb3JtRGF0YSwgdmFsKVxyXG5cdFx0XHRcdHJldHVybiB2YWxcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiDnp7vpmaTor6XooajljZXpobnnmoTmoKHpqoznu5PmnpxcclxuXHRcdFx0ICovXHJcblx0XHRcdGNsZWFyVmFsaWRhdGUoKSB7XHJcblx0XHRcdFx0dGhpcy5lcnJNc2cgPSAnJztcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIOaYr+WQpuaYvuekuuaYn+WPt1xyXG5cdFx0XHRfaXNSZXF1aXJlZCgpIHtcblx0XHRcdFx0Ly8gVE9ETyDkuI3moLnmja7op4TliJnmmL7npLog5pif5Y+377yM6ICD6JmR5ZCO57ut5YW85a65XHJcblx0XHRcdFx0Ly8gaWYgKHRoaXMuZm9ybSkge1xyXG5cdFx0XHRcdC8vIFx0aWYgKHRoaXMuZm9ybS5faXNSZXF1aXJlZEZpZWxkKHRoaXMuaXRlbVJ1bGVzLnJ1bGVzIHx8IFtdKSAmJiB0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdFx0Ly8gXHRcdHJldHVybiB0cnVlXHJcblx0XHRcdFx0Ly8gXHR9XHJcblx0XHRcdFx0Ly8gXHRyZXR1cm4gZmFsc2VcclxuXHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWlyZWRcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8vIOWkhOeQhuWvuem9kOaWueW8j1xyXG5cdFx0XHRfanVzdGlmeUNvbnRlbnQoKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuZm9ybSkge1xyXG5cdFx0XHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdFx0XHRsYWJlbEFsaWduXHJcblx0XHRcdFx0XHR9ID0gdGhpcy5mb3JtXHJcblx0XHRcdFx0XHRsZXQgbGFiZWxBbGkgPSB0aGlzLmxhYmVsQWxpZ24gPyB0aGlzLmxhYmVsQWxpZ24gOiBsYWJlbEFsaWduO1xyXG5cdFx0XHRcdFx0aWYgKGxhYmVsQWxpID09PSAnbGVmdCcpIHJldHVybiAnZmxleC1zdGFydCc7XHJcblx0XHRcdFx0XHRpZiAobGFiZWxBbGkgPT09ICdjZW50ZXInKSByZXR1cm4gJ2NlbnRlcic7XHJcblx0XHRcdFx0XHRpZiAobGFiZWxBbGkgPT09ICdyaWdodCcpIHJldHVybiAnZmxleC1lbmQnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gJ2ZsZXgtc3RhcnQnO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDlpITnkIYgbGFiZWzlrr3luqbljZXkvY0gLOe7p+aJv+eItuWFg+e0oOeahOWAvFxyXG5cdFx0XHRfbGFiZWxXaWR0aFVuaXQobGFiZWxXaWR0aCkge1xyXG5cclxuXHRcdFx0XHQvLyBpZiAodGhpcy5mb3JtKSB7XHJcblx0XHRcdFx0Ly8gXHRjb25zdCB7XHJcblx0XHRcdFx0Ly8gXHRcdGxhYmVsV2lkdGhcclxuXHRcdFx0XHQvLyBcdH0gPSB0aGlzLmZvcm1cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5udW0ycHgodGhpcy5sYWJlbFdpZHRoID8gdGhpcy5sYWJlbFdpZHRoIDogKGxhYmVsV2lkdGggfHwgKHRoaXMubGFiZWwgPyA2NSA6ICdhdXRvJykpKVxyXG5cdFx0XHRcdC8vIH1cclxuXHRcdFx0XHQvLyByZXR1cm4gJzY1cHgnXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIOWkhOeQhiBsYWJlbCDkvY3nva5cclxuXHRcdFx0X2xhYmVsUG9zaXRpb24oKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuZm9ybSkgcmV0dXJuIHRoaXMuZm9ybS5sYWJlbFBvc2l0aW9uIHx8ICdsZWZ0J1xyXG5cdFx0XHRcdHJldHVybiAnbGVmdCdcclxuXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog6Kem5Y+R5pe25py6XHJcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBydWxlIOW9k+WJjeinhOWImeWGheaXtuaculxyXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gaXRlbVJsdWUg5b2T5YmN57uE5Lu25pe25py6XHJcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnRSdWxlIOeItue7hOS7tuaXtuaculxyXG5cdFx0XHQgKi9cclxuXHRcdFx0aXNUcmlnZ2VyKHJ1bGUsIGl0ZW1SbHVlLCBwYXJlbnRSdWxlKSB7XHJcblx0XHRcdFx0Ly8gIGJpbmQgIHN1Ym1pdFxyXG5cdFx0XHRcdGlmIChydWxlID09PSAnc3VibWl0JyB8fCAhcnVsZSkge1xyXG5cdFx0XHRcdFx0aWYgKHJ1bGUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoaXRlbVJsdWUgIT09ICdiaW5kJykge1xyXG5cdFx0XHRcdFx0XHRcdGlmICghaXRlbVJsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwYXJlbnRSdWxlID09PSAnJyA/ICdiaW5kJyA6ICdzdWJtaXQnO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJ3N1Ym1pdCc7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuICdiaW5kJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiAnc3VibWl0JztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuICdiaW5kJztcclxuXHRcdFx0fSxcclxuXHRcdFx0bnVtMnB4KG51bSkge1xyXG5cdFx0XHRcdGlmICh0eXBlb2YgbnVtID09PSAnbnVtYmVyJykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGAke251bX1weGBcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIG51bVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuXHQudW5pLWZvcm1zLWl0ZW0ge1xyXG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdC8qICNpZmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0Ly8g5ZyoIG52dWUg5Lit77yM5L2/55SoIG1hcmdpbi1ib3R0b20gZXJyb3Ig5L+h5oGv5Lya6KKr6ZqQ6JePXHJcblx0XHRwYWRkaW5nLWJvdHRvbTogMjJweDtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMjJweDtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0ZmxleC1kaXJlY3Rpb246IHJvdztcclxuXHJcblx0XHQmX19sYWJlbCB7XHJcblx0XHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcblx0XHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0XHRcdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcclxuXHRcdFx0Y29sb3I6ICM2MDYyNjY7XHJcblx0XHRcdGhlaWdodDogMzZweDtcclxuXHRcdFx0cGFkZGluZzogMCAxMnB4IDAgMDtcclxuXHRcdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdFx0XHRmbGV4LXNocmluazogMDtcclxuXHRcdFx0LyogI2VuZGlmICovXHJcblxyXG5cdFx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblxyXG5cdFx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdFx0Ji5uby1sYWJlbCB7XHJcblx0XHRcdFx0cGFkZGluZzogMDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdCZfX2NvbnRlbnQge1xyXG5cdFx0XHQvKiAjaWZuZGVmIE1QLVRPVVRJQU8gKi9cclxuXHRcdFx0Ly8gZGlzcGxheTogZmxleDtcclxuXHRcdFx0Ly8gYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHRcdFx0LyogI2VuZGlmICovXHJcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xyXG5cdFx0XHRmbGV4OiAxO1xyXG5cdFx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0XHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogcm93O1xyXG5cclxuXHRcdFx0LyogI2lmbmRlZiBBUFAgfHwgSDUgfHwgTVAtV0VJWElOIHx8IEFQUC1OVlVFICovXHJcblx0XHRcdC8vIFRPRE8g5Zug5Li65bCP56iL5bqP5bmz5Y+w5Lya5aSa5LiA5bGC5qCH562+6IqC54K5IO+8jOaJgOS7pemcgOimgeWcqOWkmuS9meiKgueCuee7p+aJv+W9k+WJjeagt+W8j1xyXG5cdFx0XHQmPnVuaS1lYXN5aW5wdXQsXHJcblx0XHRcdCY+dW5pLWRhdGEtcGlja2VyIHtcclxuXHRcdFx0XHR3aWR0aDogMTAwJTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogI2VuZGlmICovXHJcblxyXG5cdFx0fVxyXG5cclxuXHRcdCYgLnVuaS1mb3Jtcy1pdGVtX19udXZlLWNvbnRlbnQge1xyXG5cdFx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG5cdFx0XHRmbGV4OiAxO1xyXG5cdFx0fVxyXG5cclxuXHRcdCZfX2Vycm9yIHtcclxuXHRcdFx0Y29sb3I6ICNmNTZjNmM7XHJcblx0XHRcdGZvbnQtc2l6ZTogMTJweDtcclxuXHRcdFx0bGluZS1oZWlnaHQ6IDE7XHJcblx0XHRcdHBhZGRpbmctdG9wOiA0cHg7XHJcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0XHR0b3A6IDEwMCU7XHJcblx0XHRcdGxlZnQ6IDA7XHJcblx0XHRcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzO1xyXG5cdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xyXG5cdFx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdFx0LyogI2lmZGVmIEFQUC1OVlVFICovXHJcblx0XHRcdGJvdHRvbTogNXB4O1xyXG5cdFx0XHQvKiAjZW5kaWYgKi9cclxuXHJcblx0XHRcdG9wYWNpdHk6IDA7XHJcblxyXG5cdFx0XHQuZXJyb3ItdGV4dCB7XHJcblx0XHRcdFx0Ly8g5Y+q5pyJIG52dWUg5LiL6L+Z5Liq5qC35byP5omN55Sf5pWIXHJcblx0XHRcdFx0Y29sb3I6ICNmNTZjNmM7XHJcblx0XHRcdFx0Zm9udC1zaXplOiAxMnB4O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQmLm1zZy0tYWN0aXZlIHtcclxuXHRcdFx0XHRvcGFjaXR5OiAxO1xyXG5cdFx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyDkvY3nva7kv67ppbDmoLflvI9cclxuXHRcdCYuaXMtZGlyZWN0aW9uLWxlZnQge1xyXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogcm93O1xyXG5cdFx0fVxyXG5cclxuXHRcdCYuaXMtZGlyZWN0aW9uLXRvcCB7XHJcblx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcblxyXG5cdFx0XHQudW5pLWZvcm1zLWl0ZW1fX2xhYmVsIHtcclxuXHRcdFx0XHRwYWRkaW5nOiAwIDAgOHB4O1xyXG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiAxLjU3MTU7XHJcblx0XHRcdFx0dGV4dC1hbGlnbjogbGVmdDtcclxuXHRcdFx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHRcdFx0d2hpdGUtc3BhY2U6IGluaXRpYWw7XHJcblx0XHRcdFx0LyogI2VuZGlmICovXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQuaXMtcmVxdWlyZWQge1xyXG5cdFx0XHQvLyBjb2xvcjogJHVuaS1jb2xvci1lcnJvcjtcclxuXHRcdFx0Y29sb3I6ICNkZDUyNGQ7XHJcblx0XHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdC51bmktZm9ybXMtaXRlbS0tYm9yZGVyIHtcclxuXHRcdG1hcmdpbi1ib3R0b206IDA7XHJcblx0XHRwYWRkaW5nOiAxMHB4IDA7XHJcblx0XHQvLyBwYWRkaW5nLWJvdHRvbTogMDtcclxuXHRcdGJvcmRlci10b3A6IDFweCAjZWVlIHNvbGlkO1xyXG5cclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdC51bmktZm9ybXMtaXRlbV9fY29udGVudCB7XHJcblx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcblx0XHRcdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuXHRcdFx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XHJcblxyXG5cdFx0XHQudW5pLWZvcm1zLWl0ZW1fX2Vycm9yIHtcclxuXHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHRcdFx0dG9wOiA1cHg7XHJcblx0XHRcdFx0bGVmdDogMDtcclxuXHRcdFx0XHRwYWRkaW5nLXRvcDogMDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cclxuXHRcdC8qICNpZmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcblxyXG5cdFx0LnVuaS1mb3Jtcy1pdGVtX19lcnJvciB7XHJcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRcdFx0dG9wOiAwcHg7XHJcblx0XHRcdGxlZnQ6IDA7XHJcblx0XHRcdHBhZGRpbmctdG9wOiAwO1xyXG5cdFx0XHRtYXJnaW4tdG9wOiA1cHg7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogI2VuZGlmICovXHJcblxyXG5cdH1cclxuXHJcblx0LmlzLWZpcnN0LWJvcmRlciB7XHJcblx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdC8qICNpZmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0Ym9yZGVyLXdpZHRoOiAwO1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0fVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgZSBmcm9tXCJAL3BhZ2VzLmpzb25cIjtcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJkZWZhdWx0XCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIG4oZSx0LG4pe3JldHVybiBlKG49e3BhdGg6dCxleHBvcnRzOnt9LHJlcXVpcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJEeW5hbWljIHJlcXVpcmVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBAcm9sbHVwL3BsdWdpbi1jb21tb25qc1wiKX0obnVsbD09dCYmbi5wYXRoKX19LG4uZXhwb3J0cyksbi5leHBvcnRzfXZhciBzPW4oKGZ1bmN0aW9uKGUsdCl7dmFyIG47ZS5leHBvcnRzPShuPW58fGZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gZS5wcm90b3R5cGU9dCxuPW5ldyBlLGUucHJvdG90eXBlPW51bGwsbn19KCkscz17fSxyPXMubGliPXt9LGk9ci5CYXNlPXtleHRlbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzKTtyZXR1cm4gZSYmdC5taXhJbihlKSx0Lmhhc093blByb3BlcnR5KFwiaW5pdFwiKSYmdGhpcy5pbml0IT09dC5pbml0fHwodC5pbml0PWZ1bmN0aW9uKCl7dC4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx0LmluaXQucHJvdG90eXBlPXQsdC4kc3VwZXI9dGhpcyx0fSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmV4dGVuZCgpO3JldHVybiBlLmluaXQuYXBwbHkoZSxhcmd1bWVudHMpLGV9LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJih0aGlzW3RdPWVbdF0pO2UuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSYmKHRoaXMudG9TdHJpbmc9ZS50b1N0cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX0sbz1yLldvcmRBcnJheT1pLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihlLG4pe2U9dGhpcy53b3Jkcz1lfHxbXSx0aGlzLnNpZ0J5dGVzPW4hPXQ/bjo0KmUubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4oZXx8Yykuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy53b3JkcyxuPWUud29yZHMscz10aGlzLnNpZ0J5dGVzLHI9ZS5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCkscyU0KWZvcih2YXIgaT0wO2k8cjtpKyspe3ZhciBvPW5baT4+PjJdPj4+MjQtaSU0KjgmMjU1O3RbcytpPj4+Ml18PW88PDI0LShzK2kpJTQqOH1lbHNlIGZvcihpPTA7aTxyO2krPTQpdFtzK2k+Pj4yXT1uW2k+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9cix0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHMsbj10aGlzLnNpZ0J5dGVzO3Rbbj4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1uJTQqOCx0Lmxlbmd0aD1lLmNlaWwobi80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgZT1pLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIGUud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxlfSxyYW5kb206ZnVuY3Rpb24odCl7Zm9yKHZhciBuLHM9W10scj1mdW5jdGlvbih0KXt0PXQ7dmFyIG49OTg3NjU0MzIxLHM9NDI5NDk2NzI5NTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj0oKG49MzY5NjkqKDY1NTM1Jm4pKyhuPj4xNikmcyk8PDE2KSsodD0xOGUzKig2NTUzNSZ0KSsodD4+MTYpJnMpJnM7cmV0dXJuIHIvPTQyOTQ5NjcyOTYsKHIrPS41KSooZS5yYW5kb20oKT4uNT8xOi0xKX19LGk9MDtpPHQ7aSs9NCl7dmFyIGE9cig0Mjk0OTY3Mjk2KihufHxlLnJhbmRvbSgpKSk7bj05ODc2NTQwNzEqYSgpLHMucHVzaCg0Mjk0OTY3Mjk2KmEoKXwwKX1yZXR1cm4gbmV3IG8uaW5pdChzLHQpfX0pLGE9cy5lbmM9e30sYz1hLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLndvcmRzLG49ZS5zaWdCeXRlcyxzPVtdLHI9MDtyPG47cisrKXt2YXIgaT10W3I+Pj4yXT4+PjI0LXIlNCo4JjI1NTtzLnB1c2goKGk+Pj40KS50b1N0cmluZygxNikpLHMucHVzaCgoMTUmaSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcy5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1bXSxzPTA7czx0O3MrPTIpbltzPj4+M118PXBhcnNlSW50KGUuc3Vic3RyKHMsMiksMTYpPDwyNC1zJTgqNDtyZXR1cm4gbmV3IG8uaW5pdChuLHQvMil9fSx1PWEuTGF0aW4xPXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUud29yZHMsbj1lLnNpZ0J5dGVzLHM9W10scj0wO3I8bjtyKyspe3ZhciBpPXRbcj4+PjJdPj4+MjQtciU0KjgmMjU1O3MucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKX1yZXR1cm4gcy5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1bXSxzPTA7czx0O3MrKyluW3M+Pj4yXXw9KDI1NSZlLmNoYXJDb2RlQXQocykpPDwyNC1zJTQqODtyZXR1cm4gbmV3IG8uaW5pdChuLHQpfX0saD1hLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUodS5zdHJpbmdpZnkoZSkpKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoXCJNYWxmb3JtZWQgVVRGLTggZGF0YVwiKX19LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiB1LnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSkpfX0sbD1yLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09aS5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgby5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9aC5wYXJzZShlKSksdGhpcy5fZGF0YS5jb25jYXQoZSksdGhpcy5fbkRhdGFCeXRlcys9ZS5zaWdCeXRlc30sX3Byb2Nlc3M6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZGF0YSxzPW4ud29yZHMscj1uLnNpZ0J5dGVzLGk9dGhpcy5ibG9ja1NpemUsYT1yLyg0KmkpLGM9KGE9dD9lLmNlaWwoYSk6ZS5tYXgoKDB8YSktdGhpcy5fbWluQnVmZmVyU2l6ZSwwKSkqaSx1PWUubWluKDQqYyxyKTtpZihjKXtmb3IodmFyIGg9MDtoPGM7aCs9aSl0aGlzLl9kb1Byb2Nlc3NCbG9jayhzLGgpO3ZhciBsPXMuc3BsaWNlKDAsYyk7bi5zaWdCeXRlcy09dX1yZXR1cm4gbmV3IG8uaW5pdChsLHUpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBlPWkuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gZS5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCksZX0sX21pbkJ1ZmZlclNpemU6MH0pO3IuSGFzaGVyPWwuZXh0ZW5kKHtjZmc6aS5leHRlbmQoKSxpbml0OmZ1bmN0aW9uKGUpe3RoaXMuY2ZnPXRoaXMuY2ZnLmV4dGVuZChlKSx0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7bC5yZXNldC5jYWxsKHRoaXMpLHRoaXMuX2RvUmVzZXQoKX0sdXBkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hcHBlbmQoZSksdGhpcy5fcHJvY2VzcygpLHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0aGlzLl9hcHBlbmQoZSksdGhpcy5fZG9GaW5hbGl6ZSgpfSxibG9ja1NpemU6MTYsX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IGUuaW5pdChuKS5maW5hbGl6ZSh0KX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBuZXcgZC5ITUFDLmluaXQoZSxuKS5maW5hbGl6ZSh0KX19fSk7dmFyIGQ9cy5hbGdvPXt9O3JldHVybiBzfShNYXRoKSxuKX0pKSxyPXMsaT0obigoZnVuY3Rpb24oZSx0KXt2YXIgbjtlLmV4cG9ydHM9KG49cixmdW5jdGlvbihlKXt2YXIgdD1uLHM9dC5saWIscj1zLldvcmRBcnJheSxpPXMuSGFzaGVyLG89dC5hbGdvLGE9W107IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDw2NDt0KyspYVt0XT00Mjk0OTY3Mjk2KmUuYWJzKGUuc2luKHQrMSkpfDB9KCk7dmFyIGM9by5NRDU9aS5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgci5pbml0KFsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzhdKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjwxNjtuKyspe3ZhciBzPXQrbixyPWVbc107ZVtzXT0xNjcxMTkzNSYocjw8OHxyPj4+MjQpfDQyNzgyNTUzNjAmKHI8PDI0fHI+Pj44KX12YXIgaT10aGlzLl9oYXNoLndvcmRzLG89ZVt0KzBdLGM9ZVt0KzFdLHA9ZVt0KzJdLGY9ZVt0KzNdLGc9ZVt0KzRdLG09ZVt0KzVdLHk9ZVt0KzZdLF89ZVt0KzddLHc9ZVt0KzhdLHY9ZVt0KzldLEk9ZVt0KzEwXSxTPWVbdCsxMV0sYj1lW3QrMTJdLGs9ZVt0KzEzXSxBPWVbdCsxNF0sQz1lW3QrMTVdLFA9aVswXSxUPWlbMV0seD1pWzJdLE89aVszXTtQPXUoUCxULHgsTyxvLDcsYVswXSksTz11KE8sUCxULHgsYywxMixhWzFdKSx4PXUoeCxPLFAsVCxwLDE3LGFbMl0pLFQ9dShULHgsTyxQLGYsMjIsYVszXSksUD11KFAsVCx4LE8sZyw3LGFbNF0pLE89dShPLFAsVCx4LG0sMTIsYVs1XSkseD11KHgsTyxQLFQseSwxNyxhWzZdKSxUPXUoVCx4LE8sUCxfLDIyLGFbN10pLFA9dShQLFQseCxPLHcsNyxhWzhdKSxPPXUoTyxQLFQseCx2LDEyLGFbOV0pLHg9dSh4LE8sUCxULEksMTcsYVsxMF0pLFQ9dShULHgsTyxQLFMsMjIsYVsxMV0pLFA9dShQLFQseCxPLGIsNyxhWzEyXSksTz11KE8sUCxULHgsaywxMixhWzEzXSkseD11KHgsTyxQLFQsQSwxNyxhWzE0XSksUD1oKFAsVD11KFQseCxPLFAsQywyMixhWzE1XSkseCxPLGMsNSxhWzE2XSksTz1oKE8sUCxULHgseSw5LGFbMTddKSx4PWgoeCxPLFAsVCxTLDE0LGFbMThdKSxUPWgoVCx4LE8sUCxvLDIwLGFbMTldKSxQPWgoUCxULHgsTyxtLDUsYVsyMF0pLE89aChPLFAsVCx4LEksOSxhWzIxXSkseD1oKHgsTyxQLFQsQywxNCxhWzIyXSksVD1oKFQseCxPLFAsZywyMCxhWzIzXSksUD1oKFAsVCx4LE8sdiw1LGFbMjRdKSxPPWgoTyxQLFQseCxBLDksYVsyNV0pLHg9aCh4LE8sUCxULGYsMTQsYVsyNl0pLFQ9aChULHgsTyxQLHcsMjAsYVsyN10pLFA9aChQLFQseCxPLGssNSxhWzI4XSksTz1oKE8sUCxULHgscCw5LGFbMjldKSx4PWgoeCxPLFAsVCxfLDE0LGFbMzBdKSxQPWwoUCxUPWgoVCx4LE8sUCxiLDIwLGFbMzFdKSx4LE8sbSw0LGFbMzJdKSxPPWwoTyxQLFQseCx3LDExLGFbMzNdKSx4PWwoeCxPLFAsVCxTLDE2LGFbMzRdKSxUPWwoVCx4LE8sUCxBLDIzLGFbMzVdKSxQPWwoUCxULHgsTyxjLDQsYVszNl0pLE89bChPLFAsVCx4LGcsMTEsYVszN10pLHg9bCh4LE8sUCxULF8sMTYsYVszOF0pLFQ9bChULHgsTyxQLEksMjMsYVszOV0pLFA9bChQLFQseCxPLGssNCxhWzQwXSksTz1sKE8sUCxULHgsbywxMSxhWzQxXSkseD1sKHgsTyxQLFQsZiwxNixhWzQyXSksVD1sKFQseCxPLFAseSwyMyxhWzQzXSksUD1sKFAsVCx4LE8sdiw0LGFbNDRdKSxPPWwoTyxQLFQseCxiLDExLGFbNDVdKSx4PWwoeCxPLFAsVCxDLDE2LGFbNDZdKSxQPWQoUCxUPWwoVCx4LE8sUCxwLDIzLGFbNDddKSx4LE8sbyw2LGFbNDhdKSxPPWQoTyxQLFQseCxfLDEwLGFbNDldKSx4PWQoeCxPLFAsVCxBLDE1LGFbNTBdKSxUPWQoVCx4LE8sUCxtLDIxLGFbNTFdKSxQPWQoUCxULHgsTyxiLDYsYVs1Ml0pLE89ZChPLFAsVCx4LGYsMTAsYVs1M10pLHg9ZCh4LE8sUCxULEksMTUsYVs1NF0pLFQ9ZChULHgsTyxQLGMsMjEsYVs1NV0pLFA9ZChQLFQseCxPLHcsNixhWzU2XSksTz1kKE8sUCxULHgsQywxMCxhWzU3XSkseD1kKHgsTyxQLFQseSwxNSxhWzU4XSksVD1kKFQseCxPLFAsaywyMSxhWzU5XSksUD1kKFAsVCx4LE8sZyw2LGFbNjBdKSxPPWQoTyxQLFQseCxTLDEwLGFbNjFdKSx4PWQoeCxPLFAsVCxwLDE1LGFbNjJdKSxUPWQoVCx4LE8sUCx2LDIxLGFbNjNdKSxpWzBdPWlbMF0rUHwwLGlbMV09aVsxXStUfDAsaVsyXT1pWzJdK3h8MCxpWzNdPWlbM10rT3wwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RhdGEsbj10LndvcmRzLHM9OCp0aGlzLl9uRGF0YUJ5dGVzLHI9OCp0LnNpZ0J5dGVzO25bcj4+PjVdfD0xMjg8PDI0LXIlMzI7dmFyIGk9ZS5mbG9vcihzLzQyOTQ5NjcyOTYpLG89cztuWzE1KyhyKzY0Pj4+OTw8NCldPTE2NzExOTM1JihpPDw4fGk+Pj4yNCl8NDI3ODI1NTM2MCYoaTw8MjR8aT4+PjgpLG5bMTQrKHIrNjQ+Pj45PDw0KV09MTY3MTE5MzUmKG88PDh8bz4+PjI0KXw0Mjc4MjU1MzYwJihvPDwyNHxvPj4+OCksdC5zaWdCeXRlcz00KihuLmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciBhPXRoaXMuX2hhc2gsYz1hLndvcmRzLHU9MDt1PDQ7dSsrKXt2YXIgaD1jW3VdO2NbdV09MTY3MTE5MzUmKGg8PDh8aD4+PjI0KXw0Mjc4MjU1MzYwJihoPDwyNHxoPj4+OCl9cmV0dXJuIGF9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9aS5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBlLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxlfX0pO2Z1bmN0aW9uIHUoZSx0LG4scyxyLGksbyl7dmFyIGE9ZSsodCZufH50JnMpK3IrbztyZXR1cm4oYTw8aXxhPj4+MzItaSkrdH1mdW5jdGlvbiBoKGUsdCxuLHMscixpLG8pe3ZhciBhPWUrKHQmc3xuJn5zKStyK287cmV0dXJuKGE8PGl8YT4+PjMyLWkpK3R9ZnVuY3Rpb24gbChlLHQsbixzLHIsaSxvKXt2YXIgYT1lKyh0Xm5ecykrcitvO3JldHVybihhPDxpfGE+Pj4zMi1pKSt0fWZ1bmN0aW9uIGQoZSx0LG4scyxyLGksbyl7dmFyIGE9ZSsobl4odHx+cykpK3IrbztyZXR1cm4oYTw8aXxhPj4+MzItaSkrdH10Lk1ENT1pLl9jcmVhdGVIZWxwZXIoYyksdC5IbWFjTUQ1PWkuX2NyZWF0ZUhtYWNIZWxwZXIoYyl9KE1hdGgpLG4uTUQ1KX0pKSxuKChmdW5jdGlvbihlLHQpe3ZhciBuO2UuZXhwb3J0cz0obj1yLHZvaWQgZnVuY3Rpb24oKXt2YXIgZT1uLHQ9ZS5saWIuQmFzZSxzPWUuZW5jLlV0Zjg7ZS5hbGdvLkhNQUM9dC5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oZSx0KXtlPXRoaXMuX2hhc2hlcj1uZXcgZS5pbml0LFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1zLnBhcnNlKHQpKTt2YXIgbj1lLmJsb2NrU2l6ZSxyPTQqbjt0LnNpZ0J5dGVzPnImJih0PWUuZmluYWxpemUodCkpLHQuY2xhbXAoKTtmb3IodmFyIGk9dGhpcy5fb0tleT10LmNsb25lKCksbz10aGlzLl9pS2V5PXQuY2xvbmUoKSxhPWkud29yZHMsYz1vLndvcmRzLHU9MDt1PG47dSsrKWFbdV1ePTE1NDk1NTY4MjgsY1t1XV49OTA5NTIyNDg2O2kuc2lnQnl0ZXM9by5zaWdCeXRlcz1yLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9oYXNoZXI7ZS5yZXNldCgpLGUudXBkYXRlKHRoaXMuX2lLZXkpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc2hlci51cGRhdGUoZSksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faGFzaGVyLG49dC5maW5hbGl6ZShlKTtyZXR1cm4gdC5yZXNldCgpLHQuZmluYWxpemUodGhpcy5fb0tleS5jbG9uZSgpLmNvbmNhdChuKSl9fSl9KCkpfSkpLG4oKGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXIuSG1hY01ENX0pKSksbz1uKChmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1yLmVuYy5VdGY4fSkpLGE9bigoZnVuY3Rpb24oZSx0KXt2YXIgbjtlLmV4cG9ydHM9KG49cixmdW5jdGlvbigpe3ZhciBlPW4sdD1lLmxpYi5Xb3JkQXJyYXk7ZnVuY3Rpb24gcyhlLG4scyl7Zm9yKHZhciByPVtdLGk9MCxvPTA7bzxuO28rKylpZihvJTQpe3ZhciBhPXNbZS5jaGFyQ29kZUF0KG8tMSldPDxvJTQqMixjPXNbZS5jaGFyQ29kZUF0KG8pXT4+PjYtbyU0KjI7cltpPj4+Ml18PShhfGMpPDwyNC1pJTQqOCxpKyt9cmV0dXJuIHQuY3JlYXRlKHIsaSl9ZS5lbmMuQmFzZTY0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53b3JkcyxuPWUuc2lnQnl0ZXMscz10aGlzLl9tYXA7ZS5jbGFtcCgpO2Zvcih2YXIgcj1bXSxpPTA7aTxuO2krPTMpZm9yKHZhciBvPSh0W2k+Pj4yXT4+PjI0LWklNCo4JjI1NSk8PDE2fCh0W2krMT4+PjJdPj4+MjQtKGkrMSklNCo4JjI1NSk8PDh8dFtpKzI+Pj4yXT4+PjI0LShpKzIpJTQqOCYyNTUsYT0wO2E8NCYmaSsuNzUqYTxuO2ErKylyLnB1c2gocy5jaGFyQXQobz4+PjYqKDMtYSkmNjMpKTt2YXIgYz1zLmNoYXJBdCg2NCk7aWYoYylmb3IoO3IubGVuZ3RoJTQ7KXIucHVzaChjKTtyZXR1cm4gci5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXRoaXMuX21hcCxyPXRoaXMuX3JldmVyc2VNYXA7aWYoIXIpe3I9dGhpcy5fcmV2ZXJzZU1hcD1bXTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylyW24uY2hhckNvZGVBdChpKV09aX12YXIgbz1uLmNoYXJBdCg2NCk7aWYobyl7dmFyIGE9ZS5pbmRleE9mKG8pOy0xIT09YSYmKHQ9YSl9cmV0dXJuIHMoZSx0LHIpfSxfbWFwOlwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIn19KCksbi5lbmMuQmFzZTY0KX0pKTtjb25zdCBjPVwiRlVOQ1RJT05cIix1PVwiT0JKRUNUXCIsaD1cIkNMSUVOVF9EQlwiLGw9XCJwZW5kaW5nXCIsZD1cImZ1bGZpbGxlZFwiLHA9XCJyZWplY3RlZFwiO2Z1bmN0aW9uIGYoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuXCJvYmplY3RcIj09PWYoZSl9ZnVuY3Rpb24gbShlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBlLmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX19Y29uc3QgXz1cIlJFSkVDVEVEXCIsdz1cIk5PVF9QRU5ESU5HXCI7Y2xhc3Mgdntjb25zdHJ1Y3Rvcih7Y3JlYXRlUHJvbWlzZTplLHJldHJ5UnVsZTp0PV99PXt9KXt0aGlzLmNyZWF0ZVByb21pc2U9ZSx0aGlzLnN0YXR1cz1udWxsLHRoaXMucHJvbWlzZT1udWxsLHRoaXMucmV0cnlSdWxlPXR9Z2V0IG5lZWRSZXRyeSgpe2lmKCF0aGlzLnN0YXR1cylyZXR1cm4hMDtzd2l0Y2godGhpcy5yZXRyeVJ1bGUpe2Nhc2UgXzpyZXR1cm4gdGhpcy5zdGF0dXM9PT1wO2Nhc2UgdzpyZXR1cm4gdGhpcy5zdGF0dXMhPT1sfX1leGVjKCl7cmV0dXJuIHRoaXMubmVlZFJldHJ5Pyh0aGlzLnN0YXR1cz1sLHRoaXMucHJvbWlzZT10aGlzLmNyZWF0ZVByb21pc2UoKS50aGVuKChlPT4odGhpcy5zdGF0dXM9ZCxQcm9taXNlLnJlc29sdmUoZSkpKSwoZT0+KHRoaXMuc3RhdHVzPXAsUHJvbWlzZS5yZWplY3QoZSkpKSksdGhpcy5wcm9taXNlKTp0aGlzLnByb21pc2V9fWZ1bmN0aW9uIEkoZSl7cmV0dXJuIGUmJlwic3RyaW5nXCI9PXR5cGVvZiBlP0pTT04ucGFyc2UoZSk6ZX1jb25zdCBTPVwiZGV2ZWxvcG1lbnRcIj09PXByb2Nlc3MuZW52Lk5PREVfRU5WLGI9cHJvY2Vzcy5lbnYuVU5JX1BMQVRGT1JNLGs9XCJ0cnVlXCI9PT1wcm9jZXNzLmVudi5VTklfU0VDVVJFX05FVFdPUktfRU5BQkxFfHwhMD09PXByb2Nlc3MuZW52LlVOSV9TRUNVUkVfTkVUV09SS19FTkFCTEUsQT1JKHByb2Nlc3MuZW52LlVOSV9TRUNVUkVfTkVUV09SS19DT05GSUcpLEM9XCJoNVwiPT09Yj9cIndlYlwiOlwiYXBwLXBsdXNcIj09PWI/XCJhcHBcIjpiLFA9SShwcm9jZXNzLmVudi5VTklDTE9VRF9ERUJVRyksVD1JKHByb2Nlc3MuZW52LlVOSV9DTE9VRF9QUk9WSURFUil8fFtdLHg9cHJvY2Vzcy5lbnYuUlVOX0JZX0hCVUlMREVSWDtsZXQgTz1cIlwiO3RyeXtPPXByb2Nlc3MuZW52LlVOSV9BUFBfSUR8fFwiXCJ9Y2F0Y2goZSl7fWxldCBFPXt9O2Z1bmN0aW9uIEwoZSx0PXt9KXt2YXIgbixzO3JldHVybiBuPUUscz1lLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHMpfHwoRVtlXT10KSxFW2VdfVwiYXBwXCI9PT1DJiYoRT11bmkuX2dsb2JhbFVuaUNsb3VkT2JqP3VuaS5fZ2xvYmFsVW5pQ2xvdWRPYmo6dW5pLl9nbG9iYWxVbmlDbG91ZE9iaj17fSk7Y29uc3QgUj1bXCJpbnZva2VcIixcInN1Y2Nlc3NcIixcImZhaWxcIixcImNvbXBsZXRlXCJdLFU9TChcIl9nbG9iYWxVbmlDbG91ZEludGVyY2VwdG9yXCIpO2Z1bmN0aW9uIE4oZSx0KXtVW2VdfHwoVVtlXT17fSksZyh0KSYmT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+e1IuaW5kZXhPZihuKT4tMSYmZnVuY3Rpb24oZSx0LG4pe2xldCBzPVVbZV1bdF07c3x8KHM9VVtlXVt0XT1bXSksLTE9PT1zLmluZGV4T2YobikmJm0obikmJnMucHVzaChuKX0oZSxuLHRbbl0pfSkpfWZ1bmN0aW9uIEQoZSx0KXtVW2VdfHwoVVtlXT17fSksZyh0KT9PYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57Ui5pbmRleE9mKG4pPi0xJiZmdW5jdGlvbihlLHQsbil7Y29uc3Qgcz1VW2VdW3RdO2lmKCFzKXJldHVybjtjb25zdCByPXMuaW5kZXhPZihuKTtyPi0xJiZzLnNwbGljZShyLDEpfShlLG4sdFtuXSl9KSk6ZGVsZXRlIFVbZV19ZnVuY3Rpb24gTShlLHQpe3JldHVybiBlJiYwIT09ZS5sZW5ndGg/ZS5yZWR1Y2UoKChlLG4pPT5lLnRoZW4oKCgpPT5uKHQpKSkpLFByb21pc2UucmVzb2x2ZSgpKTpQcm9taXNlLnJlc29sdmUoKX1mdW5jdGlvbiBxKGUsdCl7cmV0dXJuIFVbZV0mJlVbZV1bdF18fFtdfWZ1bmN0aW9uIEYoZSl7TihcImNhbGxPYmplY3RcIixlKX1jb25zdCBLPUwoXCJfZ2xvYmFsVW5pQ2xvdWRMaXN0ZW5lclwiKSxqPVwicmVzcG9uc2VcIiwkPVwibmVlZExvZ2luXCIsQj1cInJlZnJlc2hUb2tlblwiLFc9XCJjbGllbnRkYlwiLEg9XCJjbG91ZGZ1bmN0aW9uXCIsej1cImNsb3Vkb2JqZWN0XCI7ZnVuY3Rpb24gSihlKXtyZXR1cm4gS1tlXXx8KEtbZV09W10pLEtbZV19ZnVuY3Rpb24gVihlLHQpe2NvbnN0IG49SihlKTtuLmluY2x1ZGVzKHQpfHxuLnB1c2godCl9ZnVuY3Rpb24gRyhlLHQpe2NvbnN0IG49SihlKSxzPW4uaW5kZXhPZih0KTstMSE9PXMmJm4uc3BsaWNlKHMsMSl9ZnVuY3Rpb24gWShlLHQpe2NvbnN0IG49SihlKTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7KDAsbltlXSkodCl9fWxldCBRLFg9ITE7ZnVuY3Rpb24gWigpe3JldHVybiBRfHwoUT1uZXcgUHJvbWlzZSgoZT0+e1gmJmUoKSxmdW5jdGlvbiB0KCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZ2V0Q3VycmVudFBhZ2VzKXtjb25zdCB0PWdldEN1cnJlbnRQYWdlcygpO3QmJnRbMF0mJihYPSEwLGUoKSl9WHx8c2V0VGltZW91dCgoKCk9Pnt0KCl9KSwzMCl9KCl9KSksUSl9ZnVuY3Rpb24gZWUoZSl7Y29uc3QgdD17fTtmb3IoY29uc3QgbiBpbiBlKXtjb25zdCBzPWVbbl07bShzKSYmKHRbbl09eShzKSl9cmV0dXJuIHR9Y2xhc3MgdGUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLm1lc3NhZ2UpLHRoaXMuZXJyTXNnPWUubWVzc2FnZXx8ZS5lcnJNc2d8fFwidW5rbm93biBzeXN0ZW0gZXJyb3JcIix0aGlzLmNvZGU9dGhpcy5lcnJDb2RlPWUuY29kZXx8ZS5lcnJDb2RlfHxcIlNZU1RFTV9FUlJPUlwiLHRoaXMuZXJyU3ViamVjdD10aGlzLnN1YmplY3Q9ZS5zdWJqZWN0fHxlLmVyclN1YmplY3QsdGhpcy5jYXVzZT1lLmNhdXNlLHRoaXMucmVxdWVzdElkPWUucmVxdWVzdElkfXRvSnNvbihlPTApe2lmKCEoZT49MTApKXJldHVybiBlKysse2VyckNvZGU6dGhpcy5lcnJDb2RlLGVyck1zZzp0aGlzLmVyck1zZyxlcnJTdWJqZWN0OnRoaXMuZXJyU3ViamVjdCxjYXVzZTp0aGlzLmNhdXNlJiZ0aGlzLmNhdXNlLnRvSnNvbj90aGlzLmNhdXNlLnRvSnNvbihlKTp0aGlzLmNhdXNlfX19dmFyIG5lPXtyZXF1ZXN0OmU9PnVuaS5yZXF1ZXN0KGUpLHVwbG9hZEZpbGU6ZT0+dW5pLnVwbG9hZEZpbGUoZSksc2V0U3RvcmFnZVN5bmM6KGUsdCk9PnVuaS5zZXRTdG9yYWdlU3luYyhlLHQpLGdldFN0b3JhZ2VTeW5jOmU9PnVuaS5nZXRTdG9yYWdlU3luYyhlKSxyZW1vdmVTdG9yYWdlU3luYzplPT51bmkucmVtb3ZlU3RvcmFnZVN5bmMoZSksY2xlYXJTdG9yYWdlU3luYzooKT0+dW5pLmNsZWFyU3RvcmFnZVN5bmMoKSxjb25uZWN0U29ja2V0OmU9PnVuaS5jb25uZWN0U29ja2V0KGUpfTtmdW5jdGlvbiBzZShlKXtyZXR1cm4gZSYmc2UoZS5fX3ZfcmF3KXx8ZX1mdW5jdGlvbiByZSgpe3JldHVybnt0b2tlbjpuZS5nZXRTdG9yYWdlU3luYyhcInVuaV9pZF90b2tlblwiKXx8bmUuZ2V0U3RvcmFnZVN5bmMoXCJ1bmlJZFRva2VuXCIpLHRva2VuRXhwaXJlZDpuZS5nZXRTdG9yYWdlU3luYyhcInVuaV9pZF90b2tlbl9leHBpcmVkXCIpfX1mdW5jdGlvbiBpZSh7dG9rZW46ZSx0b2tlbkV4cGlyZWQ6dH09e30pe2UmJm5lLnNldFN0b3JhZ2VTeW5jKFwidW5pX2lkX3Rva2VuXCIsZSksdCYmbmUuc2V0U3RvcmFnZVN5bmMoXCJ1bmlfaWRfdG9rZW5fZXhwaXJlZFwiLHQpfWxldCBvZSxhZTtmdW5jdGlvbiBjZSgpe3JldHVybiBvZXx8KG9lPXVuaS5nZXRTeXN0ZW1JbmZvU3luYygpKSxvZX1mdW5jdGlvbiB1ZSgpe2xldCBlLHQ7dHJ5e2lmKHVuaS5nZXRMYXVuY2hPcHRpb25zU3luYyl7aWYodW5pLmdldExhdW5jaE9wdGlvbnNTeW5jLnRvU3RyaW5nKCkuaW5kZXhPZihcIm5vdCB5ZXQgaW1wbGVtZW50ZWRcIik+LTEpcmV0dXJuO2NvbnN0e3NjZW5lOm4sY2hhbm5lbDpzfT11bmkuZ2V0TGF1bmNoT3B0aW9uc1N5bmMoKTtlPXMsdD1ufX1jYXRjaChlKXt9cmV0dXJue2NoYW5uZWw6ZSxzY2VuZTp0fX1sZXQgaGU9e307ZnVuY3Rpb24gbGUoKXtjb25zdCBlPXVuaS5nZXRMb2NhbGUmJnVuaS5nZXRMb2NhbGUoKXx8XCJlblwiO2lmKGFlKXJldHVybnsuLi5oZSwuLi5hZSxsb2NhbGU6ZSxMT0NBTEU6ZX07Y29uc3QgdD1jZSgpLHtkZXZpY2VJZDpuLG9zTmFtZTpzLHVuaVBsYXRmb3JtOnIsYXBwSWQ6aX09dCxvPVtcImFwcElkXCIsXCJhcHBMYW5ndWFnZVwiLFwiYXBwTmFtZVwiLFwiYXBwVmVyc2lvblwiLFwiYXBwVmVyc2lvbkNvZGVcIixcImFwcFdndFZlcnNpb25cIixcImJyb3dzZXJOYW1lXCIsXCJicm93c2VyVmVyc2lvblwiLFwiZGV2aWNlQnJhbmRcIixcImRldmljZUlkXCIsXCJkZXZpY2VNb2RlbFwiLFwiZGV2aWNlVHlwZVwiLFwib3NOYW1lXCIsXCJvc1ZlcnNpb25cIixcInJvbU5hbWVcIixcInJvbVZlcnNpb25cIixcInVhXCIsXCJob3N0TmFtZVwiLFwiaG9zdFZlcnNpb25cIixcInVuaVBsYXRmb3JtXCIsXCJ1bmlSdW50aW1lVmVyc2lvblwiLFwidW5pUnVudGltZVZlcnNpb25Db2RlXCIsXCJ1bmlDb21waWxlclZlcnNpb25cIixcInVuaUNvbXBpbGVyVmVyc2lvbkNvZGVcIl07Zm9yKGNvbnN0IGUgaW4gdClPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpJiYtMT09PW8uaW5kZXhPZihlKSYmZGVsZXRlIHRbZV07cmV0dXJuIGFlPXtQTEFURk9STTpyLE9TOnMsQVBQSUQ6aSxERVZJQ0VJRDpuLC4uLnVlKCksLi4udH0sey4uLmhlLC4uLmFlLGxvY2FsZTplLExPQ0FMRTplfX12YXIgZGU9e3NpZ246ZnVuY3Rpb24oZSx0KXtsZXQgbj1cIlwiO3JldHVybiBPYmplY3Qua2V5cyhlKS5zb3J0KCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XSYmKG49bitcIiZcIit0K1wiPVwiK2VbdF0pfSkpLG49bi5zbGljZSgxKSxpKG4sdCkudG9TdHJpbmcoKX0sd3JhcHBlZFJlcXVlc3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoKChuLHMpPT57dChPYmplY3QuYXNzaWduKGUse2NvbXBsZXRlKGUpe2V8fChlPXt9KSxTJiZcIndlYlwiPT09QyYmZS5lcnJNc2cmJjA9PT1lLmVyck1zZy5pbmRleE9mKFwicmVxdWVzdDpmYWlsXCIpJiZjb25zb2xlLndhcm4oXCLlj5HluININe+8jOmcgOimgeWcqHVuaUNsb3Vk5ZCO5Y+w5pON5L2c77yM57uR5a6a5a6J5YWo5Z+f5ZCN77yM5ZCm5YiZ5Lya5Zug5Li66Leo5Z+f6Zeu6aKY6ICM5peg5rOV6K6/6Zeu44CC5pWZ56iL5Y+C6ICD77yaaHR0cHM6Ly91bmlhcHAuZGNsb3VkLmlvL3VuaUNsb3VkL3F1aWNrc3RhcnQ/aWQ9dXNlaW5oNVwiKTtjb25zdCB0PWUuZGF0YSYmZS5kYXRhLmhlYWRlciYmZS5kYXRhLmhlYWRlcltcIngtc2VydmVybGVzcy1yZXF1ZXN0LWlkXCJdfHxlLmhlYWRlciYmZS5oZWFkZXJbXCJyZXF1ZXN0LWlkXCJdO2lmKCFlLnN0YXR1c0NvZGV8fGUuc3RhdHVzQ29kZT49NDAwKXtjb25zdCBuPWUuZGF0YSYmZS5kYXRhLmVycm9yJiZlLmRhdGEuZXJyb3IuY29kZXx8XCJTWVNfRVJSXCIscj1lLmRhdGEmJmUuZGF0YS5lcnJvciYmZS5kYXRhLmVycm9yLm1lc3NhZ2V8fGUuZXJyTXNnfHxcInJlcXVlc3Q6ZmFpbFwiO3JldHVybiBzKG5ldyB0ZSh7Y29kZTpuLG1lc3NhZ2U6cixyZXF1ZXN0SWQ6dH0pKX1jb25zdCByPWUuZGF0YTtpZihyLmVycm9yKXJldHVybiBzKG5ldyB0ZSh7Y29kZTpyLmVycm9yLmNvZGUsbWVzc2FnZTpyLmVycm9yLm1lc3NhZ2UscmVxdWVzdElkOnR9KSk7ci5yZXN1bHQ9ci5kYXRhLHIucmVxdWVzdElkPXQsZGVsZXRlIHIuZGF0YSxuKHIpfX0pKX0pKX0sdG9CYXNlNjQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuc3RyaW5naWZ5KG8ucGFyc2UoZSkpfX07dmFyIHBlPWNsYXNze2NvbnN0cnVjdG9yKGUpe1tcInNwYWNlSWRcIixcImNsaWVudFNlY3JldFwiXS5mb3JFYWNoKCh0PT57aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpKXRocm93IG5ldyBFcnJvcihgJHt0fSByZXF1aXJlZGApfSkpLHRoaXMuY29uZmlnPU9iamVjdC5hc3NpZ24oe30se2VuZHBvaW50OjA9PT1lLnNwYWNlSWQuaW5kZXhPZihcIm1wLVwiKT9cImh0dHBzOi8vYXBpLm5leHQuYnNwYXBwLmNvbVwiOlwiaHR0cHM6Ly9hcGkuYnNwYXBwLmNvbVwifSxlKSx0aGlzLmNvbmZpZy5wcm92aWRlcj1cImFsaXl1blwiLHRoaXMuY29uZmlnLnJlcXVlc3RVcmw9dGhpcy5jb25maWcuZW5kcG9pbnQrXCIvY2xpZW50XCIsdGhpcy5jb25maWcuZW52VHlwZT10aGlzLmNvbmZpZy5lbnZUeXBlfHxcInB1YmxpY1wiLHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuS2V5PVwiYWNjZXNzX3Rva2VuX1wiK3RoaXMuY29uZmlnLnNwYWNlSWQsdGhpcy5hZGFwdGVyPW5lLHRoaXMuX2dldEFjY2Vzc1Rva2VuUHJvbWlzZUh1Yj1uZXcgdih7Y3JlYXRlUHJvbWlzZTooKT0+dGhpcy5yZXF1ZXN0QXV0aCh0aGlzLnNldHVwUmVxdWVzdCh7bWV0aG9kOlwic2VydmVybGVzcy5hdXRoLnVzZXIuYW5vbnltb3VzQXV0aG9yaXplXCIscGFyYW1zOlwie31cIn0sXCJhdXRoXCIpKS50aGVuKChlPT57aWYoIWUucmVzdWx0fHwhZS5yZXN1bHQuYWNjZXNzVG9rZW4pdGhyb3cgbmV3IHRlKHtjb2RlOlwiQVVUSF9GQUlMRURcIixtZXNzYWdlOlwi6I635Y+WYWNjZXNzVG9rZW7lpLHotKVcIn0pO3RoaXMuc2V0QWNjZXNzVG9rZW4oZS5yZXN1bHQuYWNjZXNzVG9rZW4pfSkpLHJldHJ5UnVsZTp3fSl9Z2V0IGhhc0FjY2Vzc1Rva2VuKCl7cmV0dXJuISF0aGlzLmFjY2Vzc1Rva2VufXNldEFjY2Vzc1Rva2VuKGUpe3RoaXMuYWNjZXNzVG9rZW49ZX1yZXF1ZXN0V3JhcHBlZChlKXtyZXR1cm4gZGUud3JhcHBlZFJlcXVlc3QoZSx0aGlzLmFkYXB0ZXIucmVxdWVzdCl9cmVxdWVzdEF1dGgoZSl7cmV0dXJuIHRoaXMucmVxdWVzdFdyYXBwZWQoZSl9cmVxdWVzdChlLHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+dGhpcy5oYXNBY2Nlc3NUb2tlbj90P3RoaXMucmVxdWVzdFdyYXBwZWQoZSk6dGhpcy5yZXF1ZXN0V3JhcHBlZChlKS5jYXRjaCgodD0+bmV3IFByb21pc2UoKChlLG4pPT57IXR8fFwiR0FURVdBWV9JTlZBTElEX1RPS0VOXCIhPT10LmNvZGUmJlwiSW52YWxpZFBhcmFtZXRlci5JbnZhbGlkVG9rZW5cIiE9PXQuY29kZT9uKHQpOmUoKX0pKS50aGVuKCgoKT0+dGhpcy5nZXRBY2Nlc3NUb2tlbigpKSkudGhlbigoKCk9Pntjb25zdCB0PXRoaXMucmVidWlsZFJlcXVlc3QoZSk7cmV0dXJuIHRoaXMucmVxdWVzdCh0LCEwKX0pKSkpOnRoaXMuZ2V0QWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+e2NvbnN0IHQ9dGhpcy5yZWJ1aWxkUmVxdWVzdChlKTtyZXR1cm4gdGhpcy5yZXF1ZXN0KHQsITApfSkpKSl9cmVidWlsZFJlcXVlc3QoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiB0LmRhdGEudG9rZW49dGhpcy5hY2Nlc3NUb2tlbix0LmhlYWRlcltcIngtYmFzZW1lbnQtdG9rZW5cIl09dGhpcy5hY2Nlc3NUb2tlbix0LmhlYWRlcltcIngtc2VydmVybGVzcy1zaWduXCJdPWRlLnNpZ24odC5kYXRhLHRoaXMuY29uZmlnLmNsaWVudFNlY3JldCksdH1zZXR1cFJlcXVlc3QoZSx0KXtjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sZSx7c3BhY2VJZDp0aGlzLmNvbmZpZy5zcGFjZUlkLHRpbWVzdGFtcDpEYXRlLm5vdygpfSkscz17XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIn07cmV0dXJuXCJhdXRoXCIhPT10JiYobi50b2tlbj10aGlzLmFjY2Vzc1Rva2VuLHNbXCJ4LWJhc2VtZW50LXRva2VuXCJdPXRoaXMuYWNjZXNzVG9rZW4pLHNbXCJ4LXNlcnZlcmxlc3Mtc2lnblwiXT1kZS5zaWduKG4sdGhpcy5jb25maWcuY2xpZW50U2VjcmV0KSx7dXJsOnRoaXMuY29uZmlnLnJlcXVlc3RVcmwsbWV0aG9kOlwiUE9TVFwiLGRhdGE6bixkYXRhVHlwZTpcImpzb25cIixoZWFkZXI6c319Z2V0QWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fZ2V0QWNjZXNzVG9rZW5Qcm9taXNlSHViLmV4ZWMoKX1hc3luYyBhdXRob3JpemUoKXthd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKCl9Y2FsbEZ1bmN0aW9uKGUpe2NvbnN0IHQ9e21ldGhvZDpcInNlcnZlcmxlc3MuZnVuY3Rpb24ucnVudGltZS5pbnZva2VcIixwYXJhbXM6SlNPTi5zdHJpbmdpZnkoe2Z1bmN0aW9uVGFyZ2V0OmUubmFtZSxmdW5jdGlvbkFyZ3M6ZS5kYXRhfHx7fX0pfTtyZXR1cm4gdGhpcy5yZXF1ZXN0KHRoaXMuc2V0dXBSZXF1ZXN0KHQpKX1nZXRPU1NVcGxvYWRPcHRpb25zRnJvbVBhdGgoZSl7Y29uc3QgdD17bWV0aG9kOlwic2VydmVybGVzcy5maWxlLnJlc291cmNlLmdlbmVyYXRlUHJveGltYWxTaWduXCIscGFyYW1zOkpTT04uc3RyaW5naWZ5KGUpfTtyZXR1cm4gdGhpcy5yZXF1ZXN0KHRoaXMuc2V0dXBSZXF1ZXN0KHQpKX11cGxvYWRGaWxlVG9PU1Moe3VybDplLGZvcm1EYXRhOnQsbmFtZTpuLGZpbGVQYXRoOnMsZmlsZVR5cGU6cixvblVwbG9hZFByb2dyZXNzOml9KXtyZXR1cm4gbmV3IFByb21pc2UoKChvLGEpPT57Y29uc3QgYz10aGlzLmFkYXB0ZXIudXBsb2FkRmlsZSh7dXJsOmUsZm9ybURhdGE6dCxuYW1lOm4sZmlsZVBhdGg6cyxmaWxlVHlwZTpyLGhlYWRlcjp7XCJYLU9TUy1zZXJ2ZXItc2lkZS1lbmNycHl0aW9uXCI6XCJBRVMyNTZcIn0sc3VjY2VzcyhlKXtlJiZlLnN0YXR1c0NvZGU8NDAwP28oZSk6YShuZXcgdGUoe2NvZGU6XCJVUExPQURfRkFJTEVEXCIsbWVzc2FnZTpcIuaWh+S7tuS4iuS8oOWksei0pVwifSkpfSxmYWlsKGUpe2EobmV3IHRlKHtjb2RlOmUuY29kZXx8XCJVUExPQURfRkFJTEVEXCIsbWVzc2FnZTplLm1lc3NhZ2V8fGUuZXJyTXNnfHxcIuaWh+S7tuS4iuS8oOWksei0pVwifSkpfX0pO1wiZnVuY3Rpb25cIj09dHlwZW9mIGkmJmMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMub25Qcm9ncmVzc1VwZGF0ZSYmYy5vblByb2dyZXNzVXBkYXRlKChlPT57aSh7bG9hZGVkOmUudG90YWxCeXRlc1NlbnQsdG90YWw6ZS50b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmR9KX0pKX0pKX1yZXBvcnRPU1NVcGxvYWQoZSl7Y29uc3QgdD17bWV0aG9kOlwic2VydmVybGVzcy5maWxlLnJlc291cmNlLnJlcG9ydFwiLHBhcmFtczpKU09OLnN0cmluZ2lmeShlKX07cmV0dXJuIHRoaXMucmVxdWVzdCh0aGlzLnNldHVwUmVxdWVzdCh0KSl9YXN5bmMgdXBsb2FkRmlsZSh7ZmlsZVBhdGg6ZSxjbG91ZFBhdGg6dCxmaWxlVHlwZTpuPVwiaW1hZ2VcIixjbG91ZFBhdGhBc1JlYWxQYXRoOnM9ITEsb25VcGxvYWRQcm9ncmVzczpyLGNvbmZpZzppfSl7aWYoXCJzdHJpbmdcIiE9PWYodCkpdGhyb3cgbmV3IHRlKHtjb2RlOlwiSU5WQUxJRF9QQVJBTVwiLG1lc3NhZ2U6XCJjbG91ZFBhdGjlv4XpobvkuLrlrZfnrKbkuLLnsbvlnotcIn0pO2lmKCEodD10LnRyaW0oKSkpdGhyb3cgbmV3IHRlKHtjb2RlOlwiSU5WQUxJRF9QQVJBTVwiLG1lc3NhZ2U6XCJjbG91ZFBhdGjkuI3lj6/kuLrnqbpcIn0pO2lmKC86XFwvXFwvLy50ZXN0KHQpKXRocm93IG5ldyB0ZSh7Y29kZTpcIklOVkFMSURfUEFSQU1cIixtZXNzYWdlOlwiY2xvdWRQYXRo5LiN5ZCI5rOVXCJ9KTtjb25zdCBvPWkmJmkuZW52VHlwZXx8dGhpcy5jb25maWcuZW52VHlwZTtpZihzJiYoXCIvXCIhPT10WzBdJiYodD1cIi9cIit0KSx0LmluZGV4T2YoXCJcXFxcXCIpPi0xKSl0aHJvdyBuZXcgdGUoe2NvZGU6XCJJTlZBTElEX1BBUkFNXCIsbWVzc2FnZTpcIuS9v+eUqGNsb3VkUGF0aOS9nOS4uui3r+W+hOaXtu+8jGNsb3VkUGF0aOS4jeWPr+WMheWQq+KAnFxcXFzigJ1cIn0pO2NvbnN0IGE9KGF3YWl0IHRoaXMuZ2V0T1NTVXBsb2FkT3B0aW9uc0Zyb21QYXRoKHtlbnY6byxmaWxlbmFtZTpzP3Quc3BsaXQoXCIvXCIpLnBvcCgpOnQsZmlsZUlkOnM/dDp2b2lkIDB9KSkucmVzdWx0LGM9XCJodHRwczovL1wiK2EuY2RuRG9tYWluK1wiL1wiK2Eub3NzUGF0aCx7c2VjdXJpdHlUb2tlbjp1LGFjY2Vzc0tleUlkOmgsc2lnbmF0dXJlOmwsaG9zdDpkLG9zc1BhdGg6cCxpZDpnLHBvbGljeTptLG9zc0NhbGxiYWNrVXJsOnl9PWEsXz17XCJDYWNoZS1Db250cm9sXCI6XCJtYXgtYWdlPTI1OTIwMDBcIixcIkNvbnRlbnQtRGlzcG9zaXRpb25cIjpcImF0dGFjaG1lbnRcIixPU1NBY2Nlc3NLZXlJZDpoLFNpZ25hdHVyZTpsLGhvc3Q6ZCxpZDpnLGtleTpwLHBvbGljeTptLHN1Y2Nlc3NfYWN0aW9uX3N0YXR1czoyMDB9O2lmKHUmJihfW1wieC1vc3Mtc2VjdXJpdHktdG9rZW5cIl09dSkseSl7Y29uc3QgZT1KU09OLnN0cmluZ2lmeSh7Y2FsbGJhY2tVcmw6eSxjYWxsYmFja0JvZHk6SlNPTi5zdHJpbmdpZnkoe2ZpbGVJZDpnLHNwYWNlSWQ6dGhpcy5jb25maWcuc3BhY2VJZH0pLGNhbGxiYWNrQm9keVR5cGU6XCJhcHBsaWNhdGlvbi9qc29uXCJ9KTtfLmNhbGxiYWNrPWRlLnRvQmFzZTY0KGUpfWNvbnN0IHc9e3VybDpcImh0dHBzOi8vXCIrYS5ob3N0LGZvcm1EYXRhOl8sZmlsZU5hbWU6XCJmaWxlXCIsbmFtZTpcImZpbGVcIixmaWxlUGF0aDplLGZpbGVUeXBlOm59O2lmKGF3YWl0IHRoaXMudXBsb2FkRmlsZVRvT1NTKE9iamVjdC5hc3NpZ24oe30sdyx7b25VcGxvYWRQcm9ncmVzczpyfSkpLHkpcmV0dXJue3N1Y2Nlc3M6ITAsZmlsZVBhdGg6ZSxmaWxlSUQ6Y307aWYoKGF3YWl0IHRoaXMucmVwb3J0T1NTVXBsb2FkKHtpZDpnfSkpLnN1Y2Nlc3MpcmV0dXJue3N1Y2Nlc3M6ITAsZmlsZVBhdGg6ZSxmaWxlSUQ6Y307dGhyb3cgbmV3IHRlKHtjb2RlOlwiVVBMT0FEX0ZBSUxFRFwiLG1lc3NhZ2U6XCLmlofku7bkuIrkvKDlpLHotKVcIn0pfWdldFRlbXBGaWxlVVJMKHtmaWxlTGlzdDplfT17fSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+e0FycmF5LmlzQXJyYXkoZSkmJjAhPT1lLmxlbmd0aHx8bihuZXcgdGUoe2NvZGU6XCJJTlZBTElEX1BBUkFNXCIsbWVzc2FnZTpcImZpbGVMaXN055qE5YWD57Sg5b+F6aG75piv6Z2e56m655qE5a2X56ym5LiyXCJ9KSksdCh7ZmlsZUxpc3Q6ZS5tYXAoKGU9Pih7ZmlsZUlEOmUsdGVtcEZpbGVVUkw6ZX0pKSl9KX0pKX1hc3luYyBnZXRGaWxlSW5mbyh7ZmlsZUxpc3Q6ZX09e30pe2lmKCFBcnJheS5pc0FycmF5KGUpfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IHRlKHtjb2RlOlwiSU5WQUxJRF9QQVJBTVwiLG1lc3NhZ2U6XCJmaWxlTGlzdOeahOWFg+e0oOW/hemhu+aYr+mdnuepuueahOWtl+espuS4slwifSk7Y29uc3QgdD17bWV0aG9kOlwic2VydmVybGVzcy5maWxlLnJlc291cmNlLmluZm9cIixwYXJhbXM6SlNPTi5zdHJpbmdpZnkoe2lkOmUubWFwKChlPT5lLnNwbGl0KFwiP1wiKVswXSkpLmpvaW4oXCIsXCIpfSl9O3JldHVybntmaWxlTGlzdDooYXdhaXQgdGhpcy5yZXF1ZXN0KHRoaXMuc2V0dXBSZXF1ZXN0KHQpKSkucmVzdWx0fX19O3ZhciBmZT17aW5pdChlKXtjb25zdCB0PW5ldyBwZShlKSxuPXtzaWduSW5Bbm9ueW1vdXNseTpmdW5jdGlvbigpe3JldHVybiB0LmF1dGhvcml6ZSgpfSxnZXRMb2dpblN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSl9fTtyZXR1cm4gdC5hdXRoPWZ1bmN0aW9uKCl7cmV0dXJuIG59LHQuY3VzdG9tQXV0aD10LmF1dGgsdH19O2NvbnN0IGdlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBsb2NhdGlvbiYmXCJodHRwOlwiPT09bG9jYXRpb24ucHJvdG9jb2w/XCJodHRwOlwiOlwiaHR0cHM6XCI7dmFyIG1lOyFmdW5jdGlvbihlKXtlLmxvY2FsPVwibG9jYWxcIixlLm5vbmU9XCJub25lXCIsZS5zZXNzaW9uPVwic2Vzc2lvblwifShtZXx8KG1lPXt9KSk7dmFyIHllPWZ1bmN0aW9uKCl7fSxfZT1uKChmdW5jdGlvbihlLHQpe3ZhciBuO2UuZXhwb3J0cz0obj1yLGZ1bmN0aW9uKGUpe3ZhciB0PW4scz10LmxpYixyPXMuV29yZEFycmF5LGk9cy5IYXNoZXIsbz10LmFsZ28sYT1bXSxjPVtdOyFmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBuPWUuc3FydCh0KSxzPTI7czw9bjtzKyspaWYoISh0JXMpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIDQyOTQ5NjcyOTYqKGUtKDB8ZSkpfDB9Zm9yKHZhciBzPTIscj0wO3I8NjQ7KXQocykmJihyPDgmJihhW3JdPW4oZS5wb3cocywuNSkpKSxjW3JdPW4oZS5wb3cocywxLzMpKSxyKyspLHMrK30oKTt2YXIgdT1bXSxoPW8uU0hBMjU2PWkuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IHIuaW5pdChhLnNsaWNlKDApKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMuX2hhc2gud29yZHMscz1uWzBdLHI9blsxXSxpPW5bMl0sbz1uWzNdLGE9bls0XSxoPW5bNV0sbD1uWzZdLGQ9bls3XSxwPTA7cDw2NDtwKyspe2lmKHA8MTYpdVtwXT0wfGVbdCtwXTtlbHNle3ZhciBmPXVbcC0xNV0sZz0oZjw8MjV8Zj4+PjcpXihmPDwxNHxmPj4+MTgpXmY+Pj4zLG09dVtwLTJdLHk9KG08PDE1fG0+Pj4xNyleKG08PDEzfG0+Pj4xOSlebT4+PjEwO3VbcF09Zyt1W3AtN10reSt1W3AtMTZdfXZhciBfPXMmcl5zJmleciZpLHc9KHM8PDMwfHM+Pj4yKV4oczw8MTl8cz4+PjEzKV4oczw8MTB8cz4+PjIyKSx2PWQrKChhPDwyNnxhPj4+NileKGE8PDIxfGE+Pj4xMSleKGE8PDd8YT4+PjI1KSkrKGEmaF5+YSZsKStjW3BdK3VbcF07ZD1sLGw9aCxoPWEsYT1vK3Z8MCxvPWksaT1yLHI9cyxzPXYrKHcrXyl8MH1uWzBdPW5bMF0rc3wwLG5bMV09blsxXStyfDAsblsyXT1uWzJdK2l8MCxuWzNdPW5bM10rb3wwLG5bNF09bls0XSthfDAsbls1XT1uWzVdK2h8MCxuWzZdPW5bNl0rbHwwLG5bN109bls3XStkfDB9LF9kb0ZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZGF0YSxuPXQud29yZHMscz04KnRoaXMuX25EYXRhQnl0ZXMscj04KnQuc2lnQnl0ZXM7cmV0dXJuIG5bcj4+PjVdfD0xMjg8PDI0LXIlMzIsblsxNCsocis2ND4+Pjk8PDQpXT1lLmZsb29yKHMvNDI5NDk2NzI5NiksblsxNSsocis2ND4+Pjk8PDQpXT1zLHQuc2lnQnl0ZXM9NCpuLmxlbmd0aCx0aGlzLl9wcm9jZXNzKCksdGhpcy5faGFzaH0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgZT1pLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIGUuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLGV9fSk7dC5TSEEyNTY9aS5fY3JlYXRlSGVscGVyKGgpLHQuSG1hY1NIQTI1Nj1pLl9jcmVhdGVIbWFjSGVscGVyKGgpfShNYXRoKSxuLlNIQTI1Nil9KSksd2U9X2UsdmU9bigoZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ci5IbWFjU0hBMjU2fSkpO2NvbnN0IEllPSgpPT57bGV0IGU7aWYoIVByb21pc2Upe2U9KCk9Pnt9LGUucHJvbWlzZT17fTtjb25zdCB0PSgpPT57dGhyb3cgbmV3IHRlKHttZXNzYWdlOidZb3VyIE5vZGUgcnVudGltZSBkb2VzIHN1cHBvcnQgRVM2IFByb21pc2VzLiBTZXQgXCJnbG9iYWwuUHJvbWlzZVwiIHRvIHlvdXIgcHJlZmVycmVkIGltcGxlbWVudGF0aW9uIG9mIHByb21pc2VzLid9KX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb21pc2UsXCJ0aGVuXCIse2dldDp0fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvbWlzZSxcImNhdGNoXCIse2dldDp0fSksZX1jb25zdCB0PW5ldyBQcm9taXNlKCgodCxuKT0+e2U9KGUscyk9PmU/bihlKTp0KHMpfSkpO3JldHVybiBlLnByb21pc2U9dCxlfTtmdW5jdGlvbiBTZShlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBiZShlKXtyZXR1cm5cIltvYmplY3QgTnVsbF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX12YXIga2U7ZnVuY3Rpb24gQWUoZSl7Y29uc3QgdD0obj1lLFwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT9lOltlXSk7dmFyIG47Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3R7aXNNYXRjaDp0LGdlbkFkYXB0ZXI6bixydW50aW1lOnN9PWU7aWYodCgpKXJldHVybnthZGFwdGVyOm4oKSxydW50aW1lOnN9fX0hZnVuY3Rpb24oZSl7ZS5XRUI9XCJ3ZWJcIixlLldYX01QPVwid3hfbXBcIn0oa2V8fChrZT17fSkpO2NvbnN0IENlPXthZGFwdGVyOm51bGwscnVudGltZTp2b2lkIDB9LFBlPVtcImFub255bW91c1V1aWRLZXlcIl07Y2xhc3MgVGUgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksQ2UuYWRhcHRlci5yb290LnRjYk9iamVjdHx8KENlLmFkYXB0ZXIucm9vdC50Y2JPYmplY3Q9e30pfXNldEl0ZW0oZSx0KXtDZS5hZGFwdGVyLnJvb3QudGNiT2JqZWN0W2VdPXR9Z2V0SXRlbShlKXtyZXR1cm4gQ2UuYWRhcHRlci5yb290LnRjYk9iamVjdFtlXX1yZW1vdmVJdGVtKGUpe2RlbGV0ZSBDZS5hZGFwdGVyLnJvb3QudGNiT2JqZWN0W2VdfWNsZWFyKCl7ZGVsZXRlIENlLmFkYXB0ZXIucm9vdC50Y2JPYmplY3R9fWZ1bmN0aW9uIHhlKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImxvY2FsXCI6cmV0dXJuIHQubG9jYWxTdG9yYWdlfHxuZXcgVGU7Y2FzZVwibm9uZVwiOnJldHVybiBuZXcgVGU7ZGVmYXVsdDpyZXR1cm4gdC5zZXNzaW9uU3RvcmFnZXx8bmV3IFRlfX1jbGFzcyBPZXtjb25zdHJ1Y3RvcihlKXtpZighdGhpcy5fc3RvcmFnZSl7dGhpcy5fcGVyc2lzdGVuY2U9Q2UuYWRhcHRlci5wcmltYXJ5U3RvcmFnZXx8ZS5wZXJzaXN0ZW5jZSx0aGlzLl9zdG9yYWdlPXhlKHRoaXMuX3BlcnNpc3RlbmNlLENlLmFkYXB0ZXIpO2NvbnN0IHQ9YGFjY2Vzc190b2tlbl8ke2UuZW52fWAsbj1gYWNjZXNzX3Rva2VuX2V4cGlyZV8ke2UuZW52fWAscz1gcmVmcmVzaF90b2tlbl8ke2UuZW52fWAscj1gYW5vbnltb3VzX3V1aWRfJHtlLmVudn1gLGk9YGxvZ2luX3R5cGVfJHtlLmVudn1gLG89YHVzZXJfaW5mb18ke2UuZW52fWA7dGhpcy5rZXlzPXthY2Nlc3NUb2tlbktleTp0LGFjY2Vzc1Rva2VuRXhwaXJlS2V5Om4scmVmcmVzaFRva2VuS2V5OnMsYW5vbnltb3VzVXVpZEtleTpyLGxvZ2luVHlwZUtleTppLHVzZXJJbmZvS2V5Om99fX11cGRhdGVQZXJzaXN0ZW5jZShlKXtpZihlPT09dGhpcy5fcGVyc2lzdGVuY2UpcmV0dXJuO2NvbnN0IHQ9XCJsb2NhbFwiPT09dGhpcy5fcGVyc2lzdGVuY2U7dGhpcy5fcGVyc2lzdGVuY2U9ZTtjb25zdCBuPXhlKGUsQ2UuYWRhcHRlcik7Zm9yKGNvbnN0IGUgaW4gdGhpcy5rZXlzKXtjb25zdCBzPXRoaXMua2V5c1tlXTtpZih0JiZQZS5pbmNsdWRlcyhlKSljb250aW51ZTtjb25zdCByPXRoaXMuX3N0b3JhZ2UuZ2V0SXRlbShzKTtTZShyKXx8YmUocil8fChuLnNldEl0ZW0ocyxyKSx0aGlzLl9zdG9yYWdlLnJlbW92ZUl0ZW0ocykpfXRoaXMuX3N0b3JhZ2U9bn1zZXRTdG9yZShlLHQsbil7aWYoIXRoaXMuX3N0b3JhZ2UpcmV0dXJuO2NvbnN0IHM9e3ZlcnNpb246bnx8XCJsb2NhbENhY2hldjFcIixjb250ZW50OnR9LHI9SlNPTi5zdHJpbmdpZnkocyk7dHJ5e3RoaXMuX3N0b3JhZ2Uuc2V0SXRlbShlLHIpfWNhdGNoKGUpe3Rocm93IGV9fWdldFN0b3JlKGUsdCl7dHJ5e2lmKCF0aGlzLl9zdG9yYWdlKXJldHVybn1jYXRjaChlKXtyZXR1cm5cIlwifXQ9dHx8XCJsb2NhbENhY2hldjFcIjtjb25zdCBuPXRoaXMuX3N0b3JhZ2UuZ2V0SXRlbShlKTtpZighbilyZXR1cm5cIlwiO2lmKG4uaW5kZXhPZih0KT49MCl7cmV0dXJuIEpTT04ucGFyc2UobikuY29udGVudH1yZXR1cm5cIlwifXJlbW92ZVN0b3JlKGUpe3RoaXMuX3N0b3JhZ2UucmVtb3ZlSXRlbShlKX19Y29uc3QgRWU9e30sTGU9e307ZnVuY3Rpb24gUmUoZSl7cmV0dXJuIEVlW2VdfWNsYXNzIFVle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kYXRhPXR8fG51bGwsdGhpcy5uYW1lPWV9fWNsYXNzIE5lIGV4dGVuZHMgVWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihcImVycm9yXCIse2Vycm9yOmUsZGF0YTp0fSksdGhpcy5lcnJvcj1lfX1jb25zdCBEZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9saXN0ZW5lcnM9e319b24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe25bZV09bltlXXx8W10sbltlXS5wdXNoKHQpfShlLHQsdGhpcy5fbGlzdGVuZXJzKSx0aGlzfW9mZihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7aWYobiYmbltlXSl7Y29uc3Qgcz1uW2VdLmluZGV4T2YodCk7LTEhPT1zJiZuW2VdLnNwbGljZShzLDEpfX0oZSx0LHRoaXMuX2xpc3RlbmVycyksdGhpc31maXJlKGUsdCl7aWYoZSBpbnN0YW5jZW9mIE5lKXJldHVybiBjb25zb2xlLmVycm9yKGUuZXJyb3IpLHRoaXM7Y29uc3Qgbj1cInN0cmluZ1wiPT10eXBlb2YgZT9uZXcgVWUoZSx0fHx7fSk6ZTtjb25zdCBzPW4ubmFtZTtpZih0aGlzLl9saXN0ZW5zKHMpKXtuLnRhcmdldD10aGlzO2NvbnN0IGU9dGhpcy5fbGlzdGVuZXJzW3NdP1suLi50aGlzLl9saXN0ZW5lcnNbc11dOltdO2Zvcihjb25zdCB0IG9mIGUpdC5jYWxsKHRoaXMsbil9cmV0dXJuIHRoaXN9X2xpc3RlbnMoZSl7cmV0dXJuIHRoaXMuX2xpc3RlbmVyc1tlXSYmdGhpcy5fbGlzdGVuZXJzW2VdLmxlbmd0aD4wfX07ZnVuY3Rpb24gTWUoZSx0KXtEZS5vbihlLHQpfWZ1bmN0aW9uIHFlKGUsdD17fSl7RGUuZmlyZShlLHQpfWZ1bmN0aW9uIEZlKGUsdCl7RGUub2ZmKGUsdCl9Y29uc3QgS2U9XCJsb2dpblN0YXRlQ2hhbmdlZFwiLGplPVwibG9naW5TdGF0ZUV4cGlyZVwiLCRlPVwibG9naW5UeXBlQ2hhbmdlZFwiLEJlPVwiYW5vbnltb3VzQ29udmVydGVkXCIsV2U9XCJyZWZyZXNoQWNjZXNzVG9rZW5cIjt2YXIgSGU7IWZ1bmN0aW9uKGUpe2UuQU5PTllNT1VTPVwiQU5PTllNT1VTXCIsZS5XRUNIQVQ9XCJXRUNIQVRcIixlLldFQ0hBVF9QVUJMSUM9XCJXRUNIQVQtUFVCTElDXCIsZS5XRUNIQVRfT1BFTj1cIldFQ0hBVC1PUEVOXCIsZS5DVVNUT009XCJDVVNUT01cIixlLkVNQUlMPVwiRU1BSUxcIixlLlVTRVJOQU1FPVwiVVNFUk5BTUVcIixlLk5VTEw9XCJOVUxMXCJ9KEhlfHwoSGU9e30pKTtjb25zdCB6ZT1bXCJhdXRoLmdldEp3dFwiLFwiYXV0aC5sb2dvdXRcIixcImF1dGguc2lnbkluV2l0aFRpY2tldFwiLFwiYXV0aC5zaWduSW5Bbm9ueW1vdXNseVwiLFwiYXV0aC5zaWduSW5cIixcImF1dGguZmV0Y2hBY2Nlc3NUb2tlbldpdGhSZWZyZXNoVG9rZW5cIixcImF1dGguc2lnblVwV2l0aEVtYWlsQW5kUGFzc3dvcmRcIixcImF1dGguYWN0aXZhdGVFbmRVc2VyTWFpbFwiLFwiYXV0aC5zZW5kUGFzc3dvcmRSZXNldEVtYWlsXCIsXCJhdXRoLnJlc2V0UGFzc3dvcmRXaXRoVG9rZW5cIixcImF1dGguaXNVc2VybmFtZVJlZ2lzdGVyZWRcIl0sSmU9e1wiWC1TREstVmVyc2lvblwiOlwiMS4zLjVcIn07ZnVuY3Rpb24gVmUoZSx0LG4pe2NvbnN0IHM9ZVt0XTtlW3RdPWZ1bmN0aW9uKHQpe2NvbnN0IHI9e30saT17fTtuLmZvckVhY2goKG49Pntjb25zdHtkYXRhOnMsaGVhZGVyczpvfT1uLmNhbGwoZSx0KTtPYmplY3QuYXNzaWduKHIscyksT2JqZWN0LmFzc2lnbihpLG8pfSkpO2NvbnN0IG89dC5kYXRhO3JldHVybiBvJiYoKCk9Pnt2YXIgZTtpZihlPW8sXCJbb2JqZWN0IEZvcm1EYXRhXVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXQuZGF0YT17Li4ubywuLi5yfTtlbHNlIGZvcihjb25zdCBlIGluIHIpby5hcHBlbmQoZSxyW2VdKX0pKCksdC5oZWFkZXJzPXsuLi50LmhlYWRlcnN8fHt9LC4uLml9LHMuY2FsbChlLHQpfX1mdW5jdGlvbiBHZSgpe2NvbnN0IGU9TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMik7cmV0dXJue2RhdGE6e3NlcUlkOmV9LGhlYWRlcnM6ey4uLkplLFwieC1zZXFpZFwiOmV9fX1jbGFzcyBZZXtjb25zdHJ1Y3RvcihlPXt9KXt2YXIgdDt0aGlzLmNvbmZpZz1lLHRoaXMuX3JlcUNsYXNzPW5ldyBDZS5hZGFwdGVyLnJlcUNsYXNzKHt0aW1lb3V0OnRoaXMuY29uZmlnLnRpbWVvdXQsdGltZW91dE1zZzpg6K+35rGC5ZyoJHt0aGlzLmNvbmZpZy50aW1lb3V0LzFlM31z5YaF5pyq5a6M5oiQ77yM5bey5Lit5patYCxyZXN0cmljdGVkTWV0aG9kczpbXCJwb3N0XCJdfSksdGhpcy5fY2FjaGU9UmUodGhpcy5jb25maWcuZW52KSx0aGlzLl9sb2NhbENhY2hlPSh0PXRoaXMuY29uZmlnLmVudixMZVt0XSksVmUodGhpcy5fcmVxQ2xhc3MsXCJwb3N0XCIsW0dlXSksVmUodGhpcy5fcmVxQ2xhc3MsXCJ1cGxvYWRcIixbR2VdKSxWZSh0aGlzLl9yZXFDbGFzcyxcImRvd25sb2FkXCIsW0dlXSl9YXN5bmMgcG9zdChlKXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxQ2xhc3MucG9zdChlKX1hc3luYyB1cGxvYWQoZSl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcUNsYXNzLnVwbG9hZChlKX1hc3luYyBkb3dubG9hZChlKXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxQ2xhc3MuZG93bmxvYWQoZSl9YXN5bmMgcmVmcmVzaEFjY2Vzc1Rva2VuKCl7bGV0IGUsdDt0aGlzLl9yZWZyZXNoQWNjZXNzVG9rZW5Qcm9taXNlfHwodGhpcy5fcmVmcmVzaEFjY2Vzc1Rva2VuUHJvbWlzZT10aGlzLl9yZWZyZXNoQWNjZXNzVG9rZW4oKSk7dHJ5e2U9YXdhaXQgdGhpcy5fcmVmcmVzaEFjY2Vzc1Rva2VuUHJvbWlzZX1jYXRjaChlKXt0PWV9aWYodGhpcy5fcmVmcmVzaEFjY2Vzc1Rva2VuUHJvbWlzZT1udWxsLHRoaXMuX3Nob3VsZFJlZnJlc2hBY2Nlc3NUb2tlbkhvb2s9bnVsbCx0KXRocm93IHQ7cmV0dXJuIGV9YXN5bmMgX3JlZnJlc2hBY2Nlc3NUb2tlbigpe2NvbnN0e2FjY2Vzc1Rva2VuS2V5OmUsYWNjZXNzVG9rZW5FeHBpcmVLZXk6dCxyZWZyZXNoVG9rZW5LZXk6bixsb2dpblR5cGVLZXk6cyxhbm9ueW1vdXNVdWlkS2V5OnJ9PXRoaXMuX2NhY2hlLmtleXM7dGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUoZSksdGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUodCk7bGV0IGk9dGhpcy5fY2FjaGUuZ2V0U3RvcmUobik7aWYoIWkpdGhyb3cgbmV3IHRlKHttZXNzYWdlOlwi5pyq55m75b2VQ2xvdWRCYXNlXCJ9KTtjb25zdCBvPXtyZWZyZXNoX3Rva2VuOml9LGE9YXdhaXQgdGhpcy5yZXF1ZXN0KFwiYXV0aC5mZXRjaEFjY2Vzc1Rva2VuV2l0aFJlZnJlc2hUb2tlblwiLG8pO2lmKGEuZGF0YS5jb2RlKXtjb25zdHtjb2RlOmV9PWEuZGF0YTtpZihcIlNJR05fUEFSQU1fSU5WQUxJRFwiPT09ZXx8XCJSRUZSRVNIX1RPS0VOX0VYUElSRURcIj09PWV8fFwiSU5WQUxJRF9SRUZSRVNIX1RPS0VOXCI9PT1lKXtpZih0aGlzLl9jYWNoZS5nZXRTdG9yZShzKT09PUhlLkFOT05ZTU9VUyYmXCJJTlZBTElEX1JFRlJFU0hfVE9LRU5cIj09PWUpe2NvbnN0IGU9dGhpcy5fY2FjaGUuZ2V0U3RvcmUociksdD10aGlzLl9jYWNoZS5nZXRTdG9yZShuKSxzPWF3YWl0IHRoaXMuc2VuZChcImF1dGguc2lnbkluQW5vbnltb3VzbHlcIix7YW5vbnltb3VzX3V1aWQ6ZSxyZWZyZXNoX3Rva2VuOnR9KTtyZXR1cm4gdGhpcy5zZXRSZWZyZXNoVG9rZW4ocy5yZWZyZXNoX3Rva2VuKSx0aGlzLl9yZWZyZXNoQWNjZXNzVG9rZW4oKX1xZShqZSksdGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUobil9dGhyb3cgbmV3IHRlKHtjb2RlOmEuZGF0YS5jb2RlLG1lc3NhZ2U6YOWIt+aWsGFjY2VzcyB0b2tlbuWksei0pe+8miR7YS5kYXRhLmNvZGV9YH0pfWlmKGEuZGF0YS5hY2Nlc3NfdG9rZW4pcmV0dXJuIHFlKFdlKSx0aGlzLl9jYWNoZS5zZXRTdG9yZShlLGEuZGF0YS5hY2Nlc3NfdG9rZW4pLHRoaXMuX2NhY2hlLnNldFN0b3JlKHQsYS5kYXRhLmFjY2Vzc190b2tlbl9leHBpcmUrRGF0ZS5ub3coKSkse2FjY2Vzc1Rva2VuOmEuZGF0YS5hY2Nlc3NfdG9rZW4sYWNjZXNzVG9rZW5FeHBpcmU6YS5kYXRhLmFjY2Vzc190b2tlbl9leHBpcmV9O2EuZGF0YS5yZWZyZXNoX3Rva2VuJiYodGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUobiksdGhpcy5fY2FjaGUuc2V0U3RvcmUobixhLmRhdGEucmVmcmVzaF90b2tlbiksdGhpcy5fcmVmcmVzaEFjY2Vzc1Rva2VuKCkpfWFzeW5jIGdldEFjY2Vzc1Rva2VuKCl7Y29uc3R7YWNjZXNzVG9rZW5LZXk6ZSxhY2Nlc3NUb2tlbkV4cGlyZUtleTp0LHJlZnJlc2hUb2tlbktleTpufT10aGlzLl9jYWNoZS5rZXlzO2lmKCF0aGlzLl9jYWNoZS5nZXRTdG9yZShuKSl0aHJvdyBuZXcgdGUoe21lc3NhZ2U6XCJyZWZyZXNoIHRva2Vu5LiN5a2Y5Zyo77yM55m75b2V54q25oCB5byC5bi4XCJ9KTtsZXQgcz10aGlzLl9jYWNoZS5nZXRTdG9yZShlKSxyPXRoaXMuX2NhY2hlLmdldFN0b3JlKHQpLGk9ITA7cmV0dXJuIHRoaXMuX3Nob3VsZFJlZnJlc2hBY2Nlc3NUb2tlbkhvb2smJiFhd2FpdCB0aGlzLl9zaG91bGRSZWZyZXNoQWNjZXNzVG9rZW5Ib29rKHMscikmJihpPSExKSwoIXN8fCFyfHxyPERhdGUubm93KCkpJiZpP3RoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCk6e2FjY2Vzc1Rva2VuOnMsYWNjZXNzVG9rZW5FeHBpcmU6cn19YXN5bmMgcmVxdWVzdChlLHQsbil7Y29uc3Qgcz1geC10Y2ItdHJhY2VfJHt0aGlzLmNvbmZpZy5lbnZ9YDtsZXQgcj1cImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiO2NvbnN0IGk9e2FjdGlvbjplLGVudjp0aGlzLmNvbmZpZy5lbnYsZGF0YVZlcnNpb246XCIyMDE5LTA4LTE2XCIsLi4udH07aWYoLTE9PT16ZS5pbmRleE9mKGUpKXtjb25zdHtyZWZyZXNoVG9rZW5LZXk6ZX09dGhpcy5fY2FjaGUua2V5czt0aGlzLl9jYWNoZS5nZXRTdG9yZShlKSYmKGkuYWNjZXNzX3Rva2VuPShhd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpLmFjY2Vzc1Rva2VuKX1sZXQgbztpZihcInN0b3JhZ2UudXBsb2FkRmlsZVwiPT09ZSl7bz1uZXcgRm9ybURhdGE7Zm9yKGxldCBlIGluIG8pby5oYXNPd25Qcm9wZXJ0eShlKSYmdm9pZCAwIT09b1tlXSYmby5hcHBlbmQoZSxpW2VdKTtyPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwifWVsc2V7cj1cImFwcGxpY2F0aW9uL2pzb25cIixvPXt9O2ZvcihsZXQgZSBpbiBpKXZvaWQgMCE9PWlbZV0mJihvW2VdPWlbZV0pfWxldCBhPXtoZWFkZXJzOntcImNvbnRlbnQtdHlwZVwiOnJ9fTtuJiZuLm9uVXBsb2FkUHJvZ3Jlc3MmJihhLm9uVXBsb2FkUHJvZ3Jlc3M9bi5vblVwbG9hZFByb2dyZXNzKTtjb25zdCBjPXRoaXMuX2xvY2FsQ2FjaGUuZ2V0U3RvcmUocyk7YyYmKGEuaGVhZGVyc1tcIlgtVENCLVRyYWNlXCJdPWMpO2NvbnN0e3BhcnNlOnUsaW5RdWVyeTpoLHNlYXJjaDpsfT10O2xldCBkPXtlbnY6dGhpcy5jb25maWcuZW52fTt1JiYoZC5wYXJzZT0hMCksaCYmKGQ9ey4uLmgsLi4uZH0pO2xldCBwPWZ1bmN0aW9uKGUsdCxuPXt9KXtjb25zdCBzPS9cXD8vLnRlc3QodCk7bGV0IHI9XCJcIjtmb3IobGV0IGUgaW4gbilcIlwiPT09cj8hcyYmKHQrPVwiP1wiKTpyKz1cIiZcIixyKz1gJHtlfT0ke2VuY29kZVVSSUNvbXBvbmVudChuW2VdKX1gO3JldHVybi9eaHR0cChzKT9cXDpcXC9cXC8vLnRlc3QodCs9cik/dDpgJHtlfSR7dH1gfShnZSxcIi8vdGNiLWFwaS50ZW5jZW50Y2xvdWRhcGkuY29tL3dlYlwiLGQpO2wmJihwKz1sKTtjb25zdCBmPWF3YWl0IHRoaXMucG9zdCh7dXJsOnAsZGF0YTpvLC4uLmF9KSxnPWYuaGVhZGVyJiZmLmhlYWRlcltcIngtdGNiLXRyYWNlXCJdO2lmKGcmJnRoaXMuX2xvY2FsQ2FjaGUuc2V0U3RvcmUocyxnKSwyMDAhPT1OdW1iZXIoZi5zdGF0dXMpJiYyMDAhPT1OdW1iZXIoZi5zdGF0dXNDb2RlKXx8IWYuZGF0YSl0aHJvdyBuZXcgdGUoe2NvZGU6XCJORVRXT1JLX0VSUk9SXCIsbWVzc2FnZTpcIm5ldHdvcmsgcmVxdWVzdCBlcnJvclwifSk7cmV0dXJuIGZ9YXN5bmMgc2VuZChlLHQ9e30pe2NvbnN0IG49YXdhaXQgdGhpcy5yZXF1ZXN0KGUsdCx7b25VcGxvYWRQcm9ncmVzczp0Lm9uVXBsb2FkUHJvZ3Jlc3N9KTtpZihcIkFDQ0VTU19UT0tFTl9FWFBJUkVEXCI9PT1uLmRhdGEuY29kZSYmLTE9PT16ZS5pbmRleE9mKGUpKXthd2FpdCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbigpO2NvbnN0IG49YXdhaXQgdGhpcy5yZXF1ZXN0KGUsdCx7b25VcGxvYWRQcm9ncmVzczp0Lm9uVXBsb2FkUHJvZ3Jlc3N9KTtpZihuLmRhdGEuY29kZSl0aHJvdyBuZXcgdGUoe2NvZGU6bi5kYXRhLmNvZGUsbWVzc2FnZTpuLmRhdGEubWVzc2FnZX0pO3JldHVybiBuLmRhdGF9aWYobi5kYXRhLmNvZGUpdGhyb3cgbmV3IHRlKHtjb2RlOm4uZGF0YS5jb2RlLG1lc3NhZ2U6bi5kYXRhLm1lc3NhZ2V9KTtyZXR1cm4gbi5kYXRhfXNldFJlZnJlc2hUb2tlbihlKXtjb25zdHthY2Nlc3NUb2tlbktleTp0LGFjY2Vzc1Rva2VuRXhwaXJlS2V5Om4scmVmcmVzaFRva2VuS2V5OnN9PXRoaXMuX2NhY2hlLmtleXM7dGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUodCksdGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUobiksdGhpcy5fY2FjaGUuc2V0U3RvcmUocyxlKX19Y29uc3QgUWU9e307ZnVuY3Rpb24gWGUoZSl7cmV0dXJuIFFlW2VdfWNsYXNzIFple2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZmlnPWUsdGhpcy5fY2FjaGU9UmUoZS5lbnYpLHRoaXMuX3JlcXVlc3Q9WGUoZS5lbnYpfXNldFJlZnJlc2hUb2tlbihlKXtjb25zdHthY2Nlc3NUb2tlbktleTp0LGFjY2Vzc1Rva2VuRXhwaXJlS2V5Om4scmVmcmVzaFRva2VuS2V5OnN9PXRoaXMuX2NhY2hlLmtleXM7dGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUodCksdGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUobiksdGhpcy5fY2FjaGUuc2V0U3RvcmUocyxlKX1zZXRBY2Nlc3NUb2tlbihlLHQpe2NvbnN0e2FjY2Vzc1Rva2VuS2V5Om4sYWNjZXNzVG9rZW5FeHBpcmVLZXk6c309dGhpcy5fY2FjaGUua2V5czt0aGlzLl9jYWNoZS5zZXRTdG9yZShuLGUpLHRoaXMuX2NhY2hlLnNldFN0b3JlKHMsdCl9YXN5bmMgcmVmcmVzaFVzZXJJbmZvKCl7Y29uc3R7ZGF0YTplfT1hd2FpdCB0aGlzLl9yZXF1ZXN0LnNlbmQoXCJhdXRoLmdldFVzZXJJbmZvXCIse30pO3JldHVybiB0aGlzLnNldExvY2FsVXNlckluZm8oZSksZX1zZXRMb2NhbFVzZXJJbmZvKGUpe2NvbnN0e3VzZXJJbmZvS2V5OnR9PXRoaXMuX2NhY2hlLmtleXM7dGhpcy5fY2FjaGUuc2V0U3RvcmUodCxlKX19Y2xhc3MgZXR7Y29uc3RydWN0b3IoZSl7aWYoIWUpdGhyb3cgbmV3IHRlKHtjb2RlOlwiUEFSQU1fRVJST1JcIixtZXNzYWdlOlwiZW52SWQgaXMgbm90IGRlZmluZWRcIn0pO3RoaXMuX2VudklkPWUsdGhpcy5fY2FjaGU9UmUodGhpcy5fZW52SWQpLHRoaXMuX3JlcXVlc3Q9WGUodGhpcy5fZW52SWQpLHRoaXMuc2V0VXNlckluZm8oKX1saW5rV2l0aFRpY2tldChlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgdGUoe2NvZGU6XCJQQVJBTV9FUlJPUlwiLG1lc3NhZ2U6XCJ0aWNrZXQgbXVzdCBiZSBzdHJpbmdcIn0pO3JldHVybiB0aGlzLl9yZXF1ZXN0LnNlbmQoXCJhdXRoLmxpbmtXaXRoVGlja2V0XCIse3RpY2tldDplfSl9bGlua1dpdGhSZWRpcmVjdChlKXtlLnNpZ25JbldpdGhSZWRpcmVjdCgpfXVwZGF0ZVBhc3N3b3JkKGUsdCl7cmV0dXJuIHRoaXMuX3JlcXVlc3Quc2VuZChcImF1dGgudXBkYXRlUGFzc3dvcmRcIix7b2xkUGFzc3dvcmQ6dCxuZXdQYXNzd29yZDplfSl9dXBkYXRlRW1haWwoZSl7cmV0dXJuIHRoaXMuX3JlcXVlc3Quc2VuZChcImF1dGgudXBkYXRlRW1haWxcIix7bmV3RW1haWw6ZX0pfXVwZGF0ZVVzZXJuYW1lKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyB0ZSh7Y29kZTpcIlBBUkFNX0VSUk9SXCIsbWVzc2FnZTpcInVzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmdcIn0pO3JldHVybiB0aGlzLl9yZXF1ZXN0LnNlbmQoXCJhdXRoLnVwZGF0ZVVzZXJuYW1lXCIse3VzZXJuYW1lOmV9KX1hc3luYyBnZXRMaW5rZWRVaWRMaXN0KCl7Y29uc3R7ZGF0YTplfT1hd2FpdCB0aGlzLl9yZXF1ZXN0LnNlbmQoXCJhdXRoLmdldExpbmtlZFVpZExpc3RcIix7fSk7bGV0IHQ9ITE7Y29uc3R7dXNlcnM6bn09ZTtyZXR1cm4gbi5mb3JFYWNoKChlPT57ZS53eE9wZW5JZCYmZS53eFB1YmxpY0lkJiYodD0hMCl9KSkse3VzZXJzOm4saGFzUHJpbWFyeVVpZDp0fX1zZXRQcmltYXJ5VWlkKGUpe3JldHVybiB0aGlzLl9yZXF1ZXN0LnNlbmQoXCJhdXRoLnNldFByaW1hcnlVaWRcIix7dWlkOmV9KX11bmxpbmsoZSl7cmV0dXJuIHRoaXMuX3JlcXVlc3Quc2VuZChcImF1dGgudW5saW5rXCIse3BsYXRmb3JtOmV9KX1hc3luYyB1cGRhdGUoZSl7Y29uc3R7bmlja05hbWU6dCxnZW5kZXI6bixhdmF0YXJVcmw6cyxwcm92aW5jZTpyLGNvdW50cnk6aSxjaXR5Om99PWUse2RhdGE6YX09YXdhaXQgdGhpcy5fcmVxdWVzdC5zZW5kKFwiYXV0aC51cGRhdGVVc2VySW5mb1wiLHtuaWNrTmFtZTp0LGdlbmRlcjpuLGF2YXRhclVybDpzLHByb3ZpbmNlOnIsY291bnRyeTppLGNpdHk6b30pO3RoaXMuc2V0TG9jYWxVc2VySW5mbyhhKX1hc3luYyByZWZyZXNoKCl7Y29uc3R7ZGF0YTplfT1hd2FpdCB0aGlzLl9yZXF1ZXN0LnNlbmQoXCJhdXRoLmdldFVzZXJJbmZvXCIse30pO3JldHVybiB0aGlzLnNldExvY2FsVXNlckluZm8oZSksZX1zZXRVc2VySW5mbygpe2NvbnN0e3VzZXJJbmZvS2V5OmV9PXRoaXMuX2NhY2hlLmtleXMsdD10aGlzLl9jYWNoZS5nZXRTdG9yZShlKTtbXCJ1aWRcIixcImxvZ2luVHlwZVwiLFwib3BlbmlkXCIsXCJ3eE9wZW5JZFwiLFwid3hQdWJsaWNJZFwiLFwidW5pb25JZFwiLFwicXFNaW5pT3BlbklkXCIsXCJlbWFpbFwiLFwiaGFzUGFzc3dvcmRcIixcImN1c3RvbVVzZXJJZFwiLFwibmlja05hbWVcIixcImdlbmRlclwiLFwiYXZhdGFyVXJsXCJdLmZvckVhY2goKGU9Pnt0aGlzW2VdPXRbZV19KSksdGhpcy5sb2NhdGlvbj17Y291bnRyeTp0LmNvdW50cnkscHJvdmluY2U6dC5wcm92aW5jZSxjaXR5OnQuY2l0eX19c2V0TG9jYWxVc2VySW5mbyhlKXtjb25zdHt1c2VySW5mb0tleTp0fT10aGlzLl9jYWNoZS5rZXlzO3RoaXMuX2NhY2hlLnNldFN0b3JlKHQsZSksdGhpcy5zZXRVc2VySW5mbygpfX1jbGFzcyB0dHtjb25zdHJ1Y3RvcihlKXtpZighZSl0aHJvdyBuZXcgdGUoe2NvZGU6XCJQQVJBTV9FUlJPUlwiLG1lc3NhZ2U6XCJlbnZJZCBpcyBub3QgZGVmaW5lZFwifSk7dGhpcy5fY2FjaGU9UmUoZSk7Y29uc3R7cmVmcmVzaFRva2VuS2V5OnQsYWNjZXNzVG9rZW5LZXk6bixhY2Nlc3NUb2tlbkV4cGlyZUtleTpzfT10aGlzLl9jYWNoZS5rZXlzLHI9dGhpcy5fY2FjaGUuZ2V0U3RvcmUodCksaT10aGlzLl9jYWNoZS5nZXRTdG9yZShuKSxvPXRoaXMuX2NhY2hlLmdldFN0b3JlKHMpO3RoaXMuY3JlZGVudGlhbD17cmVmcmVzaFRva2VuOnIsYWNjZXNzVG9rZW46aSxhY2Nlc3NUb2tlbkV4cGlyZTpvfSx0aGlzLnVzZXI9bmV3IGV0KGUpfWdldCBpc0Fub255bW91c0F1dGgoKXtyZXR1cm4gdGhpcy5sb2dpblR5cGU9PT1IZS5BTk9OWU1PVVN9Z2V0IGlzQ3VzdG9tQXV0aCgpe3JldHVybiB0aGlzLmxvZ2luVHlwZT09PUhlLkNVU1RPTX1nZXQgaXNXZWl4aW5BdXRoKCl7cmV0dXJuIHRoaXMubG9naW5UeXBlPT09SGUuV0VDSEFUfHx0aGlzLmxvZ2luVHlwZT09PUhlLldFQ0hBVF9PUEVOfHx0aGlzLmxvZ2luVHlwZT09PUhlLldFQ0hBVF9QVUJMSUN9Z2V0IGxvZ2luVHlwZSgpe3JldHVybiB0aGlzLl9jYWNoZS5nZXRTdG9yZSh0aGlzLl9jYWNoZS5rZXlzLmxvZ2luVHlwZUtleSl9fWNsYXNzIG50IGV4dGVuZHMgWmV7YXN5bmMgc2lnbkluKCl7dGhpcy5fY2FjaGUudXBkYXRlUGVyc2lzdGVuY2UoXCJsb2NhbFwiKTtjb25zdHthbm9ueW1vdXNVdWlkS2V5OmUscmVmcmVzaFRva2VuS2V5OnR9PXRoaXMuX2NhY2hlLmtleXMsbj10aGlzLl9jYWNoZS5nZXRTdG9yZShlKXx8dm9pZCAwLHM9dGhpcy5fY2FjaGUuZ2V0U3RvcmUodCl8fHZvaWQgMCxyPWF3YWl0IHRoaXMuX3JlcXVlc3Quc2VuZChcImF1dGguc2lnbkluQW5vbnltb3VzbHlcIix7YW5vbnltb3VzX3V1aWQ6bixyZWZyZXNoX3Rva2VuOnN9KTtpZihyLnV1aWQmJnIucmVmcmVzaF90b2tlbil7dGhpcy5fc2V0QW5vbnltb3VzVVVJRChyLnV1aWQpLHRoaXMuc2V0UmVmcmVzaFRva2VuKHIucmVmcmVzaF90b2tlbiksYXdhaXQgdGhpcy5fcmVxdWVzdC5yZWZyZXNoQWNjZXNzVG9rZW4oKSxxZShLZSkscWUoJGUse2Vudjp0aGlzLmNvbmZpZy5lbnYsbG9naW5UeXBlOkhlLkFOT05ZTU9VUyxwZXJzaXN0ZW5jZTpcImxvY2FsXCJ9KTtjb25zdCBlPW5ldyB0dCh0aGlzLmNvbmZpZy5lbnYpO3JldHVybiBhd2FpdCBlLnVzZXIucmVmcmVzaCgpLGV9dGhyb3cgbmV3IHRlKHttZXNzYWdlOlwi5Yy/5ZCN55m75b2V5aSx6LSlXCJ9KX1hc3luYyBsaW5rQW5kUmV0cmlldmVEYXRhV2l0aFRpY2tldChlKXtjb25zdHthbm9ueW1vdXNVdWlkS2V5OnQscmVmcmVzaFRva2VuS2V5Om59PXRoaXMuX2NhY2hlLmtleXMscz10aGlzLl9jYWNoZS5nZXRTdG9yZSh0KSxyPXRoaXMuX2NhY2hlLmdldFN0b3JlKG4pLGk9YXdhaXQgdGhpcy5fcmVxdWVzdC5zZW5kKFwiYXV0aC5saW5rQW5kUmV0cmlldmVEYXRhV2l0aFRpY2tldFwiLHthbm9ueW1vdXNfdXVpZDpzLHJlZnJlc2hfdG9rZW46cix0aWNrZXQ6ZX0pO2lmKGkucmVmcmVzaF90b2tlbilyZXR1cm4gdGhpcy5fY2xlYXJBbm9ueW1vdXNVVUlEKCksdGhpcy5zZXRSZWZyZXNoVG9rZW4oaS5yZWZyZXNoX3Rva2VuKSxhd2FpdCB0aGlzLl9yZXF1ZXN0LnJlZnJlc2hBY2Nlc3NUb2tlbigpLHFlKEJlLHtlbnY6dGhpcy5jb25maWcuZW52fSkscWUoJGUse2xvZ2luVHlwZTpIZS5DVVNUT00scGVyc2lzdGVuY2U6XCJsb2NhbFwifSkse2NyZWRlbnRpYWw6e3JlZnJlc2hUb2tlbjppLnJlZnJlc2hfdG9rZW59fTt0aHJvdyBuZXcgdGUoe21lc3NhZ2U6XCLljL/lkI3ovazljJblpLHotKVcIn0pfV9zZXRBbm9ueW1vdXNVVUlEKGUpe2NvbnN0e2Fub255bW91c1V1aWRLZXk6dCxsb2dpblR5cGVLZXk6bn09dGhpcy5fY2FjaGUua2V5czt0aGlzLl9jYWNoZS5yZW1vdmVTdG9yZSh0KSx0aGlzLl9jYWNoZS5zZXRTdG9yZSh0LGUpLHRoaXMuX2NhY2hlLnNldFN0b3JlKG4sSGUuQU5PTllNT1VTKX1fY2xlYXJBbm9ueW1vdXNVVUlEKCl7dGhpcy5fY2FjaGUucmVtb3ZlU3RvcmUodGhpcy5fY2FjaGUua2V5cy5hbm9ueW1vdXNVdWlkS2V5KX19Y2xhc3Mgc3QgZXh0ZW5kcyBaZXthc3luYyBzaWduSW4oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHRlKHtjb2RlOlwiUEFSQU1fRVJST1JcIixtZXNzYWdlOlwidGlja2V0IG11c3QgYmUgYSBzdHJpbmdcIn0pO2NvbnN0e3JlZnJlc2hUb2tlbktleTp0fT10aGlzLl9jYWNoZS5rZXlzLG49YXdhaXQgdGhpcy5fcmVxdWVzdC5zZW5kKFwiYXV0aC5zaWduSW5XaXRoVGlja2V0XCIse3RpY2tldDplLHJlZnJlc2hfdG9rZW46dGhpcy5fY2FjaGUuZ2V0U3RvcmUodCl8fFwiXCJ9KTtpZihuLnJlZnJlc2hfdG9rZW4pcmV0dXJuIHRoaXMuc2V0UmVmcmVzaFRva2VuKG4ucmVmcmVzaF90b2tlbiksYXdhaXQgdGhpcy5fcmVxdWVzdC5yZWZyZXNoQWNjZXNzVG9rZW4oKSxxZShLZSkscWUoJGUse2Vudjp0aGlzLmNvbmZpZy5lbnYsbG9naW5UeXBlOkhlLkNVU1RPTSxwZXJzaXN0ZW5jZTp0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZX0pLGF3YWl0IHRoaXMucmVmcmVzaFVzZXJJbmZvKCksbmV3IHR0KHRoaXMuY29uZmlnLmVudik7dGhyb3cgbmV3IHRlKHttZXNzYWdlOlwi6Ieq5a6a5LmJ55m75b2V5aSx6LSlXCJ9KX19Y2xhc3MgcnQgZXh0ZW5kcyBaZXthc3luYyBzaWduSW4oZSx0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgdGUoe2NvZGU6XCJQQVJBTV9FUlJPUlwiLG1lc3NhZ2U6XCJlbWFpbCBtdXN0IGJlIGEgc3RyaW5nXCJ9KTtjb25zdHtyZWZyZXNoVG9rZW5LZXk6bn09dGhpcy5fY2FjaGUua2V5cyxzPWF3YWl0IHRoaXMuX3JlcXVlc3Quc2VuZChcImF1dGguc2lnbkluXCIse2xvZ2luVHlwZTpcIkVNQUlMXCIsZW1haWw6ZSxwYXNzd29yZDp0LHJlZnJlc2hfdG9rZW46dGhpcy5fY2FjaGUuZ2V0U3RvcmUobil8fFwiXCJ9KSx7cmVmcmVzaF90b2tlbjpyLGFjY2Vzc190b2tlbjppLGFjY2Vzc190b2tlbl9leHBpcmU6b309cztpZihyKXJldHVybiB0aGlzLnNldFJlZnJlc2hUb2tlbihyKSxpJiZvP3RoaXMuc2V0QWNjZXNzVG9rZW4oaSxvKTphd2FpdCB0aGlzLl9yZXF1ZXN0LnJlZnJlc2hBY2Nlc3NUb2tlbigpLGF3YWl0IHRoaXMucmVmcmVzaFVzZXJJbmZvKCkscWUoS2UpLHFlKCRlLHtlbnY6dGhpcy5jb25maWcuZW52LGxvZ2luVHlwZTpIZS5FTUFJTCxwZXJzaXN0ZW5jZTp0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZX0pLG5ldyB0dCh0aGlzLmNvbmZpZy5lbnYpO3Rocm93IHMuY29kZT9uZXcgdGUoe2NvZGU6cy5jb2RlLG1lc3NhZ2U6YOmCrueuseeZu+W9leWksei0pTogJHtzLm1lc3NhZ2V9YH0pOm5ldyB0ZSh7bWVzc2FnZTpcIumCrueuseeZu+W9leWksei0pVwifSl9YXN5bmMgYWN0aXZhdGUoZSl7cmV0dXJuIHRoaXMuX3JlcXVlc3Quc2VuZChcImF1dGguYWN0aXZhdGVFbmRVc2VyTWFpbFwiLHt0b2tlbjplfSl9YXN5bmMgcmVzZXRQYXNzd29yZFdpdGhUb2tlbihlLHQpe3JldHVybiB0aGlzLl9yZXF1ZXN0LnNlbmQoXCJhdXRoLnJlc2V0UGFzc3dvcmRXaXRoVG9rZW5cIix7dG9rZW46ZSxuZXdQYXNzd29yZDp0fSl9fWNsYXNzIGl0IGV4dGVuZHMgWmV7YXN5bmMgc2lnbkluKGUsdCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHRlKHtjb2RlOlwiUEFSQU1fRVJST1JcIixtZXNzYWdlOlwidXNlcm5hbWUgbXVzdCBiZSBhIHN0cmluZ1wifSk7XCJzdHJpbmdcIiE9dHlwZW9mIHQmJih0PVwiXCIsY29uc29sZS53YXJuKFwicGFzc3dvcmQgaXMgZW1wdHlcIikpO2NvbnN0e3JlZnJlc2hUb2tlbktleTpufT10aGlzLl9jYWNoZS5rZXlzLHM9YXdhaXQgdGhpcy5fcmVxdWVzdC5zZW5kKFwiYXV0aC5zaWduSW5cIix7bG9naW5UeXBlOkhlLlVTRVJOQU1FLHVzZXJuYW1lOmUscGFzc3dvcmQ6dCxyZWZyZXNoX3Rva2VuOnRoaXMuX2NhY2hlLmdldFN0b3JlKG4pfHxcIlwifSkse3JlZnJlc2hfdG9rZW46cixhY2Nlc3NfdG9rZW5fZXhwaXJlOmksYWNjZXNzX3Rva2VuOm99PXM7aWYocilyZXR1cm4gdGhpcy5zZXRSZWZyZXNoVG9rZW4ociksbyYmaT90aGlzLnNldEFjY2Vzc1Rva2VuKG8saSk6YXdhaXQgdGhpcy5fcmVxdWVzdC5yZWZyZXNoQWNjZXNzVG9rZW4oKSxhd2FpdCB0aGlzLnJlZnJlc2hVc2VySW5mbygpLHFlKEtlKSxxZSgkZSx7ZW52OnRoaXMuY29uZmlnLmVudixsb2dpblR5cGU6SGUuVVNFUk5BTUUscGVyc2lzdGVuY2U6dGhpcy5jb25maWcucGVyc2lzdGVuY2V9KSxuZXcgdHQodGhpcy5jb25maWcuZW52KTt0aHJvdyBzLmNvZGU/bmV3IHRlKHtjb2RlOnMuY29kZSxtZXNzYWdlOmDnlKjmiLflkI3lr4bnoIHnmbvlvZXlpLHotKU6ICR7cy5tZXNzYWdlfWB9KTpuZXcgdGUoe21lc3NhZ2U6XCLnlKjmiLflkI3lr4bnoIHnmbvlvZXlpLHotKVcIn0pfX1jbGFzcyBvdHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbmZpZz1lLHRoaXMuX2NhY2hlPVJlKGUuZW52KSx0aGlzLl9yZXF1ZXN0PVhlKGUuZW52KSx0aGlzLl9vbkFub255bW91c0NvbnZlcnRlZD10aGlzLl9vbkFub255bW91c0NvbnZlcnRlZC5iaW5kKHRoaXMpLHRoaXMuX29uTG9naW5UeXBlQ2hhbmdlZD10aGlzLl9vbkxvZ2luVHlwZUNoYW5nZWQuYmluZCh0aGlzKSxNZSgkZSx0aGlzLl9vbkxvZ2luVHlwZUNoYW5nZWQpfWdldCBjdXJyZW50VXNlcigpe2NvbnN0IGU9dGhpcy5oYXNMb2dpblN0YXRlKCk7cmV0dXJuIGUmJmUudXNlcnx8bnVsbH1nZXQgbG9naW5UeXBlKCl7cmV0dXJuIHRoaXMuX2NhY2hlLmdldFN0b3JlKHRoaXMuX2NhY2hlLmtleXMubG9naW5UeXBlS2V5KX1hbm9ueW1vdXNBdXRoUHJvdmlkZXIoKXtyZXR1cm4gbmV3IG50KHRoaXMuY29uZmlnKX1jdXN0b21BdXRoUHJvdmlkZXIoKXtyZXR1cm4gbmV3IHN0KHRoaXMuY29uZmlnKX1lbWFpbEF1dGhQcm92aWRlcigpe3JldHVybiBuZXcgcnQodGhpcy5jb25maWcpfXVzZXJuYW1lQXV0aFByb3ZpZGVyKCl7cmV0dXJuIG5ldyBpdCh0aGlzLmNvbmZpZyl9YXN5bmMgc2lnbkluQW5vbnltb3VzbHkoKXtyZXR1cm4gbmV3IG50KHRoaXMuY29uZmlnKS5zaWduSW4oKX1hc3luYyBzaWduSW5XaXRoRW1haWxBbmRQYXNzd29yZChlLHQpe3JldHVybiBuZXcgcnQodGhpcy5jb25maWcpLnNpZ25JbihlLHQpfXNpZ25JbldpdGhVc2VybmFtZUFuZFBhc3N3b3JkKGUsdCl7cmV0dXJuIG5ldyBpdCh0aGlzLmNvbmZpZykuc2lnbkluKGUsdCl9YXN5bmMgbGlua0FuZFJldHJpZXZlRGF0YVdpdGhUaWNrZXQoZSl7dGhpcy5fYW5vbnltb3VzQXV0aFByb3ZpZGVyfHwodGhpcy5fYW5vbnltb3VzQXV0aFByb3ZpZGVyPW5ldyBudCh0aGlzLmNvbmZpZykpLE1lKEJlLHRoaXMuX29uQW5vbnltb3VzQ29udmVydGVkKTtyZXR1cm4gYXdhaXQgdGhpcy5fYW5vbnltb3VzQXV0aFByb3ZpZGVyLmxpbmtBbmRSZXRyaWV2ZURhdGFXaXRoVGlja2V0KGUpfWFzeW5jIHNpZ25PdXQoKXtpZih0aGlzLmxvZ2luVHlwZT09PUhlLkFOT05ZTU9VUyl0aHJvdyBuZXcgdGUoe21lc3NhZ2U6XCLljL/lkI3nlKjmiLfkuI3mlK/mjIHnmbvlh7rmk43kvZxcIn0pO2NvbnN0e3JlZnJlc2hUb2tlbktleTplLGFjY2Vzc1Rva2VuS2V5OnQsYWNjZXNzVG9rZW5FeHBpcmVLZXk6bn09dGhpcy5fY2FjaGUua2V5cyxzPXRoaXMuX2NhY2hlLmdldFN0b3JlKGUpO2lmKCFzKXJldHVybjtjb25zdCByPWF3YWl0IHRoaXMuX3JlcXVlc3Quc2VuZChcImF1dGgubG9nb3V0XCIse3JlZnJlc2hfdG9rZW46c30pO3JldHVybiB0aGlzLl9jYWNoZS5yZW1vdmVTdG9yZShlKSx0aGlzLl9jYWNoZS5yZW1vdmVTdG9yZSh0KSx0aGlzLl9jYWNoZS5yZW1vdmVTdG9yZShuKSxxZShLZSkscWUoJGUse2Vudjp0aGlzLmNvbmZpZy5lbnYsbG9naW5UeXBlOkhlLk5VTEwscGVyc2lzdGVuY2U6dGhpcy5jb25maWcucGVyc2lzdGVuY2V9KSxyfWFzeW5jIHNpZ25VcFdpdGhFbWFpbEFuZFBhc3N3b3JkKGUsdCl7cmV0dXJuIHRoaXMuX3JlcXVlc3Quc2VuZChcImF1dGguc2lnblVwV2l0aEVtYWlsQW5kUGFzc3dvcmRcIix7ZW1haWw6ZSxwYXNzd29yZDp0fSl9YXN5bmMgc2VuZFBhc3N3b3JkUmVzZXRFbWFpbChlKXtyZXR1cm4gdGhpcy5fcmVxdWVzdC5zZW5kKFwiYXV0aC5zZW5kUGFzc3dvcmRSZXNldEVtYWlsXCIse2VtYWlsOmV9KX1vbkxvZ2luU3RhdGVDaGFuZ2VkKGUpe01lKEtlLCgoKT0+e2NvbnN0IHQ9dGhpcy5oYXNMb2dpblN0YXRlKCk7ZS5jYWxsKHRoaXMsdCl9KSk7Y29uc3QgdD10aGlzLmhhc0xvZ2luU3RhdGUoKTtlLmNhbGwodGhpcyx0KX1vbkxvZ2luU3RhdGVFeHBpcmVkKGUpe01lKGplLGUuYmluZCh0aGlzKSl9b25BY2Nlc3NUb2tlblJlZnJlc2hlZChlKXtNZShXZSxlLmJpbmQodGhpcykpfW9uQW5vbnltb3VzQ29udmVydGVkKGUpe01lKEJlLGUuYmluZCh0aGlzKSl9b25Mb2dpblR5cGVDaGFuZ2VkKGUpe01lKCRlLCgoKT0+e2NvbnN0IHQ9dGhpcy5oYXNMb2dpblN0YXRlKCk7ZS5jYWxsKHRoaXMsdCl9KSl9YXN5bmMgZ2V0QWNjZXNzVG9rZW4oKXtyZXR1cm57YWNjZXNzVG9rZW46KGF3YWl0IHRoaXMuX3JlcXVlc3QuZ2V0QWNjZXNzVG9rZW4oKSkuYWNjZXNzVG9rZW4sZW52OnRoaXMuY29uZmlnLmVudn19aGFzTG9naW5TdGF0ZSgpe2NvbnN0e3JlZnJlc2hUb2tlbktleTplfT10aGlzLl9jYWNoZS5rZXlzO3JldHVybiB0aGlzLl9jYWNoZS5nZXRTdG9yZShlKT9uZXcgdHQodGhpcy5jb25maWcuZW52KTpudWxsfWFzeW5jIGlzVXNlcm5hbWVSZWdpc3RlcmVkKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyB0ZSh7Y29kZTpcIlBBUkFNX0VSUk9SXCIsbWVzc2FnZTpcInVzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmdcIn0pO2NvbnN0e2RhdGE6dH09YXdhaXQgdGhpcy5fcmVxdWVzdC5zZW5kKFwiYXV0aC5pc1VzZXJuYW1lUmVnaXN0ZXJlZFwiLHt1c2VybmFtZTplfSk7cmV0dXJuIHQmJnQuaXNSZWdpc3RlcmVkfWdldExvZ2luU3RhdGUoKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuaGFzTG9naW5TdGF0ZSgpKX1hc3luYyBzaWduSW5XaXRoVGlja2V0KGUpe3JldHVybiBuZXcgc3QodGhpcy5jb25maWcpLnNpZ25JbihlKX1zaG91bGRSZWZyZXNoQWNjZXNzVG9rZW4oZSl7dGhpcy5fcmVxdWVzdC5fc2hvdWxkUmVmcmVzaEFjY2Vzc1Rva2VuSG9vaz1lLmJpbmQodGhpcyl9Z2V0VXNlckluZm8oKXtyZXR1cm4gdGhpcy5fcmVxdWVzdC5zZW5kKFwiYXV0aC5nZXRVc2VySW5mb1wiLHt9KS50aGVuKChlPT5lLmNvZGU/ZTp7Li4uZS5kYXRhLHJlcXVlc3RJZDplLnNlcUlkfSkpfWdldEF1dGhIZWFkZXIoKXtjb25zdHtyZWZyZXNoVG9rZW5LZXk6ZSxhY2Nlc3NUb2tlbktleTp0fT10aGlzLl9jYWNoZS5rZXlzLG49dGhpcy5fY2FjaGUuZ2V0U3RvcmUoZSk7cmV0dXJue1wieC1jbG91ZGJhc2UtY3JlZGVudGlhbHNcIjp0aGlzLl9jYWNoZS5nZXRTdG9yZSh0KStcIi9AQC9cIitufX1fb25Bbm9ueW1vdXNDb252ZXJ0ZWQoZSl7Y29uc3R7ZW52OnR9PWUuZGF0YTt0PT09dGhpcy5jb25maWcuZW52JiZ0aGlzLl9jYWNoZS51cGRhdGVQZXJzaXN0ZW5jZSh0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZSl9X29uTG9naW5UeXBlQ2hhbmdlZChlKXtjb25zdHtsb2dpblR5cGU6dCxwZXJzaXN0ZW5jZTpuLGVudjpzfT1lLmRhdGE7cz09PXRoaXMuY29uZmlnLmVudiYmKHRoaXMuX2NhY2hlLnVwZGF0ZVBlcnNpc3RlbmNlKG4pLHRoaXMuX2NhY2hlLnNldFN0b3JlKHRoaXMuX2NhY2hlLmtleXMubG9naW5UeXBlS2V5LHQpKX19Y29uc3QgYXQ9ZnVuY3Rpb24oZSx0KXt0PXR8fEllKCk7Y29uc3Qgbj1YZSh0aGlzLmNvbmZpZy5lbnYpLHtjbG91ZFBhdGg6cyxmaWxlUGF0aDpyLG9uVXBsb2FkUHJvZ3Jlc3M6aSxmaWxlVHlwZTpvPVwiaW1hZ2VcIn09ZTtyZXR1cm4gbi5zZW5kKFwic3RvcmFnZS5nZXRVcGxvYWRNZXRhZGF0YVwiLHtwYXRoOnN9KS50aGVuKChlPT57Y29uc3R7ZGF0YTp7dXJsOmEsYXV0aG9yaXphdGlvbjpjLHRva2VuOnUsZmlsZUlkOmgsY29zRmlsZUlkOmx9LHJlcXVlc3RJZDpkfT1lLHA9e2tleTpzLHNpZ25hdHVyZTpjLFwieC1jb3MtbWV0YS1maWxlaWRcIjpsLHN1Y2Nlc3NfYWN0aW9uX3N0YXR1czpcIjIwMVwiLFwieC1jb3Mtc2VjdXJpdHktdG9rZW5cIjp1fTtuLnVwbG9hZCh7dXJsOmEsZGF0YTpwLGZpbGU6cixuYW1lOnMsZmlsZVR5cGU6byxvblVwbG9hZFByb2dyZXNzOml9KS50aGVuKChlPT57MjAxPT09ZS5zdGF0dXNDb2RlP3QobnVsbCx7ZmlsZUlEOmgscmVxdWVzdElkOmR9KTp0KG5ldyB0ZSh7Y29kZTpcIlNUT1JBR0VfUkVRVUVTVF9GQUlMXCIsbWVzc2FnZTpgU1RPUkFHRV9SRVFVRVNUX0ZBSUw6ICR7ZS5kYXRhfWB9KSl9KSkuY2F0Y2goKGU9Pnt0KGUpfSkpfSkpLmNhdGNoKChlPT57dChlKX0pKSx0LnByb21pc2V9LGN0PWZ1bmN0aW9uKGUsdCl7dD10fHxJZSgpO2NvbnN0IG49WGUodGhpcy5jb25maWcuZW52KSx7Y2xvdWRQYXRoOnN9PWU7cmV0dXJuIG4uc2VuZChcInN0b3JhZ2UuZ2V0VXBsb2FkTWV0YWRhdGFcIix7cGF0aDpzfSkudGhlbigoZT0+e3QobnVsbCxlKX0pKS5jYXRjaCgoZT0+e3QoZSl9KSksdC5wcm9taXNlfSx1dD1mdW5jdGlvbih7ZmlsZUxpc3Q6ZX0sdCl7aWYodD10fHxJZSgpLCFlfHwhQXJyYXkuaXNBcnJheShlKSlyZXR1cm57Y29kZTpcIklOVkFMSURfUEFSQU1cIixtZXNzYWdlOlwiZmlsZUxpc3Tlv4XpobvmmK/pnZ7nqbrnmoTmlbDnu4RcIn07Zm9yKGxldCB0IG9mIGUpaWYoIXR8fFwic3RyaW5nXCIhPXR5cGVvZiB0KXJldHVybntjb2RlOlwiSU5WQUxJRF9QQVJBTVwiLG1lc3NhZ2U6XCJmaWxlTGlzdOeahOWFg+e0oOW/hemhu+aYr+mdnuepuueahOWtl+espuS4slwifTtjb25zdCBuPXtmaWxlaWRfbGlzdDplfTtyZXR1cm4gWGUodGhpcy5jb25maWcuZW52KS5zZW5kKFwic3RvcmFnZS5iYXRjaERlbGV0ZUZpbGVcIixuKS50aGVuKChlPT57ZS5jb2RlP3QobnVsbCxlKTp0KG51bGwse2ZpbGVMaXN0OmUuZGF0YS5kZWxldGVfbGlzdCxyZXF1ZXN0SWQ6ZS5yZXF1ZXN0SWR9KX0pKS5jYXRjaCgoZT0+e3QoZSl9KSksdC5wcm9taXNlfSxodD1mdW5jdGlvbih7ZmlsZUxpc3Q6ZX0sdCl7dD10fHxJZSgpLGUmJkFycmF5LmlzQXJyYXkoZSl8fHQobnVsbCx7Y29kZTpcIklOVkFMSURfUEFSQU1cIixtZXNzYWdlOlwiZmlsZUxpc3Tlv4XpobvmmK/pnZ7nqbrnmoTmlbDnu4RcIn0pO2xldCBuPVtdO2ZvcihsZXQgcyBvZiBlKVwib2JqZWN0XCI9PXR5cGVvZiBzPyhzLmhhc093blByb3BlcnR5KFwiZmlsZUlEXCIpJiZzLmhhc093blByb3BlcnR5KFwibWF4QWdlXCIpfHx0KG51bGwse2NvZGU6XCJJTlZBTElEX1BBUkFNXCIsbWVzc2FnZTpcImZpbGVMaXN055qE5YWD57Sg5b+F6aG75piv5YyF5ZCrZmlsZUlE5ZKMbWF4QWdl55qE5a+56LGhXCJ9KSxuLnB1c2goe2ZpbGVpZDpzLmZpbGVJRCxtYXhfYWdlOnMubWF4QWdlfSkpOlwic3RyaW5nXCI9PXR5cGVvZiBzP24ucHVzaCh7ZmlsZWlkOnN9KTp0KG51bGwse2NvZGU6XCJJTlZBTElEX1BBUkFNXCIsbWVzc2FnZTpcImZpbGVMaXN055qE5YWD57Sg5b+F6aG75piv5a2X56ym5LiyXCJ9KTtjb25zdCBzPXtmaWxlX2xpc3Q6bn07cmV0dXJuIFhlKHRoaXMuY29uZmlnLmVudikuc2VuZChcInN0b3JhZ2UuYmF0Y2hHZXREb3dubG9hZFVybFwiLHMpLnRoZW4oKGU9PntlLmNvZGU/dChudWxsLGUpOnQobnVsbCx7ZmlsZUxpc3Q6ZS5kYXRhLmRvd25sb2FkX2xpc3QscmVxdWVzdElkOmUucmVxdWVzdElkfSl9KSkuY2F0Y2goKGU9Pnt0KGUpfSkpLHQucHJvbWlzZX0sbHQ9YXN5bmMgZnVuY3Rpb24oe2ZpbGVJRDplfSx0KXtjb25zdCBuPShhd2FpdCBodC5jYWxsKHRoaXMse2ZpbGVMaXN0Olt7ZmlsZUlEOmUsbWF4QWdlOjYwMH1dfSkpLmZpbGVMaXN0WzBdO2lmKFwiU1VDQ0VTU1wiIT09bi5jb2RlKXJldHVybiB0P3Qobik6bmV3IFByb21pc2UoKGU9PntlKG4pfSkpO2NvbnN0IHM9WGUodGhpcy5jb25maWcuZW52KTtsZXQgcj1uLmRvd25sb2FkX3VybDtpZihyPWVuY29kZVVSSShyKSwhdClyZXR1cm4gcy5kb3dubG9hZCh7dXJsOnJ9KTt0KGF3YWl0IHMuZG93bmxvYWQoe3VybDpyfSkpfSxkdD1mdW5jdGlvbih7bmFtZTplLGRhdGE6dCxxdWVyeTpuLHBhcnNlOnMsc2VhcmNoOnJ9LGkpe2NvbnN0IG89aXx8SWUoKTtsZXQgYTt0cnl7YT10P0pTT04uc3RyaW5naWZ5KHQpOlwiXCJ9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWlmKCFlKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgdGUoe2NvZGU6XCJQQVJBTV9FUlJPUlwiLG1lc3NhZ2U6XCLlh73mlbDlkI3kuI3og73kuLrnqbpcIn0pKTtjb25zdCBjPXtpblF1ZXJ5Om4scGFyc2U6cyxzZWFyY2g6cixmdW5jdGlvbl9uYW1lOmUscmVxdWVzdF9kYXRhOmF9O3JldHVybiBYZSh0aGlzLmNvbmZpZy5lbnYpLnNlbmQoXCJmdW5jdGlvbnMuaW52b2tlRnVuY3Rpb25cIixjKS50aGVuKChlPT57aWYoZS5jb2RlKW8obnVsbCxlKTtlbHNle2xldCB0PWUuZGF0YS5yZXNwb25zZV9kYXRhO2lmKHMpbyhudWxsLHtyZXN1bHQ6dCxyZXF1ZXN0SWQ6ZS5yZXF1ZXN0SWR9KTtlbHNlIHRyeXt0PUpTT04ucGFyc2UoZS5kYXRhLnJlc3BvbnNlX2RhdGEpLG8obnVsbCx7cmVzdWx0OnQscmVxdWVzdElkOmUucmVxdWVzdElkfSl9Y2F0Y2goZSl7byhuZXcgdGUoe21lc3NhZ2U6XCJyZXNwb25zZSBkYXRhIG11c3QgYmUganNvblwifSkpfX1yZXR1cm4gby5wcm9taXNlfSkpLmNhdGNoKChlPT57byhlKX0pKSxvLnByb21pc2V9LHB0PXt0aW1lb3V0OjE1ZTMscGVyc2lzdGVuY2U6XCJzZXNzaW9uXCJ9LGZ0PXt9O2NsYXNzIGd0e2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZmlnPWV8fHRoaXMuY29uZmlnLHRoaXMuYXV0aE9iaj12b2lkIDB9aW5pdChlKXtzd2l0Y2goQ2UuYWRhcHRlcnx8KHRoaXMucmVxdWVzdENsaWVudD1uZXcgQ2UuYWRhcHRlci5yZXFDbGFzcyh7dGltZW91dDplLnRpbWVvdXR8fDVlMyx0aW1lb3V0TXNnOmDor7fmsYLlnKgkeyhlLnRpbWVvdXR8fDVlMykvMWUzfXPlhoXmnKrlrozmiJDvvIzlt7LkuK3mlq1gfSkpLHRoaXMuY29uZmlnPXsuLi5wdCwuLi5lfSwhMCl7Y2FzZSB0aGlzLmNvbmZpZy50aW1lb3V0PjZlNTpjb25zb2xlLndhcm4oXCJ0aW1lb3V05aSn5LqO5Y+v6YWN572u5LiK6ZmQWzEw5YiG6ZKfXe+8jOW3sumHjee9ruS4uuS4iumZkOaVsOWAvFwiKSx0aGlzLmNvbmZpZy50aW1lb3V0PTZlNTticmVhaztjYXNlIHRoaXMuY29uZmlnLnRpbWVvdXQ8MTAwOmNvbnNvbGUud2FybihcInRpbWVvdXTlsI/kuo7lj6/phY3nva7kuIvpmZBbMTAwbXNd77yM5bey6YeN572u5Li65LiL6ZmQ5pWw5YC8XCIpLHRoaXMuY29uZmlnLnRpbWVvdXQ9MTAwfXJldHVybiBuZXcgZ3QodGhpcy5jb25maWcpfWF1dGgoe3BlcnNpc3RlbmNlOmV9PXt9KXtpZih0aGlzLmF1dGhPYmopcmV0dXJuIHRoaXMuYXV0aE9iajtjb25zdCB0PWV8fENlLmFkYXB0ZXIucHJpbWFyeVN0b3JhZ2V8fHB0LnBlcnNpc3RlbmNlO3ZhciBuO3JldHVybiB0IT09dGhpcy5jb25maWcucGVyc2lzdGVuY2UmJih0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZT10KSxmdW5jdGlvbihlKXtjb25zdHtlbnY6dH09ZTtFZVt0XT1uZXcgT2UoZSksTGVbdF09bmV3IE9lKHsuLi5lLHBlcnNpc3RlbmNlOlwibG9jYWxcIn0pfSh0aGlzLmNvbmZpZyksbj10aGlzLmNvbmZpZyxRZVtuLmVudl09bmV3IFllKG4pLHRoaXMuYXV0aE9iaj1uZXcgb3QodGhpcy5jb25maWcpLHRoaXMuYXV0aE9ian1vbihlLHQpe3JldHVybiBNZS5hcHBseSh0aGlzLFtlLHRdKX1vZmYoZSx0KXtyZXR1cm4gRmUuYXBwbHkodGhpcyxbZSx0XSl9Y2FsbEZ1bmN0aW9uKGUsdCl7cmV0dXJuIGR0LmFwcGx5KHRoaXMsW2UsdF0pfWRlbGV0ZUZpbGUoZSx0KXtyZXR1cm4gdXQuYXBwbHkodGhpcyxbZSx0XSl9Z2V0VGVtcEZpbGVVUkwoZSx0KXtyZXR1cm4gaHQuYXBwbHkodGhpcyxbZSx0XSl9ZG93bmxvYWRGaWxlKGUsdCl7cmV0dXJuIGx0LmFwcGx5KHRoaXMsW2UsdF0pfXVwbG9hZEZpbGUoZSx0KXtyZXR1cm4gYXQuYXBwbHkodGhpcyxbZSx0XSl9Z2V0VXBsb2FkTWV0YWRhdGEoZSx0KXtyZXR1cm4gY3QuYXBwbHkodGhpcyxbZSx0XSl9cmVnaXN0ZXJFeHRlbnNpb24oZSl7ZnRbZS5uYW1lXT1lfWFzeW5jIGludm9rZUV4dGVuc2lvbihlLHQpe2NvbnN0IG49ZnRbZV07aWYoIW4pdGhyb3cgbmV3IHRlKHttZXNzYWdlOmDmianlsZUke2V9IOW/hemhu+WFiOazqOWGjGB9KTtyZXR1cm4gYXdhaXQgbi5pbnZva2UodCx0aGlzKX11c2VBZGFwdGVycyhlKXtjb25zdHthZGFwdGVyOnQscnVudGltZTpufT1BZShlKXx8e307dCYmKENlLmFkYXB0ZXI9dCksbiYmKENlLnJ1bnRpbWU9bil9fXZhciBtdD1uZXcgZ3Q7ZnVuY3Rpb24geXQoZSx0LG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgcz0vXFw/Ly50ZXN0KHQpLHI9XCJcIjtmb3IodmFyIGkgaW4gbilcIlwiPT09cj8hcyYmKHQrPVwiP1wiKTpyKz1cIiZcIixyKz1pK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChuW2ldKTtyZXR1cm4vXmh0dHAocyk/OlxcL1xcLy8udGVzdCh0Kz1yKT90OlwiXCIrZSt0fWNsYXNzIF90e3Bvc3QoZSl7Y29uc3R7dXJsOnQsZGF0YTpuLGhlYWRlcnM6c309ZTtyZXR1cm4gbmV3IFByb21pc2UoKChlLHIpPT57bmUucmVxdWVzdCh7dXJsOnl0KFwiaHR0cHM6XCIsdCksZGF0YTpuLG1ldGhvZDpcIlBPU1RcIixoZWFkZXI6cyxzdWNjZXNzKHQpe2UodCl9LGZhaWwoZSl7cihlKX19KX0pKX11cGxvYWQoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+e2NvbnN0e3VybDpzLGZpbGU6cixkYXRhOmksaGVhZGVyczpvLGZpbGVUeXBlOmF9PWUsYz1uZS51cGxvYWRGaWxlKHt1cmw6eXQoXCJodHRwczpcIixzKSxuYW1lOlwiZmlsZVwiLGZvcm1EYXRhOk9iamVjdC5hc3NpZ24oe30saSksZmlsZVBhdGg6cixmaWxlVHlwZTphLGhlYWRlcjpvLHN1Y2Nlc3MoZSl7Y29uc3Qgbj17c3RhdHVzQ29kZTplLnN0YXR1c0NvZGUsZGF0YTplLmRhdGF8fHt9fTsyMDA9PT1lLnN0YXR1c0NvZGUmJmkuc3VjY2Vzc19hY3Rpb25fc3RhdHVzJiYobi5zdGF0dXNDb2RlPXBhcnNlSW50KGkuc3VjY2Vzc19hY3Rpb25fc3RhdHVzLDEwKSksdChuKX0sZmFpbChlKXtuKG5ldyBFcnJvcihlLmVyck1zZ3x8XCJ1cGxvYWRGaWxlOmZhaWxcIikpfX0pO1wiZnVuY3Rpb25cIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmYyYmXCJmdW5jdGlvblwiPT10eXBlb2YgYy5vblByb2dyZXNzVXBkYXRlJiZjLm9uUHJvZ3Jlc3NVcGRhdGUoKHQ9PntlLm9uVXBsb2FkUHJvZ3Jlc3Moe2xvYWRlZDp0LnRvdGFsQnl0ZXNTZW50LHRvdGFsOnQudG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kfSl9KSl9KSl9fWNvbnN0IHd0PXtzZXRJdGVtKGUsdCl7bmUuc2V0U3RvcmFnZVN5bmMoZSx0KX0sZ2V0SXRlbTplPT5uZS5nZXRTdG9yYWdlU3luYyhlKSxyZW1vdmVJdGVtKGUpe25lLnJlbW92ZVN0b3JhZ2VTeW5jKGUpfSxjbGVhcigpe25lLmNsZWFyU3RvcmFnZVN5bmMoKX19O3ZhciB2dD17Z2VuQWRhcHRlcjpmdW5jdGlvbigpe3JldHVybntyb290Ont9LHJlcUNsYXNzOl90LGxvY2FsU3RvcmFnZTp3dCxwcmltYXJ5U3RvcmFnZTpcImxvY2FsXCJ9fSxpc01hdGNoOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHJ1bnRpbWU6XCJ1bmlfYXBwXCJ9O210LnVzZUFkYXB0ZXJzKHZ0KTtjb25zdCBJdD1tdCxTdD1JdC5pbml0O0l0LmluaXQ9ZnVuY3Rpb24oZSl7ZS5lbnY9ZS5zcGFjZUlkO2NvbnN0IHQ9U3QuY2FsbCh0aGlzLGUpO3QuY29uZmlnLnByb3ZpZGVyPVwidGVuY2VudFwiLHQuY29uZmlnLnNwYWNlSWQ9ZS5zcGFjZUlkO2NvbnN0IG49dC5hdXRoO3JldHVybiB0LmF1dGg9ZnVuY3Rpb24oZSl7Y29uc3QgdD1uLmNhbGwodGhpcyxlKTtyZXR1cm5bXCJsaW5rQW5kUmV0cmlldmVEYXRhV2l0aFRpY2tldFwiLFwic2lnbkluQW5vbnltb3VzbHlcIixcInNpZ25PdXRcIixcImdldEFjY2Vzc1Rva2VuXCIsXCJnZXRMb2dpblN0YXRlXCIsXCJzaWduSW5XaXRoVGlja2V0XCIsXCJnZXRVc2VySW5mb1wiXS5mb3JFYWNoKChlPT57dmFyIG47dFtlXT0obj10W2VdLGZ1bmN0aW9uKGUpe2U9ZXx8e307Y29uc3R7c3VjY2Vzczp0LGZhaWw6cyxjb21wbGV0ZTpyfT1lZShlKTtpZighKHR8fHN8fHIpKXJldHVybiBuLmNhbGwodGhpcyxlKTtuLmNhbGwodGhpcyxlKS50aGVuKChlPT57dCYmdChlKSxyJiZyKGUpfSksKGU9PntzJiZzKGUpLHImJnIoZSl9KSl9KS5iaW5kKHQpfSkpLHR9LHQuY3VzdG9tQXV0aD10LmF1dGgsdH07dmFyIGJ0PUl0O3ZhciBrdD1jbGFzcyBleHRlbmRzIHBle2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIG5ldyBQcm9taXNlKCgoZSx0KT0+e2NvbnN0IG49XCJBbm9ueW1vdXNfQWNjZXNzX3Rva2VuXCI7dGhpcy5zZXRBY2Nlc3NUb2tlbihuKSxlKG4pfSkpfXNldHVwUmVxdWVzdChlLHQpe2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSxlLHtzcGFjZUlkOnRoaXMuY29uZmlnLnNwYWNlSWQsdGltZXN0YW1wOkRhdGUubm93KCl9KSxzPXtcIkNvbnRlbnQtVHlwZVwiOlwiYXBwbGljYXRpb24vanNvblwifTtcImF1dGhcIiE9PXQmJihuLnRva2VuPXRoaXMuYWNjZXNzVG9rZW4sc1tcIngtYmFzZW1lbnQtdG9rZW5cIl09dGhpcy5hY2Nlc3NUb2tlbiksc1tcIngtc2VydmVybGVzcy1zaWduXCJdPWRlLnNpZ24obix0aGlzLmNvbmZpZy5jbGllbnRTZWNyZXQpO2NvbnN0IHI9bGUoKTtzW1wieC1jbGllbnQtaW5mb1wiXT1lbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocikpO2NvbnN0e3Rva2VuOml9PXJlKCk7cmV0dXJuIHNbXCJ4LWNsaWVudC10b2tlblwiXT1pLHt1cmw6dGhpcy5jb25maWcucmVxdWVzdFVybCxtZXRob2Q6XCJQT1NUXCIsZGF0YTpuLGRhdGFUeXBlOlwianNvblwiLGhlYWRlcjpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMpKX19dXBsb2FkRmlsZVRvT1NTKHt1cmw6ZSxmb3JtRGF0YTp0LG5hbWU6bixmaWxlUGF0aDpzLGZpbGVUeXBlOnIsb25VcGxvYWRQcm9ncmVzczppfSl7cmV0dXJuIG5ldyBQcm9taXNlKCgobyxhKT0+e2NvbnN0IGM9dGhpcy5hZGFwdGVyLnVwbG9hZEZpbGUoe3VybDplLGZvcm1EYXRhOnQsbmFtZTpuLGZpbGVQYXRoOnMsZmlsZVR5cGU6cixzdWNjZXNzKGUpe2UmJmUuc3RhdHVzQ29kZTw0MDA/byhlKTphKG5ldyB0ZSh7Y29kZTpcIlVQTE9BRF9GQUlMRURcIixtZXNzYWdlOlwi5paH5Lu25LiK5Lyg5aSx6LSlXCJ9KSl9LGZhaWwoZSl7YShuZXcgdGUoe2NvZGU6ZS5jb2RlfHxcIlVQTE9BRF9GQUlMRURcIixtZXNzYWdlOmUubWVzc2FnZXx8ZS5lcnJNc2d8fFwi5paH5Lu25LiK5Lyg5aSx6LSlXCJ9KSl9fSk7XCJmdW5jdGlvblwiPT10eXBlb2YgaSYmYyYmXCJmdW5jdGlvblwiPT10eXBlb2YgYy5vblByb2dyZXNzVXBkYXRlJiZjLm9uUHJvZ3Jlc3NVcGRhdGUoKGU9PntpKHtsb2FkZWQ6ZS50b3RhbEJ5dGVzU2VudCx0b3RhbDplLnRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZH0pfSkpfSkpfXVwbG9hZEZpbGUoe2ZpbGVQYXRoOmUsY2xvdWRQYXRoOnQsZmlsZVR5cGU6bj1cImltYWdlXCIsb25VcGxvYWRQcm9ncmVzczpzfSl7aWYoIXQpdGhyb3cgbmV3IHRlKHtjb2RlOlwiQ0xPVURQQVRIX1JFUVVJUkVEXCIsbWVzc2FnZTpcImNsb3VkUGF0aOS4jeWPr+S4uuepulwifSk7bGV0IHI7cmV0dXJuIHRoaXMuZ2V0T1NTVXBsb2FkT3B0aW9uc0Zyb21QYXRoKHtjbG91ZFBhdGg6dH0pLnRoZW4oKHQ9Pntjb25zdHt1cmw6aSxmb3JtRGF0YTpvLG5hbWU6YX09dC5yZXN1bHQ7cj10LnJlc3VsdC5maWxlVXJsO2NvbnN0IGM9e3VybDppLGZvcm1EYXRhOm8sbmFtZTphLGZpbGVQYXRoOmUsZmlsZVR5cGU6bn07cmV0dXJuIHRoaXMudXBsb2FkRmlsZVRvT1NTKE9iamVjdC5hc3NpZ24oe30sYyx7b25VcGxvYWRQcm9ncmVzczpzfSkpfSkpLnRoZW4oKCgpPT50aGlzLnJlcG9ydE9TU1VwbG9hZCh7Y2xvdWRQYXRoOnR9KSkpLnRoZW4oKHQ9Pm5ldyBQcm9taXNlKCgobixzKT0+e3Quc3VjY2Vzcz9uKHtzdWNjZXNzOiEwLGZpbGVQYXRoOmUsZmlsZUlEOnJ9KTpzKG5ldyB0ZSh7Y29kZTpcIlVQTE9BRF9GQUlMRURcIixtZXNzYWdlOlwi5paH5Lu25LiK5Lyg5aSx6LSlXCJ9KSl9KSkpKX1kZWxldGVGaWxlKHtmaWxlTGlzdDplfSl7Y29uc3QgdD17bWV0aG9kOlwic2VydmVybGVzcy5maWxlLnJlc291cmNlLmRlbGV0ZVwiLHBhcmFtczpKU09OLnN0cmluZ2lmeSh7ZmlsZUxpc3Q6ZX0pfTtyZXR1cm4gdGhpcy5yZXF1ZXN0KHRoaXMuc2V0dXBSZXF1ZXN0KHQpKS50aGVuKChlPT57aWYoZS5zdWNjZXNzKXJldHVybiBlLnJlc3VsdDt0aHJvdyBuZXcgdGUoe2NvZGU6XCJERUxFVEVfRklMRV9GQUlMRURcIixtZXNzYWdlOlwi5Yig6Zmk5paH5Lu25aSx6LSlXCJ9KX0pKX1nZXRUZW1wRmlsZVVSTCh7ZmlsZUxpc3Q6ZSxtYXhBZ2U6dH09e30pe2lmKCFBcnJheS5pc0FycmF5KGUpfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IHRlKHtjb2RlOlwiSU5WQUxJRF9QQVJBTVwiLG1lc3NhZ2U6XCJmaWxlTGlzdOeahOWFg+e0oOW/hemhu+aYr+mdnuepuueahOWtl+espuS4slwifSk7Y29uc3Qgbj17bWV0aG9kOlwic2VydmVybGVzcy5maWxlLnJlc291cmNlLmdldFRlbXBGaWxlVVJMXCIscGFyYW1zOkpTT04uc3RyaW5naWZ5KHtmaWxlTGlzdDplLG1heEFnZTp0fSl9O3JldHVybiB0aGlzLnJlcXVlc3QodGhpcy5zZXR1cFJlcXVlc3QobikpLnRoZW4oKGU9PntpZihlLnN1Y2Nlc3MpcmV0dXJue2ZpbGVMaXN0OmUucmVzdWx0LmZpbGVMaXN0Lm1hcCgoZT0+KHtmaWxlSUQ6ZS5maWxlSUQsdGVtcEZpbGVVUkw6ZS50ZW1wRmlsZVVSTH0pKSl9O3Rocm93IG5ldyB0ZSh7Y29kZTpcIkdFVF9URU1QX0ZJTEVfVVJMX0ZBSUxFRFwiLG1lc3NhZ2U6XCLojrflj5bkuLTml7bmlofku7bpk77mjqXlpLHotKVcIn0pfSkpfX07dmFyIEF0PXtpbml0KGUpe2NvbnN0IHQ9bmV3IGt0KGUpLG49e3NpZ25JbkFub255bW91c2x5OmZ1bmN0aW9uKCl7cmV0dXJuIHQuYXV0aG9yaXplKCl9LGdldExvZ2luU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKX19O3JldHVybiB0LmF1dGg9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sdC5jdXN0b21BdXRoPXQuYXV0aCx0fX0sQ3Q9bigoZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ci5lbmMuSGV4fSkpO2Z1bmN0aW9uIFB0KCl7cmV0dXJuXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csKGZ1bmN0aW9uKGUpe3ZhciB0PTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oXCJ4XCI9PT1lP3Q6MyZ0fDgpLnRvU3RyaW5nKDE2KX0pKX1mdW5jdGlvbiBUdChlPVwiXCIsdD17fSl7Y29uc3R7ZGF0YTpuLGZ1bmN0aW9uTmFtZTpzLG1ldGhvZDpyLGhlYWRlcnM6aSxzaWduSGVhZGVyS2V5czpvPVtdLGNvbmZpZzphfT10LGM9RGF0ZS5ub3coKSx1PVB0KCksaD1PYmplY3QuYXNzaWduKHt9LGkse1wieC1mcm9tLWFwcC1pZFwiOmEuc3BhY2VBcHBJZCxcIngtZnJvbS1lbnYtaWRcIjphLnNwYWNlSWQsXCJ4LXRvLWVudi1pZFwiOmEuc3BhY2VJZCxcIngtZnJvbS1pbnN0YW5jZS1pZFwiOmMsXCJ4LWZyb20tZnVuY3Rpb24tbmFtZVwiOnMsXCJ4LWNsaWVudC10aW1lc3RhbXBcIjpjLFwieC1hbGlwYXktc291cmNlXCI6XCJjbGllbnRcIixcIngtcmVxdWVzdC1pZFwiOnUsXCJ4LWFsaXBheS1jYWxsaWRcIjp1LFwieC10cmFjZS1pZFwiOnV9KSxsPVtcIngtZnJvbS1hcHAtaWRcIixcIngtZnJvbS1lbnYtaWRcIixcIngtdG8tZW52LWlkXCIsXCJ4LWZyb20taW5zdGFuY2UtaWRcIixcIngtZnJvbS1mdW5jdGlvbi1uYW1lXCIsXCJ4LWNsaWVudC10aW1lc3RhbXBcIl0uY29uY2F0KG8pLFtkPVwiXCIscD1cIlwiXT1lLnNwbGl0KFwiP1wiKXx8W10sZj1mdW5jdGlvbihlKXtjb25zdCB0PWUuc2lnbmVkSGVhZGVycy5qb2luKFwiO1wiKSxuPWUuc2lnbmVkSGVhZGVycy5tYXAoKHQ9PmAke3QudG9Mb3dlckNhc2UoKX06JHtlLmhlYWRlcnNbdF19XFxuYCkpLmpvaW4oXCJcIikscz13ZShlLmJvZHkpLnRvU3RyaW5nKEN0KSxyPWAke2UubWV0aG9kLnRvVXBwZXJDYXNlKCl9XFxuJHtlLnBhdGh9XFxuJHtlLnF1ZXJ5fVxcbiR7bn1cXG4ke3R9XFxuJHtzfVxcbmAsaT13ZShyKS50b1N0cmluZyhDdCksbz1gSE1BQy1TSEEyNTZcXG4ke2UudGltZXN0YW1wfVxcbiR7aX1cXG5gLGE9dmUobyxlLnNlY3JldEtleSkudG9TdHJpbmcoQ3QpO3JldHVybmBITUFDLVNIQTI1NiBDcmVkZW50aWFsPSR7ZS5zZWNyZXRJZH0sIFNpZ25lZEhlYWRlcnM9JHt0fSwgU2lnbmF0dXJlPSR7YX1gfSh7cGF0aDpkLHF1ZXJ5OnAsbWV0aG9kOnIsaGVhZGVyczpoLHRpbWVzdGFtcDpjLGJvZHk6SlNPTi5zdHJpbmdpZnkobiksc2VjcmV0SWQ6YS5hY2Nlc3NLZXksc2VjcmV0S2V5OmEuc2VjcmV0S2V5LHNpZ25lZEhlYWRlcnM6bC5zb3J0KCl9KTtyZXR1cm57dXJsOmAke2EuZW5kcG9pbnR9JHtlfWAsaGVhZGVyczpPYmplY3QuYXNzaWduKHt9LGgse0F1dGhvcml6YXRpb246Zn0pfX1mdW5jdGlvbiB4dCh7dXJsOmUsZGF0YTp0LG1ldGhvZDpuPVwiUE9TVFwiLGhlYWRlcnM6cz17fX0pe3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9PntuZS5yZXF1ZXN0KHt1cmw6ZSxtZXRob2Q6bixkYXRhOlwib2JqZWN0XCI9PXR5cGVvZiB0P0pTT04uc3RyaW5naWZ5KHQpOnQsaGVhZGVyOnMsZGF0YVR5cGU6XCJqc29uXCIsY29tcGxldGU6KGU9e30pPT57Y29uc3QgdD1zW1wieC10cmFjZS1pZFwiXXx8XCJcIjtpZighZS5zdGF0dXNDb2RlfHxlLnN0YXR1c0NvZGU+PTQwMCl7Y29uc3R7bWVzc2FnZTpuLGVyck1zZzpzLHRyYWNlX2lkOnJ9PWUuZGF0YXx8e307cmV0dXJuIGkobmV3IHRlKHtjb2RlOlwiU1lTX0VSUlwiLG1lc3NhZ2U6bnx8c3x8XCJyZXF1ZXN0OmZhaWxcIixyZXF1ZXN0SWQ6cnx8dH0pKX1yKHtzdGF0dXM6ZS5zdGF0dXNDb2RlLGRhdGE6ZS5kYXRhLGhlYWRlcnM6ZS5oZWFkZXIscmVxdWVzdElkOnR9KX19KX0pKX1mdW5jdGlvbiBPdChlLHQpe2NvbnN0e3BhdGg6bixkYXRhOnMsbWV0aG9kOnI9XCJHRVRcIn09ZSx7dXJsOmksaGVhZGVyczpvfT1UdChuLHtmdW5jdGlvbk5hbWU6XCJcIixkYXRhOnMsbWV0aG9kOnIsaGVhZGVyczp7XCJ4LWFsaXBheS1jbG91ZC1tb2RlXCI6XCJvc3NcIixcIngtZGF0YS1hcGktdHlwZVwiOlwib3NzXCIsXCJ4LWV4cGlyZS10aW1lc3RhbXBcIjpEYXRlLm5vdygpKzZlNH0sc2lnbkhlYWRlcktleXM6W1wieC1kYXRhLWFwaS10eXBlXCIsXCJ4LWV4cGlyZS10aW1lc3RhbXBcIl0sY29uZmlnOnR9KTtyZXR1cm4geHQoe3VybDppLGRhdGE6cyxtZXRob2Q6cixoZWFkZXJzOm99KS50aGVuKChlPT57Y29uc3QgdD1lLmRhdGF8fHt9O2lmKCF0LnN1Y2Nlc3MpdGhyb3cgbmV3IHRlKHtjb2RlOmUuZXJyQ29kZSxtZXNzYWdlOmUuZXJyTXNnLHJlcXVlc3RJZDplLnJlcXVlc3RJZH0pO3JldHVybiB0LmRhdGF8fHt9fSkpLmNhdGNoKChlPT57dGhyb3cgbmV3IHRlKHtjb2RlOmUuZXJyQ29kZSxtZXNzYWdlOmUuZXJyTXNnLHJlcXVlc3RJZDplLnJlcXVlc3RJZH0pfSkpfWZ1bmN0aW9uIEV0KGU9XCJcIil7Y29uc3QgdD1lLnRyaW0oKS5yZXBsYWNlKC9eY2xvdWQ6XFwvXFwvLyxcIlwiKSxuPXQuaW5kZXhPZihcIi9cIik7aWYobjw9MCl0aHJvdyBuZXcgdGUoe2NvZGU6XCJJTlZBTElEX1BBUkFNXCIsbWVzc2FnZTpcImZpbGVJROS4jeWQiOazlVwifSk7Y29uc3Qgcz10LnN1YnN0cmluZygwLG4pLHI9dC5zdWJzdHJpbmcobisxKTtyZXR1cm4gcyE9PXRoaXMuY29uZmlnLnNwYWNlSWQmJmNvbnNvbGUud2FybihcImZpbGUgXCIuY29uY2F0KGUsXCIgZG9lcyBub3QgYmVsb25nIHRvIGVudiBcIikuY29uY2F0KHRoaXMuY29uZmlnLnNwYWNlSWQpKSxyfWZ1bmN0aW9uIEx0KGU9XCJcIil7cmV0dXJuXCJjbG91ZDovL1wiLmNvbmNhdCh0aGlzLmNvbmZpZy5zcGFjZUlkLFwiL1wiKS5jb25jYXQoZS5yZXBsYWNlKC9eXFwvKy8sXCJcIikpfWNsYXNzIFJ0e2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZmlnPWV9c2lnbmVkVVJMKGUsdD17fSl7Y29uc3Qgbj1gL3dzL2Z1bmN0aW9uLyR7ZX1gLHM9dGhpcy5jb25maWcud3NFbmRwb2ludC5yZXBsYWNlKC9ed3Mocyk/OlxcL1xcLy8sXCJcIikscj1PYmplY3QuYXNzaWduKHt9LHQse2FjY2Vzc0tleUlkOnRoaXMuY29uZmlnLmFjY2Vzc0tleSxzaWduYXR1cmVOb25jZTpQdCgpLHRpbWVzdGFtcDpcIlwiK0RhdGUubm93KCl9KSxpPVtuLFtcImFjY2Vzc0tleUlkXCIsXCJhdXRob3JpemF0aW9uXCIsXCJzaWduYXR1cmVOb25jZVwiLFwidGltZXN0YW1wXCJdLnNvcnQoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiByW2VdP1wiXCIuY29uY2F0KGUsXCI9XCIpLmNvbmNhdChyW2VdKTpudWxsfSkpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiJlwiKSxgaG9zdDoke3N9YF0uam9pbihcIlxcblwiKSxvPVtcIkhNQUMtU0hBMjU2XCIsd2UoaSkudG9TdHJpbmcoQ3QpXS5qb2luKFwiXFxuXCIpLGE9dmUobyx0aGlzLmNvbmZpZy5zZWNyZXRLZXkpLnRvU3RyaW5nKEN0KSxjPU9iamVjdC5rZXlzKHIpLm1hcCgoZT0+YCR7ZX09JHtlbmNvZGVVUklDb21wb25lbnQocltlXSl9YCkpLmpvaW4oXCImXCIpO3JldHVybmAke3RoaXMuY29uZmlnLndzRW5kcG9pbnR9JHtufT8ke2N9JnNpZ25hdHVyZT0ke2F9YH19dmFyIFV0PWNsYXNze2NvbnN0cnVjdG9yKGUpe2lmKFtcInNwYWNlSWRcIixcInNwYWNlQXBwSWRcIixcImFjY2Vzc0tleVwiLFwic2VjcmV0S2V5XCJdLmZvckVhY2goKHQ9PntpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkpdGhyb3cgbmV3IEVycm9yKGAke3R9IHJlcXVpcmVkYCl9KSksZS5lbmRwb2ludCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUuZW5kcG9pbnQpdGhyb3cgbmV3IEVycm9yKFwiZW5kcG9pbnQgbXVzdCBiZSBzdHJpbmdcIik7aWYoIS9eaHR0cHM6XFwvXFwvLy50ZXN0KGUuZW5kcG9pbnQpKXRocm93IG5ldyBFcnJvcihcImVuZHBvaW50IG11c3Qgc3RhcnQgd2l0aCBodHRwczovL1wiKTtlLmVuZHBvaW50PWUuZW5kcG9pbnQucmVwbGFjZSgvXFwvJC8sXCJcIil9dGhpcy5jb25maWc9T2JqZWN0LmFzc2lnbih7fSxlLHtlbmRwb2ludDplLmVuZHBvaW50fHxgaHR0cHM6Ly8ke2Uuc3BhY2VJZH0uYXBpLWh6LmNsb3VkYmFzZWZ1bmN0aW9uLmNuYCx3c0VuZHBvaW50OmUud3NFbmRwb2ludHx8YHdzczovLyR7ZS5zcGFjZUlkfS5hcGktaHouY2xvdWRiYXNlZnVuY3Rpb24uY25gfSksdGhpcy5fd2Vic29ja2V0PW5ldyBSdCh0aGlzLmNvbmZpZyl9Y2FsbEZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQpe2NvbnN0e25hbWU6bixkYXRhOnMsYXN5bmM6cj0hMX09ZSxpPVwiUE9TVFwiLG89e1wieC10by1mdW5jdGlvbi1uYW1lXCI6bn07ciYmKG9bXCJ4LWZ1bmN0aW9uLWludm9rZS10eXBlXCJdPVwiYXN5bmNcIik7Y29uc3R7dXJsOmEsaGVhZGVyczpjfT1UdChcIi9mdW5jdGlvbnMvaW52b2tlRnVuY3Rpb25cIix7ZnVuY3Rpb25OYW1lOm4sZGF0YTpzLG1ldGhvZDppLGhlYWRlcnM6byxzaWduSGVhZGVyS2V5czpbXCJ4LXRvLWZ1bmN0aW9uLW5hbWVcIl0sY29uZmlnOnR9KTtyZXR1cm4geHQoe3VybDphLGRhdGE6cyxtZXRob2Q6aSxoZWFkZXJzOmN9KS50aGVuKChlPT57bGV0IHQ9MDtpZihyKXtjb25zdCBuPWUuZGF0YXx8e307dD1cIjIwMFwiPT09bi5lcnJDb2RlPzA6bi5lcnJDb2RlLGUuZGF0YT1uLmRhdGF8fHt9LGUuZXJyTXNnPW4uZXJyTXNnfWlmKDAhPT10KXRocm93IG5ldyB0ZSh7Y29kZTp0LG1lc3NhZ2U6ZS5lcnJNc2cscmVxdWVzdElkOmUucmVxdWVzdElkfSk7cmV0dXJue2VyckNvZGU6dCxzdWNjZXNzOjA9PT10LHJlcXVlc3RJZDplLnJlcXVlc3RJZCxyZXN1bHQ6ZS5kYXRhfX0pKS5jYXRjaCgoZT0+e3Rocm93IG5ldyB0ZSh7Y29kZTplLmVyckNvZGUsbWVzc2FnZTplLmVyck1zZyxyZXF1ZXN0SWQ6ZS5yZXF1ZXN0SWR9KX0pKX0oZSx0aGlzLmNvbmZpZyl9dXBsb2FkRmlsZVRvT1NTKHt1cmw6ZSxmaWxlUGF0aDp0LGZpbGVUeXBlOm4sZm9ybURhdGE6cyxvblVwbG9hZFByb2dyZXNzOnJ9KXtyZXR1cm4gbmV3IFByb21pc2UoKChpLG8pPT57Y29uc3QgYT1uZS51cGxvYWRGaWxlKHt1cmw6ZSxmaWxlUGF0aDp0LGZpbGVUeXBlOm4sZm9ybURhdGE6cyxuYW1lOlwiZmlsZVwiLHN1Y2Nlc3MoZSl7ZSYmZS5zdGF0dXNDb2RlPDQwMD9pKGUpOm8obmV3IHRlKHtjb2RlOlwiVVBMT0FEX0ZBSUxFRFwiLG1lc3NhZ2U6XCLmlofku7bkuIrkvKDlpLHotKVcIn0pKX0sZmFpbChlKXtvKG5ldyB0ZSh7Y29kZTplLmNvZGV8fFwiVVBMT0FEX0ZBSUxFRFwiLG1lc3NhZ2U6ZS5tZXNzYWdlfHxlLmVyck1zZ3x8XCLmlofku7bkuIrkvKDlpLHotKVcIn0pKX19KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZhJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLm9uUHJvZ3Jlc3NVcGRhdGUmJmEub25Qcm9ncmVzc1VwZGF0ZSgoZT0+e3Ioe2xvYWRlZDplLnRvdGFsQnl0ZXNTZW50LHRvdGFsOmUudG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kfSl9KSl9KSl9YXN5bmMgdXBsb2FkRmlsZSh7ZmlsZVBhdGg6ZSxjbG91ZFBhdGg6dD1cIlwiLGZpbGVUeXBlOm49XCJpbWFnZVwiLG9uVXBsb2FkUHJvZ3Jlc3M6c30pe2lmKFwic3RyaW5nXCIhPT1mKHQpKXRocm93IG5ldyB0ZSh7Y29kZTpcIklOVkFMSURfUEFSQU1cIixtZXNzYWdlOlwiY2xvdWRQYXRo5b+F6aG75Li65a2X56ym5Liy57G75Z6LXCJ9KTtpZighKHQ9dC50cmltKCkpKXRocm93IG5ldyB0ZSh7Y29kZTpcIklOVkFMSURfUEFSQU1cIixtZXNzYWdlOlwiY2xvdWRQYXRo5LiN5Y+v5Li656m6XCJ9KTtpZigvOlxcL1xcLy8udGVzdCh0KSl0aHJvdyBuZXcgdGUoe2NvZGU6XCJJTlZBTElEX1BBUkFNXCIsbWVzc2FnZTpcImNsb3VkUGF0aOS4jeWQiOazlVwifSk7Y29uc3Qgcj1hd2FpdCBPdCh7cGF0aDpcIi9cIi5jb25jYXQodC5yZXBsYWNlKC9eXFwvLyxcIlwiKSxcIj9wb3N0X3VybFwiKX0sdGhpcy5jb25maWcpLHtmaWxlX2lkOmksdXBsb2FkX3VybDpvLGZvcm1fZGF0YTphfT1yLGM9YSYmYS5yZWR1Y2UoKChlLHQpPT4oZVt0LmtleV09dC52YWx1ZSxlKSkse30pO3JldHVybiB0aGlzLnVwbG9hZEZpbGVUb09TUyh7dXJsOm8sZmlsZVBhdGg6ZSxmaWxlVHlwZTpuLGZvcm1EYXRhOmMsb25VcGxvYWRQcm9ncmVzczpzfSkudGhlbigoKCk9Pih7ZmlsZUlEOml9KSkpfWFzeW5jIGdldFRlbXBGaWxlVVJMKHtmaWxlTGlzdDplfSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+eyghZXx8ZS5sZW5ndGg8MCkmJm4obmV3IHRlKHtlcnJDb2RlOlwiSU5WQUxJRF9QQVJBTVwiLGVyck1zZzpcImZpbGVMaXN05LiN6IO95Li656m65pWw57uEXCJ9KSksZS5sZW5ndGg+NTAmJm4obmV3IHRlKHtlcnJDb2RlOlwiSU5WQUxJRF9QQVJBTVwiLGVyck1zZzpcImZpbGVMaXN05pWw57uE6ZW/5bqm5LiN6IO96LaF6L+HNTBcIn0pKTtjb25zdCBzPVtdO2Zvcihjb25zdCB0IG9mIGUpe1wic3RyaW5nXCIhPT1mKHQpJiZuKG5ldyB0ZSh7ZXJyQ29kZTpcIklOVkFMSURfUEFSQU1cIixlcnJNc2c6XCJmaWxlTGlzdOeahOWFg+e0oOW/hemhu+aYr+mdnuepuueahOWtl+espuS4slwifSkpO2NvbnN0IGU9RXQuY2FsbCh0aGlzLHQpO3MucHVzaCh7ZmlsZV9pZDplLGV4cGlyZTo2MDB9KX1PdCh7cGF0aDpcIi8/ZG93bmxvYWRfdXJsXCIsZGF0YTp7ZmlsZV9saXN0OnN9LG1ldGhvZDpcIlBPU1RcIn0sdGhpcy5jb25maWcpLnRoZW4oKGU9Pntjb25zdHtmaWxlX2xpc3Q6bj1bXX09ZTt0KHtmaWxlTGlzdDpuLm1hcCgoZT0+KHtmaWxlSUQ6THQuY2FsbCh0aGlzLGUuZmlsZV9pZCksdGVtcEZpbGVVUkw6ZS5kb3dubG9hZF91cmx9KSkpfSl9KSkuY2F0Y2goKGU9Pm4oZSkpKX0pKX1hc3luYyBjb25uZWN0V2ViU29ja2V0KGUpe2NvbnN0e25hbWU6dCxxdWVyeTpufT1lO3JldHVybiBuZS5jb25uZWN0U29ja2V0KHt1cmw6dGhpcy5fd2Vic29ja2V0LnNpZ25lZFVSTCh0LG4pLGNvbXBsZXRlOigpPT57fX0pfX07dmFyIE50PXtpbml0OmU9PntlLnByb3ZpZGVyPVwiYWxpcGF5XCI7Y29uc3QgdD1uZXcgVXQoZSk7cmV0dXJuIHQuYXV0aD1mdW5jdGlvbigpe3JldHVybntzaWduSW5Bbm9ueW1vdXNseTpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sZ2V0TG9naW5TdGF0ZTpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoITApfX19LHR9fTtmdW5jdGlvbiBEdCh7ZGF0YTplfSl7bGV0IHQ7dD1sZSgpO2NvbnN0IG49SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlfHx7fSkpO2lmKE9iamVjdC5hc3NpZ24obix7Y2xpZW50SW5mbzp0fSksIW4udW5pSWRUb2tlbil7Y29uc3R7dG9rZW46ZX09cmUoKTtlJiYobi51bmlJZFRva2VuPWUpfXJldHVybiBufWFzeW5jIGZ1bmN0aW9uIE10KHtuYW1lOmUsZGF0YTp0fT17fSl7YXdhaXQgdGhpcy5fX2Rldl9fLmluaXRMb2NhbE5ldHdvcmsoKTtjb25zdHtsb2NhbEFkZHJlc3M6bixsb2NhbFBvcnQ6c309dGhpcy5fX2Rldl9fLHI9e2FsaXl1bjpcImFsaXl1blwiLHRlbmNlbnQ6XCJ0Y2JcIixhbGlwYXk6XCJhbGlwYXlcIn1bdGhpcy5jb25maWcucHJvdmlkZXJdLGk9dGhpcy5jb25maWcuc3BhY2VJZCxvPWBodHRwOi8vJHtufToke3N9L3N5c3RlbS9jaGVjay1mdW5jdGlvbmAsYT1gaHR0cDovLyR7bn06JHtzfS9jbG91ZGZ1bmN0aW9ucy8ke2V9YDtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57bmUucmVxdWVzdCh7bWV0aG9kOlwiUE9TVFwiLHVybDpvLGRhdGE6e25hbWU6ZSxwbGF0Zm9ybTpDLHByb3ZpZGVyOnIsc3BhY2VJZDppfSx0aW1lb3V0OjNlMyxzdWNjZXNzKGUpe3QoZSl9LGZhaWwoKXt0KHtkYXRhOntjb2RlOlwiTkVUV09SS19FUlJPUlwiLG1lc3NhZ2U6XCLov57mjqXmnKzlnLDosIPor5XmnI3liqHlpLHotKXvvIzor7fmo4Dmn6XlrqLmiLfnq6/mmK/lkKblkozkuLvmnLrlnKjlkIzkuIDlsYDln5/nvZHkuIvvvIzoh6rliqjliIfmjaLkuLrlt7Lpg6jnvbLnmoTkupHlh73mlbDjgIJcIn19KX19KX0pKS50aGVuKCgoe2RhdGE6ZX09e30pPT57Y29uc3R7Y29kZTp0LG1lc3NhZ2U6bn09ZXx8e307cmV0dXJue2NvZGU6MD09PXQ/MDp0fHxcIlNZU19FUlJcIixtZXNzYWdlOm58fFwiU1lTX0VSUlwifX0pKS50aGVuKCgoe2NvZGU6bixtZXNzYWdlOnN9KT0+e2lmKDAhPT1uKXtzd2l0Y2gobil7Y2FzZVwiTU9EVUxFX0VOQ1JZUFRFRFwiOmNvbnNvbGUuZXJyb3IoYOatpOS6keWHveaVsO+8iCR7ZX3vvInkvp3otZbliqDlr4blhazlhbHmqKHlnZfkuI3lj6/mnKzlnLDosIPor5XvvIzoh6rliqjliIfmjaLkuLrkupHnq6/lt7Lpg6jnvbLnmoTkupHlh73mlbBgKTticmVhaztjYXNlXCJGVU5DVElPTl9FTkNSWVBURURcIjpjb25zb2xlLmVycm9yKGDmraTkupHlh73mlbDvvIgke2V977yJ5bey5Yqg5a+G5LiN5Y+v5pys5Zyw6LCD6K+V77yM6Ieq5Yqo5YiH5o2i5Li65LqR56uv5bey6YOo572y55qE5LqR5Ye95pWwYCk7YnJlYWs7Y2FzZVwiQUNUSU9OX0VOQ1JZUFRFRFwiOmNvbnNvbGUuZXJyb3Ioc3x8XCLpnIDopoHorr/pl67liqDlr4bnmoR1bmktY2xpZW50REItYWN0aW9u77yM6Ieq5Yqo5YiH5o2i5Li65LqR56uv546v5aKDXCIpO2JyZWFrO2Nhc2VcIk5FVFdPUktfRVJST1JcIjpjb25zb2xlLmVycm9yKHN8fFwi6L+e5o6l5pys5Zyw6LCD6K+V5pyN5Yqh5aSx6LSl77yM6K+35qOA5p+l5a6i5oi356uv5piv5ZCm5ZKM5Li75py65Zyo5ZCM5LiA5bGA5Z+f572R5LiLXCIpO2JyZWFrO2Nhc2VcIlNXSVRDSF9UT19DTE9VRFwiOmJyZWFrO2RlZmF1bHQ6e2NvbnN0IGU9YOajgOa1i+acrOWcsOiwg+ivleacjeWKoeWHuueOsOmUmeivr++8miR7c33vvIzor7fmo4Dmn6XnvZHnu5znjq/looPmiJbph43lkK/lrqLmiLfnq6/lho3or5VgO3Rocm93IGNvbnNvbGUuZXJyb3IoZSksbmV3IEVycm9yKGUpfX1yZXR1cm4gdGhpcy5fY2FsbENsb3VkRnVuY3Rpb24oe25hbWU6ZSxkYXRhOnR9KX1yZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57Y29uc3Qgcz1EdC5jYWxsKHRoaXMse2RhdGE6dH0pO25lLnJlcXVlc3Qoe21ldGhvZDpcIlBPU1RcIix1cmw6YSxkYXRhOntwcm92aWRlcjpyLHBsYXRmb3JtOkMscGFyYW06c30sc3VjY2Vzczooe3N0YXR1c0NvZGU6dCxkYXRhOnN9PXt9KT0+IXR8fHQ+PTQwMD9uKG5ldyB0ZSh7Y29kZTpzLmNvZGV8fFwiU1lTX0VSUlwiLG1lc3NhZ2U6cy5tZXNzYWdlfHxcInJlcXVlc3Q6ZmFpbFwifSkpOmUoe3Jlc3VsdDpzfSksZmFpbChlKXtuKG5ldyB0ZSh7Y29kZTplLmNvZGV8fGUuZXJyQ29kZXx8XCJTWVNfRVJSXCIsbWVzc2FnZTplLm1lc3NhZ2V8fGUuZXJyTXNnfHxcInJlcXVlc3Q6ZmFpbFwifSkpfX0pfSkpfSkpfWNvbnN0IHF0PVt7cnVsZTovZmNfZnVuY3Rpb25fbm90X2ZvdW5kfEZVTkNUSU9OX05PVF9GT1VORC8sY29udGVudDpcIu+8jOS6keWHveaVsFt7ZnVuY3Rpb25OYW1lfV3lnKjkupHnq6/kuI3lrZjlnKjvvIzor7fmo4Dmn6XmraTkupHlh73mlbDlkI3np7DmmK/lkKbmraPnoa7ku6Xlj4ror6XkupHlh73mlbDmmK/lkKblt7LkuIrkvKDliLDmnI3liqHnqbrpl7RcIixtb2RlOlwiYXBwZW5kXCJ9XTt2YXIgRnQ9L1tcXFxcXiQuKis/KClbXFxde318XS9nLEt0PVJlZ0V4cChGdC5zb3VyY2UpO2Z1bmN0aW9uIGp0KGUsdCxuKXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoKHM9dCkmJkt0LnRlc3Qocyk/cy5yZXBsYWNlKEZ0LFwiXFxcXCQmXCIpOnMsXCJnXCIpLG4pO3ZhciBzfWNvbnN0ICR0PVwibm9uZVwiLEJ0PVwicmVxdWVzdFwiLFd0PVwicmVzcG9uc2VcIixIdD1cImJvdGhcIjtjbGFzcyB6dHtjb25zdHJ1Y3Rvcih7c2VjcmV0VHlwZTplLHVuaUNsb3VkSW5zOnR9PXt9KXt0aGlzLmNsaWVudFR5cGU9XCJcIix0aGlzLnNlY3JldFR5cGU9ZXx8JHQsdGhpcy51bmlDbG91ZElucz10O2NvbnN0e3Byb3ZpZGVyOm4sc3BhY2VJZDpzfT10aGlzLnVuaUNsb3VkSW5zLmNvbmZpZzt2YXIgcjt0aGlzLnByb3ZpZGVyPW4sdGhpcy5zcGFjZUlkPXMsdGhpcy5zY29wZWRHbG9iYWxDYWNoZT0ocj10aGlzLnVuaUNsb3VkSW5zLEwoXCJfZ2xvYmFsVW5pQ2xvdWRTZWN1cmVOZXR3b3JrQ2FjaGVfX3tzcGFjZUlkfVwiLnJlcGxhY2UoXCJ7c3BhY2VJZH1cIixyLmNvbmZpZy5zcGFjZUlkKSkpfWdldFN5c3RlbUluZm8oKXtyZXR1cm4gdGhpcy5fc3lzdGVtSW5mb3x8KHRoaXMuX3N5c3RlbUluZm89Y2UoKSksdGhpcy5fc3lzdGVtSW5mb31nZXQgYXBwSWQoKXtyZXR1cm4gdGhpcy5nZXRTeXN0ZW1JbmZvKCkuYXBwSWR9Z2V0IGRldmljZUlkKCl7cmV0dXJuIHRoaXMuZ2V0U3lzdGVtSW5mbygpLmRldmljZUlkfWFzeW5jIGVuY3J5cHREYXRhKGUpe3JldHVybiB0aGlzLnNlY3JldFR5cGU9PT0kdD9lOnRoaXMucGxhdGZvcm1FbmNyeXB0RGF0YShlKX1hc3luYyBkZWNyeXB0UmVzdWx0KGUpe2lmKHRoaXMuc2VjcmV0VHlwZT09PSR0KXJldHVybiBlO2NvbnN0e2VyckNvZGU6dCxjb250ZW50Om59PWV8fHt9O3JldHVybiB0fHwhbj9lOnRoaXMuc2VjcmV0VHlwZT09PUJ0P246dGhpcy5wbGF0Zm9ybURlY3J5cHRSZXN1bHQoZSl9d3JhcFZlcmlmeUNsaWVudENhbGxGdW5jdGlvbihlKXtjb25zdCB0PXRoaXM7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKHtuYW1lOm4sZGF0YTpzPXt9fT17fSl7YXdhaXQgdC5wcmVwYXJlKCksKHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzKSkpLl91bmlDbG91ZE9wdGlvbnM9YXdhaXQgdC5wbGF0Zm9ybUdldFNpZ25PcHRpb24oKTtsZXQgcj1hd2FpdCBlKHtuYW1lOm4sZGF0YTpzfSk7cmV0dXJuIHQuaXNDbGllbnRLZXlOb3RGb3VuZChyKSYmKGF3YWl0IHQucHJlcGFyZSh7Zm9yY2VVcGRhdGU6ITB9KSxzLl91bmlDbG91ZE9wdGlvbnM9YXdhaXQgdC5wbGF0Zm9ybUdldFNpZ25PcHRpb24oKSxyPWF3YWl0IGUoe25hbWU6bixkYXRhOnN9KSkscn19d3JhcEVuY3J5cHREYXRhQ2FsbEZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcztyZXR1cm4gYXN5bmMgZnVuY3Rpb24oe25hbWU6bixkYXRhOnM9e319PXt9KXthd2FpdCB0LnByZXBhcmUoKTtjb25zdCByPWF3YWl0IHQuZW5jcnlwdERhdGEocyk7bGV0IGk9YXdhaXQgZSh7bmFtZTpuLGRhdGE6cn0pO2lmKHQuaXNDbGllbnRLZXlOb3RGb3VuZChpKSl7YXdhaXQgdC5wcmVwYXJlKHtmb3JjZVVwZGF0ZTohMH0pO2NvbnN0IHI9YXdhaXQgdC5lbmNyeXB0RGF0YShzKTtzLl91bmlDbG91ZE9wdGlvbnM9YXdhaXQgdC5wbGF0Zm9ybUdldFNpZ25PcHRpb24oKSxpPWF3YWl0IGUoe25hbWU6bixkYXRhOnJ9KX1yZXR1cm4gaS5yZXN1bHQ9YXdhaXQgdC5kZWNyeXB0UmVzdWx0KGkucmVzdWx0KSxpfX19XG4vKiEgTUlUIExpY2Vuc2UuIENvcHlyaWdodCAyMDE1LTIwMTggUmljaGFyZCBNb29yZSA8bWVAcmljbW9vLmNvbT4uIFNlZSBMSUNFTlNFLnR4dC4gKi9mdW5jdGlvbiBKdChlKXtyZXR1cm4gcGFyc2VJbnQoZSk9PT1lfWZ1bmN0aW9uIFZ0KGUpe2lmKCFKdChlLmxlbmd0aCkpcmV0dXJuITE7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoIUp0KGVbdF0pfHxlW3RdPDB8fGVbdF0+MjU1KXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEd0KGUsdCl7aWYoZS5idWZmZXImJlwiVWludDhBcnJheVwiPT09ZS5uYW1lKXJldHVybiB0JiYoZT1lLnNsaWNlP2Uuc2xpY2UoKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSksZTtpZihBcnJheS5pc0FycmF5KGUpKXtpZighVnQoZSkpdGhyb3cgbmV3IEVycm9yKFwiQXJyYXkgY29udGFpbnMgaW52YWxpZCB2YWx1ZTogXCIrZSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfWlmKEp0KGUubGVuZ3RoKSYmVnQoZSkpcmV0dXJuIG5ldyBVaW50OEFycmF5KGUpO3Rocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGFycmF5LWxpa2Ugb2JqZWN0XCIpfWZ1bmN0aW9uIFl0KGUpe3JldHVybiBuZXcgVWludDhBcnJheShlKX1mdW5jdGlvbiBRdChlLHQsbixzLHIpe251bGw9PXMmJm51bGw9PXJ8fChlPWUuc2xpY2U/ZS5zbGljZShzLHIpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUscyxyKSksdC5zZXQoZSxuKX12YXIgWHQsWnQ9e3RvQnl0ZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj0wO2ZvcihlPWVuY29kZVVSSShlKTtuPGUubGVuZ3RoOyl7dmFyIHM9ZS5jaGFyQ29kZUF0KG4rKyk7Mzc9PT1zPyh0LnB1c2gocGFyc2VJbnQoZS5zdWJzdHIobiwyKSwxNikpLG4rPTIpOnQucHVzaChzKX1yZXR1cm4gR3QodCl9LGZyb21CeXRlczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KXt2YXIgcz1lW25dO3M8MTI4Pyh0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzKSksbisrKTpzPjE5MSYmczwyMjQ/KHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZzKTw8Nnw2MyZlW24rMV0pKSxuKz0yKToodC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnMpPDwxMnwoNjMmZVtuKzFdKTw8Nnw2MyZlW24rMl0pKSxuKz0zKX1yZXR1cm4gdC5qb2luKFwiXCIpfX0sZW49KFh0PVwiMDEyMzQ1Njc4OWFiY2RlZlwiLHt0b0J5dGVzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKz0yKXQucHVzaChwYXJzZUludChlLnN1YnN0cihuLDIpLDE2KSk7cmV0dXJuIHR9LGZyb21CeXRlczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcz1lW25dO3QucHVzaChYdFsoMjQwJnMpPj40XStYdFsxNSZzXSl9cmV0dXJuIHQuam9pbihcIlwiKX19KSx0bj17MTY6MTAsMjQ6MTIsMzI6MTR9LG5uPVsxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NV0sc249Wzk5LDEyNCwxMTksMTIzLDI0MiwxMDcsMTExLDE5Nyw0OCwxLDEwMyw0MywyNTQsMjE1LDE3MSwxMTgsMjAyLDEzMCwyMDEsMTI1LDI1MCw4OSw3MSwyNDAsMTczLDIxMiwxNjIsMTc1LDE1NiwxNjQsMTE0LDE5MiwxODMsMjUzLDE0NywzOCw1NCw2MywyNDcsMjA0LDUyLDE2NSwyMjksMjQxLDExMywyMTYsNDksMjEsNCwxOTksMzUsMTk1LDI0LDE1MCw1LDE1NCw3LDE4LDEyOCwyMjYsMjM1LDM5LDE3OCwxMTcsOSwxMzEsNDQsMjYsMjcsMTEwLDkwLDE2MCw4Miw1OSwyMTQsMTc5LDQxLDIyNyw0NywxMzIsODMsMjA5LDAsMjM3LDMyLDI1MiwxNzcsOTEsMTA2LDIwMywxOTAsNTcsNzQsNzYsODgsMjA3LDIwOCwyMzksMTcwLDI1MSw2Nyw3Nyw1MSwxMzMsNjksMjQ5LDIsMTI3LDgwLDYwLDE1OSwxNjgsODEsMTYzLDY0LDE0MywxNDYsMTU3LDU2LDI0NSwxODgsMTgyLDIxOCwzMywxNiwyNTUsMjQzLDIxMCwyMDUsMTIsMTksMjM2LDk1LDE1MSw2OCwyMywxOTYsMTY3LDEyNiw2MSwxMDAsOTMsMjUsMTE1LDk2LDEyOSw3OSwyMjAsMzQsNDIsMTQ0LDEzNiw3MCwyMzgsMTg0LDIwLDIyMiw5NCwxMSwyMTksMjI0LDUwLDU4LDEwLDczLDYsMzYsOTIsMTk0LDIxMSwxNzIsOTgsMTQ1LDE0OSwyMjgsMTIxLDIzMSwyMDAsNTUsMTA5LDE0MSwyMTMsNzgsMTY5LDEwOCw4NiwyNDQsMjM0LDEwMSwxMjIsMTc0LDgsMTg2LDEyMCwzNyw0NiwyOCwxNjYsMTgwLDE5OCwyMzIsMjIxLDExNiwzMSw3NSwxODksMTM5LDEzOCwxMTIsNjIsMTgxLDEwMiw3MiwzLDI0NiwxNCw5Nyw1Myw4NywxODUsMTM0LDE5MywyOSwxNTgsMjI1LDI0OCwxNTIsMTcsMTA1LDIxNywxNDIsMTQ4LDE1NSwzMCwxMzUsMjMzLDIwNiw4NSw0MCwyMjMsMTQwLDE2MSwxMzcsMTMsMTkxLDIzMCw2NiwxMDQsNjUsMTUzLDQ1LDE1LDE3Niw4NCwxODcsMjJdLHJuPVs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSxvbj1bMzMyODQwMjM0MSw0MTY4OTA3OTA4LDQwMDA4MDY4MDksNDEzNTI4NzY5Myw0Mjk0MTExNzU3LDM1OTczNjQxNTcsMzczMTg0NTA0MSwyNDQ1NjU3NDI4LDE2MTM3NzA4MzIsMzM2MjAyMjcsMzQ2Mjg4MzI0MSwxNDQ1NjY5NzU3LDM4OTIyNDgwODksMzA1MDgyMTQ3NCwxMzAzMDk2Mjk0LDM5NjcxODY1ODYsMjQxMjQzMTk0MSw1Mjg2NDY4MTMsMjMxMTcwMjg0OCw0MjAyNTI4MTM1LDQwMjYyMDI2NDUsMjk5MjIwMDE3MSwyMzg3MDM2MTA1LDQyMjY4NzEzMDcsMTEwMTkwMTI5MiwzMDE3MDY5NjcxLDE2MDQ0OTQwNzcsMTE2OTE0MTczOCw1OTc0NjYzMDMsMTQwMzI5OTA2MywzODMyNzA1Njg2LDI2MTMxMDA2MzUsMTk3NDk3NDQwMiwzNzkxNTE5MDA0LDEwMzMwODE3NzQsMTI3NzU2ODYxOCwxODE1NDkyMTg2LDIxMTgwNzQxNzcsNDEyNjY2ODU0NiwyMjExMjM2OTQzLDE3NDgyNTE3NDAsMTM2OTgxMDQyMCwzNTIxNTA0NTY0LDQxOTMzODI2NjQsMzc5OTA4NTQ1OSwyODgzMTE1MTIzLDE2NDczOTEwNTksNzA2MDI0NzY3LDEzNDQ4MDkwOCwyNTEyODk3ODc0LDExNzY3MDc5NDEsMjY0Njg1MjQ0Niw4MDY4ODU0MTYsOTMyNjE1ODQxLDE2ODEwMTEzNSw3OTg2NjEzMDEsMjM1MzQxNTc3LDYwNTE2NDA4Niw0NjE0MDYzNjMsMzc1NjE4ODIyMSwzNDU0NzkwNDM4LDEzMTExODg4NDEsMjE0MjQxNzYxMywzOTMzNTY2MzY3LDMwMjU4MjA0Myw0OTUxNTgxNzQsMTQ3OTI4OTk3Miw4NzQxMjU4NzAsOTA3NzQ2MDkzLDM2OTgyMjQ4MTgsMzAyNTgyMDM5OCwxNTM3MjUzNjI3LDI3NTY4NTg2MTQsMTk4MzU5MzI5MywzMDg0MzEwMTEzLDIxMDg5Mjg5NzQsMTM3ODQyOTMwNywzNzIyNjk5NTgyLDE1ODAxNTA2NDEsMzI3NDUxNzk5LDI3OTA0Nzg4MzcsMzExNzUzNTU5MiwwLDMyNTM1OTU0MzYsMTA3NTg0NzI2NCwzODI1MDA3NjQ3LDIwNDE2ODg1MjAsMzA1OTQ0MDYyMSwzNTYzNzQzOTM0LDIzNzg5NDMzMDIsMTc0MDU1Mzk0NSwxOTE2MzUyODQzLDI0ODc4OTY3OTgsMjU1NTEzNzIzNiwyOTU4NTc5OTQ0LDIyNDQ5ODg3NDYsMzE1MTAyNDIzNSwzMzIwODM1ODgyLDEzMzY1ODQ5MzMsMzk5MjcxNDAwNiwyMjUyNTU1MjA1LDI1ODg3NTc0NjMsMTcxNDYzMTUwOSwyOTM5NjMxNTYsMjMxOTc5NTY2MywzOTI1NDczNTUyLDY3MjQwNDU0LDQyNjk3Njg1NzcsMjY4OTYxODE2MCwyMDE3MjEzNTA4LDYzMTIxODEwNiwxMjY5MzQ0NDgzLDI3MjMyMzgzODcsMTU3MTAwNTQzOCwyMTUxNjk0NTI4LDkzMjk0NDc0LDEwNjY1NzA0MTMsNTYzOTc3NjYwLDE4ODI3MzI2MTYsNDA1OTQyODEwMCwxNjczMzEzNTAzLDIwMDg0NjMwNDEsMjk1MDM1NTU3MywxMTA5NDY3NDkxLDUzNzkyMzYzMiwzODU4NzU5NDUwLDQyNjA2MjMxMTgsMzIxODI2NDY4NSwyMTc3NzQ4MzAwLDQwMzQ0MjcwOCw2Mzg3ODQzMDksMzI4NzA4NDA3OSwzMTkzOTIxNTA1LDg5OTEyNzIwMiwyMjg2MTc1NDM2LDc3MzI2NTIwOSwyNDc5MTQ2MDcxLDE0MzcwNTA4NjYsNDIzNjE0ODM1NCwyMDUwODMzNzM1LDMzNjIwMjI1NzIsMzEyNjY4MTA2Myw4NDA1MDU2NDMsMzg2NjMyNTkwOSwzMjI3NTQxNjY0LDQyNzkxNzcyMCwyNjU1OTk3OTA1LDI3NDkxNjA1NzUsMTE0MzA4NzcxOCwxNDEyMDQ5NTM0LDk5OTMyOTk2MywxOTM0OTcyMTksMjM1MzQxNTg4MiwzMzU0MzI0NTIxLDE4MDcyNjgwNTEsNjcyNDA0NTQwLDI4MTY0MDEwMTcsMzE2MDMwMTI4MiwzNjk4MjI0OTMsMjkxNjg2NjkzNCwzNjg4OTQ3NzcxLDE2ODEwMTEyODYsMTk0OTk3MzA3MCwzMzYyMDIyNzAsMjQ1NDI3NjU3MSwyMDE3MjEzNTQsMTIxMDMyODE3MiwzMDkzMDYwODM2LDI2ODAzNDEwODUsMzE4NDc3NjA0NiwxMTM1Mzg5OTM1LDMyOTQ3ODIxMTgsOTY1ODQxMzIwLDgzMTg4Njc1NiwzNTU0OTkzMjA3LDQwNjgwNDcyNDMsMzU4ODc0NTAxMCwyMzQ1MTkxNDkxLDE4NDkxMTI0MDksMzY2NDYwNDU5OSwyNjA1NDAyOCwyOTgzNTgxMDI4LDI2MjIzNzc2ODIsMTIzNTg1NTg0MCwzNjMwOTg0MzcyLDI4OTEzMzk1MTQsNDA5MjkxNjc0MywzNDg4Mjc5MDc3LDMzOTU2NDI3OTksNDEwMTY2NzQ3MCwxMjAyNjMwMzc3LDI2ODk2MTgxNiwxODc0NTA4NTAxLDQwMzQ0MjcwMTYsMTI0Mzk0ODM5OSwxNTQ2NTMwNDE4LDk0MTM2NjMwOCwxNDcwNTM5NTA1LDE5NDEyMjI1OTksMjU0NjM4NjUxMywzNDIxMDM4NjI3LDI3MTU2NzE5MzIsMzg5OTk0NjE0MCwxMDQyMjI2OTc3LDI1MjE1MTcwMjEsMTYzOTgyNDg2MCwyMjcyNDkwMzAsMjYwNzM3NjY5LDM3NjU0NjUyMzIsMjA4NDQ1Mzk1NCwxOTA3NzMzOTU2LDM0MjkyNjMwMTgsMjQyMDY1NjM0NCwxMDA4NjA2NzcsNDE2MDE1NzE4NSw0NzA2ODMxNTQsMzI2MTE2MTg5MSwxNzgxODcxOTY3LDI5MjQ5NTk3MzcsMTc3Mzc3OTQwOCwzOTQ2OTIyNDEsMjU3OTYxMTk5Miw5NzQ5ODY1MzUsNjY0NzA2NzQ1LDM2NTU0NTkxMjgsMzk1ODk2MjE5NSw3MzE0MjA4NTEsNTcxNTQzODU5LDM1MzAxMjM3MDcsMjg0OTYyNjQ4MCwxMjY3ODMxMTMsODY1Mzc1Mzk5LDc2NTE3MjY2MiwxMDA4NjA2NzU0LDM2MTIwMzYwMiwzMzg3NTQ5OTg0LDIyNzg0NzczODUsMjg1NzcxOTI5NSwxMzQ0ODA5MDgwLDI3ODI5MTIzNzgsNTk1NDI2NzEsMTUwMzc2NDk4NCwxNjAwMDg1NzYsNDM3MDYyOTM1LDE3MDcwNjUzMDYsMzYyMjIzMzY0OSwyMjE4OTM0OTgyLDM0OTY1MDM0ODAsMjE4NTMxNDc1NSw2OTc5MzIyMDgsMTUxMjkxMDE5OSw1MDQzMDMzNzcsMjA3NTE3NzE2MywyODI0MDk5MDY4LDE4NDEwMTk4NjIsNzM5NjQ0OTg2XSxhbj1bMjc4MTI0MjIxMSwyMjMwODc3MzA4LDI1ODI1NDIxOTksMjM4MTc0MDkyMywyMzQ4Nzc2ODIsMzE4NDk0NjAyNywyOTg0MTQ0NzUxLDE0MTg4Mzk0OTMsMTM0ODQ4MTA3Miw1MDQ2Mjk3NywyODQ4ODc2MzkxLDIxMDI3OTkxNDcsNDM0NjM0NDk0LDE2NTYwODQ0MzksMzg2Mzg0OTg5OSwyNTk5MTg4MDg2LDExNjcwNTE0NjYsMjYzNjA4NzkzOCwxMDgyNzcxOTEzLDIyODEzNDAyODUsMzY4MDQ4ODkwLDM5NTQzMzQwNDEsMzM4MTU0NDc3NSwyMDEwNjA1OTIsMzk2MzcyNzI3NywxNzM5ODM4Njc2LDQyNTA5MDMyMDIsMzkzMDQzNTUwMywzMjA2NzgyMTA4LDQxNDk0NTM5ODgsMjUzMTU1MzkwNiwxNTM2OTM0MDgwLDMyNjI0OTQ2NDcsNDg0NTcyNjY5LDI5MjMyNzEwNTksMTc4MzM3NTM5OCwxNTE3MDQxMjA2LDEwOTg3OTI3NjcsNDk2NzQyMzEsMTMzNDAzNzcwOCwxNTUwMzMyOTgwLDQwOTg5OTE1MjUsODg2MTcxMTA5LDE1MDU5ODEyOSwyNDgxMDkwOTI5LDE5NDA2NDIwMDgsMTM5ODk0NDA0OSwxMDU5NzIyNTE3LDIwMTg1MTkwOCwxMzg1NTQ3NzE5LDE2OTkwOTUzMzEsMTU4NzM5NzU3MSw2NzQyNDA1MzYsMjcwNDc3NDgwNiwyNTIzMTQ4ODUsMzAzOTc5NTg2NiwxNTE5MTQyNDcsOTA4MzMzNTg2LDI2MDIyNzA4NDgsMTAzODA4Mjc4Niw2NTEwMjk0ODMsMTc2NjcyOTUxMSwzNDQ3Njk4MDk4LDI2ODI5NDI4MzcsNDU0MTY2NzkzLDI2NTI3MzQzMzksMTk1MTkzNTUzMiw3NzUxNjY0OTAsNzU4NTIwNjAzLDMwMDA3OTA2MzgsNDAwNDc5NzAxOCw0MjE3MDg2MTEyLDQxMzc5NjQxMTQsMTI5OTU5NDA0MywxNjM5NDM4MDM4LDM0NjQzNDQ0OTksMjA2ODk4MjA1NywxMDU0NzI5MTg3LDE5MDE5OTc4NzEsMjUzNDYzODcyNCw0MTIxMzE4MjI3LDE3NTcwMDgzMzcsMCw3NTA5MDY4NjEsMTYxNDgxNTI2NCw1MzUwMzUxMzIsMzM2MzQxODU0NSwzOTg4MTUxMTMxLDMyMDE1OTE5MTQsMTE4MzY5Nzg2NywzNjQ3NDU0OTEwLDEyNjU3NzY5NTMsMzczNDI2MDI5OCwzNTY2NzUwNzk2LDM5MDM4NzEwNjQsMTI1MDI4MzQ3MSwxODA3NDcwODAwLDcxNzYxNTA4NywzODQ3MjAzNDk4LDM4NDY5NTI5MSwzMzEzOTEwNTk1LDM2MTcyMTM3NzMsMTQzMjc2MTEzOSwyNDg0MTc2MjYxLDM0ODE5NDU0MTMsMjgzNzY5MzM3LDEwMDkyNTk1NCwyMTgwOTM5NjQ3LDQwMzcwMzgxNjAsMTE0ODczMDQyOCwzMTIzMDI3ODcxLDM4MTMzODY0MDgsNDA4NzUwMTEzNyw0MjY3NTQ5NjAzLDMyMjk2MzA1MjgsMjMxNTYyMDIzOSwyOTA2NjI0NjU4LDMxNTYzMTk2NDUsMTIxNTMxMzk3Niw4Mjk2NjAwNSwzNzQ3ODU1NTQ4LDMyNDU4NDgyNDYsMTk3NDQ1OTA5OCwxNjY1Mjc4MjQxLDgwNzQwNzYzMiw0NTEyODA4OTUsMjUxNTI0MDgzLDE4NDEyODc4OTAsMTI4MzU3NTI0NSwzMzcxMjAyNjgsODkxNjg3Njk5LDgwMTM2OTMyNCwzNzg3MzQ5ODU1LDI3MjE0MjEyMDcsMzQzMTQ4MjQzNiw5NTkzMjE4NzksMTQ2OTMwMTk1Niw0MDY1Njk5NzUxLDIxOTc1ODU1MzQsMTE5OTE5MzQwNSwyODk4ODE0MDUyLDM4ODc3NTA0OTMsNzI0NzAzNTEzLDI1MTQ5MDgwMTksMjY5Njk2MjE0NCwyNTUxODA4Mzg1LDM1MTY4MTMxMzUsMjE0MTQ0NTM0MCwxNzE1NzQxMjE4LDIxMTk0NDUwMzQsMjg3MjgwNzU2OCwyMTk4NTcxMTQ0LDMzOTgxOTA2NjIsNzAwOTY4Njg2LDM1NDcwNTIyMTYsMTAwOTI1OTU0MCwyMDQxMDQ0NzAyLDM4MDM5OTU3NDIsNDg3OTgzODgzLDE5OTExMDU0OTksMTAwNDI2NTY5NiwxNDQ5NDA3MDI2LDEzMTYyMzk5MzAsNTA0NjI5NzcwLDM2ODM3OTczMjEsMTY4NTYwMTM0LDE4MTY2NjcxNzIsMzgzNzI4NzUxNiwxNTcwNzUxMTcwLDE4NTc5MzQyOTEsNDAxNDE4OTc0MCwyNzk3ODg4MDk4LDI4MjIzNDUxMDUsMjc1NDcxMjk4MSw5MzY2MzM1NzIsMjM0NzkyMzgzMyw4NTI4NzkzMzUsMTEzMzIzNDM3NiwxNTAwMzk1MzE5LDMwODQ1NDUzODksMjM0ODkxMjAxMywxNjg5Mzc2MjEzLDM1MzM0NTkwMjIsMzc2MjkyMzk0NSwzMDM0MDgyNDEyLDQyMDU1OTgyOTQsMTMzNDI4NDY4LDYzNDM4MzA4MiwyOTQ5Mjc3MDI5LDIzOTgzODY4MTAsMzkxMzc4OTEwMiw0MDM3MDM4MTYsMzU4MDg2OTMwNiwyMjk3NDYwODU2LDE4NjcxMzAxNDksMTkxODY0Mzc1OCw2MDc2NTY5ODgsNDA0OTA1MzM1MCwzMzQ2MjQ4ODg0LDEzNjg5MDEzMTgsNjAwNTY1OTkyLDIwOTA5ODI4NzcsMjYzMjQ3OTg2MCw1NTc3MTkzMjcsMzcxNzYxNDQxMSwzNjk3MzkzMDg1LDIyNDkwMzQ2MzUsMjIzMjM4ODIzNCwyNDMwNjI3OTUyLDExMTU0Mzg2NTQsMzI5NTc4NjQyMSwyODY1NTIyMjc4LDM2MzMzMzQzNDQsODQyODAwNjcsMzMwMjc4MzAsMzAzODI4NDk0LDI3NDc0MjUxMjEsMTYwMDc5NTk1Nyw0MTg4OTUyNDA3LDM0OTY1ODk3NTMsMjQzNDIzODA4NiwxNDg2NDcxNjE3LDY1ODExOTk2NSwzMTA2MzgxNDcwLDk1MzgwMzIzMywzMzQyMzE4MDAsMzAwNTk3ODc3Niw4NTc4NzA2MDksMzE1MTEyODkzNywxODkwMTc5NTQ1LDIyOTg5NzM4MzgsMjgwNTE3NTQ0NCwzMDU2NDQyMjY3LDU3NDM2NTIxNCwyNDUwODg0NDg3LDU1MDEwMzUyOSwxMjMzNjM3MDcwLDQyODkzNTMwNDUsMjAxODUxOTA4MCwyMDU3NjkxMTAzLDIzOTkzNzQ0NzYsNDE2NjYyMzY0OSwyMTQ4MTA4NjgxLDM4NzU4MzI0NSwzNjY0MTAxMzExLDgzNjIzMjkzNCwzMzMwNTU2NDgyLDMxMDA2NjU5NjAsMzI4MDA5MzUwNSwyOTU1NTE2MzEzLDIwMDIzOTg1MDksMjg3MTgyNjA3LDM0MTM4ODEwMDgsNDIzODg5MDA2OCwzNTk3NTE1NzA3LDk3NTk2Nzc2Nl0sY249WzE2NzE4MDg2MTEsMjA4OTA4OTE0OCwyMDA2NTc2NzU5LDIwNzI5MDEyNDMsNDA2MTAwMzc2MiwxODA3NjAzMzA3LDE4NzM5Mjc3OTEsMzMxMDY1Mzg5Myw4MTA1NzM4NzIsMTY5NzQzMzcsMTczOTE4MTY3MSw3Mjk2MzQzNDcsNDI2MzExMDY1NCwzNjEzNTcwNTE5LDI4ODM5OTcwOTksMTk4OTg2NDU2NiwzMzkzNTU2NDI2LDIxOTEzMzUyOTgsMzM3NjQ0OTk5MywyMTA2MDYzNDg1LDQxOTU3NDE2OTAsMTUwODYxODg0MSwxMjA0MzkxNDk1LDQwMjczMTcyMzIsMjkxNzk0MTY3NywzNTYzNTY2MDM2LDI3MzQ1MTQwODIsMjk1MTM2NjA2MywyNjI5NzcyMTg4LDI3Njc2NzIyMjgsMTkyMjQ5MTUwNiwzMjI3MjI5MTIwLDMwODI5NzQ2NDcsNDI0NjUyODUwOSwyNDc3NjY5Nzc5LDY0NDUwMDUxOCw5MTE4OTU2MDYsMTA2MTI1Njc2Nyw0MTQ0MTY2MzkxLDM0Mjc3NjMxNDgsODc4NDcxMjIwLDI3ODQyNTIzMjUsMzg0NTQ0NDA2OSw0MDQzODk3MzI5LDE5MDU1MTcxNjksMzYzMTQ1OTI4OCw4Mjc1NDgyMDksMzU2NDYxMDc3LDY3ODk3MzQ4LDMzNDQwNzgyNzksNTkzODM5NjUxLDMyNzc3NTc4OTEsNDA1Mjg2OTM2LDI1MjcxNDc5MjYsODQ4NzE2ODUsMjU5NTU2NTQ2NiwxMTgwMzM5MjcsMzA1NTM4MDY2LDIxNTc2NDg3NjgsMzc5NTcwNTgyNiwzOTQ1MTg4ODQzLDY2MTIxMjcxMSwyOTk5ODEyMDE4LDE5NzM0MTQ1MTcsMTUyNzY5MDMzLDIyMDgxNzc1MzksNzQ1ODIyMjUyLDQzOTIzNTYxMCw0NTU5NDc4MDMsMTg1NzIxNTU5OCwxNTI1NTkzMTc4LDI3MDA4Mjc1NTIsMTM5MTg5NTYzNCw5OTQ5MzIyODMsMzU5NjcyODI3OCwzMDE2NjU0MjU5LDY5NTk0NzgxNywzODEyNTQ4MDY3LDc5NTk1ODgzMSwyMjI0NDkzNDQ0LDE0MDg2MDc4MjcsMzUxMzMwMTQ1NywwLDM5NzkxMzM0MjEsNTQzMTc4Nzg0LDQyMjk5NDg0MTIsMjk4MjcwNTU4NSwxNTQyMzA1MzcxLDE3OTA4OTExMTQsMzQxMDM5ODY2NywzMjAxOTE4OTEwLDk2MTI0NTc1MywxMjU2MTAwOTM4LDEyODkwMDEwMzYsMTQ5MTY0NDUwNCwzNDc3NzY3NjMxLDM0OTY3MjEzNjAsNDAxMjU1NzgwNywyODY3MTU0ODU4LDQyMTI1ODM5MzEsMTEzNzAxODQzNSwxMzA1OTc1MzczLDg2MTIzNDczOSwyMjQxMDczNTQxLDExNzEyMjkyNTMsNDE3ODYzNTI1NywzMzk0ODY3NCwyMTM5MjI1NzI3LDEzNTc5NDY5NjAsMTAxMTEyMDE4OCwyNjc5Nzc2NjcxLDI4MzM0NjgzMjgsMTM3NDkyMTI5NywyNzUxMzU2MzIzLDEwODYzNTc1NjgsMjQwODE4NzI3OSwyNDYwODI3NTM4LDI2NDYzNTIyODUsOTQ0MjcxNDE2LDQxMTA3NDIwMDUsMzE2ODc1NjY2OCwzMDY2MTMyNDA2LDM2NjUxNDU4MTgsNTYwMTUzMTIxLDI3MTU4OTM5Miw0Mjc5OTUyODk1LDQwNzc4NDYwMDMsMzUzMDQwNzg5MCwzNDQ0MzQzMjQ1LDIwMjY0MzQ2OCwzMjIyNTAyNTksMzk2MjU1MzMyNCwxNjA4NjI5ODU1LDI1NDM5OTAxNjcsMTE1NDI1NDkxNiwzODk2MjMzMTksMzI5NDA3Mzc5NiwyODE3Njc2NzExLDIxMjI1MTM1MzQsMTAyODA5NDUyNSwxNjg5MDQ1MDkyLDE1NzU0Njc2MTMsNDIyMjYxMjczLDE5MzkyMDM2OTksMTYyMTE0Nzc0NCwyMTc0MjI4ODY1LDEzMzkxMzc2MTUsMzY5OTM1MjU0MCw1NzcxMjc0NTgsNzEyOTIyMTU0LDI0MjcxNDEwMDgsMjI5MDI4OTU0NCwxMTg3Njc5MzAyLDM5OTU3MTU1NjYsMzEwMDg2MzQxNiwzMzk0ODY3NDAsMzczMjUxNDc4MiwxNTkxOTE3NjYyLDE4NjQ1NTU2MywzNjgxOTg4MDU5LDM3NjIwMTkyOTYsODQ0NTIyNTQ2LDk3ODIyMDA5MCwxNjk3NDMzNzAsMTIzOTEyNjYwMSwxMDEzMjE3MzQsNjExMDc2MTMyLDE1NTg0OTMyNzYsMzI2MDkxNTY1MCwzNTQ3MjUwMTMxLDI5MDEzNjE1ODAsMTY1NTA5NjQxOCwyNDQzNzIxMTA1LDI1MTA1NjU3ODEsMzgyODg2Mzk3MiwyMDM5MjE0NzEzLDM4Nzg4Njg0NTUsMzM1OTg2OTg5Niw5Mjg2MDc3OTksMTg0MDc2NTU0OSwyMzc0NzYyODkzLDM1ODAxNDYxMzMsMTMyMjQyNTQyMiwyODUwMDQ4NDI1LDE4MjM3OTEyMTIsMTQ1OTI2ODY5NCw0MDk0MTYxOTA4LDM5MjgzNDY2MDIsMTcwNjAxOTQyOSwyMDU2MTg5MDUwLDI5MzQ1MjM4MjIsMTM1Nzk0Njk2LDMxMzQ1NDk5NDYsMjAyMjI0MDM3Niw2MjgwNTA0NjksNzc5MjQ2NjM4LDQ3MjEzNTcwOCwyODAwODM0NDcwLDMwMzI5NzAxNjQsMzMyNzIzNjAzOCwzODk0NjYwMDcyLDM3MTU5MzI2MzcsMTk1NjQ0MDE4MCw1MjIyNzIyODcsMTI3MjgxMzEzMSwzMTg1MzM2NzY1LDIzNDA4MTgzMTUsMjMyMzk3NjA3NCwxODg4NTQyODMyLDEwNDQ1NDQ1NzQsMzA0OTU1MDI2MSwxNzIyNDY5NDc4LDEyMjIxNTIyNjQsNTA2NjA4NjcsNDEyNzMyNDE1MCwyMzYwNjc4NTQsMTYzODEyMjA4MSw4OTU0NDU1NTcsMTQ3NTk4MDg4NywzMTE3NDQzNTEzLDIyNTc2NTU2ODYsMzI0MzgwOTIxNyw0ODkxMTAwNDUsMjY2MjkzNDQzMCwzNzc4NTk5MzkzLDQxNjIwNTUxNjAsMjU2MTg3ODkzNiwyODg1NjM3MjksMTc3MzkxNjc3NywzNjQ4MDM5Mzg1LDIzOTEzNDUwMzgsMjQ5Mzk4NTY4NCwyNjEyNDA3NzA3LDUwNTU2MDA5NCwyMjc0NDk3OTI3LDM5MTEyNDAxNjksMzQ2MDkyNTM5MCwxNDQyODE4NjQ1LDY3ODk3MzQ4MCwzNzQ5MzU3MDIzLDIzNTgxODI3OTYsMjcxNzQwNzY0OSwyMzA2ODY5NjQxLDIxOTYxNzgwNSwzMjE4NzYxMTUxLDM4NjIwMjYyMTQsMTEyMDMwNjI0MiwxNzU2OTQyNDQwLDExMDMzMzE5MDUsMjU3ODQ1OTAzMyw3NjI3OTY1ODksMjUyNzgwMDQ3LDI5NjYxMjU0ODgsMTQyNTg0NDMwOCwzMTUxMzkyMTg3LDM3MjkxMTEyNl0sdW49WzE2Njc0NzQ4ODYsMjA4ODUzNTI4OCwyMDA0MzI2ODk0LDIwNzE2OTQ4MzgsNDA3NTk0OTU2NywxODAyMjIzMDYyLDE4Njk1OTEwMDYsMzMxODA0Mzc5Myw4MDg0NzI2NzIsMTY4NDM1MjIsMTczNDg0NjkyNiw3MjQyNzA0MjIsNDI3ODA2NTYzOSwzNjIxMjE2OTQ5LDI4ODAxNjk1NDksMTk4NzQ4NDM5NiwzNDAyMjUzNzExLDIxODk1OTc5ODMsMzM4NTQwOTY3MywyMTA1Mzc4ODEwLDQyMTA2OTM2MTUsMTQ5OTA2NTI2NiwxMTk1ODg2OTkwLDQwNDIyNjM1NDcsMjkxMzg1NjU3NywzNTcwNjg5OTcxLDI3Mjg1OTA2ODcsMjk0NzU0MTU3MywyNjI3NTE4MjQzLDI3NjIyNzQ2NDMsMTkyMDExMjM1NiwzMjMzODMxODM1LDMwODIyNzMzOTcsNDI2MTIyMzY0OSwyNDc1OTI5MTQ5LDY0MDA1MTc4OCw5MDk1MzE3NTYsMTA2MTExMDE0Miw0MTYwMTYwNTAxLDM0MzU5NDE3NjMsODc1ODQ2NzYwLDI3NzkxMTY2MjUsMzg1NzAwMzcyOSw0MDU5MTA1NTI5LDE5MDMyNjg4MzQsMzYzODA2NDA0Myw4MjUzMTYxOTQsMzUzNzEzOTYyLDY3Mzc0MDg4LDMzNTE3Mjg3ODksNTg5NTIyMjQ2LDMyODQzNjA4NjEsNDA0MjM2MzM2LDI1MjY0NTQwNzEsODQyMTc2MTAsMjU5MzgzMDE5MSwxMTc5MDE1ODIsMzAzMTgzMzk2LDIxNTU5MTE5NjMsMzgwNjQ3Nzc5MSwzOTU4MDU2NjUzLDY1Njg5NDI4NiwyOTk4MDYyNDYzLDE5NzA2NDI5MjIsMTUxNTkxNjk4LDIyMDY0NDA5ODksNzQxMTEwODcyLDQzNzkyMzM4MCw0NTQ3NjU4NzgsMTg1Mjc0ODUwOCwxNTE1OTA4Nzg4LDI2OTQ5MDQ2NjcsMTM4MTE2ODgwNCw5OTM3NDIxOTgsMzYwNDM3Mzk0MywzMDE0OTA1NDY5LDY5MDU4NDQwMiwzODIzMzIwNzk3LDc5MTYzODM2NiwyMjIzMjgxOTM5LDEzOTgwMTEzMDIsMzUyMDE2MTk3NywwLDM5OTE3NDM2ODEsNTM4OTkyNzA0LDQyNDQzODE2NjcsMjk4MTIxODQyNSwxNTMyNzUxMjg2LDE3ODUzODA1NjQsMzQxOTA5NjcxNywzMjAwMTc4NTM1LDk2MDA1NjE3OCwxMjQ2NDIwNjI4LDEyODAxMDM1NzYsMTQ4MjIyMTc0NCwzNDg2NDY4NzQxLDM1MDMzMTk5OTUsNDAyNTQyODY3NywyODYzMzI2NTQzLDQyMjc1MzY2MjEsMTEyODUxNDk1MCwxMjk2OTQ3MDk4LDg1OTAwMjIxNCwyMjQwMTIzOTIxLDExNjIyMDMwMTgsNDE5Mzg0OTU3NywzMzY4NzA0NCwyMTM5MDYyNzgyLDEzNDc0ODE3NjAsMTAxMDU4MjY0OCwyNjc4MDQ1MjIxLDI4Mjk2NDA1MjMsMTM2NDMyNTI4MiwyNzQ1NDMzNjkzLDEwNzc5ODU0MDgsMjQwODU0ODg2OSwyNDU5MDg2MTQzLDI2NDQzNjAyMjUsOTQzMjEyNjU2LDQxMjY0NzU1MDUsMzE2NjQ5NDU2MywzMDY1NDMwMzkxLDM2NzE3NTAwNjMsNTU1ODM2MjI2LDI2OTQ5NjM1Miw0Mjk0OTA4NjQ1LDQwOTI3OTI1NzMsMzUzNzAwNjAxNSwzNDUyNzgzNzQ1LDIwMjExODE2OCwzMjAwMjU4OTQsMzk3NDkwMTY5OSwxNjAwMTE5MjMwLDI1NDMyOTcwNzcsMTE0NTM1OTQ5NiwzODczOTc5MzQsMzMwMTIwMTgxMSwyODEyODAxNjIxLDIxMjIyMjAyODQsMTAyNzQyNjE3MCwxNjg0MzE5NDMyLDE1NjY0MzUyNTgsNDIxMDc5ODU4LDE5MzY5NTQ4NTQsMTYxNjk0NTM0NCwyMTcyNzUzOTQ1LDEzMzA2MzEwNzAsMzcwNTQzODExNSw1NzI2Nzk3NDgsNzA3NDI3OTI0LDI0MjU0MDAxMjMsMjI5MDY0NzgxOSwxMTc5MDQ0NDkyLDQwMDg1ODU2NzEsMzA5OTEyMDQ5MSwzMzY4NzA0NDAsMzczOTEyMjA4NywxNTgzMjc2NzMyLDE4NTI3NzcxOCwzNjg4NTkzMDY5LDM3NzI3OTE3NzEsODQyMTU5NzE2LDk3Njg5OTcwMCwxNjg0MzUyMjAsMTIyOTU3NzEwNiwxMDEwNTkwODQsNjA2MzY2NzkyLDE1NDk1OTE3MzYsMzI2NzUxNzg1NSwzNTUzODQ5MDIxLDI4OTcwMTQ1OTUsMTY1MDYzMjM4OCwyNDQyMjQyMTA1LDI1MDk2MTIwODEsMzg0MDE2MTc0NywyMDM4MDA4ODE4LDM4OTA2ODg3MjUsMzM2ODU2NzY5MSw5MjYzNzQyNTQsMTgzNTkwNzAzNCwyMzc0ODYzODczLDM1ODc1MzE5NTMsMTMxMzc4ODU3MiwyODQ2NDgyNTA1LDE4MTkwNjM1MTIsMTQ0ODU0MDg0NCw0MTA5NjMzNTIzLDM5NDEyMTM2NDcsMTcwMTE2Mjk1NCwyMDU0ODUyMzQwLDI5MzA2OTg1NjcsMTM0NzQ4MTc2LDMxMzI4MDY1MTEsMjAyMTE2NTI5Niw2MjMyMTAzMTQsNzc0Nzk1ODY4LDQ3MTYwNjMyOCwyNzk1OTU4NjE1LDMwMzE3NDY0MTksMzMzNDg4NTc4MywzOTA3NTI3NjI3LDM3MjIyODAwOTcsMTk1Mzc5OTQwMCw1MjIxMzM4MjIsMTI2MzI2MzEyNiwzMTgzMzM2NTQ1LDIzNDExNzY4NDUsMjMyNDMzMzgzOSwxODg2NDI1MzEyLDEwNDQyNjc2NDQsMzA0ODU4ODQwMSwxNzE4MDA0NDI4LDEyMTI3MzM1ODQsNTA1Mjk1NDIsNDE0MzMxNzQ5NSwyMzU4MDMxNjQsMTYzMzc4ODg2Niw4OTI2OTAyODIsMTQ2NTM4MzM0MiwzMTE1OTYyNDczLDIyNTY5NjU5MTEsMzI1MDY3MzgxNyw0ODg0NDk4NTAsMjY2MTIwMjIxNSwzNzg5NjMzNzUzLDQxNzcwMDc1OTUsMjU2MDE0NDE3MSwyODYzMzk4NzQsMTc2ODUzNzA0MiwzNjU0OTA2MDI1LDIzOTE3MDU4NjMsMjQ5Mjc3MDA5OSwyNjEwNjczMTk3LDUwNTI5MTMyNCwyMjczODA4OTE3LDM5MjQzNjk2MDksMzQ2OTYyNTczNSwxNDMxNjk5MzcwLDY3Mzc0MDg4MCwzNzU1OTY1MDkzLDIzNTgwMjE4OTEsMjcxMTc0NjY0OSwyMzA3NDg5ODAxLDIxODk2MTY5MCwzMjE3MDIxNTQxLDM4NzM4NDU3MTksMTExMTY3MjQ1MiwxNzUxNjkzNTIwLDEwOTQ4Mjg5MzAsMjU3Njk4NjE1Myw3NTc5NTQzOTQsMjUyNjQ1NjYyLDI5NjQzNzY0NDMsMTQxNDg1NTg0OCwzMTQ5NjQ5NTE3LDM3MDU1NTQzNl0saG49WzEzNzQ5ODgxMTIsMjExODIxNDk5NSw0Mzc3NTcxMjMsOTc1NjU4NjQ2LDEwMDEwODk5OTUsNTMwNDAwNzUzLDI5MDIwODc4NTEsMTI3MzE2ODc4Nyw1NDAwODA3MjUsMjkxMDIxOTc2NiwyMjk1MTAxMDczLDQxMTA1Njg0ODUsMTM0MDQ2MzEwMCwzMzA3OTE2MjQ3LDY0MTAyNTE1MiwzMDQzMTQwNDk1LDM3MzYxNjQ5MzcsNjMyOTUzNzAzLDExNzI5NjcwNjQsMTU3Njk3NjYwOSwzMjc0NjY3MjY2LDIxNjkzMDMwNTgsMjM3MDIxMzc5NSwxODA5MDU0MTUwLDU5NzI3ODQ3LDM2MTkyOTg3NywzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMzU2OTI1NTIxMywxNDg0MDA1ODQzLDEyMzk0NDM3NTMsMjM5NTU4ODY3NiwxOTc1NjgzNDM0LDQxMDI5Nzc5MTIsMjU3MjY5NzE5NSw2NjY0NjQ3MzMsMzIwMjQzNzA0Niw0MDM1NDg5MDQ3LDMzNzQzNjE3MDIsMjExMDY2NzQ0NCwxNjc1NTc3ODgwLDM4NDM2OTkwNzQsMjUzODY4MTE4NCwxNjQ5NjM5MjM3LDI5NzYxNTE1MjAsMzE0NDM5NjQyMCw0MjY5OTA3OTk2LDQxNzgwNjIyMjgsMTg4Mzc5MzQ5NiwyNDAzNzI4NjY1LDI0OTc2MDQ3NDMsMTM4Mzg1NjMxMSwyODc2NDk0NjI3LDE5MTc1MTg1NjIsMzgxMDQ5NjM0MywxNzE2ODkwNDEwLDMwMDE3NTU2NTUsODAwNDQwODM1LDIyNjEwODkxNzgsMzU0MzU5OTI2OSw4MDc5NjI2MTAsNTk5NzYyMzU0LDMzNzc4MzYyLDM5Nzc2NzUzNTYsMjMyODgyODk3MSwyODA5NzcxMTU0LDQwNzczODQ0MzIsMTMxNTU2MjE0NSwxNzA4ODQ4MzMzLDEwMTAzOTgyOSwzNTA5ODcxMTM1LDMyOTkyNzg0NzQsODc1NDUxMjkzLDI3MzM4NTYxNjAsOTI5ODc2OTgsMjc2NzY0NTU1NywxOTMxOTUwNjUsMTA4MDA5NDYzNCwxNTg0NTA0NTgyLDMxNzgxMDY5NjEsMTA0MjM4NTY1NywyNTMxMDY3NDUzLDM3MTE4Mjk0MjIsMTMwNjk2NzM2NiwyNDM4MjM3NjIxLDE5MDg2OTQyNzcsNjc1NTY0NjMsMTYxNTg2MTI0Nyw0Mjk0NTYxNjQsMzYwMjc3MDMyNywyMzAyNjkwMjUyLDE3NDIzMTUxMjcsMjk2ODAxMTQ1MywxMjY0NTQ2NjQsMzg3NzE5ODY0OCwyMDQzMjExNDgzLDI3MDkyNjA4NzEsMjA4NDcwNDIzMyw0MTY5NDA4MjAxLDAsMTU5NDE3OTg3LDg0MTczOTU5Miw1MDQ0NTk0MzYsMTgxNzg2NjgzMCw0MjQ1NjE4NjgzLDI2MDM4ODk1MCwxMDM0ODY3OTk4LDkwODkzMzQxNSwxNjg4MTA4NTIsMTc1MDkwMjMwNSwyNjA2NDUzOTY5LDYwNzUzMDU1NCwyMDIwMDg0OTcsMjQ3MjAxMTUzNSwzMDM1NTM1MDU4LDQ2MzE4MDE5MCwyMTYwMTE3MDcxLDE2NDE4MTYyMjYsMTUxNzc2NzUyOSw0NzA5NDgzNzQsMzgwMTMzMjIzNCwzMjMxNzIyMjEzLDEwMDg5MTg1OTUsMzAzNzY1Mjc3LDIzNTQ3NDE4Nyw0MDY5MjQ2ODkzLDc2Njk0NTQ2NSwzMzc1NTM4NjQsMTQ3NTQxODUwMSwyOTQzNjgyMzgwLDQwMDMwNjExNzksMjc0MzAzNDEwOSw0MTQ0MDQ3Nzc1LDE1NTEwMzc4ODQsMTE0NzU1MDY2MSwxNTQzMjA4NTAwLDIzMzY0MzQ1NTAsMzQwODExOTUxNiwzMDY5MDQ5OTYwLDMxMDIwMTE3NDcsMzYxMDM2OTIyNiwxMTEzODE4Mzg0LDMyODY3MTgwOCwyMjI3NTczMDI0LDIyMzYyMjg3MzMsMzUzNTQ4NjQ1NiwyOTM1NTY2ODY1LDMzNDEzOTQyODUsNDk2OTA2MDU5LDM3MDI2NjU0NTksMjI2OTA2ODYwLDIwMDkxOTU0NzIsNzMzMTU2OTcyLDI4NDI3MzcwNDksMjk0OTMwNjgyLDEyMDY0Nzc4NTgsMjgzNTEyMzM5NiwyNzAwMDk5MzU0LDE0NTEwNDQwNTYsNTczODA0NzgzLDIyNjk3Mjg0NTUsMzY0NDM3OTU4NSwyMzYyMDkwMjM4LDI1NjQwMzMzMzQsMjgwMTEwNzQwNywyNzc2MjkyOTA0LDM2Njk0NjI1NjYsMTA2ODM1MTM5Niw3NDIwMzkwMTIsMTM1MDA3ODk4OSwxNzg0NjYzMTk1LDE0MTc1NjE2OTgsNDEzNjQ0MDc3MCwyNDMwMTIyMjE2LDc3NTU1MDgxNCwyMTkzODYyNjQ1LDI2NzM3MDUxNTAsMTc3NTI3NjkyNCwxODc2MjQxODMzLDM0NzUzMTMzMzEsMzM2Njc1NDYxOSwyNzAwNDA0ODcsMzkwMjU2MzE4MiwzNjc4MTI0OTIzLDM0NDE4NTAzNzcsMTg1MTMzMjg1MiwzOTY5NTYyMzY5LDIyMDMwMzIyMzIsMzg2ODU1MjgwNSwyODY4ODk3NDA2LDU2NjAyMTg5Niw0MDExMTkwNTAyLDMxMzU3NDA4ODksMTI0ODgwMjUxMCwzOTM2MjkxMjg0LDY5OTQzMjE1MCw4MzI4NzcyMzEsNzA4NzgwODQ5LDMzMzI3NDAxNDQsODk5ODM1NTg0LDE5NTEzMTcwNDcsNDIzNjQyOTk5MCwzNzY3NTg2OTkyLDg2NjYzNzg0NSw0MDQzNjEwMTg2LDExMDYwNDE1OTEsMjE0NDE2MTgwNiwzOTU0NDE3MTEsMTk4NDgxMjY4NSwxMTM5NzgxNzA5LDM0MzM3MTI5ODAsMzgzNTAzNjg5NSwyNjY0NTQzNzE1LDEyODIwNTAwNzUsMzI0MDg5NDM5MiwxMTgxMDQ1MTE5LDI2NDAyNDMyMDQsMjU5NjU5MTcsNDIwMzE4MTE3MSw0MjExODE4Nzk4LDMwMDk4NzkzODYsMjQ2Mzg3OTc2MiwzOTEwMTYxOTcxLDE4NDI3NTk0NDMsMjU5NzgwNjQ3Niw5MzMzMDEzNzAsMTUwOTQzMDQxNCwzOTQzOTA2NDQxLDM0NjcxOTIzMDIsMzA3NjYzOTAyOSwzNzc2NzY3NDY5LDIwNTE1MTg3ODAsMjYzMTA2NTQzMywxNDQxOTUyNTc1LDQwNDAxNjc2MSwxOTQyNDM1Nzc1LDE0MDg3NDkwMzQsMTYxMDQ1OTczOSwzNzQ1MzQ1MzAwLDIwMTc3Nzg1NjYsMzQwMDUyODc2OSwzMTEwNjUwOTQyLDk0MTg5Njc0OCwzMjY1NDc4NzUxLDM3MTA0OTMzMCwzMTY4OTM3MjI4LDY3NTAzOTYyNyw0Mjc5MDgwMjU3LDk2NzMxMTcyOSwxMzUwNTAyMDYsMzYzNTczMzY2MCwxNjgzNDA3MjQ4LDIwNzY5MzUyNjUsMzU3Njg3MDUxMiwxMjE1MDYxMTA4LDM1MDE3NDE4OTBdLGxuPVsxMzQ3NTQ4MzI3LDE0MDA3ODMyMDUsMzI3MzI2NzEwOCwyNTIwMzkzNTY2LDM0MDk2ODUzNTUsNDA0NTM4MDkzMywyODgwMjQwMjE2LDI0NzEyMjQwNjcsMTQyODE3MzA1MCw0MTM4NTYzMTgxLDI0NDE2NjE1NTgsNjM2ODEzOTAwLDQyMzMwOTQ2MTUsMzYyMDAyMjk4NywyMTQ5OTg3NjUyLDI0MTEwMjkxNTUsMTIzOTMzMTE2MiwxNzMwNTI1NzIzLDI1NTQ3MTg3MzQsMzc4MTAzMzY2NCw0NjM0NjEwMSwzMTA0NjM3MjgsMjc0Mzk0NDg1NSwzMzI4OTU1Mzg1LDM4NzU3NzAyMDcsMjUwMTIxODk3MiwzOTU1MTkxMTYyLDM2NjcyMTkwMzMsNzY4OTE3MTIzLDM1NDU3ODk0NzMsNjkyNzA3NDMzLDExNTAyMDg0NTYsMTc4NjEwMjQwOSwyMDI5MjkzMTc3LDE4MDUyMTE3MTAsMzcxMDM2ODExMywzMDY1OTYyODMxLDQwMTYzOTU5NywxNzI0NDU3MTMyLDMwMjgxNDM2NzQsNDA5MTk4NDEwLDIxOTYwNTI1MjksMTYyMDUyOTQ1OSwxMTY0MDcxODA3LDM3Njk3MjE5NzUsMjIyNjg3NTMxMCw0ODY0NDEzNzYsMjQ5OTM0ODUyMywxNDgzNzUzNTc2LDQyODgxOTk2NSwyMjc0NjgwNDI4LDMwNzU2MzYyMTYsNTk4NDM4ODY3LDM3OTkxNDExMjIsMTQ3NDUwMjU0Myw3MTEzNDk2NzUsMTI5MTY2MTIwLDUzNDU4MzcwLDI1OTI1MjM2NDMsMjc4MjA4MjgyNCw0MDYzMjQyMzc1LDI5ODg2ODcyNjksMzEyMDY5NDEyMiwxNTU5MDQxNjY2LDczMDUxNzI3NiwyNDYwNDQ5MjA0LDQwNDI0NTkxMjIsMjcwNjI3MDY5MCwzNDQ2MDA0NDY4LDM1NzM5NDE2OTQsNTMzODA0MTMwLDIzMjgxNDM2MTQsMjYzNzQ0MjY0MywyNjk1MDMzNjg1LDgzOTIyNDAzMywxOTczNzQ1Mzg3LDk1NzA1NTk4MCwyODU2MzQ1ODM5LDEwNjg1Mjc2NywxMzcxMzY4OTc2LDQxODE1OTg2MDIsMTAzMzI5NzE1OCwyOTMzNzM0OTE3LDExNzk1MTA0NjEsMzA0NjIwMDQ2MSw5MTM0MTkxNywxODYyNTM0ODY4LDQyODQ1MDIwMzcsNjA1NjU3MzM5LDI1NDc0MzI5MzcsMzQzMTU0Njk0NywyMDAzMjk0NjIyLDMxODI0ODc2MTgsMjI4MjE5NTMzOSw5NTQ2Njk0MDMsMzY4MjE5MTU5OCwxMjAxNzY1Mzg2LDM5MTcyMzQ3MDMsMzM4ODUwNzE2NiwwLDIxOTg0MzgwMjIsMTIxMTI0NzU5NywyODg3NjUxNjk2LDEzMTU3MjM4OTAsNDIyNzY2NTY2MywxNDQzODU3NzIwLDUwNzM1ODkzMyw2NTc4NjE5NDUsMTY3ODM4MTAxNyw1NjA0ODc1OTAsMzUxNjYxOTYwNCw5NzU0NTE2OTQsMjk3MDM1NjMyNywyNjEzMTQ1MzUsMzUzNTA3MjkxOCwyNjUyNjA5NDI1LDEzMzM4MzgwMjEsMjcyNDMyMjMzNiwxNzY3NTM2NDU5LDM3MDkzODM5NCwxODI2MjExMTQsMzg1NDYwNjM3OCwxMTI4MDE0NTYwLDQ4NzcyNTg0NywxODU0NjkxOTcsMjkxODM1Mzg2MywzMTA2NzgwODQwLDMzNTY3NjE3NjksMjIzNzEzMzA4MSwxMjg2NTY3MTc1LDMxNTI5NzYzNDksNDI1NTM1MDYyNCwyNjgzNzY1MDMwLDMxNjAxNzUzNDksMzMwOTU5NDE3MSw4Nzg0NDMzOTAsMTk4ODgzODE4NSwzNzA0MzAwNDg2LDE3NTY4MTg5NDAsMTY3MzA2MTYxNywzNDAzMTAwNjM2LDI3Mjc4NjMwOSwxMDc1MDI1Njk4LDU0NTU3MjM2OSwyMTA1ODg3MjY4LDQxNzQ1NjAwNjEsMjk2Njc5NzMwLDE4NDE3Njg4NjUsMTI2MDIzMjIzOSw0MDkxMzI3MDI0LDM5NjAzMDkzMzAsMzQ5NzUwOTM0NywxODE0ODAzMjIyLDI1NzgwMTg0ODksNDE5NTQ1NjA3Miw1NzUxMzgxNDgsMzI5OTQwOTAzNiw0NDY3NTQ4NzksMzYyOTU0Njc5Niw0MDExOTk2MDQ4LDMzNDc1MzIxMTAsMzI1MjIzODU0NSw0MjcwNjM5Nzc4LDkxNTk4NTQxOSwzNDgzODI1NTM3LDY4MTkzMzUzNCw2NTE4NjgwNDYsMjc1NTYzNjY3MSwzODI4MTAzODM3LDIyMzM3NzU1NCwyNjA3NDM5ODIwLDE2NDk3MDQ1MTgsMzI3MDkzNzg3NSwzOTAxODA2Nzc2LDE1ODAwODc3OTksNDExODk4NzY5NSwzMTk4MTE1MjAwLDIwODczMDk0NTksMjg0MjY3ODU3MywzMDE2Njk3MTA2LDEwMDMwMDcxMjksMjgwMjg0OTkxNywxODYwNzM4MTQ3LDIwNzc5NjUyNDMsMTY0NDM5NjcyLDQxMDA4NzI0NzIsMzIyODMzMTksMjgyNzE3Nzg4MiwxNzA5NjEwMzUwLDIxMjUxMzU4NDYsMTM2NDI4NzUxLDM4NzQ0MjgzOTIsMzY1MjkwNDg1OSwzNDYwOTg0NjMwLDM1NzIxNDU5MjksMzU5MzA1NjM4MCwyOTM5MjY2MjI2LDgyNDg1MjI1OSw4MTgzMjQ4ODQsMzIyNDc0MDQ1NCw5MzAzNjkyMTIsMjgwMTU2NjQxMCwyOTY3NTA3MTUyLDM1NTcwNjg0MCwxMjU3MzA5MzM2LDQxNDgyOTI4MjYsMjQzMjU2NjU2LDc5MDA3Mzg0NiwyMzczMzQwNjMwLDEyOTYyOTc5MDQsMTQyMjY5OTA4NSwzNzU2Mjk5NzgwLDM4MTg4MzY0MDUsNDU3OTkyODQwLDMwOTk2Njc0ODcsMjEzNTMxOTg4OSw3NzQyMjMxNCwxNTYwMzgyNTE3LDE5NDU3OTg1MTYsNzg4MjA0MzUzLDE1MjE3MDY3ODEsMTM4NTM1NjI0Miw4NzA5MTIwODYsMzI1OTY1MzgzLDIzNTg5NTc5MjEsMjA1MDQ2NjA2MCwyMzg4MjYwODg0LDIzMTM4ODQ0NzYsNDAwNjUyMTEyNyw5MDEyMTA1NjksMzk5MDk1MzE4OSwxMDE0NjQ2NzA1LDE1MDM0NDk4MjMsMTA2MjU5NzIzNSwyMDMxNjIxMzI2LDMyMTIwMzU4OTUsMzkzMTM3MTQ2OSwxNTMzMDE3NTE0LDM1MDE3NDU3NSwyMjU2MDI4ODkxLDIxNzc1NDQxNzksMTA1MjMzODM3Miw3NDE4NzY3ODgsMTYwNjU5MTI5NiwxOTE0MDUyMDM1LDIxMzcwNTI1MywyMzM0NjY5ODk3LDExMDcyMzQxOTcsMTg5OTYwMzk2OSwzNzI1MDY5NDkxLDI2MzE0NDc3ODAsMjQyMjQ5NDkxMywxNjM1NTAyOTgwLDE4OTMwMjAzNDIsMTk1MDkwMzM4OCwxMTIwOTc0OTM1XSxkbj1bMjgwNzA1ODkzMiwxNjk5OTcwNjI1LDI3NjQyNDk2MjMsMTU4NjkwMzU5MSwxODA4NDgxMTk1LDExNzM0MzAxNzMsMTQ4NzY0NTk0Niw1OTk4NDg2Nyw0MTk5ODgyODAwLDE4NDQ4ODI4MDYsMTk4OTI0OTIyOCwxMjc3NTU1OTcwLDM2MjM2MzY5NjUsMzQxOTkxNTU2MiwxMTQ5MjQ5MDc3LDI3NDQxMDQyOTAsMTUxNDc5MDU3Nyw0NTk3NDQ2OTgsMjQ0ODYwMzk0LDMyMzU5OTUxMzQsMTk2MzExNTMxMSw0MDI3NzQ0NTg4LDI1NDQwNzgxNTAsNDE5MDUzMDUxNSwxNjA4OTc1MjQ3LDI2MjcwMTYwODIsMjA2MjI3MDMxNywxNTA3NDk3Mjk4LDIyMDA4MTg4NzgsNTY3NDk4ODY4LDE3NjQzMTM1NjgsMzM1OTkzNjIwMSwyMzA1NDU1NTU0LDIwMzc5NzAwNjIsMTA0NzIzOWUzLDE5MTAzMTkwMzMsMTMzNzM3NjQ4MSwyOTA0MDI3MjcyLDI4OTI0MTczMTIsOTg0OTA3MjE0LDEyNDMxMTI0MTUsODMwNjYxOTE0LDg2MTk2ODIwOSwyMTM1MjUzNTg3LDIwMTEyMTQxODAsMjkyNzkzNDMxNSwyNjg2MjU0NzIxLDczMTE4MzM2OCwxNzUwNjI2Mzc2LDQyNDYzMTA3MjUsMTgyMDgyNDc5OCw0MTcyNzYzNzcxLDM1NDIzMzAyMjcsNDgzOTQ4MjcsMjQwNDkwMTY2MywyODcxNjgyNjQ1LDY3MTU5MzE5NSwzMjU0OTg4NzI1LDIwNzM3MjQ2MTMsMTQ1MDg1MjM5LDIyODA3OTYyMDAsMjc3OTkxNTE5OSwxNzkwNTc1MTA3LDIxODcxMjgwODYsNDcyNjE1NjMxLDMwMjk1MTAwMDksNDA3NTg3NzEyNywzODAyMjIyMTg1LDQxMDcxMDE2NTgsMzIwMTYzMTc0OSwxNjQ2MjUyMzQwLDQyNzA1MDcxNzQsMTQwMjgxMTQzOCwxNDM2NTkwODM1LDM3NzgxNTE4MTgsMzk1MDM1NTcwMiwzOTYzMTYxNDc1LDQwMjA5MTIyMjQsMjY2Nzk5NDczNywyNzM3OTIzNjYsMjMzMTU5MDE3NywxMDQ2OTk2MTMsOTUzNDU5ODIsMzE3NTUwMTI4NiwyMzc3NDg2Njc2LDE1NjA2Mzc4OTIsMzU2NDA0NTMxOCwzNjkwNTc4NzIsNDIxMzQ0NzA2NCwzOTE5MDQyMjM3LDExMzc0Nzc5NTIsMjY1ODYyNTQ5NywxMTE5NzI3ODQ4LDIzNDA5NDc4NDksMTUzMDQ1NTgzMyw0MDA3MzYwOTY4LDE3MjQ2NjU1NiwyNjY5NTk5MzgsNTE2NTUyODM2LDAsMjI1NjczNDU5MiwzOTgwOTMxNjI3LDE4OTAzMjgwODEsMTkxNzc0MjE3MCw0Mjk0NzA0Mzk4LDk0NTE2NDE2NSwzNTc1NTI4ODc4LDk1ODg3MTA4NSwzNjQ3MjEyMDQ3LDI3ODcyMDcyNjAsMTQyMzAyMjkzOSw3NzU1NjIyOTQsMTczOTY1NjIwMiwzODc2NTU3NjU1LDI1MzAzOTEyNzgsMjQ0MzA1ODA3NSwzMzEwMzIxODU2LDU0NzUxMjc5NiwxMjY1MTk1NjM5LDQzNzY1NjU5NCwzMTIxMjc1NTM5LDcxOTcwMDEyOCwzNzYyNTAyNjkwLDM4Nzc4MTE0NywyMTg4MjgyOTcsMzM1MDA2NTgwMywyODMwNzA4MTUwLDI4NDg0NjE4NTQsNDI4MTY5MjAxLDEyMjQ2NjE2NSwzNzIwMDgxMDQ5LDE2MjcyMzUxOTksNjQ4MDE3NjY1LDQxMjI3NjIzNTQsMTAwMjc4Mzg0NiwyMTE3MzYwNjM1LDY5NTYzNDc1NSwzMzM2MzU4NjkxLDQyMzQ3MjEwMDUsNDA0OTg0NDQ1MiwzNzA0MjgwODgxLDIyMzI0MzUyOTksNTc0NjI0NjYzLDI4NzM0MzgxNCw2MTIyMDU4OTgsMTAzOTcxNzA1MSw4NDAwMTk3MDUsMjcwODMyNjE4NSw3OTM0NTE5MzQsODIxMjg4MTE0LDEzOTEyMDE2NzAsMzgyMjA5MDE3NywzNzYxODc4MjcsMzExMzg1NTM0NCwxMjI0MzQ4MDUyLDE2Nzk5NjgyMzMsMjM2MTY5ODU1NiwxMDU4NzA5NzQ0LDc1MjM3NTQyMSwyNDMxNTkwOTYzLDEzMjE2OTkxNDUsMzUxOTE0MjIwMCwyNzM0NTkxMTc4LDE4ODEyNzQ0NCwyMTc3ODY5NTU3LDM3MjcyMDU3NTQsMjM4NDkxMTAzMSwzMjE1MjEyNDYxLDI2NDg5NzY0NDIsMjQ1MDM0NjEwNCwzNDMyNzM3Mzc1LDExODA4NDkyNzgsMzMxNTQ0MjA1LDMxMDIyNDkxNzYsNDE1MDE0NDU2OSwyOTUyMTAyNTk1LDIxNTk5NzYyODUsMjQ3NDQwNDMwNCw3NjYwNzg5MzMsMzEzNzczODYxLDI1NzA4MzIwNDQsMjEwODEwMDYzMiwxNjY4MjEyODkyLDMxNDU0NTY0NDMsMjAxMzkwODI2Miw0MTg2NzIyMTcsMzA3MDM1NjYzNCwyNTk0NzM0OTI3LDE4NTIxNzE5MjUsMzg2NzA2MDk5MSwzNDczNDE2NjM2LDM5MDc0NDg1OTcsMjYxNDczNzYzOSw5MTk0ODkxMzUsMTY0OTQ4NjM5LDIwOTQ0MTAxNjAsMjk5NzgyNTk1Niw1OTA0MjQ2MzksMjQ4NjIyNDU0OSwxNzIzODcyNjc0LDMxNTc3NTA4NjIsMzM5OTk0MTI1MCwzNTAxMjUyNzUyLDM2MjUyNjgxMzUsMjU1NTA0ODE5NiwzNjczNjM3MzU2LDEzNDMxMjc1MDEsNDEzMDI4MTM2MSwzNTk5NTk1MDg1LDI5NTc4NTM2NzksMTI5NzQwMzA1MCw4MTc4MTkxMCwzMDUxNTkzNDI1LDIyODM0OTA0MTAsNTMyMjAxNzcyLDEzNjcyOTU1ODksMzkyNjE3MDk3NCw4OTUyODc2OTIsMTk1Mzc1NzgzMSwxMDkzNTk3OTYzLDQ5MjQ4MzQzMSwzNTI4NjI2OTA3LDE0NDYyNDI1NzYsMTE5MjQ1NTYzOCwxNjM2NjA0NjMxLDIwOTMzNjIyNSwzNDQ4NzM0NjQsMTAxNTY3MTU3MSw2Njk5NjE4OTcsMzM3NTc0MDc2OSwzODU3NTcyMTI0LDI5NzM1MzA2OTUsMzc0NzE5MjAxOCwxOTMzNTMwNjEwLDM0NjQwNDI1MTYsOTM1MjkzODk1LDM0NTQ2ODYxOTksMjg1ODExNTA2OSwxODYzNjM4ODQ1LDM2ODMwMjI5MTYsNDA4NTM2OTUxOSwzMjkyNDQ1MDMyLDg3NTMxMzE4OCwxMDgwMDE3NTcxLDMyNzkwMzM4ODUsNjIxNTkxNzc4LDEyMzM4NTY1NzIsMjUwNDEzMDMxNywyNDE5NzU0NCwzMDE3NjcyNzE2LDM4MzU0ODQzNDAsMzI0NzQ2NTU1OCwyMjIwOTgxMTk1LDMwNjA4NDc5MjIsMTU1MTEyNDU4OCwxNDYzOTk2NjAwXSxwbj1bNDEwNDYwNTc3NywxMDk3MTU5NTUwLDM5NjY3MzgxOCw2NjA1MTAyNjYsMjg3NTk2ODMxNSwyNjM4NjA2NjIzLDQyMDAxMTUxMTYsMzgwODY2MjM0Nyw4MjE3MTIxNjAsMTk4NjkxODA2MSwzNDMwMzIyNTY4LDM4NTQ0ODg1LDM4NTYxMzcyOTUsNzE4MDAyMTE3LDg5MzY4MTcwMiwxNjU0ODg2MzI1LDI5NzU0ODQzODIsMzEyMjM1ODA1MywzOTI2ODI1MDI5LDQyNzQwNTM0NjksNzk2MTk3NTcxLDEyOTA4MDE3OTMsMTE4NDM0MjkyNSwzNTU2MzYxODM1LDI0MDU0MjY5NDcsMjQ1OTczNTMxNywxODM2NzcyMjg3LDEzODE2MjAzNzMsMzE5NjI2Nzk4OCwxOTQ4MzczODQ4LDM3NjQ5ODgyMzMsMzM4NTM0NTE2NiwzMjYzNzg1NTg5LDIzOTAzMjU0OTIsMTQ4MDQ4NTc4NSwzMTExMjQ3MTQzLDM3ODAwOTc3MjYsMjI5MzA0NTIzMiw1NDgxNjk0MTcsMzQ1OTk1Mzc4OSwzNzQ2MTc1MDc1LDQzOTQ1MjM4OSwxMzYyMzIxNTU5LDE0MDA4NDk3NjIsMTY4NTU3NzkwNSwxODA2NTk5MzU1LDIxNzQ3NTQwNDYsMTM3MDczOTEzLDEyMTQ3OTc5MzYsMTE3NDIxNTA1NSwzNzMxNjU0NTQ4LDIwNzk4OTc0MjYsMTk0MzIxNzA2NywxMjU4NDgwMjQyLDUyOTQ4Nzg0MywxNDM3MjgwODcwLDM5NDUyNjkxNzAsMzA0OTM5MDg5NSwzMzEzMjEyMDM4LDkyMzMxMzYxOSw2Nzk5OThlMywzMjE1MzA3Mjk5LDU3MzI2MDgyLDM3NzY0MjIyMSwzNDc0NzI5ODY2LDIwNDE4NzcxNTksMTMzMzYxOTA3LDE3NzY0NjAxMTAsMzY3MzQ3NjQ1Myw5NjM5MjQ1NCw4Nzg4NDU5MDUsMjgwMTY5OTUyNCw3NzcyMzE2NjgsNDA4MjQ3NTE3MCwyMzMwMDE0MjEzLDQxNDI2MjYyMTIsMjIxMzI5NjM5NSwxNjI2MzE5NDI0LDE5MDYyNDcyNjIsMTg0NjU2MzI2MSw1NjI3NTU5MDIsMzcwODE3MzcxOCwxMDQwNTU5ODM3LDM4NzExNjM5ODEsMTQxODU3MzIwMSwzMjk0NDMwNTc3LDExNDU4NTM0OCwxMzQzNjE4OTEyLDI1NjY1OTU2MDksMzE4NjIwMjU4MiwxMDc4MTg1MDk3LDM2NTEwNDExMjcsMzg5NjY4ODA0OCwyMzA3NjIyOTE5LDQyNTQwODc0MywzMzcxMDk2OTUzLDIwODEwNDg0ODEsMTEwODMzOTA2OCwyMjE2NjEwMjk2LDAsMjE1NjI5OTAxNyw3MzY5NzA4MDIsMjkyNTk2NzY2LDE1MTc0NDA2MjAsMjUxNjU3MjEzLDIyMzUwNjE3NzUsMjkzMzIwMjQ5Myw3NTg3MjAzMTAsMjY1OTA1MTYyLDE1NTQzOTE0MDAsMTUzMjI4NTMzOSw5MDg5OTkyMDQsMTc0NTY3NjkyLDE0NzQ3NjA1OTUsNDAwMjg2MTc0OCwyNjEwMDExNjc1LDMyMzQxNTY0MTYsMzY5MzEyNjI0MSwyMDAxNDMwODc0LDMwMzY5OTQ4NCwyNDc4NDQzMjM0LDI2ODcxNjU4ODgsNTg1MTIyNjIwLDQ1NDQ5OTYwMiwxNTE4NDk3NDIsMjM0NTExOTIxOCwzMDY0NTEwNzY1LDUxNDQ0MzI4NCw0MDQ0OTgxNTkxLDE5NjM0MTI2NTUsMjU4MTQ0NTYxNCwyMTM3MDYyODE5LDE5MzA4NTM1LDE5Mjg3MDcxNjQsMTcxNTE5MzE1Niw0MjE5MzUyMTU1LDExMjY3OTA3OTUsNjAwMjM1MjExLDM5OTI3NDIwNzAsMzg0MTAyNDk1Miw4MzY1NTM0MzEsMTY2OTY2NDgzNCwyNTM1NjA0MjQzLDMzMjMwMTEyMDQsMTI0MzkwNTQxMywzMTQxNDAwNzg2LDQxODA4MDgxMTAsNjk4NDQ1MjU1LDI2NTM4OTk1NDksMjk4OTU1MjYwNCwyMjUzNTgxMzI1LDMyNTI5MzI3MjcsMzAwNDU5MTE0NywxODkxMjExNjg5LDI0ODc4MTA1NzcsMzkxNTY1MzcwMyw0MjM3MDgzODE2LDQwMzA2Njc0MjQsMjEwMDA5MDk2Niw4NjUxMzY0MTgsMTIyOTg5OTY1NSw5NTMyNzA3NDUsMzM5OTY3OTYyOCwzNTU3NTA0NjY0LDQxMTg5MjUyMjIsMjA2MTM3OTc0OSwzMDc5NTQ2NTg2LDI5MTUwMTc3OTEsOTgzNDI2MDkyLDIwMjI4Mzc1ODQsMTYwNzI0NDY1MCwyMTE4NTQxOTA4LDIzNjY4ODI1NTAsMzYzNTk5NjgxNiw5NzI1MTI4MTQsMzI4MzA4ODc3MCwxNTY4NzE4NDk1LDM0OTkzMjY1NjksMzU3NjUzOTUwMyw2MjE5ODI2NzEsMjg5NTcyMzQ2NCw0MTA4ODc5NTIsMjYyMzc2MjE1MiwxMDAyMTQyNjgzLDY0NTQwMTAzNywxNDk0ODA3NjYyLDI1OTU2ODQ4NDQsMTMzNTUzNTc0NywyNTA3MDQwMjMwLDQyOTMyOTU3ODYsMzE2NzY4NDY0MSwzNjc1ODUwMDcsMzg4NTc1MDcxNCwxODY1ODYyNzMwLDI2NjgyMjE2NzQsMjk2MDk3MTMwNSwyNzYzMTczNjgxLDEwNTkyNzA5NTQsMjc3Nzk1MjQ1NCwyNzI0NjQyODY5LDEzMjA5NTc4MTIsMjE5NDMxOTEwMCwyNDI5NTk1ODcyLDI4MTU5NTYyNzUsNzcwODk1MjEsMzk3Mzc3MzEyMSwzNDQ0NTc1ODcxLDI0NDg4MzAyMzEsMTMwNTkwNjU1MCw0MDIxMzA4NzM5LDI4NTcxOTQ3MDAsMjUxNjkwMTg2MCwzNTE4MzU4NDMwLDE3ODczMDQ3ODAsNzQwMjc2NDE3LDE2OTk4Mzk4MTQsMTU5MjM5NDkwOSwyMzUyMzA3NDU3LDIyNzI1NTYwMjYsMTg4ODIxMjQzLDE3Mjk5NzcwMTEsMzY4Nzk5NDAwMiwyNzQwODQ4NDEsMzU5NDk4MjI1MywzNjEzNDk0NDI2LDI3MDE5NDk0OTUsNDE2MjA5NjcyOSwzMjI3MzQ1NzEsMjgzNzk2NjU0MiwxNjQwNTc2NDM5LDQ4NDgzMDY4OSwxMjAyNzk3NjkwLDM1Mzc4NTI4MjgsNDA2NzYzOTEyNSwzNDkwNzU3MzYsMzM0MjMxOTQ3NSw0MTU3NDY3MjE5LDQyNTU4MDAxNTksMTAzMDY5MDAxNSwxMTU1MjM3NDk2LDI5NTE5NzEyNzQsMTc1NzY5MTU3Nyw2MDczOTg5NjgsMjczODkwNTAyNiw0OTkzNDc5OTAsMzc5NDA3ODkwOCwxMDExNDUyNzEyLDIyNzg4NTU2NywyODE4NjY2ODA5LDIxMzExNDM3NiwzMDM0ODgxMjQwLDE0NTU1MjU5ODgsMzQxNDQ1MDU1NSw4NTA4MTcyMzcsMTgxNzk5ODQwOCwzMDkyNzI2NDgwXSxmbj1bMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0sZ249WzAsMTg1NDY5MTk3LDM3MDkzODM5NCw0ODc3MjU4NDcsNzQxODc2Nzg4LDY1Nzg2MTk0NSw5NzU0NTE2OTQsODI0ODUyMjU5LDE0ODM3NTM1NzYsMTQwMDc4MzIwNSwxMzE1NzIzODkwLDExNjQwNzE4MDcsMTk1MDkwMzM4OCwyMTM1MzE5ODg5LDE2NDk3MDQ1MTgsMTc2NzUzNjQ1OSwyOTY3NTA3MTUyLDMxNTI5NzYzNDksMjgwMTU2NjQxMCwyOTE4MzUzODYzLDI2MzE0NDc3ODAsMjU0NzQzMjkzNywyMzI4MTQzNjE0LDIxNzc1NDQxNzksMzkwMTgwNjc3NiwzODE4ODM2NDA1LDQyNzA2Mzk3NzgsNDExODk4NzY5NSwzMjk5NDA5MDM2LDM0ODM4MjU1MzcsMzUzNTA3MjkxOCwzNjUyOTA0ODU5LDIwNzc5NjUyNDMsMTg5MzAyMDM0MiwxODQxNzY4ODY1LDE3MjQ0NTcxMzIsMTQ3NDUwMjU0MywxNTU5MDQxNjY2LDExMDcyMzQxOTcsMTI1NzMwOTMzNiw1OTg0Mzg4NjcsNjgxOTMzNTM0LDkwMTIxMDU2OSwxMDUyMzM4MzcyLDI2MTMxNDUzNSw3NzQyMjMxNCw0Mjg4MTk5NjUsMzEwNDYzNzI4LDM0MDk2ODUzNTUsMzIyNDc0MDQ1NCwzNzEwMzY4MTEzLDM1OTMwNTYzODAsMzg3NTc3MDIwNywzOTYwMzA5MzMwLDQwNDUzODA5MzMsNDE5NTQ1NjA3MiwyNDcxMjI0MDY3LDI1NTQ3MTg3MzQsMjIzNzEzMzA4MSwyMzg4MjYwODg0LDMyMTIwMzU4OTUsMzAyODE0MzY3NCwyODQyNjc4NTczLDI3MjQzMjIzMzYsNDEzODU2MzE4MSw0MjU1MzUwNjI0LDM3Njk3MjE5NzUsMzk1NTE5MTE2MiwzNjY3MjE5MDMzLDM1MTY2MTk2MDQsMzQzMTU0Njk0NywzMzQ3NTMyMTEwLDI5MzM3MzQ5MTcsMjc4MjA4MjgyNCwzMDk5NjY3NDg3LDMwMTY2OTcxMDYsMjE5NjA1MjUyOSwyMzEzODg0NDc2LDI0OTkzNDg1MjMsMjY4Mzc2NTAzMCwxMTc5NTEwNDYxLDEyOTYyOTc5MDQsMTM0NzU0ODMyNywxNTMzMDE3NTE0LDE3ODYxMDI0MDksMTYzNTUwMjk4MCwyMDg3MzA5NDU5LDIwMDMyOTQ2MjIsNTA3MzU4OTMzLDM1NTcwNjg0MCwxMzY0Mjg3NTEsNTM0NTgzNzAsODM5MjI0MDMzLDk1NzA1NTk4MCw2MDU2NTczMzksNzkwMDczODQ2LDIzNzMzNDA2MzAsMjI1NjAyODg5MSwyNjA3NDM5ODIwLDI0MjI0OTQ5MTMsMjcwNjI3MDY5MCwyODU2MzQ1ODM5LDMwNzU2MzYyMTYsMzE2MDE3NTM0OSwzNTczOTQxNjk0LDM3MjUwNjk0OTEsMzI3MzI2NzEwOCwzMzU2NzYxNzY5LDQxODE1OTg2MDIsNDA2MzI0MjM3NSw0MDExOTk2MDQ4LDM4MjgxMDM4MzcsMTAzMzI5NzE1OCw5MTU5ODU0MTksNzMwNTE3Mjc2LDU0NTU3MjM2OSwyOTY2Nzk3MzAsNDQ2NzU0ODc5LDEyOTE2NjEyMCwyMTM3MDUyNTMsMTcwOTYxMDM1MCwxODYwNzM4MTQ3LDE5NDU3OTg1MTYsMjAyOTI5MzE3NywxMjM5MzMxMTYyLDExMjA5NzQ5MzUsMTYwNjU5MTI5NiwxNDIyNjk5MDg1LDQxNDgyOTI4MjYsNDIzMzA5NDYxNSwzNzgxMDMzNjY0LDM5MzEzNzE0NjksMzY4MjE5MTU5OCwzNDk3NTA5MzQ3LDM0NDYwMDQ0NjgsMzMyODk1NTM4NSwyOTM5MjY2MjI2LDI3NTU2MzY2NzEsMzEwNjc4MDg0MCwyOTg4Njg3MjY5LDIxOTg0MzgwMjIsMjI4MjE5NTMzOSwyNTAxMjE4OTcyLDI2NTI2MDk0MjUsMTIwMTc2NTM4NiwxMjg2NTY3MTc1LDEzNzEzNjg5NzYsMTUyMTcwNjc4MSwxODA1MjExNzEwLDE2MjA1Mjk0NTksMjEwNTg4NzI2OCwxOTg4ODM4MTg1LDUzMzgwNDEzMCwzNTAxNzQ1NzUsMTY0NDM5NjcyLDQ2MzQ2MTAxLDg3MDkxMjA4Niw5NTQ2Njk0MDMsNjM2ODEzOTAwLDc4ODIwNDM1MywyMzU4OTU3OTIxLDIyNzQ2ODA0MjgsMjU5MjUyMzY0MywyNDQxNjYxNTU4LDI2OTUwMzM2ODUsMjg4MDI0MDIxNiwzMDY1OTYyODMxLDMxODI0ODc2MTgsMzU3MjE0NTkyOSwzNzU2Mjk5NzgwLDMyNzA5Mzc4NzUsMzM4ODUwNzE2Niw0MTc0NTYwMDYxLDQwOTEzMjcwMjQsNDAwNjUyMTEyNywzODU0NjA2Mzc4LDEwMTQ2NDY3MDUsOTMwMzY5MjEyLDcxMTM0OTY3NSw1NjA0ODc1OTAsMjcyNzg2MzA5LDQ1Nzk5Mjg0MCwxMDY4NTI3NjcsMjIzMzc3NTU0LDE2NzgzODEwMTcsMTg2MjUzNDg2OCwxOTE0MDUyMDM1LDIwMzE2MjEzMjYsMTIxMTI0NzU5NywxMTI4MDE0NTYwLDE1ODAwODc3OTksMTQyODE3MzA1MCwzMjI4MzMxOSwxODI2MjExMTQsNDAxNjM5NTk3LDQ4NjQ0MTM3Niw3Njg5MTcxMjMsNjUxODY4MDQ2LDEwMDMwMDcxMjksODE4MzI0ODg0LDE1MDM0NDk4MjMsMTM4NTM1NjI0MiwxMzMzODM4MDIxLDExNTAyMDg0NTYsMTk3Mzc0NTM4NywyMTI1MTM1ODQ2LDE2NzMwNjE2MTcsMTc1NjgxODk0MCwyOTcwMzU2MzI3LDMxMjA2OTQxMjIsMjgwMjg0OTkxNywyODg3NjUxNjk2LDI2Mzc0NDI2NDMsMjUyMDM5MzU2NiwyMzM0NjY5ODk3LDIxNDk5ODc2NTIsMzkxNzIzNDcwMywzNzk5MTQxMTIyLDQyODQ1MDIwMzcsNDEwMDg3MjQ3MiwzMzA5NTk0MTcxLDM0NjA5ODQ2MzAsMzU0NTc4OTQ3MywzNjI5NTQ2Nzk2LDIwNTA0NjYwNjAsMTg5OTYwMzk2OSwxODE0ODAzMjIyLDE3MzA1MjU3MjMsMTQ0Mzg1NzcyMCwxNTYwMzgyNTE3LDEwNzUwMjU2OTgsMTI2MDIzMjIzOSw1NzUxMzgxNDgsNjkyNzA3NDMzLDg3ODQ0MzM5MCwxMDYyNTk3MjM1LDI0MzI1NjY1Niw5MTM0MTkxNyw0MDkxOTg0MTAsMzI1OTY1MzgzLDM0MDMxMDA2MzYsMzI1MjIzODU0NSwzNzA0MzAwNDg2LDM2MjAwMjI5ODcsMzg3NDQyODM5MiwzOTkwOTUzMTg5LDQwNDI0NTkxMjIsNDIyNzY2NTY2MywyNDYwNDQ5MjA0LDI1NzgwMTg0ODksMjIyNjg3NTMxMCwyNDExMDI5MTU1LDMxOTgxMTUyMDAsMzA0NjIwMDQ2MSwyODI3MTc3ODgyLDI3NDM5NDQ4NTVdLG1uPVswLDIxODgyODI5Nyw0Mzc2NTY1OTQsMzg3NzgxMTQ3LDg3NTMxMzE4OCw5NTg4NzEwODUsNzc1NTYyMjk0LDU5MDQyNDYzOSwxNzUwNjI2Mzc2LDE2OTk5NzA2MjUsMTkxNzc0MjE3MCwyMTM1MjUzNTg3LDE1NTExMjQ1ODgsMTM2NzI5NTU4OSwxMTgwODQ5Mjc4LDEyNjUxOTU2MzksMzUwMTI1Mjc1MiwzNzIwMDgxMDQ5LDMzOTk5NDEyNTAsMzM1MDA2NTgwMywzODM1NDg0MzQwLDM5MTkwNDIyMzcsNDI3MDUwNzE3NCw0MDg1MzY5NTE5LDMxMDIyNDkxNzYsMzA1MTU5MzQyNSwyNzM0NTkxMTc4LDI5NTIxMDI1OTUsMjM2MTY5ODU1NiwyMTc3ODY5NTU3LDI1MzAzOTEyNzgsMjYxNDczNzYzOSwzMTQ1NDU2NDQzLDMwNjA4NDc5MjIsMjcwODMyNjE4NSwyODkyNDE3MzEyLDI0MDQ5MDE2NjMsMjE4NzEyODA4NiwyNTA0MTMwMzE3LDI1NTUwNDgxOTYsMzU0MjMzMDIyNywzNzI3MjA1NzU0LDMzNzU3NDA3NjksMzI5MjQ0NTAzMiwzODc2NTU3NjU1LDM5MjYxNzA5NzQsNDI0NjMxMDcyNSw0MDI3NzQ0NTg4LDE4MDg0ODExOTUsMTcyMzg3MjY3NCwxOTEwMzE5MDMzLDIwOTQ0MTAxNjAsMTYwODk3NTI0NywxMzkxMjAxNjcwLDExNzM0MzAxNzMsMTIyNDM0ODA1Miw1OTk4NDg2NywyNDQ4NjAzOTQsNDI4MTY5MjAxLDM0NDg3MzQ2NCw5MzUyOTM4OTUsOTg0OTA3MjE0LDc2NjA3ODkzMyw1NDc1MTI3OTYsMTg0NDg4MjgwNiwxNjI3MjM1MTk5LDIwMTEyMTQxODAsMjA2MjI3MDMxNywxNTA3NDk3Mjk4LDE0MjMwMjI5MzksMTEzNzQ3Nzk1MiwxMzIxNjk5MTQ1LDk1MzQ1OTgyLDE0NTA4NTIzOSw1MzIyMDE3NzIsMzEzNzczODYxLDgzMDY2MTkxNCwxMDE1NjcxNTcxLDczMTE4MzM2OCw2NDgwMTc2NjUsMzE3NTUwMTI4NiwyOTU3ODUzNjc5LDI4MDcwNTg5MzIsMjg1ODExNTA2OSwyMzA1NDU1NTU0LDIyMjA5ODExOTUsMjQ3NDQwNDMwNCwyNjU4NjI1NDk3LDM1NzU1Mjg4NzgsMzYyNTI2ODEzNSwzNDczNDE2NjM2LDMyNTQ5ODg3MjUsMzc3ODE1MTgxOCwzOTYzMTYxNDc1LDQyMTM0NDcwNjQsNDEzMDI4MTM2MSwzNTk5NTk1MDg1LDM2ODMwMjI5MTYsMzQzMjczNzM3NSwzMjQ3NDY1NTU4LDM4MDIyMjIxODUsNDAyMDkxMjIyNCw0MTcyNzYzNzcxLDQxMjI3NjIzNTQsMzIwMTYzMTc0OSwzMDE3NjcyNzE2LDI3NjQyNDk2MjMsMjg0ODQ2MTg1NCwyMzMxNTkwMTc3LDIyODA3OTYyMDAsMjQzMTU5MDk2MywyNjQ4OTc2NDQyLDEwNDY5OTYxMywxODgxMjc0NDQsNDcyNjE1NjMxLDI4NzM0MzgxNCw4NDAwMTk3MDUsMTA1ODcwOTc0NCw2NzE1OTMxOTUsNjIxNTkxNzc4LDE4NTIxNzE5MjUsMTY2ODIxMjg5MiwxOTUzNzU3ODMxLDIwMzc5NzAwNjIsMTUxNDc5MDU3NywxNDYzOTk2NjAwLDEwODAwMTc1NzEsMTI5NzQwMzA1MCwzNjczNjM3MzU2LDM2MjM2MzY5NjUsMzIzNTk5NTEzNCwzNDU0Njg2MTk5LDQwMDczNjA5NjgsMzgyMjA5MDE3Nyw0MTA3MTAxNjU4LDQxOTA1MzA1MTUsMjk5NzgyNTk1NiwzMjE1MjEyNDYxLDI4MzA3MDgxNTAsMjc3OTkxNTE5OSwyMjU2NzM0NTkyLDIzNDA5NDc4NDksMjYyNzAxNjA4MiwyNDQzMDU4MDc1LDE3MjQ2NjU1NiwxMjI0NjYxNjUsMjczNzkyMzY2LDQ5MjQ4MzQzMSwxMDQ3MjM5ZTMsODYxOTY4MjA5LDYxMjIwNTg5OCw2OTU2MzQ3NTUsMTY0NjI1MjM0MCwxODYzNjM4ODQ1LDIwMTM5MDgyNjIsMTk2MzExNTMxMSwxNDQ2MjQyNTc2LDE1MzA0NTU4MzMsMTI3NzU1NTk3MCwxMDkzNTk3OTYzLDE2MzY2MDQ2MzEsMTgyMDgyNDc5OCwyMDczNzI0NjEzLDE5ODkyNDkyMjgsMTQzNjU5MDgzNSwxNDg3NjQ1OTQ2LDEzMzczNzY0ODEsMTExOTcyNzg0OCwxNjQ5NDg2MzksODE3ODE5MTAsMzMxNTQ0MjA1LDUxNjU1MjgzNiwxMDM5NzE3MDUxLDgyMTI4ODExNCw2Njk5NjE4OTcsNzE5NzAwMTI4LDI5NzM1MzA2OTUsMzE1Nzc1MDg2MiwyODcxNjgyNjQ1LDI3ODcyMDcyNjAsMjIzMjQzNTI5OSwyMjgzNDkwNDEwLDI2Njc5OTQ3MzcsMjQ1MDM0NjEwNCwzNjQ3MjEyMDQ3LDM1NjQwNDUzMTgsMzI3OTAzMzg4NSwzNDY0MDQyNTE2LDM5ODA5MzE2MjcsMzc2MjUwMjY5MCw0MTUwMTQ0NTY5LDQxOTk4ODI4MDAsMzA3MDM1NjYzNCwzMTIxMjc1NTM5LDI5MDQwMjcyNzIsMjY4NjI1NDcyMSwyMjAwODE4ODc4LDIzODQ5MTEwMzEsMjU3MDgzMjA0NCwyNDg2MjI0NTQ5LDM3NDcxOTIwMTgsMzUyODYyNjkwNywzMzEwMzIxODU2LDMzNTk5MzYyMDEsMzk1MDM1NTcwMiwzODY3MDYwOTkxLDQwNDk4NDQ0NTIsNDIzNDcyMTAwNSwxNzM5NjU2MjAyLDE3OTA1NzUxMDcsMjEwODEwMDYzMiwxODkwMzI4MDgxLDE0MDI4MTE0MzgsMTU4NjkwMzU5MSwxMjMzODU2NTcyLDExNDkyNDkwNzcsMjY2OTU5OTM4LDQ4Mzk0ODI3LDM2OTA1Nzg3Miw0MTg2NzIyMTcsMTAwMjc4Mzg0Niw5MTk0ODkxMzUsNTY3NDk4ODY4LDc1MjM3NTQyMSwyMDkzMzYyMjUsMjQxOTc1NDQsMzc2MTg3ODI3LDQ1OTc0NDY5OCw5NDUxNjQxNjUsODk1Mjg3NjkyLDU3NDYyNDY2Myw3OTM0NTE5MzQsMTY3OTk2ODIzMywxNzY0MzEzNTY4LDIxMTczNjA2MzUsMTkzMzUzMDYxMCwxMzQzMTI3NTAxLDE1NjA2Mzc4OTIsMTI0MzExMjQxNSwxMTkyNDU1NjM4LDM3MDQyODA4ODEsMzUxOTE0MjIwMCwzMzM2MzU4NjkxLDM0MTk5MTU1NjIsMzkwNzQ0ODU5NywzODU3NTcyMTI0LDQwNzU4NzcxMjcsNDI5NDcwNDM5OCwzMDI5NTEwMDA5LDMxMTM4NTUzNDQsMjkyNzkzNDMxNSwyNzQ0MTA0MjkwLDIxNTk5NzYyODUsMjM3NzQ4NjY3NiwyNTk0NzM0OTI3LDI1NDQwNzgxNTBdLHluPVswLDE1MTg0OTc0MiwzMDM2OTk0ODQsNDU0NDk5NjAyLDYwNzM5ODk2OCw3NTg3MjAzMTAsOTA4OTk5MjA0LDEwNTkyNzA5NTQsMTIxNDc5NzkzNiwxMDk3MTU5NTUwLDE1MTc0NDA2MjAsMTQwMDg0OTc2MiwxODE3OTk4NDA4LDE2OTk4Mzk4MTQsMjExODU0MTkwOCwyMDAxNDMwODc0LDI0Mjk1OTU4NzIsMjU4MTQ0NTYxNCwyMTk0MzE5MTAwLDIzNDUxMTkyMTgsMzAzNDg4MTI0MCwzMTg2MjAyNTgyLDI4MDE2OTk1MjQsMjk1MTk3MTI3NCwzNjM1OTk2ODE2LDM1MTgzNTg0MzAsMzM5OTY3OTYyOCwzMjgzMDg4NzcwLDQyMzcwODM4MTYsNDExODkyNTIyMiw0MDAyODYxNzQ4LDM4ODU3NTA3MTQsMTAwMjE0MjY4Myw4NTA4MTcyMzcsNjk4NDQ1MjU1LDU0ODE2OTQxNyw1Mjk0ODc4NDMsMzc3NjQyMjIxLDIyNzg4NTU2Nyw3NzA4OTUyMSwxOTQzMjE3MDY3LDIwNjEzNzk3NDksMTY0MDU3NjQzOSwxNzU3NjkxNTc3LDE0NzQ3NjA1OTUsMTU5MjM5NDkwOSwxMTc0MjE1MDU1LDEyOTA4MDE3OTMsMjg3NTk2ODMxNSwyNzI0NjQyODY5LDMxMTEyNDcxNDMsMjk2MDk3MTMwNSwyNDA1NDI2OTQ3LDIyNTM1ODEzMjUsMjYzODYwNjYyMywyNDg3ODEwNTc3LDM4MDg2NjIzNDcsMzkyNjgyNTAyOSw0MDQ0OTgxNTkxLDQxNjIwOTY3MjksMzM0MjMxOTQ3NSwzNDU5OTUzNzg5LDM1NzY1Mzk1MDMsMzY5MzEyNjI0MSwxOTg2OTE4MDYxLDIxMzcwNjI4MTksMTY4NTU3NzkwNSwxODM2NzcyMjg3LDEzODE2MjAzNzMsMTUzMjI4NTMzOSwxMDc4MTg1MDk3LDEyMjk4OTk2NTUsMTA0MDU1OTgzNyw5MjMzMTM2MTksNzQwMjc2NDE3LDYyMTk4MjY3MSw0Mzk0NTIzODksMzIyNzM0NTcxLDEzNzA3MzkxMywxOTMwODUzNSwzODcxMTYzOTgxLDQwMjEzMDg3MzksNDEwNDYwNTc3Nyw0MjU1ODAwMTU5LDMyNjM3ODU1ODksMzQxNDQ1MDU1NSwzNDk5MzI2NTY5LDM2NTEwNDExMjcsMjkzMzIwMjQ5MywyODE1OTU2Mjc1LDMxNjc2ODQ2NDEsMzA0OTM5MDg5NSwyMzMwMDE0MjEzLDIyMTMyOTYzOTUsMjU2NjU5NTYwOSwyNDQ4ODMwMjMxLDEzMDU5MDY1NTAsMTE1NTIzNzQ5NiwxNjA3MjQ0NjUwLDE0NTU1MjU5ODgsMTc3NjQ2MDExMCwxNjI2MzE5NDI0LDIwNzk4OTc0MjYsMTkyODcwNzE2NCw5NjM5MjQ1NCwyMTMxMTQzNzYsMzk2NjczODE4LDUxNDQ0MzI4NCw1NjI3NTU5MDIsNjc5OTk4ZTMsODY1MTM2NDE4LDk4MzQyNjA5MiwzNzA4MTczNzE4LDM1NTc1MDQ2NjQsMzQ3NDcyOTg2NiwzMzIzMDExMjA0LDQxODA4MDgxMTAsNDAzMDY2NzQyNCwzOTQ1MjY5MTcwLDM3OTQwNzg5MDgsMjUwNzA0MDIzMCwyNjIzNzYyMTUyLDIyNzI1NTYwMjYsMjM5MDMyNTQ5MiwyOTc1NDg0MzgyLDMwOTI3MjY0ODAsMjczODkwNTAyNiwyODU3MTk0NzAwLDM5NzM3NzMxMjEsMzg1NjEzNzI5NSw0Mjc0MDUzNDY5LDQxNTc0NjcyMTksMzM3MTA5Njk1MywzMjUyOTMyNzI3LDM2NzM0NzY0NTMsMzU1NjM2MTgzNSwyNzYzMTczNjgxLDI5MTUwMTc3OTEsMzA2NDUxMDc2NSwzMjE1MzA3Mjk5LDIxNTYyOTkwMTcsMjMwNzYyMjkxOSwyNDU5NzM1MzE3LDI2MTAwMTE2NzUsMjA4MTA0ODQ4MSwxOTYzNDEyNjU1LDE4NDY1NjMyNjEsMTcyOTk3NzAxMSwxNDgwNDg1Nzg1LDEzNjIzMjE1NTksMTI0MzkwNTQxMywxMTI2NzkwNzk1LDg3ODg0NTkwNSwxMDMwNjkwMDE1LDY0NTQwMTAzNyw3OTYxOTc1NzEsMjc0MDg0ODQxLDQyNTQwODc0MywzODU0NDg4NSwxODg4MjEyNDMsMzYxMzQ5NDQyNiwzNzMxNjU0NTQ4LDMzMTMyMTIwMzgsMzQzMDMyMjU2OCw0MDgyNDc1MTcwLDQyMDAxMTUxMTYsMzc4MDA5NzcyNiwzODk2Njg4MDQ4LDI2NjgyMjE2NzQsMjUxNjkwMTg2MCwyMzY2ODgyNTUwLDIyMTY2MTAyOTYsMzE0MTQwMDc4NiwyOTg5NTUyNjA0LDI4Mzc5NjY1NDIsMjY4NzE2NTg4OCwxMjAyNzk3NjkwLDEzMjA5NTc4MTIsMTQzNzI4MDg3MCwxNTU0MzkxNDAwLDE2Njk2NjQ4MzQsMTc4NzMwNDc4MCwxOTA2MjQ3MjYyLDIwMjI4Mzc1ODQsMjY1OTA1MTYyLDExNDU4NTM0OCw0OTkzNDc5OTAsMzQ5MDc1NzM2LDczNjk3MDgwMiw1ODUxMjI2MjAsOTcyNTEyODE0LDgyMTcxMjE2MCwyNTk1Njg0ODQ0LDI0Nzg0NDMyMzQsMjI5MzA0NTIzMiwyMTc0NzU0MDQ2LDMxOTYyNjc5ODgsMzA3OTU0NjU4NiwyODk1NzIzNDY0LDI3Nzc5NTI0NTQsMzUzNzg1MjgyOCwzNjg3OTk0MDAyLDMyMzQxNTY0MTYsMzM4NTM0NTE2Niw0MTQyNjI2MjEyLDQyOTMyOTU3ODYsMzg0MTAyNDk1MiwzOTkyNzQyMDcwLDE3NDU2NzY5Miw1NzMyNjA4Miw0MTA4ODc5NTIsMjkyNTk2NzY2LDc3NzIzMTY2OCw2NjA1MTAyNjYsMTAxMTQ1MjcxMiw4OTM2ODE3MDIsMTEwODMzOTA2OCwxMjU4NDgwMjQyLDEzNDM2MTg5MTIsMTQ5NDgwNzY2MiwxNzE1MTkzMTU2LDE4NjU4NjI3MzAsMTk0ODM3Mzg0OCwyMTAwMDkwOTY2LDI3MDE5NDk0OTUsMjgxODY2NjgwOSwzMDA0NTkxMTQ3LDMxMjIzNTgwNTMsMjIzNTA2MTc3NSwyMzUyMzA3NDU3LDI1MzU2MDQyNDMsMjY1Mzg5OTU0OSwzOTE1NjUzNzAzLDM3NjQ5ODgyMzMsNDIxOTM1MjE1NSw0MDY3NjM5MTI1LDM0NDQ1NzU4NzEsMzI5NDQzMDU3NywzNzQ2MTc1MDc1LDM1OTQ5ODIyNTMsODM2NTUzNDMxLDk1MzI3MDc0NSw2MDAyMzUyMTEsNzE4MDAyMTE3LDM2NzU4NTAwNyw0ODQ4MzA2ODksMTMzMzYxOTA3LDI1MTY1NzIxMywyMDQxODc3MTU5LDE4OTEyMTE2ODksMTgwNjU5OTM1NSwxNjU0ODg2MzI1LDE1Njg3MTg0OTUsMTQxODU3MzIwMSwxMzM1NTM1NzQ3LDExODQzNDI5MjVdO2Z1bmN0aW9uIF9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKz00KXQucHVzaChlW25dPDwyNHxlW24rMV08PDE2fGVbbisyXTw8OHxlW24rM10pO3JldHVybiB0fWNsYXNzIHdue2NvbnN0cnVjdG9yKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHduKSl0aHJvdyBFcnJvcihcIkFFUyBtdXN0IGJlIGluc3Rhbml0YXRlZCB3aXRoIGBuZXdgXCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwia2V5XCIse3ZhbHVlOkd0KGUsITApfSksdGhpcy5fcHJlcGFyZSgpfV9wcmVwYXJlKCl7dmFyIGU9dG5bdGhpcy5rZXkubGVuZ3RoXTtpZihudWxsPT1lKXRocm93IG5ldyBFcnJvcihcImludmFsaWQga2V5IHNpemUgKG11c3QgYmUgMTYsIDI0IG9yIDMyIGJ5dGVzKVwiKTt0aGlzLl9LZT1bXSx0aGlzLl9LZD1bXTtmb3IodmFyIHQ9MDt0PD1lO3QrKyl0aGlzLl9LZS5wdXNoKFswLDAsMCwwXSksdGhpcy5fS2QucHVzaChbMCwwLDAsMF0pO3ZhciBuLHM9NCooZSsxKSxyPXRoaXMua2V5Lmxlbmd0aC80LGk9X24odGhpcy5rZXkpO2Zvcih0PTA7dDxyO3QrKyluPXQ+PjIsdGhpcy5fS2Vbbl1bdCU0XT1pW3RdLHRoaXMuX0tkW2Utbl1bdCU0XT1pW3RdO2Zvcih2YXIgbyxhPTAsYz1yO2M8czspe2lmKG89aVtyLTFdLGlbMF1ePXNuW28+PjE2JjI1NV08PDI0XnNuW28+PjgmMjU1XTw8MTZec25bMjU1Jm9dPDw4XnNuW28+PjI0JjI1NV1ebm5bYV08PDI0LGErPTEsOCE9cilmb3IodD0xO3Q8cjt0KyspaVt0XV49aVt0LTFdO2Vsc2V7Zm9yKHQ9MTt0PHIvMjt0KyspaVt0XV49aVt0LTFdO289aVtyLzItMV0saVtyLzJdXj1zblsyNTUmb11ec25bbz4+OCYyNTVdPDw4XnNuW28+PjE2JjI1NV08PDE2XnNuW28+PjI0JjI1NV08PDI0O2Zvcih0PXIvMisxO3Q8cjt0KyspaVt0XV49aVt0LTFdfWZvcih0PTA7dDxyJiZjPHM7KXU9Yz4+MixoPWMlNCx0aGlzLl9LZVt1XVtoXT1pW3RdLHRoaXMuX0tkW2UtdV1baF09aVt0KytdLGMrK31mb3IodmFyIHU9MTt1PGU7dSsrKWZvcih2YXIgaD0wO2g8NDtoKyspbz10aGlzLl9LZFt1XVtoXSx0aGlzLl9LZFt1XVtoXT1mbltvPj4yNCYyNTVdXmduW28+PjE2JjI1NV1ebW5bbz4+OCYyNTVdXnluWzI1NSZvXX1lbmNyeXB0KGUpe2lmKDE2IT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBsYWludGV4dCBzaXplIChtdXN0IGJlIDE2IGJ5dGVzKVwiKTtmb3IodmFyIHQ9dGhpcy5fS2UubGVuZ3RoLTEsbj1bMCwwLDAsMF0scz1fbihlKSxyPTA7cjw0O3IrKylzW3JdXj10aGlzLl9LZVswXVtyXTtmb3IodmFyIGk9MTtpPHQ7aSsrKXtmb3Iocj0wO3I8NDtyKyspbltyXT1vbltzW3JdPj4yNCYyNTVdXmFuW3NbKHIrMSklNF0+PjE2JjI1NV1eY25bc1socisyKSU0XT4+OCYyNTVdXnVuWzI1NSZzWyhyKzMpJTRdXV50aGlzLl9LZVtpXVtyXTtzPW4uc2xpY2UoKX12YXIgbyxhPVl0KDE2KTtmb3Iocj0wO3I8NDtyKyspbz10aGlzLl9LZVt0XVtyXSxhWzQqcl09MjU1JihzbltzW3JdPj4yNCYyNTVdXm8+PjI0KSxhWzQqcisxXT0yNTUmKHNuW3NbKHIrMSklNF0+PjE2JjI1NV1ebz4+MTYpLGFbNCpyKzJdPTI1NSYoc25bc1socisyKSU0XT4+OCYyNTVdXm8+PjgpLGFbNCpyKzNdPTI1NSYoc25bMjU1JnNbKHIrMyklNF1dXm8pO3JldHVybiBhfWRlY3J5cHQoZSl7aWYoMTYhPWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2lwaGVydGV4dCBzaXplIChtdXN0IGJlIDE2IGJ5dGVzKVwiKTtmb3IodmFyIHQ9dGhpcy5fS2QubGVuZ3RoLTEsbj1bMCwwLDAsMF0scz1fbihlKSxyPTA7cjw0O3IrKylzW3JdXj10aGlzLl9LZFswXVtyXTtmb3IodmFyIGk9MTtpPHQ7aSsrKXtmb3Iocj0wO3I8NDtyKyspbltyXT1obltzW3JdPj4yNCYyNTVdXmxuW3NbKHIrMyklNF0+PjE2JjI1NV1eZG5bc1socisyKSU0XT4+OCYyNTVdXnBuWzI1NSZzWyhyKzEpJTRdXV50aGlzLl9LZFtpXVtyXTtzPW4uc2xpY2UoKX12YXIgbyxhPVl0KDE2KTtmb3Iocj0wO3I8NDtyKyspbz10aGlzLl9LZFt0XVtyXSxhWzQqcl09MjU1JihybltzW3JdPj4yNCYyNTVdXm8+PjI0KSxhWzQqcisxXT0yNTUmKHJuW3NbKHIrMyklNF0+PjE2JjI1NV1ebz4+MTYpLGFbNCpyKzJdPTI1NSYocm5bc1socisyKSU0XT4+OCYyNTVdXm8+PjgpLGFbNCpyKzNdPTI1NSYocm5bMjU1JnNbKHIrMSklNF1dXm8pO3JldHVybiBhfX1jbGFzcyB2bntjb25zdHJ1Y3RvcihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB2bikpdGhyb3cgRXJyb3IoXCJBRVMgbXVzdCBiZSBpbnN0YW5pdGF0ZWQgd2l0aCBgbmV3YFwiKTt0aGlzLmRlc2NyaXB0aW9uPVwiRWxlY3Ryb25pYyBDb2RlIEJsb2NrXCIsdGhpcy5uYW1lPVwiZWNiXCIsdGhpcy5fYWVzPW5ldyB3bihlKX1lbmNyeXB0KGUpe2lmKChlPUd0KGUpKS5sZW5ndGglMTYhPTApdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwbGFpbnRleHQgc2l6ZSAobXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcylcIik7Zm9yKHZhciB0PVl0KGUubGVuZ3RoKSxuPVl0KDE2KSxzPTA7czxlLmxlbmd0aDtzKz0xNilRdChlLG4sMCxzLHMrMTYpLFF0KG49dGhpcy5fYWVzLmVuY3J5cHQobiksdCxzKTtyZXR1cm4gdH1kZWNyeXB0KGUpe2lmKChlPUd0KGUpKS5sZW5ndGglMTYhPTApdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjaXBoZXJ0ZXh0IHNpemUgKG11c3QgYmUgbXVsdGlwbGUgb2YgMTYgYnl0ZXMpXCIpO2Zvcih2YXIgdD1ZdChlLmxlbmd0aCksbj1ZdCgxNikscz0wO3M8ZS5sZW5ndGg7cys9MTYpUXQoZSxuLDAscyxzKzE2KSxRdChuPXRoaXMuX2Flcy5kZWNyeXB0KG4pLHQscyk7cmV0dXJuIHR9fWNsYXNzIElue2NvbnN0cnVjdG9yKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSW4pKXRocm93IEVycm9yKFwiQUVTIG11c3QgYmUgaW5zdGFuaXRhdGVkIHdpdGggYG5ld2BcIik7aWYodGhpcy5kZXNjcmlwdGlvbj1cIkNpcGhlciBCbG9jayBDaGFpbmluZ1wiLHRoaXMubmFtZT1cImNiY1wiLHQpe2lmKDE2IT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGluaXRpYWxhdGlvbiB2ZWN0b3Igc2l6ZSAobXVzdCBiZSAxNiBieXRlcylcIil9ZWxzZSB0PVl0KDE2KTt0aGlzLl9sYXN0Q2lwaGVyYmxvY2s9R3QodCwhMCksdGhpcy5fYWVzPW5ldyB3bihlKX1lbmNyeXB0KGUpe2lmKChlPUd0KGUpKS5sZW5ndGglMTYhPTApdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwbGFpbnRleHQgc2l6ZSAobXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcylcIik7Zm9yKHZhciB0PVl0KGUubGVuZ3RoKSxuPVl0KDE2KSxzPTA7czxlLmxlbmd0aDtzKz0xNil7UXQoZSxuLDAscyxzKzE2KTtmb3IodmFyIHI9MDtyPDE2O3IrKyluW3JdXj10aGlzLl9sYXN0Q2lwaGVyYmxvY2tbcl07dGhpcy5fbGFzdENpcGhlcmJsb2NrPXRoaXMuX2Flcy5lbmNyeXB0KG4pLFF0KHRoaXMuX2xhc3RDaXBoZXJibG9jayx0LHMpfXJldHVybiB0fWRlY3J5cHQoZSl7aWYoKGU9R3QoZSkpLmxlbmd0aCUxNiE9MCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNpcGhlcnRleHQgc2l6ZSAobXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcylcIik7Zm9yKHZhciB0PVl0KGUubGVuZ3RoKSxuPVl0KDE2KSxzPTA7czxlLmxlbmd0aDtzKz0xNil7UXQoZSxuLDAscyxzKzE2KSxuPXRoaXMuX2Flcy5kZWNyeXB0KG4pO2Zvcih2YXIgcj0wO3I8MTY7cisrKXRbcytyXT1uW3JdXnRoaXMuX2xhc3RDaXBoZXJibG9ja1tyXTtRdChlLHRoaXMuX2xhc3RDaXBoZXJibG9jaywwLHMscysxNil9cmV0dXJuIHR9fWNsYXNzIFNue2NvbnN0cnVjdG9yKGUsdCxuKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTbikpdGhyb3cgRXJyb3IoXCJBRVMgbXVzdCBiZSBpbnN0YW5pdGF0ZWQgd2l0aCBgbmV3YFwiKTtpZih0aGlzLmRlc2NyaXB0aW9uPVwiQ2lwaGVyIEZlZWRiYWNrXCIsdGhpcy5uYW1lPVwiY2ZiXCIsdCl7aWYoMTYhPXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgaW5pdGlhbGF0aW9uIHZlY3RvciBzaXplIChtdXN0IGJlIDE2IHNpemUpXCIpfWVsc2UgdD1ZdCgxNik7bnx8KG49MSksdGhpcy5zZWdtZW50U2l6ZT1uLHRoaXMuX3NoaWZ0UmVnaXN0ZXI9R3QodCwhMCksdGhpcy5fYWVzPW5ldyB3bihlKX1lbmNyeXB0KGUpe2lmKGUubGVuZ3RoJXRoaXMuc2VnbWVudFNpemUhPTApdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwbGFpbnRleHQgc2l6ZSAobXVzdCBiZSBzZWdtZW50U2l6ZSBieXRlcylcIik7Zm9yKHZhciB0LG49R3QoZSwhMCkscz0wO3M8bi5sZW5ndGg7cys9dGhpcy5zZWdtZW50U2l6ZSl7dD10aGlzLl9hZXMuZW5jcnlwdCh0aGlzLl9zaGlmdFJlZ2lzdGVyKTtmb3IodmFyIHI9MDtyPHRoaXMuc2VnbWVudFNpemU7cisrKW5bcytyXV49dFtyXTtRdCh0aGlzLl9zaGlmdFJlZ2lzdGVyLHRoaXMuX3NoaWZ0UmVnaXN0ZXIsMCx0aGlzLnNlZ21lbnRTaXplKSxRdChuLHRoaXMuX3NoaWZ0UmVnaXN0ZXIsMTYtdGhpcy5zZWdtZW50U2l6ZSxzLHMrdGhpcy5zZWdtZW50U2l6ZSl9cmV0dXJuIG59ZGVjcnlwdChlKXtpZihlLmxlbmd0aCV0aGlzLnNlZ21lbnRTaXplIT0wKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2lwaGVydGV4dCBzaXplIChtdXN0IGJlIHNlZ21lbnRTaXplIGJ5dGVzKVwiKTtmb3IodmFyIHQsbj1HdChlLCEwKSxzPTA7czxuLmxlbmd0aDtzKz10aGlzLnNlZ21lbnRTaXplKXt0PXRoaXMuX2Flcy5lbmNyeXB0KHRoaXMuX3NoaWZ0UmVnaXN0ZXIpO2Zvcih2YXIgcj0wO3I8dGhpcy5zZWdtZW50U2l6ZTtyKyspbltzK3JdXj10W3JdO1F0KHRoaXMuX3NoaWZ0UmVnaXN0ZXIsdGhpcy5fc2hpZnRSZWdpc3RlciwwLHRoaXMuc2VnbWVudFNpemUpLFF0KGUsdGhpcy5fc2hpZnRSZWdpc3RlciwxNi10aGlzLnNlZ21lbnRTaXplLHMscyt0aGlzLnNlZ21lbnRTaXplKX1yZXR1cm4gbn19Y2xhc3MgYm57Y29uc3RydWN0b3IoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBibikpdGhyb3cgRXJyb3IoXCJBRVMgbXVzdCBiZSBpbnN0YW5pdGF0ZWQgd2l0aCBgbmV3YFwiKTtpZih0aGlzLmRlc2NyaXB0aW9uPVwiT3V0cHV0IEZlZWRiYWNrXCIsdGhpcy5uYW1lPVwib2ZiXCIsdCl7aWYoMTYhPXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgaW5pdGlhbGF0aW9uIHZlY3RvciBzaXplIChtdXN0IGJlIDE2IGJ5dGVzKVwiKX1lbHNlIHQ9WXQoMTYpO3RoaXMuX2xhc3RQcmVjaXBoZXI9R3QodCwhMCksdGhpcy5fbGFzdFByZWNpcGhlckluZGV4PTE2LHRoaXMuX2Flcz1uZXcgd24oZSl9ZW5jcnlwdChlKXtmb3IodmFyIHQ9R3QoZSwhMCksbj0wO248dC5sZW5ndGg7bisrKTE2PT09dGhpcy5fbGFzdFByZWNpcGhlckluZGV4JiYodGhpcy5fbGFzdFByZWNpcGhlcj10aGlzLl9hZXMuZW5jcnlwdCh0aGlzLl9sYXN0UHJlY2lwaGVyKSx0aGlzLl9sYXN0UHJlY2lwaGVySW5kZXg9MCksdFtuXV49dGhpcy5fbGFzdFByZWNpcGhlclt0aGlzLl9sYXN0UHJlY2lwaGVySW5kZXgrK107cmV0dXJuIHR9ZGVjcnlwdChlKXtyZXR1cm4gdGhpcy5lbmNyeXB0KGUpfX1jbGFzcyBrbntjb25zdHJ1Y3RvcihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBrbikpdGhyb3cgRXJyb3IoXCJDb3VudGVyIG11c3QgYmUgaW5zdGFuaXRhdGVkIHdpdGggYG5ld2BcIik7MD09PWV8fGV8fChlPTEpLFwibnVtYmVyXCI9PXR5cGVvZiBlPyh0aGlzLl9jb3VudGVyPVl0KDE2KSx0aGlzLnNldFZhbHVlKGUpKTp0aGlzLnNldEJ5dGVzKGUpfXNldFZhbHVlKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlfHxwYXJzZUludChlKSE9ZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNvdW50ZXIgdmFsdWUgKG11c3QgYmUgYW4gaW50ZWdlcilcIik7aWYoZT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUil0aHJvdyBuZXcgRXJyb3IoXCJpbnRlZ2VyIHZhbHVlIG91dCBvZiBzYWZlIHJhbmdlXCIpO2Zvcih2YXIgdD0xNTt0Pj0wOy0tdCl0aGlzLl9jb3VudGVyW3RdPWUlMjU2LGU9cGFyc2VJbnQoZS8yNTYpfXNldEJ5dGVzKGUpe2lmKDE2IT0oZT1HdChlLCEwKSkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgY291bnRlciBieXRlcyBzaXplIChtdXN0IGJlIDE2IGJ5dGVzKVwiKTt0aGlzLl9jb3VudGVyPWV9aW5jcmVtZW50KCl7Zm9yKHZhciBlPTE1O2U+PTA7ZS0tKXtpZigyNTUhPT10aGlzLl9jb3VudGVyW2VdKXt0aGlzLl9jb3VudGVyW2VdKys7YnJlYWt9dGhpcy5fY291bnRlcltlXT0wfX19Y2xhc3MgQW57Y29uc3RydWN0b3IoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBBbikpdGhyb3cgRXJyb3IoXCJBRVMgbXVzdCBiZSBpbnN0YW5pdGF0ZWQgd2l0aCBgbmV3YFwiKTt0aGlzLmRlc2NyaXB0aW9uPVwiQ291bnRlclwiLHRoaXMubmFtZT1cImN0clwiLHQgaW5zdGFuY2VvZiBrbnx8KHQ9bmV3IGtuKHQpKSx0aGlzLl9jb3VudGVyPXQsdGhpcy5fcmVtYWluaW5nQ291bnRlcj1udWxsLHRoaXMuX3JlbWFpbmluZ0NvdW50ZXJJbmRleD0xNix0aGlzLl9hZXM9bmV3IHduKGUpfWVuY3J5cHQoZSl7Zm9yKHZhciB0PUd0KGUsITApLG49MDtuPHQubGVuZ3RoO24rKykxNj09PXRoaXMuX3JlbWFpbmluZ0NvdW50ZXJJbmRleCYmKHRoaXMuX3JlbWFpbmluZ0NvdW50ZXI9dGhpcy5fYWVzLmVuY3J5cHQodGhpcy5fY291bnRlci5fY291bnRlciksdGhpcy5fcmVtYWluaW5nQ291bnRlckluZGV4PTAsdGhpcy5fY291bnRlci5pbmNyZW1lbnQoKSksdFtuXV49dGhpcy5fcmVtYWluaW5nQ291bnRlclt0aGlzLl9yZW1haW5pbmdDb3VudGVySW5kZXgrK107cmV0dXJuIHR9ZGVjcnlwdChlKXtyZXR1cm4gdGhpcy5lbmNyeXB0KGUpfX12YXIgQ249e0FFUzp3bixDb3VudGVyOmtuLE1vZGVPZk9wZXJhdGlvbjp7ZWNiOnZuLGNiYzpJbixjZmI6U24sb2ZiOmJuLGN0cjpBbn0sdXRpbHM6e2hleDplbix1dGY4Olp0fSxwYWRkaW5nOntwa2NzNzp7cGFkOmZ1bmN0aW9uKGUpe3ZhciB0PTE2LShlPUd0KGUsITApKS5sZW5ndGglMTYsbj1ZdChlLmxlbmd0aCt0KTtRdChlLG4pO2Zvcih2YXIgcz1lLmxlbmd0aDtzPG4ubGVuZ3RoO3MrKyluW3NdPXQ7cmV0dXJuIG59LHN0cmlwOmZ1bmN0aW9uKGUpe2lmKChlPUd0KGUsITApKS5sZW5ndGg8MTYpdGhyb3cgbmV3IEVycm9yKFwiUEtDUyM3IGludmFsaWQgbGVuZ3RoXCIpO3ZhciB0PWVbZS5sZW5ndGgtMV07aWYodD4xNil0aHJvdyBuZXcgRXJyb3IoXCJQS0NTIzcgcGFkZGluZyBieXRlIG91dCBvZiByYW5nZVwiKTtmb3IodmFyIG49ZS5sZW5ndGgtdCxzPTA7czx0O3MrKylpZihlW24rc10hPT10KXRocm93IG5ldyBFcnJvcihcIlBLQ1MjNyBpbnZhbGlkIHBhZGRpbmcgYnl0ZVwiKTt2YXIgcj1ZdChuKTtyZXR1cm4gUXQoZSxyLDAsMCxuKSxyfX19LF9hcnJheVRlc3Q6e2NvZXJjZUFycmF5Okd0LGNyZWF0ZUFycmF5Oll0LGNvcHlBcnJheTpRdH19O2Z1bmN0aW9uIFBuKGUsdCxuKXtjb25zdCBzPW5ldyBVaW50OEFycmF5KHVuaS5iYXNlNjRUb0FycmF5QnVmZmVyKHQpKSxyPUNuLnV0aWxzLnV0ZjgudG9CeXRlcyhuKSxpPUNuLnV0aWxzLnV0ZjgudG9CeXRlcyhlKSxvPW5ldyBDbi5Nb2RlT2ZPcGVyYXRpb24uY2JjKHMsciksYT1Dbi5wYWRkaW5nLnBrY3M3LnBhZChpKSxjPW8uZW5jcnlwdChhKTtyZXR1cm4gdW5pLmFycmF5QnVmZmVyVG9CYXNlNjQoYyl9Y29uc3QgVG49e2NvZGU6MmU0LG1lc3NhZ2U6XCJTeXN0ZW0gZXJyb3JcIn0seG49e2NvZGU6MjAxMDEsbWVzc2FnZTpcIkludmFsaWQgY2xpZW50XCJ9LE9uPXtjb2RlOjIwMTAyLG1lc3NhZ2U6XCJHZXQgZW5jcnlwdCBrZXkgZmFpbGVkXCJ9LEVuPXsxMDAwMTpcIlNlY3VyZSBuZXR3b3JrIGlzIG5vdCBzdXBwb3J0ZWQgb24gY3VycmVudCBwbGF5Z3JvdW5kIG9yIHVuaW1wc2RrXCIsMTAwMDM6XCJDb25maWcgbWlzc2luZyBpbiBjdXJyZW50IGFwcC4gSWYgdGhlIHByb2JsZW0gcGVzaXN0LCBwbGVhc2UgY29udGFjdCBEQ2xvdWQuXCIsMTAwMDk6XCJFbmNyeXB0IHBheWxvYWQgZmFpbGVkXCIsMTAwMTA6XCJEZWNyeXB0IHJlc3BvbnNlIGZhaWxlZFwifTtmdW5jdGlvbiBMbihlKXtjb25zdHtlcnJTdWJqZWN0OnQsc3ViamVjdDpuLGVyckNvZGU6cyxlcnJNc2c6cixjb2RlOmksbWVzc2FnZTpvLGNhdXNlOmF9PWV8fHt9O3JldHVybiBuZXcgdGUoe3N1YmplY3Q6dHx8bnx8XCJ1bmktc2VjdXJlLW5ldHdvcmtcIixjb2RlOnN8fGl8fFRuLmNvZGUsbWVzc2FnZTpyfHxvLGNhdXNlOmF9KX1sZXQgUm4sVW4sTm49bnVsbDtjbGFzcyBEbiBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuY2xpZW50VHlwZT1cIm1wLXdlaXhpblwiLHRoaXMudXNlckVuY3J5cHRLZXk9bnVsbH1pc0xvZ2luKCl7cmV0dXJuISF0aGlzLnNjb3BlZEdsb2JhbENhY2hlLm1wV2VpeGluQ29kZXx8ISF0aGlzLnNjb3BlZEdsb2JhbENhY2hlLm1wV2VpeGluT3BlbmlkfWFzeW5jIHByZXBhcmUoKXtpZighdGhpcy5pc0xvZ2luKCkpe2lmKCF0aGlzLnNjb3BlZEdsb2JhbENhY2hlLmluaXRQcm9taXNlKXRocm93IG5ldyBFcnJvcihcImB1bmlDbG91ZC5pbml0U2VjdXJlTmV0d29ya0J5V2VpeGluYCBoYXMgbm90IHlldCBiZWVuIGNhbGxlZFwiKTtpZihhd2FpdCB0aGlzLnNjb3BlZEdsb2JhbENhY2hlLmluaXRQcm9taXNlLCF0aGlzLmlzTG9naW4oKSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmlDbG91ZC5pbml0U2VjdXJlTmV0d29ya0J5V2VpeGluYCBoYXMgbm90IHlldCBiZWVuIGNhbGxlZCBvciBzdWNjZXNzZnVsbHkgZXhjdXRlZFwiKX19YXN5bmMgZ2V0VXNlckVuY3J5cHRLZXkoKXtpZih0aGlzLnVzZXJFbmNyeXB0S2V5KXJldHVybiB0aGlzLnVzZXJFbmNyeXB0S2V5O2lmKE5uJiZObi5leHBpcmVUaW1lKXtjb25zdCBlPURhdGUubm93KCk7aWYoTm4uZXhwaXJlVGltZS1lPjApcmV0dXJuIHRoaXMudXNlckVuY3J5cHRLZXk9Tm4sdGhpcy51c2VyRW5jcnlwdEtleX1yZXR1cm4gbmV3IFByb21pc2UoKChlLHQpPT57dW5pLmdldFVzZXJDcnlwdG9NYW5hZ2VyKCkuZ2V0TGF0ZXN0VXNlcktleSh7c3VjY2Vzczp0PT57Tm49dCx0aGlzLnVzZXJFbmNyeXB0S2V5PXQsZSh0aGlzLnVzZXJFbmNyeXB0S2V5KX0sZmFpbDplPT57dChMbih7Li4uT24sY2F1c2U6ZX0pKX19KX0pKX1nZXRXeEFwcElkKCl7cmV0dXJuIHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtLmFwcElkfWFzeW5jIHBsYXRmb3JtR2V0U2lnbk9wdGlvbigpe2NvbnN0e2VuY3J5cHRLZXk6ZSxpdjp0LHZlcnNpb246bn09YXdhaXQgdGhpcy5nZXRVc2VyRW5jcnlwdEtleSgpO3JldHVybnt2ZXJpZnlDbGllbnRTaWduOlBuKEpTT04uc3RyaW5naWZ5KHtkYXRhOkpTT04uc3RyaW5naWZ5KHt9KSxhcHBJZDp0aGlzLmFwcElkLGRldmljZUlkOnRoaXMuZGV2aWNlSWQsd3hBcHBJZDp0aGlzLmdldFd4QXBwSWQoKSxzaW11bGF0b3I6XCJkZXZ0b29sc1wiPT09Y2UoKS5wbGF0Zm9ybSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLGUsdCksZW5jcnlwdEtleUlkOm4sbXBXZWl4aW5Db2RlOnRoaXMuc2NvcGVkR2xvYmFsQ2FjaGUubXBXZWl4aW5Db2RlLG1wV2VpeGluT3BlbmlkOnRoaXMuc2NvcGVkR2xvYmFsQ2FjaGUubXBXZWl4aW5PcGVuaWR9fWFzeW5jIHBsYXRmb3JtRW5jcnlwdERhdGEoZSl7Y29uc3R7ZW5jcnlwdEtleTp0LGl2Om4sdmVyc2lvbjpzfT1hd2FpdCB0aGlzLmdldFVzZXJFbmNyeXB0S2V5KCkscj17c2VjcmV0VHlwZTp0aGlzLnNlY3JldFR5cGUsZW5jcnlwdEtleUlkOnMsbXBXZWl4aW5Db2RlOnRoaXMuc2NvcGVkR2xvYmFsQ2FjaGUubXBXZWl4aW5Db2RlLG1wV2VpeGluT3BlbmlkOnRoaXMuc2NvcGVkR2xvYmFsQ2FjaGUubXBXZWl4aW5PcGVuaWR9O3JldHVybiB0aGlzLnNlY3JldFR5cGU9PT1XdD97Y29udGVudDplLF91bmlDbG91ZE9wdGlvbnM6cn06e2NvbnRlbnQ6UG4oSlNPTi5zdHJpbmdpZnkoe2RhdGE6SlNPTi5zdHJpbmdpZnkoZSksYXBwSWQ6dGhpcy5hcHBJZCxkZXZpY2VJZDp0aGlzLmRldmljZUlkLHd4QXBwSWQ6dGhpcy5nZXRXeEFwcElkKCksc2ltdWxhdG9yOlwiZGV2dG9vbHNcIj09PWNlKCkucGxhdGZvcm0sdGltZXN0YW1wOkRhdGUubm93KCl9KSx0LG4pLF91bmlDbG91ZE9wdGlvbnM6cn19YXN5bmMgcGxhdGZvcm1EZWNyeXB0UmVzdWx0KGUpe2NvbnN0e2NvbnRlbnQ6dH09ZSx7ZW5jcnlwdEtleTpuLGl2OnN9PWF3YWl0IHRoaXMuZ2V0VXNlckVuY3J5cHRLZXkoKTtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbihlLHQsbil7Y29uc3Qgcz1uZXcgVWludDhBcnJheSh1bmkuYmFzZTY0VG9BcnJheUJ1ZmZlcihlKSkscj1uZXcgVWludDhBcnJheSh1bmkuYmFzZTY0VG9BcnJheUJ1ZmZlcih0KSksaT1Dbi51dGlscy51dGY4LnRvQnl0ZXMobiksbz1uZXcgQ24uTW9kZU9mT3BlcmF0aW9uLmNiYyhyLGkpLGE9Q24ucGFkZGluZy5wa2NzNy5zdHJpcChvLmRlY3J5cHQocykpO3JldHVybiBDbi51dGlscy51dGY4LmZyb21CeXRlcyhhKX0odCxuLHMpKX1pc0NsaWVudEtleU5vdEZvdW5kKCl7cmV0dXJuITF9fWZ1bmN0aW9uIE1uKGUpe2NvbnN0IHQ9W1wiaGFzQ2xpZW50S2V5XCIsXCJlbmNyeXB0R2V0Q2xpZW50S2V5UGF5bG9hZFwiLFwic2V0Q2xpZW50S2V5XCIsXCJlbmNyeXB0XCIsXCJkZWNyeXB0XCJdLG49e307Zm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2NvbnN0IHI9dFtzXTtuW3JdPWZ1bmN0aW9uKC4uLnQpe3JldHVybiBuZXcgUHJvbWlzZSgoKG4scyk9PntcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW3JdP2Vbcl0oLi4udCwoZnVuY3Rpb24oe3R5cGU6ZSxkYXRhOnQsZXJyQ29kZTpyLGVyck1zZzppLGVyclN1YmplY3Q6byxtZXNzYWdlOmF9PXt9KXtcInN1Y2Nlc3NcIj09PWU/bih0KTpzKExuKHtlcnJDb2RlOnIsZXJyTXNnOkVuW3JdfHxpfHxhLGVyclN1YmplY3Q6b30pKX0pKTpzKExuKHttZXNzYWdlOlwi6K+35qOA5p+lbWFuaWZlc3QuanNvbuWGheaYr+WQpuW8gOWQr+WuieWFqOe9kee7nOaooeWdl++8jOWPpuWkluazqOaEj+agh+WHhuWfuuW6p+S4jeaUr+aMgeWuieWFqOe9kee7nOaooeWdl1wifSkpfSkpfX1yZXR1cm4gbn1jbGFzcyBxbiBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuY2xpZW50VHlwZT1cImFwcFwiLHRoaXMuYXBwVXRpbHM9ey4uLk1uKHVuaS5yZXF1aXJlTmF0aXZlUGx1Z2luKFwicGx1c1wiKSl9LHRoaXMuc3lzdGVtSW5mbz1Sbnx8KFJuPWNlKCkpfWFzeW5jIGhhc0NsaWVudEtleSgpe3JldHVybiB0aGlzLl9oYXNDbGllbnRLZXk9YXdhaXQgdGhpcy5hcHBVdGlscy5oYXNDbGllbnRLZXkoe3Byb3ZpZGVyOnRoaXMucHJvdmlkZXIsc3BhY2VJZDp0aGlzLnNwYWNlSWR9KSx0aGlzLl9oYXNDbGllbnRLZXl9YXN5bmMgZ2V0QXBwQ2xpZW50S2V5KCl7Y29uc3R7ZGF0YTplLGtleTp0fT1hd2FpdCB0aGlzLmFwcFV0aWxzLmVuY3J5cHRHZXRDbGllbnRLZXlQYXlsb2FkKHtkYXRhOkpTT04uc3RyaW5naWZ5KHt9KX0pLG49KGF3YWl0IHRoaXMudW5pQ2xvdWRJbnMuY2FsbEZ1bmN0aW9uKHtuYW1lOlwiRENsb3VkLWNsaWVudERCXCIsZGF0YTp7cmVkaXJlY3RUbzpcImVuY3J5cHRpb25cIixhY3Rpb246XCJnZXRBcHBDbGllbnRLZXlcIixkYXRhOmUsa2V5OnR9fSkpLnJlc3VsdHx8e307aWYoMCE9PW4uZXJyQ29kZSl0aHJvdyBmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHRlKHtzdWJqZWN0OmUuZXJyU3ViamVjdHx8XCJ1bmktc2VjdXJlLW5ldHdvcmtcIixjb2RlOmUuZXJyQ29kZXx8ZS5jb2RlfHxUbi5jb2RlLG1lc3NhZ2U6ZS5lcnJNc2d8fGUubWVzc2FnZX0pfShuKTtjb25zdHtjbGllbnRLZXk6cyxrZXk6cn09bjthd2FpdCB0aGlzLmFwcFV0aWxzLnNldENsaWVudEtleSh7cHJvdmlkZXI6dGhpcy5wcm92aWRlcixzcGFjZUlkOnRoaXMuc3BhY2VJZCxjbGllbnRLZXk6cyxrZXk6cn0pfWFzeW5jIGVuc3VyZUNsaWVudEtleSh7Zm9yY2VVcGRhdGU6ZT0hMX09e30pe2lmKCEwIT09YXdhaXQgdGhpcy5oYXNDbGllbnRLZXkoKXx8ZSlyZXR1cm4gZSYmdGhpcy5zY29wZWRHbG9iYWxDYWNoZS5pbml0UHJvbWlzZSYmdGhpcy5zY29wZWRHbG9iYWxDYWNoZS5pbml0U3RhdHVzPT09bHx8IWUmJnRoaXMuc2NvcGVkR2xvYmFsQ2FjaGUuaW5pdFByb21pc2UmJnRoaXMuc2NvcGVkR2xvYmFsQ2FjaGUuaW5pdFN0YXR1cyE9PXB8fCh0aGlzLnNjb3BlZEdsb2JhbENhY2hlLmluaXRQcm9taXNlPXRoaXMuZ2V0QXBwQ2xpZW50S2V5KCksdGhpcy5zY29wZWRHbG9iYWxDYWNoZS5pbml0UHJvbWlzZS50aGVuKChlPT57dGhpcy5zY29wZWRHbG9iYWxDYWNoZS5pbml0U3RhdHVzPWR9KSkuY2F0Y2goKGU9Pnt0aHJvdyB0aGlzLnNjb3BlZEdsb2JhbENhY2hlLmluaXRTdGF0dXM9cCxlfSkpLHRoaXMuc2NvcGVkR2xvYmFsQ2FjaGUuaW5pdFN0YXR1cz1sKSx0aGlzLnNjb3BlZEdsb2JhbENhY2hlLmluaXRQcm9taXNlfWFzeW5jIHByZXBhcmUoe2ZvcmNlVXBkYXRlOmU9ITF9PXt9KXthd2FpdCB0aGlzLmVuc3VyZUNsaWVudEtleSh7Zm9yY2VVcGRhdGU6ZX0pfWFzeW5jIHBsYXRmb3JtR2V0U2lnbk9wdGlvbigpe2NvbnN0e2RhdGE6ZSxrZXk6dH09YXdhaXQgdGhpcy5hcHBVdGlscy5lbmNyeXB0KHtwcm92aWRlcjp0aGlzLnByb3ZpZGVyLHNwYWNlSWQ6dGhpcy5zcGFjZUlkLGRhdGE6SlNPTi5zdHJpbmdpZnkoe30pfSk7cmV0dXJue3ZlcmlmeUNsaWVudFNpZ246ZSxlbmNyeXB0S2V5SWQ6dH19YXN5bmMgcGxhdGZvcm1FbmNyeXB0RGF0YShlKXtjb25zdHtkYXRhOnQsa2V5Om59PWF3YWl0IHRoaXMuYXBwVXRpbHMuZW5jcnlwdCh7cHJvdmlkZXI6dGhpcy5wcm92aWRlcixzcGFjZUlkOnRoaXMuc3BhY2VJZCxkYXRhOkpTT04uc3RyaW5naWZ5KGUpfSkscz17c2VjcmV0VHlwZTp0aGlzLnNlY3JldFR5cGUsZW5jcnlwdEtleUlkOm59O3JldHVybiB0aGlzLnNlY3JldFR5cGU9PT1XdD97Y29udGVudDplLF91bmlDbG91ZE9wdGlvbnM6c306e2NvbnRlbnQ6dCxfdW5pQ2xvdWRPcHRpb25zOnN9fWFzeW5jIHBsYXRmb3JtRGVjcnlwdFJlc3VsdChlKXtjb25zdHtjb250ZW50OnQsX3VuaUNsb3VkT3B0aW9uczpuPXt9fT1lLHM9bi5lbmNyeXB0S2V5SWQscj1hd2FpdCB0aGlzLmFwcFV0aWxzLmRlY3J5cHQoe3Byb3ZpZGVyOnRoaXMucHJvdmlkZXIsc3BhY2VJZDp0aGlzLnNwYWNlSWQsZGF0YTp0LGtleTpzfSk7cmV0dXJuIEpTT04ucGFyc2Uoci5kYXRhKX1pc0NsaWVudEtleU5vdEZvdW5kKGU9e30pe2NvbnN0IHQ9ZS5yZXN1bHR8fHt9O3JldHVybiA3MDAwOT09PXQuZXJyQ29kZSYmXCJ1bmktc2VjdXJlLW5ldHdvcmtcIj09PXQuZXJyU3ViamVjdH19ZnVuY3Rpb24gRm4oe3NlY3JldFR5cGU6ZX09e30pe3JldHVybiBlPT09QnR8fGU9PT1XdHx8ZT09PUh0fWZ1bmN0aW9uIEtuKHtuYW1lOmUsZGF0YTp0PXt9fT17fSl7cmV0dXJuXCJhcHBcIj09PUMmJlwiRENsb3VkLWNsaWVudERCXCI9PT1lJiZcImVuY3J5cHRpb25cIj09PXQucmVkaXJlY3RUbyYmXCJnZXRBcHBDbGllbnRLZXlcIj09PXQuYWN0aW9ufWZ1bmN0aW9uIGpuKHtwcm92aWRlcjplLHNwYWNlSWQ6dCxmdW5jdGlvbk5hbWU6bn09e30pe2NvbnN0e2FwcElkOnMsdW5pUGxhdGZvcm06cixvc05hbWU6aX09Y2UoKTtsZXQgbz1yO1wiYXBwXCI9PT1yJiYobz1pKTtjb25zdCBhPWZ1bmN0aW9uKHtwcm92aWRlcjplLHNwYWNlSWQ6dH09e30pe2NvbnN0IG49QTtpZighbilyZXR1cm57fTtlPWZ1bmN0aW9uKGUpe3JldHVyblwidGVuY2VudFwiPT09ZT9cInRjYlwiOmV9KGUpO2NvbnN0IHM9bi5maW5kKChuPT5uLnByb3ZpZGVyPT09ZSYmbi5zcGFjZUlkPT09dCkpO3JldHVybiBzJiZzLmNvbmZpZ30oe3Byb3ZpZGVyOmUsc3BhY2VJZDp0fSk7aWYoIWF8fCFhLmFjY2Vzc0NvbnRyb2x8fCFhLmFjY2Vzc0NvbnRyb2wuZW5hYmxlKXJldHVybiExO2NvbnN0IGM9YS5hY2Nlc3NDb250cm9sLmZ1bmN0aW9ufHx7fSx1PU9iamVjdC5rZXlzKGMpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4hMDtjb25zdCBoPWZ1bmN0aW9uKGUsdCl7bGV0IG4scyxyO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBvPWVbaV07byE9PXQ/XCIqXCIhPT1vP28uc3BsaXQoXCIsXCIpLm1hcCgoZT0+ZS50cmltKCkpKS5pbmRleE9mKHQpPi0xJiYocz1vKTpyPW86bj1vfXJldHVybiBufHxzfHxyfSh1LG4pO2lmKCFoKXJldHVybiExO2lmKChjW2hdfHxbXSkuZmluZCgoKGU9e30pPT5lLmFwcElkPT09cyYmKGUucGxhdGZvcm18fFwiXCIpLnRvTG93ZXJDYXNlKCk9PT1vLnRvTG93ZXJDYXNlKCkpKSlyZXR1cm4hMDt0aHJvdyBjb25zb2xlLmVycm9yKGDmraTlupTnlKhbYXBwSWQ6ICR7c30sIHBsYXRmb3JtOiAke299XeS4jeWcqOS6keerr+mFjee9rueahOWFgeiuuOiuv+mXrueahOW6lOeUqOWIl+ihqOWGhe+8jOWPguiAg++8mmh0dHBzOi8vdW5pYXBwLmRjbG91ZC5uZXQuY24vdW5pQ2xvdWQvc2VjdXJlLW5ldHdvcmsuaHRtbCN2ZXJpZnktY2xpZW50YCksTG4oeG4pfWZ1bmN0aW9uICRuKHtmdW5jdGlvbk5hbWU6ZSxyZXN1bHQ6dCxsb2dQdmQ6bn0pe2lmKFMmJnRoaXMuX19kZXZfXy5kZWJ1Z0xvZyYmdCYmdC5yZXF1ZXN0SWQpe2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkoe3NwYWNlSWQ6dGhpcy5jb25maWcuc3BhY2VJZCxmdW5jdGlvbk5hbWU6ZSxyZXF1ZXN0SWQ6dC5yZXF1ZXN0SWR9KTtjb25zb2xlLmxvZyhgWyR7bn0tcmVxdWVzdF0ke3N9Wy8ke259LXJlcXVlc3RdYCl9fWZ1bmN0aW9uIEJuKGUpe2NvbnN0IHQ9ZS5jYWxsRnVuY3Rpb24sbj1mdW5jdGlvbihuKXtjb25zdCBzPW4ubmFtZTtuLmRhdGE9RHQuY2FsbChlLHtkYXRhOm4uZGF0YX0pO2NvbnN0IHI9e2FsaXl1bjpcImFsaXl1blwiLHRlbmNlbnQ6XCJ0Y2JcIix0Y2I6XCJ0Y2JcIixhbGlwYXk6XCJhbGlwYXlcIn1bdGhpcy5jb25maWcucHJvdmlkZXJdLGk9Rm4obiksbz1LbihuKSxhPWl8fG87cmV0dXJuIHQuY2FsbCh0aGlzLG4pLnRoZW4oKGU9PihlLmVyckNvZGU9MCwhYSYmJG4uY2FsbCh0aGlzLHtmdW5jdGlvbk5hbWU6cyxyZXN1bHQ6ZSxsb2dQdmQ6cn0pLFByb21pc2UucmVzb2x2ZShlKSkpLChlPT4oIWEmJiRuLmNhbGwodGhpcyx7ZnVuY3Rpb25OYW1lOnMscmVzdWx0OmUsbG9nUHZkOnJ9KSxlJiZlLm1lc3NhZ2UmJihlLm1lc3NhZ2U9ZnVuY3Rpb24oe21lc3NhZ2U6ZT1cIlwiLGV4dHJhSW5mbzp0PXt9LGZvcm1hdHRlcjpuPVtdfT17fSl7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0e3J1bGU6cixjb250ZW50OmksbW9kZTpvfT1uW3NdLGE9ZS5tYXRjaChyKTtpZighYSljb250aW51ZTtsZXQgYz1pO2ZvcihsZXQgZT0xO2U8YS5sZW5ndGg7ZSsrKWM9anQoYyxgeyQke2V9fWAsYVtlXSk7Zm9yKGNvbnN0IGUgaW4gdCljPWp0KGMsYHske2V9fWAsdFtlXSk7cmV0dXJuXCJyZXBsYWNlXCI9PT1vP2M6ZStjfXJldHVybiBlfSh7bWVzc2FnZTpgWyR7bi5uYW1lfV06ICR7ZS5tZXNzYWdlfWAsZm9ybWF0dGVyOnF0LGV4dHJhSW5mbzp7ZnVuY3Rpb25OYW1lOnN9fSkpLFByb21pc2UucmVqZWN0KGUpKSkpfTtlLmNhbGxGdW5jdGlvbj1mdW5jdGlvbih0KXtjb25zdHtwcm92aWRlcjpzLHNwYWNlSWQ6cn09ZS5jb25maWcsaT10Lm5hbWU7bGV0IG8sYTtpZih0LmRhdGE9dC5kYXRhfHx7fSxTJiZlLl9fZGV2X18uZGVidWdJbmZvJiYhZS5fX2Rldl9fLmRlYnVnSW5mby5mb3JjZVJlbW90ZSYmVD8oZS5fY2FsbENsb3VkRnVuY3Rpb258fChlLl9jYWxsQ2xvdWRGdW5jdGlvbj1uLGUuX2NhbGxMb2NhbEZ1bmN0aW9uPU10KSxvPU10KTpvPW4sbz1vLmJpbmQoZSksS24odCkpYT1uLmNhbGwoZSx0KTtlbHNlIGlmKGZ1bmN0aW9uKHtuYW1lOmUsZGF0YTp0PXt9fSl7cmV0dXJuXCJtcC13ZWl4aW5cIj09PUMmJlwidW5pLWlkLWNvXCI9PT1lJiZcInNlY3VyZU5ldHdvcmtIYW5kc2hha2VCeVdlaXhpblwiPT09dC5tZXRob2R9KHQpKWE9by5jYWxsKGUsdCk7ZWxzZSBpZihGbih0KSl7YT1uZXcgVW4oe3NlY3JldFR5cGU6dC5zZWNyZXRUeXBlLHVuaUNsb3VkSW5zOmV9KS53cmFwRW5jcnlwdERhdGFDYWxsRnVuY3Rpb24obi5iaW5kKGUpKSh0KX1lbHNlIGlmKGpuKHtwcm92aWRlcjpzLHNwYWNlSWQ6cixmdW5jdGlvbk5hbWU6aX0pKXthPW5ldyBVbih7c2VjcmV0VHlwZTp0LnNlY3JldFR5cGUsdW5pQ2xvdWRJbnM6ZX0pLndyYXBWZXJpZnlDbGllbnRDYWxsRnVuY3Rpb24obi5iaW5kKGUpKSh0KX1lbHNlIGE9byh0KTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJyZXN1bHRcIix7Z2V0OigpPT4oY29uc29sZS53YXJuKFwi5b2T5YmN6L+U5Zue57uT5p6c5Li6UHJvbWlzZeexu+Wei++8jOS4jeWPr+ebtOaOpeiuv+mXruWFtnJlc3VsdOWxnuaAp++8jOivpuaDheivt+WPguiAg++8mmh0dHBzOi8vdW5pYXBwLmRjbG91ZC5uZXQuY24vdW5pQ2xvdWQvZmFxP2lkPXByb21pc2VcIikse30pfSksYS50aGVuKChlPT4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVUU0pTT05PYmplY3QmJihlLnJlc3VsdD1uZXcgVVRTSlNPTk9iamVjdChlLnJlc3VsdCkpLGUpKSl9fVVuPVwibXAtd2VpeGluXCIhPT1DJiZcImFwcFwiIT09Qz9jbGFzc3tjb25zdHJ1Y3Rvcigpe3Rocm93IExuKHttZXNzYWdlOmBQbGF0Zm9ybSAke0N9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgc2VjdXJlIG5ldHdvcmtgfSl9fTprP1wibXAtd2VpeGluXCI9PT1DP0RuOnFuOmNsYXNze2NvbnN0cnVjdG9yKCl7dGhyb3cgTG4oe21lc3NhZ2U6YFBsYXRmb3JtICR7Q30gaXMgbm90IGVuYWJsZWQsIHBsZWFzZSBjaGVjayB3aGV0aGVyIHNlY3VyZSBuZXR3b3JrIG1vZHVsZSBpcyBlbmFibGVkIGluIHlvdXIgbWFuaWZlc3QuanNvbmB9KX19O2NvbnN0IFduPVN5bWJvbChcIkNMSUVOVF9EQl9JTlRFUk5BTFwiKTtmdW5jdGlvbiBIbihlLHQpe3JldHVybiBlLnRoZW49XCJEb05vdFJldHVyblByb3h5V2l0aEFGdW5jdGlvbk5hbWVkVGhlblwiLGUuX2ludGVybmFsVHlwZT1XbixlLmluc3BlY3Q9bnVsbCxlLl9fdl9yYXc9dm9pZCAwLG5ldyBQcm94eShlLHtnZXQoZSxuLHMpe2lmKFwiX3VuaUNsaWVudFwiPT09bilyZXR1cm4gbnVsbDtpZihcInN5bWJvbFwiPT10eXBlb2YgbilyZXR1cm4gZVtuXTtpZihuIGluIGV8fFwic3RyaW5nXCIhPXR5cGVvZiBuKXtjb25zdCB0PWVbbl07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmJpbmQoZSk6dH1yZXR1cm4gdC5nZXQoZSxuLHMpfX0pfWZ1bmN0aW9uIHpuKGUpe3JldHVybntvbjoodCxuKT0+e2VbdF09ZVt0XXx8W10sZVt0XS5pbmRleE9mKG4pPi0xfHxlW3RdLnB1c2gobil9LG9mZjoodCxuKT0+e2VbdF09ZVt0XXx8W107Y29uc3Qgcz1lW3RdLmluZGV4T2Yobik7LTEhPT1zJiZlW3RdLnNwbGljZShzLDEpfX19Y29uc3QgSm49W1wiZGIuR2VvXCIsXCJkYi5jb21tYW5kXCIsXCJjb21tYW5kLmFnZ3JlZ2F0ZVwiXTtmdW5jdGlvbiBWbihlLHQpe3JldHVybiBKbi5pbmRleE9mKGAke2V9LiR7dH1gKT4tMX1mdW5jdGlvbiBHbihlKXtzd2l0Y2goZihlPXNlKGUpKSl7Y2FzZVwiYXJyYXlcIjpyZXR1cm4gZS5tYXAoKGU9PkduKGUpKSk7Y2FzZVwib2JqZWN0XCI6cmV0dXJuIGUuX2ludGVybmFsVHlwZT09PVdufHxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57ZVt0XT1HbihlW3RdKX0pKSxlO2Nhc2VcInJlZ2V4cFwiOnJldHVybnskcmVnZXhwOntzb3VyY2U6ZS5zb3VyY2UsZmxhZ3M6ZS5mbGFnc319O2Nhc2VcImRhdGVcIjpyZXR1cm57JGRhdGU6ZS50b0lTT1N0cmluZygpfTtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBZbihlKXtyZXR1cm4gZSYmZS5jb250ZW50JiZlLmNvbnRlbnQuJG1ldGhvZH1jbGFzcyBRbntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5jb250ZW50PWUsdGhpcy5wcmV2U3RhZ2U9dHx8bnVsbCx0aGlzLnVkYj1udWxsLHRoaXMuX2RhdGFiYXNlPW59dG9KU09OKCl7bGV0IGU9dGhpcztjb25zdCB0PVtlLmNvbnRlbnRdO2Zvcig7ZS5wcmV2U3RhZ2U7KWU9ZS5wcmV2U3RhZ2UsdC5wdXNoKGUuY29udGVudCk7cmV0dXJueyRkYjp0LnJldmVyc2UoKS5tYXAoKGU9Pih7JG1ldGhvZDplLiRtZXRob2QsJHBhcmFtOkduKGUuJHBhcmFtKX0pKSl9fXRvU3RyaW5nKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpfWdldEFjdGlvbigpe2NvbnN0IGU9dGhpcy50b0pTT04oKS4kZGIuZmluZCgoZT0+XCJhY3Rpb25cIj09PWUuJG1ldGhvZCkpO3JldHVybiBlJiZlLiRwYXJhbSYmZS4kcGFyYW1bMF19Z2V0Q29tbWFuZCgpe3JldHVybnskZGI6dGhpcy50b0pTT04oKS4kZGIuZmlsdGVyKChlPT5cImFjdGlvblwiIT09ZS4kbWV0aG9kKSl9fWdldCBpc0FnZ3JlZ2F0ZSgpe2xldCBlPXRoaXM7Zm9yKDtlOyl7Y29uc3QgdD1ZbihlKSxuPVluKGUucHJldlN0YWdlKTtpZihcImFnZ3JlZ2F0ZVwiPT09dCYmXCJjb2xsZWN0aW9uXCI9PT1ufHxcInBpcGVsaW5lXCI9PT10KXJldHVybiEwO2U9ZS5wcmV2U3RhZ2V9cmV0dXJuITF9Z2V0IGlzQ29tbWFuZCgpe2xldCBlPXRoaXM7Zm9yKDtlOyl7aWYoXCJjb21tYW5kXCI9PT1ZbihlKSlyZXR1cm4hMDtlPWUucHJldlN0YWdlfXJldHVybiExfWdldCBpc0FnZ3JlZ2F0ZUNvbW1hbmQoKXtsZXQgZT10aGlzO2Zvcig7ZTspe2NvbnN0IHQ9WW4oZSksbj1ZbihlLnByZXZTdGFnZSk7aWYoXCJhZ2dyZWdhdGVcIj09PXQmJlwiY29tbWFuZFwiPT09bilyZXR1cm4hMDtlPWUucHJldlN0YWdlfXJldHVybiExfWdldE5leHRTdGFnZUZuKGUpe2NvbnN0IHQ9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWG4oeyRtZXRob2Q6ZSwkcGFyYW06R24oQXJyYXkuZnJvbShhcmd1bWVudHMpKX0sdCx0Ll9kYXRhYmFzZSl9fWdldCBjb3VudCgpe3JldHVybiB0aGlzLmlzQWdncmVnYXRlP3RoaXMuZ2V0TmV4dFN0YWdlRm4oXCJjb3VudFwiKTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZW5kKFwiY291bnRcIixBcnJheS5mcm9tKGFyZ3VtZW50cykpfX1nZXQgcmVtb3ZlKCl7cmV0dXJuIHRoaXMuaXNDb21tYW5kP3RoaXMuZ2V0TmV4dFN0YWdlRm4oXCJyZW1vdmVcIik6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VuZChcInJlbW92ZVwiLEFycmF5LmZyb20oYXJndW1lbnRzKSl9fWdldCgpe3JldHVybiB0aGlzLl9zZW5kKFwiZ2V0XCIsQXJyYXkuZnJvbShhcmd1bWVudHMpKX1nZXQgYWRkKCl7cmV0dXJuIHRoaXMuaXNDb21tYW5kP3RoaXMuZ2V0TmV4dFN0YWdlRm4oXCJhZGRcIik6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VuZChcImFkZFwiLEFycmF5LmZyb20oYXJndW1lbnRzKSl9fXVwZGF0ZSgpe3JldHVybiB0aGlzLl9zZW5kKFwidXBkYXRlXCIsQXJyYXkuZnJvbShhcmd1bWVudHMpKX1lbmQoKXtyZXR1cm4gdGhpcy5fc2VuZChcImVuZFwiLEFycmF5LmZyb20oYXJndW1lbnRzKSl9Z2V0IHNldCgpe3JldHVybiB0aGlzLmlzQ29tbWFuZD90aGlzLmdldE5leHRTdGFnZUZuKFwic2V0XCIpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiSlFM56aB5q2i5L2/55Soc2V05pa55rOVXCIpfX1fc2VuZChlLHQpe2NvbnN0IG49dGhpcy5nZXRBY3Rpb24oKSxzPXRoaXMuZ2V0Q29tbWFuZCgpO2lmKHMuJGRiLnB1c2goeyRtZXRob2Q6ZSwkcGFyYW06R24odCl9KSxTKXtjb25zdCBlPXMuJGRiLmZpbmQoKGU9PlwiY29sbGVjdGlvblwiPT09ZS4kbWV0aG9kKSksdD1lJiZlLiRwYXJhbTt0JiYxPT09dC5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBlLiRwYXJhbVswXSYmZS4kcGFyYW1bMF0uaW5kZXhPZihcIixcIik+LTEmJmNvbnNvbGUud2FybihcIuajgOa1i+WIsOS9v+eUqEpRTOivreazleiBlOihqOafpeivouaXtu+8jOacquS9v+eUqGdldFRlbXDlhYjov4fmu6TkuLvooajmlbDmja7vvIzlnKjkuLvooajmlbDmja7ph4/lpKfnmoTmg4XlhrXkuIvlj6/og73kvJrmn6Xor6LnvJPmhaLjgIJcXG4tIOWmguS9leS8mOWMluivt+WPguiAg+atpOaWh+aho++8mmh0dHBzOi8vdW5pYXBwLmRjbG91ZC5uZXQuY24vdW5pQ2xvdWQvanFsP2lkPWxvb2t1cC13aXRoLXRlbXAgXFxuLSDlpoLmnpzkuLvooajmlbDmja7ph4/lvojlsI/or7flv73nlaXmraTkv6Hmga/vvIzpobnnm67lj5HooYzml7bkuI3kvJrlh7rnjrDmraTmj5DnpLrjgIJcIil9cmV0dXJuIHRoaXMuX2RhdGFiYXNlLl9jYWxsQ2xvdWRGdW5jdGlvbih7YWN0aW9uOm4sY29tbWFuZDpzfSl9fWZ1bmN0aW9uIFhuKGUsdCxuKXtyZXR1cm4gSG4obmV3IFFuKGUsdCxuKSx7Z2V0KGUsdCl7bGV0IHM9XCJkYlwiO3JldHVybiBlJiZlLmNvbnRlbnQmJihzPWUuY29udGVudC4kbWV0aG9kKSxWbihzLHQpP1huKHskbWV0aG9kOnR9LGUsbik6ZnVuY3Rpb24oKXtyZXR1cm4gWG4oeyRtZXRob2Q6dCwkcGFyYW06R24oQXJyYXkuZnJvbShhcmd1bWVudHMpKX0sZSxuKX19fSl9ZnVuY3Rpb24gWm4oe3BhdGg6ZSxtZXRob2Q6dH0pe3JldHVybiBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucGFyYW09QXJyYXkuZnJvbShhcmd1bWVudHMpfXRvSlNPTigpe3JldHVybnskbmV3RGI6Wy4uLmUubWFwKChlPT4oeyRtZXRob2Q6ZX0pKSkseyRtZXRob2Q6dCwkcGFyYW06dGhpcy5wYXJhbX1dfX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKX19fWZ1bmN0aW9uIGVzKGUsdD17fSl7cmV0dXJuIEhuKG5ldyBlKHQpLHtnZXQ6KGUsdCk9PlZuKFwiZGJcIix0KT9Ybih7JG1ldGhvZDp0fSxudWxsLGUpOmZ1bmN0aW9uKCl7cmV0dXJuIFhuKHskbWV0aG9kOnQsJHBhcmFtOkduKEFycmF5LmZyb20oYXJndW1lbnRzKSl9LG51bGwsZSl9fSl9Y2xhc3MgdHMgZXh0ZW5kcyBjbGFzc3tjb25zdHJ1Y3Rvcih7dW5pQ2xpZW50OmU9e30saXNKUUw6dD0hMX09e30pe3RoaXMuX3VuaUNsaWVudD1lLHRoaXMuX2F1dGhDYWxsQmFja3M9e30sdGhpcy5fZGJDYWxsQmFja3M9e30sZS5faXNEZWZhdWx0JiYodGhpcy5fZGJDYWxsQmFja3M9TChcIl9nbG9iYWxVbmlDbG91ZERhdGFiYXNlQ2FsbGJhY2tcIikpLHR8fCh0aGlzLmF1dGg9em4odGhpcy5fYXV0aENhbGxCYWNrcykpLHRoaXMuX2lzSlFMPXQsT2JqZWN0LmFzc2lnbih0aGlzLHpuKHRoaXMuX2RiQ2FsbEJhY2tzKSksdGhpcy5lbnY9SG4oe30se2dldDooZSx0KT0+KHskZW52OnR9KX0pLHRoaXMuR2VvPUhuKHt9LHtnZXQ6KGUsdCk9PlpuKHtwYXRoOltcIkdlb1wiXSxtZXRob2Q6dH0pfSksdGhpcy5zZXJ2ZXJEYXRlPVpuKHtwYXRoOltdLG1ldGhvZDpcInNlcnZlckRhdGVcIn0pLHRoaXMuUmVnRXhwPVpuKHtwYXRoOltdLG1ldGhvZDpcIlJlZ0V4cFwifSl9Z2V0Q2xvdWRFbnYoZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGV8fCFlLnRyaW0oKSl0aHJvdyBuZXcgRXJyb3IoXCJnZXRDbG91ZEVuduWPguaVsOmUmeivr1wiKTtyZXR1cm57JGVudjplLnJlcGxhY2UoXCIkY2xvdWRFbnZfXCIsXCJcIil9fV9jYWxsYmFjayhlLHQpe2NvbnN0IG49dGhpcy5fZGJDYWxsQmFja3M7bltlXSYmbltlXS5mb3JFYWNoKChlPT57ZSguLi50KX0pKX1fY2FsbGJhY2tBdXRoKGUsdCl7Y29uc3Qgbj10aGlzLl9hdXRoQ2FsbEJhY2tzO25bZV0mJm5bZV0uZm9yRWFjaCgoZT0+e2UoLi4udCl9KSl9bXVsdGlTZW5kKCl7Y29uc3QgZT1BcnJheS5mcm9tKGFyZ3VtZW50cyksdD1lLm1hcCgoZT0+e2NvbnN0IHQ9ZS5nZXRBY3Rpb24oKSxuPWUuZ2V0Q29tbWFuZCgpO2lmKFwiZ2V0VGVtcFwiIT09bi4kZGJbbi4kZGIubGVuZ3RoLTFdLiRtZXRob2QpdGhyb3cgbmV3IEVycm9yKFwibXVsdGlTZW5k5Y+q5pSv5oyB5a2Q5ZG95Luk5YaF5L2/55SoZ2V0VGVtcFwiKTtyZXR1cm57YWN0aW9uOnQsY29tbWFuZDpufX0pKTtyZXR1cm4gdGhpcy5fY2FsbENsb3VkRnVuY3Rpb24oe211bHRpQ29tbWFuZDp0LHF1ZXJ5TGlzdDplfSl9fXtfcGFyc2VSZXN1bHQoZSl7cmV0dXJuIHRoaXMuX2lzSlFMP2UucmVzdWx0OmV9X2NhbGxDbG91ZEZ1bmN0aW9uKHthY3Rpb246ZSxjb21tYW5kOnQsbXVsdGlDb21tYW5kOm4scXVlcnlMaXN0OnN9KXtmdW5jdGlvbiByKGUsdCl7aWYobiYmcylmb3IobGV0IG49MDtuPHMubGVuZ3RoO24rKyl7Y29uc3Qgcj1zW25dO3IudWRiJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnVkYi5zZXRSZXN1bHQmJih0P3IudWRiLnNldFJlc3VsdCh0KTpyLnVkYi5zZXRSZXN1bHQoZS5yZXN1bHQuZGF0YUxpc3Rbbl0pKX19Y29uc3QgaT10aGlzLG89dGhpcy5faXNKUUw/XCJkYXRhYmFzZUZvckpRTFwiOlwiZGF0YWJhc2VcIjtmdW5jdGlvbiBhKGUpe3JldHVybiBpLl9jYWxsYmFjayhcImVycm9yXCIsW2VdKSxNKHEobyxcImZhaWxcIiksZSkudGhlbigoKCk9Pk0ocShvLFwiY29tcGxldGVcIiksZSkpKS50aGVuKCgoKT0+KHIobnVsbCxlKSxZKGose3R5cGU6Vyxjb250ZW50OmV9KSxQcm9taXNlLnJlamVjdChlKSkpKX1jb25zdCBjPU0ocShvLFwiaW52b2tlXCIpKSx1PXRoaXMuX3VuaUNsaWVudDtyZXR1cm4gYy50aGVuKCgoKT0+dS5jYWxsRnVuY3Rpb24oe25hbWU6XCJEQ2xvdWQtY2xpZW50REJcIix0eXBlOmgsZGF0YTp7YWN0aW9uOmUsY29tbWFuZDp0LG11bHRpQ29tbWFuZDpufX0pKSkudGhlbigoZT0+e2NvbnN0e2NvZGU6dCxtZXNzYWdlOm4sdG9rZW46cyx0b2tlbkV4cGlyZWQ6YyxzeXN0ZW1JbmZvOnU9W119PWUucmVzdWx0O2lmKHUpZm9yKGxldCBlPTA7ZTx1Lmxlbmd0aDtlKyspe2NvbnN0e2xldmVsOnQsbWVzc2FnZTpuLGRldGFpbDpzfT11W2VdLHI9Y29uc29sZVtcImFwcFwiPT09QyYmXCJ3YXJuXCI9PT10P1wiZXJyb3JcIjp0XXx8Y29uc29sZS5sb2c7bGV0IGk9XCJbU3lzdGVtIEluZm9dXCIrbjtzJiYoaT1gJHtpfVxcbuivpue7huS/oeaBr++8miR7c31gKSxyKGkpfWlmKHQpe3JldHVybiBhKG5ldyB0ZSh7Y29kZTp0LG1lc3NhZ2U6bixyZXF1ZXN0SWQ6ZS5yZXF1ZXN0SWR9KSl9ZS5yZXN1bHQuZXJyQ29kZT1lLnJlc3VsdC5lcnJDb2RlfHxlLnJlc3VsdC5jb2RlLGUucmVzdWx0LmVyck1zZz1lLnJlc3VsdC5lcnJNc2d8fGUucmVzdWx0Lm1lc3NhZ2UscyYmYyYmKGllKHt0b2tlbjpzLHRva2VuRXhwaXJlZDpjfSksdGhpcy5fY2FsbGJhY2tBdXRoKFwicmVmcmVzaFRva2VuXCIsW3t0b2tlbjpzLHRva2VuRXhwaXJlZDpjfV0pLHRoaXMuX2NhbGxiYWNrKFwicmVmcmVzaFRva2VuXCIsW3t0b2tlbjpzLHRva2VuRXhwaXJlZDpjfV0pLFkoQix7dG9rZW46cyx0b2tlbkV4cGlyZWQ6Y30pKTtjb25zdCBoPVt7cHJvcDpcImFmZmVjdGVkRG9jc1wiLHRpcHM6XCJhZmZlY3RlZERvY3PkuI3lho3mjqjojZDkvb/nlKjvvIzor7fkvb/nlKhpbnNlcnRlZC9kZWxldGVkL3VwZGF0ZWQvZGF0YS5sZW5ndGjmm7/ku6NcIn0se3Byb3A6XCJjb2RlXCIsdGlwczpcImNvZGXkuI3lho3mjqjojZDkvb/nlKjvvIzor7fkvb/nlKhlcnJDb2Rl5pu/5LujXCJ9LHtwcm9wOlwibWVzc2FnZVwiLHRpcHM6XCJtZXNzYWdl5LiN5YaN5o6o6I2Q5L2/55So77yM6K+35L2/55SoZXJyTXNn5pu/5LujXCJ9XTtmb3IobGV0IHQ9MDt0PGgubGVuZ3RoO3QrKyl7Y29uc3R7cHJvcDpuLHRpcHM6c309aFt0XTtpZihuIGluIGUucmVzdWx0KXtjb25zdCB0PWUucmVzdWx0W25dO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnJlc3VsdCxuLHtnZXQ6KCk9Pihjb25zb2xlLndhcm4ocyksdCl9KX19cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNKHEobyxcInN1Y2Nlc3NcIiksZSkudGhlbigoKCk9Pk0ocShvLFwiY29tcGxldGVcIiksZSkpKS50aGVuKCgoKT0+e3IoZSxudWxsKTtjb25zdCB0PWkuX3BhcnNlUmVzdWx0KGUpO3JldHVybiBZKGose3R5cGU6Vyxjb250ZW50OnR9KSxQcm9taXNlLnJlc29sdmUodCl9KSl9KGUpfSksKGU9PnsvZmNfZnVuY3Rpb25fbm90X2ZvdW5kfEZVTkNUSU9OX05PVF9GT1VORC9nLnRlc3QoZS5tZXNzYWdlKSYmY29uc29sZS53YXJuKFwiY2xpZW50RELmnKrliJ3lp4vljJbvvIzor7flnKh3ZWLmjqfliLblj7Dkv53lrZjkuIDmrKFzY2hlbWHku6XlvIDlkK9jbGllbnREQlwiKTtyZXR1cm4gYShuZXcgdGUoe2NvZGU6ZS5jb2RlfHxcIlNZU1RFTV9FUlJPUlwiLG1lc3NhZ2U6ZS5tZXNzYWdlLHJlcXVlc3RJZDplLnJlcXVlc3RJZH0pKX0pKX19Y29uc3QgbnM9XCJ0b2tlbuaXoOaViO+8jOi3s+i9rOeZu+W9lemhtemdolwiLHNzPVwidG9rZW7ov4fmnJ/vvIzot7PovaznmbvlvZXpobXpnaJcIixycz17VE9LRU5fSU5WQUxJRF9UT0tFTl9FWFBJUkVEOnNzLFRPS0VOX0lOVkFMSURfSU5WQUxJRF9DTElFTlRJRDpucyxUT0tFTl9JTlZBTElEOm5zLFRPS0VOX0lOVkFMSURfV1JPTkdfVE9LRU46bnMsVE9LRU5fSU5WQUxJRF9BTk9OWU1PVVNfVVNFUjpuc30saXM9e1widW5pLWlkLXRva2VuLWV4cGlyZWRcIjpzcyxcInVuaS1pZC1jaGVjay10b2tlbi1mYWlsZWRcIjpucyxcInVuaS1pZC10b2tlbi1ub3QtZXhpc3RcIjpucyxcInVuaS1pZC1jaGVjay1kZXZpY2UtZmVhdHVyZS1mYWlsZWRcIjpuc307ZnVuY3Rpb24gb3MoZSx0KXtsZXQgbj1cIlwiO3JldHVybiBuPWU/YCR7ZX0vJHt0fWA6dCxuLnJlcGxhY2UoL15cXC8vLFwiXCIpfWZ1bmN0aW9uIGFzKGU9W10sdD1cIlwiKXtjb25zdCBuPVtdLHM9W107cmV0dXJuIGUuZm9yRWFjaCgoZT0+eyEwPT09ZS5uZWVkTG9naW4/bi5wdXNoKG9zKHQsZS5wYXRoKSk6ITE9PT1lLm5lZWRMb2dpbiYmcy5wdXNoKG9zKHQsZS5wYXRoKSl9KSkse25lZWRMb2dpblBhZ2U6bixub3ROZWVkTG9naW5QYWdlOnN9fWZ1bmN0aW9uIGNzKGUpe3JldHVybiBlLnNwbGl0KFwiP1wiKVswXS5yZXBsYWNlKC9eXFwvLyxcIlwiKX1mdW5jdGlvbiB1cygpe3JldHVybiBmdW5jdGlvbihlKXtsZXQgdD1lJiZlLiRwYWdlJiZlLiRwYWdlLmZ1bGxQYXRofHxcIlwiO3JldHVybiB0PyhcIi9cIiE9PXQuY2hhckF0KDApJiYodD1cIi9cIit0KSx0KTp0fShmdW5jdGlvbigpe2NvbnN0IGU9Z2V0Q3VycmVudFBhZ2VzKCk7cmV0dXJuIGVbZS5sZW5ndGgtMV19KCkpfWZ1bmN0aW9uIGhzKCl7cmV0dXJuIGNzKHVzKCkpfWZ1bmN0aW9uIGxzKGU9XCJcIix0PXt9KXtpZighZSlyZXR1cm4hMTtpZighKHQmJnQubGlzdCYmdC5saXN0Lmxlbmd0aCkpcmV0dXJuITE7Y29uc3Qgbj10Lmxpc3Qscz1jcyhlKTtyZXR1cm4gbi5zb21lKChlPT5lLnBhZ2VQYXRoPT09cykpfWNvbnN0IGRzPSEhZS51bmlJZFJvdXRlcjtjb25zdHtsb2dpblBhZ2U6cHMscm91dGVyTmVlZExvZ2luOmZzLHJlc1RvTG9naW46Z3MsbmVlZExvZ2luUGFnZTptcyxub3ROZWVkTG9naW5QYWdlOnlzLGxvZ2luUGFnZUluVGFiQmFyOl9zfT1mdW5jdGlvbih7cGFnZXM6dD1bXSxzdWJQYWNrYWdlczpuPVtdLHVuaUlkUm91dGVyOnM9e30sdGFiQmFyOnI9e319PWUpe2NvbnN0e2xvZ2luUGFnZTppLG5lZWRMb2dpbjpvPVtdLHJlc1RvTG9naW46YT0hMH09cyx7bmVlZExvZ2luUGFnZTpjLG5vdE5lZWRMb2dpblBhZ2U6dX09YXModCkse25lZWRMb2dpblBhZ2U6aCxub3ROZWVkTG9naW5QYWdlOmx9PWZ1bmN0aW9uKGU9W10pe2NvbnN0IHQ9W10sbj1bXTtyZXR1cm4gZS5mb3JFYWNoKChlPT57Y29uc3R7cm9vdDpzLHBhZ2VzOnI9W119PWUse25lZWRMb2dpblBhZ2U6aSxub3ROZWVkTG9naW5QYWdlOm99PWFzKHIscyk7dC5wdXNoKC4uLmkpLG4ucHVzaCguLi5vKX0pKSx7bmVlZExvZ2luUGFnZTp0LG5vdE5lZWRMb2dpblBhZ2U6bn19KG4pO3JldHVybntsb2dpblBhZ2U6aSxyb3V0ZXJOZWVkTG9naW46byxyZXNUb0xvZ2luOmEsbmVlZExvZ2luUGFnZTpbLi4uYywuLi5oXSxub3ROZWVkTG9naW5QYWdlOlsuLi51LC4uLmxdLGxvZ2luUGFnZUluVGFiQmFyOmxzKGkscil9fSgpO2lmKG1zLmluZGV4T2YocHMpPi0xKXRocm93IG5ldyBFcnJvcihgTG9naW4gcGFnZSBbJHtwc31dIHNob3VsZCBub3QgYmUgXCJuZWVkTG9naW5cIiwgcGxlYXNlIGNoZWNrIHlvdXIgcGFnZXMuanNvbmApO2Z1bmN0aW9uIHdzKGUpe2NvbnN0IHQ9aHMoKTtpZihcIi9cIj09PWUuY2hhckF0KDApKXJldHVybiBlO2NvbnN0W24sc109ZS5zcGxpdChcIj9cIikscj1uLnJlcGxhY2UoL15cXC8vLFwiXCIpLnNwbGl0KFwiL1wiKSxpPXQuc3BsaXQoXCIvXCIpO2kucG9wKCk7Zm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspe2NvbnN0IHQ9cltlXTtcIi4uXCI9PT10P2kucG9wKCk6XCIuXCIhPT10JiZpLnB1c2godCl9cmV0dXJuXCJcIj09PWlbMF0mJmkuc2hpZnQoKSxcIi9cIitpLmpvaW4oXCIvXCIpKyhzP1wiP1wiK3M6XCJcIil9ZnVuY3Rpb24gdnMoZSl7Y29uc3QgdD1jcyh3cyhlKSk7cmV0dXJuISh5cy5pbmRleE9mKHQpPi0xKSYmKG1zLmluZGV4T2YodCk+LTF8fGZzLnNvbWUoKHQ9PmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBSZWdFeHAodCkudGVzdChlKX0oZSx0KSkpKX1mdW5jdGlvbiBJcyh7cmVkaXJlY3Q6ZX0pe2NvbnN0IHQ9Y3MoZSksbj1jcyhwcyk7cmV0dXJuIGhzKCkhPT1uJiZ0IT09bn1mdW5jdGlvbiBTcyh7YXBpOmUscmVkaXJlY3Q6dH09e30pe2lmKCF0fHwhSXMoe3JlZGlyZWN0OnR9KSlyZXR1cm47Y29uc3Qgbj1mdW5jdGlvbihlLHQpe3JldHVyblwiL1wiIT09ZS5jaGFyQXQoMCkmJihlPVwiL1wiK2UpLHQ/ZS5pbmRleE9mKFwiP1wiKT4tMT9lK2AmdW5pSWRSZWRpcmVjdFVybD0ke2VuY29kZVVSSUNvbXBvbmVudCh0KX1gOmUrYD91bmlJZFJlZGlyZWN0VXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHQpfWA6ZX0ocHMsdCk7X3M/XCJuYXZpZ2F0ZVRvXCIhPT1lJiZcInJlZGlyZWN0VG9cIiE9PWV8fChlPVwic3dpdGNoVGFiXCIpOlwic3dpdGNoVGFiXCI9PT1lJiYoZT1cIm5hdmlnYXRlVG9cIik7Y29uc3Qgcz17bmF2aWdhdGVUbzp1bmkubmF2aWdhdGVUbyxyZWRpcmVjdFRvOnVuaS5yZWRpcmVjdFRvLHN3aXRjaFRhYjp1bmkuc3dpdGNoVGFiLHJlTGF1bmNoOnVuaS5yZUxhdW5jaH07c2V0VGltZW91dCgoKCk9PntzW2VdKHt1cmw6bn0pfSksMCl9ZnVuY3Rpb24gYnMoe3VybDplfT17fSl7Y29uc3QgdD17YWJvcnRMb2dpblBhZ2VKdW1wOiExLGF1dG9Ub0xvZ2luUGFnZTohMX0sbj1mdW5jdGlvbigpe2NvbnN0e3Rva2VuOmUsdG9rZW5FeHBpcmVkOnR9PXJlKCk7bGV0IG47aWYoZSl7aWYodDxEYXRlLm5vdygpKXtjb25zdCBlPVwidW5pLWlkLXRva2VuLWV4cGlyZWRcIjtuPXtlcnJDb2RlOmUsZXJyTXNnOmlzW2VdfX19ZWxzZXtjb25zdCBlPVwidW5pLWlkLWNoZWNrLXRva2VuLWZhaWxlZFwiO249e2VyckNvZGU6ZSxlcnJNc2c6aXNbZV19fXJldHVybiBufSgpO2lmKHZzKGUpJiZuKXtuLnVuaUlkUmVkaXJlY3RVcmw9ZTtpZihKKCQpLmxlbmd0aD4wKXJldHVybiBzZXRUaW1lb3V0KCgoKT0+e1koJCxuKX0pLDApLHQuYWJvcnRMb2dpblBhZ2VKdW1wPSEwLHQ7dC5hdXRvVG9Mb2dpblBhZ2U9ITB9cmV0dXJuIHR9ZnVuY3Rpb24ga3MoKXshZnVuY3Rpb24oKXtjb25zdCBlPXVzKCkse2Fib3J0TG9naW5QYWdlSnVtcDp0LGF1dG9Ub0xvZ2luUGFnZTpufT1icyh7dXJsOmV9KTt0fHxuJiZTcyh7YXBpOlwicmVkaXJlY3RUb1wiLHJlZGlyZWN0OmV9KX0oKTtjb25zdCBlPVtcIm5hdmlnYXRlVG9cIixcInJlZGlyZWN0VG9cIixcInJlTGF1bmNoXCIsXCJzd2l0Y2hUYWJcIl07Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG49ZVt0XTt1bmkuYWRkSW50ZXJjZXB0b3Iobix7aW52b2tlKGUpe2NvbnN0e2Fib3J0TG9naW5QYWdlSnVtcDp0LGF1dG9Ub0xvZ2luUGFnZTpzfT1icyh7dXJsOmUudXJsfSk7cmV0dXJuIHQ/ZTpzPyhTcyh7YXBpOm4scmVkaXJlY3Q6d3MoZS51cmwpfSksITEpOmV9fSl9fWZ1bmN0aW9uIEFzKCl7dGhpcy5vblJlc3BvbnNlKChlPT57Y29uc3R7dHlwZTp0LGNvbnRlbnQ6bn09ZTtsZXQgcz0hMTtzd2l0Y2godCl7Y2FzZVwiY2xvdWRvYmplY3RcIjpzPWZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlKXJldHVybiExO2NvbnN0e2VyckNvZGU6dH09ZXx8e307cmV0dXJuIHQgaW4gaXN9KG4pO2JyZWFrO2Nhc2VcImNsaWVudGRiXCI6cz1mdW5jdGlvbihlKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZSlyZXR1cm4hMTtjb25zdHtlcnJDb2RlOnR9PWV8fHt9O3JldHVybiB0IGluIHJzfShuKX1zJiZmdW5jdGlvbihlPXt9KXtjb25zdCB0PUooJCk7WigpLnRoZW4oKCgpPT57Y29uc3Qgbj11cygpO2lmKG4mJklzKHtyZWRpcmVjdDpufSkpcmV0dXJuIHQubGVuZ3RoPjA/WSgkLE9iamVjdC5hc3NpZ24oe3VuaUlkUmVkaXJlY3RVcmw6bn0sZSkpOnZvaWQocHMmJlNzKHthcGk6XCJuYXZpZ2F0ZVRvXCIscmVkaXJlY3Q6bn0pKX0pKX0obil9KSl9ZnVuY3Rpb24gQ3MoZSl7IWZ1bmN0aW9uKGUpe2Uub25SZXNwb25zZT1mdW5jdGlvbihlKXtWKGosZSl9LGUub2ZmUmVzcG9uc2U9ZnVuY3Rpb24oZSl7RyhqLGUpfX0oZSksZnVuY3Rpb24oZSl7ZS5vbk5lZWRMb2dpbj1mdW5jdGlvbihlKXtWKCQsZSl9LGUub2ZmTmVlZExvZ2luPWZ1bmN0aW9uKGUpe0coJCxlKX0sZHMmJihMKFwiX2dsb2JhbFVuaUNsb3VkU3RhdHVzXCIpLm5lZWRMb2dpbkluaXR8fChMKFwiX2dsb2JhbFVuaUNsb3VkU3RhdHVzXCIpLm5lZWRMb2dpbkluaXQ9ITAsWigpLnRoZW4oKCgpPT57a3MuY2FsbChlKX0pKSxncyYmQXMuY2FsbChlKSkpfShlKSxmdW5jdGlvbihlKXtlLm9uUmVmcmVzaFRva2VuPWZ1bmN0aW9uKGUpe1YoQixlKX0sZS5vZmZSZWZyZXNoVG9rZW49ZnVuY3Rpb24oZSl7RyhCLGUpfX0oZSl9bGV0IFBzO2NvbnN0IFRzPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIix4cz0vXig/OltBLVphLXpcXGQrL117NH0pKj8oPzpbQS1aYS16XFxkKy9dezJ9KD86PT0pP3xbQS1aYS16XFxkKy9dezN9PT8pPyQvO2Z1bmN0aW9uIE9zKCl7Y29uc3QgZT1yZSgpLnRva2VufHxcIlwiLHQ9ZS5zcGxpdChcIi5cIik7aWYoIWV8fDMhPT10Lmxlbmd0aClyZXR1cm57dWlkOm51bGwscm9sZTpbXSxwZXJtaXNzaW9uOltdLHRva2VuRXhwaXJlZDowfTtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKChzPXRbMV0sZGVjb2RlVVJJQ29tcG9uZW50KFBzKHMpLnNwbGl0KFwiXCIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuXCIlXCIrKFwiMDBcIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9KSkuam9pbihcIlwiKSkpKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoXCLojrflj5blvZPliY3nlKjmiLfkv6Hmga/lh7rplJnvvIzor6bnu4bplJnor6/kv6Hmga/kuLrvvJpcIitlLm1lc3NhZ2UpfXZhciBzO3JldHVybiBuLnRva2VuRXhwaXJlZD0xZTMqbi5leHAsZGVsZXRlIG4uZXhwLGRlbGV0ZSBuLmlhdCxufVBzPVwiZnVuY3Rpb25cIiE9dHlwZW9mIGF0b2I/ZnVuY3Rpb24oZSl7aWYoZT1TdHJpbmcoZSkucmVwbGFjZSgvW1xcdFxcblxcZlxcciBdKy9nLFwiXCIpLCF4cy50ZXN0KGUpKXRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhdG9iJyBvbiAnV2luZG93JzogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC5cIik7dmFyIHQ7ZSs9XCI9PVwiLnNsaWNlKDItKDMmZS5sZW5ndGgpKTtmb3IodmFyIG4scyxyPVwiXCIsaT0wO2k8ZS5sZW5ndGg7KXQ9VHMuaW5kZXhPZihlLmNoYXJBdChpKyspKTw8MTh8VHMuaW5kZXhPZihlLmNoYXJBdChpKyspKTw8MTJ8KG49VHMuaW5kZXhPZihlLmNoYXJBdChpKyspKSk8PDZ8KHM9VHMuaW5kZXhPZihlLmNoYXJBdChpKyspKSkscis9NjQ9PT1uP1N0cmluZy5mcm9tQ2hhckNvZGUodD4+MTYmMjU1KTo2ND09PXM/U3RyaW5nLmZyb21DaGFyQ29kZSh0Pj4xNiYyNTUsdD4+OCYyNTUpOlN0cmluZy5mcm9tQ2hhckNvZGUodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0KTtyZXR1cm4gcn06YXRvYjt2YXIgRXM9bigoZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtjb25zdCBuPVwiY2hvb3NlQW5kVXBsb2FkRmlsZTpva1wiLHM9XCJjaG9vc2VBbmRVcGxvYWRGaWxlOmZhaWxcIjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUudGVtcEZpbGVzLmZvckVhY2goKChlLG4pPT57ZS5uYW1lfHwoZS5uYW1lPWUucGF0aC5zdWJzdHJpbmcoZS5wYXRoLmxhc3RJbmRleE9mKFwiL1wiKSsxKSksdCYmKGUuZmlsZVR5cGU9dCksZS5jbG91ZFBhdGg9RGF0ZS5ub3coKStcIl9cIituK2UubmFtZS5zdWJzdHJpbmcoZS5uYW1lLmxhc3RJbmRleE9mKFwiLlwiKSl9KSksZS50ZW1wRmlsZVBhdGhzfHwoZS50ZW1wRmlsZVBhdGhzPWUudGVtcEZpbGVzLm1hcCgoZT0+ZS5wYXRoKSkpLGV9ZnVuY3Rpb24gaShlLHQse29uQ2hvb3NlRmlsZTpzLG9uVXBsb2FkUHJvZ3Jlc3M6cn0pe3JldHVybiB0LnRoZW4oKGU9PntpZihzKXtjb25zdCB0PXMoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpLnRoZW4oKHQ9PnZvaWQgMD09PXQ/ZTp0KSl9cmV0dXJuIGV9KSkudGhlbigodD0+ITE9PT10P3tlcnJNc2c6bix0ZW1wRmlsZVBhdGhzOltdLHRlbXBGaWxlczpbXX06ZnVuY3Rpb24oZSx0LHM9NSxyKXsodD1PYmplY3QuYXNzaWduKHt9LHQpKS5lcnJNc2c9bjtjb25zdCBpPXQudGVtcEZpbGVzLG89aS5sZW5ndGg7bGV0IGE9MDtyZXR1cm4gbmV3IFByb21pc2UoKG49Pntmb3IoO2E8czspYygpO2Z1bmN0aW9uIGMoKXtjb25zdCBzPWErKztpZihzPj1vKXJldHVybiB2b2lkKCFpLmZpbmQoKGU9PiFlLnVybCYmIWUuZXJyTXNnKSkmJm4odCkpO2NvbnN0IHU9aVtzXTtlLnVwbG9hZEZpbGUoe3Byb3ZpZGVyOnUucHJvdmlkZXIsZmlsZVBhdGg6dS5wYXRoLGNsb3VkUGF0aDp1LmNsb3VkUGF0aCxmaWxlVHlwZTp1LmZpbGVUeXBlLGNsb3VkUGF0aEFzUmVhbFBhdGg6dS5jbG91ZFBhdGhBc1JlYWxQYXRoLG9uVXBsb2FkUHJvZ3Jlc3MoZSl7ZS5pbmRleD1zLGUudGVtcEZpbGU9dSxlLnRlbXBGaWxlUGF0aD11LnBhdGgsciYmcihlKX19KS50aGVuKChlPT57dS51cmw9ZS5maWxlSUQsczxvJiZjKCl9KSkuY2F0Y2goKGU9Pnt1LmVyck1zZz1lLmVyck1zZ3x8ZS5tZXNzYWdlLHM8byYmYygpfSkpfX0pKX0oZSx0LDUscikpKX10LmluaXRDaG9vc2VBbmRVcGxvYWRGaWxlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0PXt0eXBlOlwiYWxsXCJ9KXtyZXR1cm5cImltYWdlXCI9PT10LnR5cGU/aShlLGZ1bmN0aW9uKGUpe2NvbnN0e2NvdW50OnQsc2l6ZVR5cGU6bixzb3VyY2VUeXBlOmk9W1wiYWxidW1cIixcImNhbWVyYVwiXSxleHRlbnNpb246b309ZTtyZXR1cm4gbmV3IFByb21pc2UoKChlLGEpPT57dW5pLmNob29zZUltYWdlKHtjb3VudDp0LHNpemVUeXBlOm4sc291cmNlVHlwZTppLGV4dGVuc2lvbjpvLHN1Y2Nlc3ModCl7ZShyKHQsXCJpbWFnZVwiKSl9LGZhaWwoZSl7YSh7ZXJyTXNnOmUuZXJyTXNnLnJlcGxhY2UoXCJjaG9vc2VJbWFnZTpmYWlsXCIscyl9KX19KX0pKX0odCksdCk6XCJ2aWRlb1wiPT09dC50eXBlP2koZSxmdW5jdGlvbihlKXtjb25zdHtjYW1lcmE6dCxjb21wcmVzc2VkOm4sbWF4RHVyYXRpb246aSxzb3VyY2VUeXBlOm89W1wiYWxidW1cIixcImNhbWVyYVwiXSxleHRlbnNpb246YX09ZTtyZXR1cm4gbmV3IFByb21pc2UoKChlLGMpPT57dW5pLmNob29zZVZpZGVvKHtjYW1lcmE6dCxjb21wcmVzc2VkOm4sbWF4RHVyYXRpb246aSxzb3VyY2VUeXBlOm8sZXh0ZW5zaW9uOmEsc3VjY2Vzcyh0KXtjb25zdHt0ZW1wRmlsZVBhdGg6bixkdXJhdGlvbjpzLHNpemU6aSxoZWlnaHQ6byx3aWR0aDphfT10O2Uocih7ZXJyTXNnOlwiY2hvb3NlVmlkZW86b2tcIix0ZW1wRmlsZVBhdGhzOltuXSx0ZW1wRmlsZXM6W3tuYW1lOnQudGVtcEZpbGUmJnQudGVtcEZpbGUubmFtZXx8XCJcIixwYXRoOm4sc2l6ZTppLHR5cGU6dC50ZW1wRmlsZSYmdC50ZW1wRmlsZS50eXBlfHxcIlwiLHdpZHRoOmEsaGVpZ2h0Om8sZHVyYXRpb246cyxmaWxlVHlwZTpcInZpZGVvXCIsY2xvdWRQYXRoOlwiXCJ9XX0sXCJ2aWRlb1wiKSl9LGZhaWwoZSl7Yyh7ZXJyTXNnOmUuZXJyTXNnLnJlcGxhY2UoXCJjaG9vc2VWaWRlbzpmYWlsXCIscyl9KX19KX0pKX0odCksdCk6aShlLGZ1bmN0aW9uKGUpe2NvbnN0e2NvdW50OnQsZXh0ZW5zaW9uOm59PWU7cmV0dXJuIG5ldyBQcm9taXNlKCgoZSxpKT0+e2xldCBvPXVuaS5jaG9vc2VGaWxlO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3eCYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd3guY2hvb3NlTWVzc2FnZUZpbGUmJihvPXd4LmNob29zZU1lc3NhZ2VGaWxlKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBvKXJldHVybiBpKHtlcnJNc2c6cytcIiDor7fmjIflrpogdHlwZSDnsbvlnovvvIzor6XlubPlj7Dku4XmlK/mjIHpgInmi6kgaW1hZ2Ug5oiWIHZpZGVv44CCXCJ9KTtvKHt0eXBlOlwiYWxsXCIsY291bnQ6dCxleHRlbnNpb246bixzdWNjZXNzKHQpe2Uocih0KSl9LGZhaWwoZSl7aSh7ZXJyTXNnOmUuZXJyTXNnLnJlcGxhY2UoXCJjaG9vc2VGaWxlOmZhaWxcIixzKX0pfX0pfSkpfSh0KSx0KX19fSkpLExzPXQoRXMpO2NvbnN0IFJzPVwibWFudWFsXCI7ZnVuY3Rpb24gVXMoZSl7cmV0dXJue3Byb3BzOntsb2NhbGRhdGE6e3R5cGU6QXJyYXksZGVmYXVsdDooKT0+W119LG9wdGlvbnM6e3R5cGU6W09iamVjdCxBcnJheV0sZGVmYXVsdDooKT0+KHt9KX0sc3BhY2VJbmZvOnt0eXBlOk9iamVjdCxkZWZhdWx0OigpPT4oe30pfSxjb2xsZWN0aW9uOnt0eXBlOltTdHJpbmcsQXJyYXldLGRlZmF1bHQ6XCJcIn0sYWN0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiXCJ9LGZpZWxkOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiXCJ9LG9yZGVyYnk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJcIn0sd2hlcmU6e3R5cGU6W1N0cmluZyxPYmplY3RdLGRlZmF1bHQ6XCJcIn0scGFnZURhdGE6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJhZGRcIn0scGFnZUN1cnJlbnQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0scGFnZVNpemU6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MjB9LGdldGNvdW50Ont0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sZ2V0dHJlZTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGdldHRyZWVwYXRoOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sc3RhcnR3aXRoOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiXCJ9LGxpbWl0bGV2ZWw6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTB9LGdyb3VwYnk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJcIn0sZ3JvdXBGaWVsZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlwifSxkaXN0aW5jdDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGZvcmVpZ25LZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJcIn0sbG9hZHRpbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJhdXRvXCJ9LG1hbnVhbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxkYXRhOigpPT4oe21peGluRGF0YWNvbUxvYWRpbmc6ITEsbWl4aW5EYXRhY29tSGFzTW9yZTohMSxtaXhpbkRhdGFjb21SZXNEYXRhOltdLG1peGluRGF0YWNvbUVycm9yTWVzc2FnZTpcIlwiLG1peGluRGF0YWNvbVBhZ2U6e30sbWl4aW5EYXRhY29tRXJyb3I6bnVsbH0pLGNyZWF0ZWQoKXt0aGlzLm1peGluRGF0YWNvbVBhZ2U9e2N1cnJlbnQ6dGhpcy5wYWdlQ3VycmVudCxzaXplOnRoaXMucGFnZVNpemUsY291bnQ6MH0sdGhpcy4kd2F0Y2goKCgpPT57dmFyIGU9W107cmV0dXJuW1wicGFnZUN1cnJlbnRcIixcInBhZ2VTaXplXCIsXCJsb2NhbGRhdGFcIixcImNvbGxlY3Rpb25cIixcImFjdGlvblwiLFwiZmllbGRcIixcIm9yZGVyYnlcIixcIndoZXJlXCIsXCJnZXRvbnRcIixcImdldGNvdW50XCIsXCJnZXR0cmVlXCIsXCJncm91cGJ5XCIsXCJncm91cEZpZWxkXCIsXCJkaXN0aW5jdFwiXS5mb3JFYWNoKCh0PT57ZS5wdXNoKHRoaXNbdF0pfSkpLGV9KSwoKGUsdCk9PntpZih0aGlzLmxvYWR0aW1lPT09UnMpcmV0dXJuO2xldCBuPSExO2NvbnN0IHM9W107Zm9yKGxldCByPTI7cjxlLmxlbmd0aDtyKyspZVtyXSE9PXRbcl0mJihzLnB1c2goZVtyXSksbj0hMCk7ZVswXSE9PXRbMF0mJih0aGlzLm1peGluRGF0YWNvbVBhZ2UuY3VycmVudD10aGlzLnBhZ2VDdXJyZW50KSx0aGlzLm1peGluRGF0YWNvbVBhZ2Uuc2l6ZT10aGlzLnBhZ2VTaXplLHRoaXMub25NaXhpbkRhdGFjb21Qcm9wc0NoYW5nZShuLHMpfSkpfSxtZXRob2RzOntvbk1peGluRGF0YWNvbVByb3BzQ2hhbmdlKGUsdCl7fSxtaXhpbkRhdGFjb21FYXN5R2V0KHtnZXRvbmU6ZT0hMSxzdWNjZXNzOnQsZmFpbDpufT17fSl7dGhpcy5taXhpbkRhdGFjb21Mb2FkaW5nfHwodGhpcy5taXhpbkRhdGFjb21Mb2FkaW5nPSEwLHRoaXMubWl4aW5EYXRhY29tRXJyb3JNZXNzYWdlPVwiXCIsdGhpcy5taXhpbkRhdGFjb21FcnJvcj1udWxsLHRoaXMubWl4aW5EYXRhY29tR2V0KCkudGhlbigobj0+e3RoaXMubWl4aW5EYXRhY29tTG9hZGluZz0hMTtjb25zdHtkYXRhOnMsY291bnQ6cn09bi5yZXN1bHQ7dGhpcy5nZXRjb3VudCYmKHRoaXMubWl4aW5EYXRhY29tUGFnZS5jb3VudD1yKSx0aGlzLm1peGluRGF0YWNvbUhhc01vcmU9cy5sZW5ndGg8dGhpcy5wYWdlU2l6ZTtjb25zdCBpPWU/cy5sZW5ndGg/c1swXTp2b2lkIDA6czt0aGlzLm1peGluRGF0YWNvbVJlc0RhdGE9aSx0JiZ0KGkpfSkpLmNhdGNoKChlPT57dGhpcy5taXhpbkRhdGFjb21Mb2FkaW5nPSExLHRoaXMubWl4aW5EYXRhY29tRXJyb3JNZXNzYWdlPWUsdGhpcy5taXhpbkRhdGFjb21FcnJvcj1lLG4mJm4oZSl9KSkpfSxtaXhpbkRhdGFjb21HZXQodD17fSl7bGV0IG47dD10fHx7fSxuPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX3VuaVgmJl9fdW5pWD9lLmRhdGFiYXNlRm9ySlFMKHRoaXMuc3BhY2VJbmZvKTplLmRhdGFiYXNlKHRoaXMuc3BhY2VJbmZvKTtjb25zdCBzPXQuYWN0aW9ufHx0aGlzLmFjdGlvbjtzJiYobj1uLmFjdGlvbihzKSk7Y29uc3Qgcj10LmNvbGxlY3Rpb258fHRoaXMuY29sbGVjdGlvbjtuPUFycmF5LmlzQXJyYXkocik/bi5jb2xsZWN0aW9uKC4uLnIpOm4uY29sbGVjdGlvbihyKTtjb25zdCBpPXQud2hlcmV8fHRoaXMud2hlcmU7aSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoJiYobj1uLndoZXJlKGkpKTtjb25zdCBvPXQuZmllbGR8fHRoaXMuZmllbGQ7byYmKG49bi5maWVsZChvKSk7Y29uc3QgYT10LmZvcmVpZ25LZXl8fHRoaXMuZm9yZWlnbktleTthJiYobj1uLmZvcmVpZ25LZXkoYSkpO2NvbnN0IGM9dC5ncm91cGJ5fHx0aGlzLmdyb3VwYnk7YyYmKG49bi5ncm91cEJ5KGMpKTtjb25zdCB1PXQuZ3JvdXBGaWVsZHx8dGhpcy5ncm91cEZpZWxkO3UmJihuPW4uZ3JvdXBGaWVsZCh1KSk7ITA9PT0odm9pZCAwIT09dC5kaXN0aW5jdD90LmRpc3RpbmN0OnRoaXMuZGlzdGluY3QpJiYobj1uLmRpc3RpbmN0KCkpO2NvbnN0IGg9dC5vcmRlcmJ5fHx0aGlzLm9yZGVyYnk7aCYmKG49bi5vcmRlckJ5KGgpKTtjb25zdCBsPXZvaWQgMCE9PXQucGFnZUN1cnJlbnQ/dC5wYWdlQ3VycmVudDp0aGlzLm1peGluRGF0YWNvbVBhZ2UuY3VycmVudCxkPXZvaWQgMCE9PXQucGFnZVNpemU/dC5wYWdlU2l6ZTp0aGlzLm1peGluRGF0YWNvbVBhZ2Uuc2l6ZSxwPXZvaWQgMCE9PXQuZ2V0Y291bnQ/dC5nZXRjb3VudDp0aGlzLmdldGNvdW50LGY9dm9pZCAwIT09dC5nZXR0cmVlP3QuZ2V0dHJlZTp0aGlzLmdldHRyZWUsZz12b2lkIDAhPT10LmdldHRyZWVwYXRoP3QuZ2V0dHJlZXBhdGg6dGhpcy5nZXR0cmVlcGF0aCxtPXtnZXRDb3VudDpwfSx5PXtsaW1pdExldmVsOnZvaWQgMCE9PXQubGltaXRsZXZlbD90LmxpbWl0bGV2ZWw6dGhpcy5saW1pdGxldmVsLHN0YXJ0V2l0aDp2b2lkIDAhPT10LnN0YXJ0d2l0aD90LnN0YXJ0d2l0aDp0aGlzLnN0YXJ0d2l0aH07cmV0dXJuIGYmJihtLmdldFRyZWU9eSksZyYmKG0uZ2V0VHJlZVBhdGg9eSksbj1uLnNraXAoZCoobC0xKSkubGltaXQoZCkuZ2V0KG0pLG59fX19ZnVuY3Rpb24gTnMoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbj17fSl7bj1mdW5jdGlvbihlLHQ9e30pe3JldHVybiBlLmN1c3RvbVVJPXQuY3VzdG9tVUl8fGUuY3VzdG9tVUksZS5wYXJzZVN5c3RlbUVycm9yPXQucGFyc2VTeXN0ZW1FcnJvcnx8ZS5wYXJzZVN5c3RlbUVycm9yLE9iamVjdC5hc3NpZ24oZS5sb2FkaW5nT3B0aW9ucyx0LmxvYWRpbmdPcHRpb25zKSxPYmplY3QuYXNzaWduKGUuZXJyb3JPcHRpb25zLHQuZXJyb3JPcHRpb25zKSxcIm9iamVjdFwiPT10eXBlb2YgdC5zZWNyZXRNZXRob2RzJiYoZS5zZWNyZXRNZXRob2RzPXQuc2VjcmV0TWV0aG9kcyksZX0oe2N1c3RvbVVJOiExLGxvYWRpbmdPcHRpb25zOnt0aXRsZTpcIuWKoOi9veS4rS4uLlwiLG1hc2s6ITB9LGVycm9yT3B0aW9uczp7dHlwZTpcIm1vZGFsXCIscmV0cnk6ITF9fSxuKTtjb25zdHtjdXN0b21VSTpzLGxvYWRpbmdPcHRpb25zOnIsZXJyb3JPcHRpb25zOmkscGFyc2VTeXN0ZW1FcnJvcjpvfT1uLGE9IXM7cmV0dXJuIG5ldyBQcm94eSh7fSx7Z2V0KHMsYyl7c3dpdGNoKGMpe2Nhc2VcInRvU3RyaW5nXCI6cmV0dXJuXCJbb2JqZWN0IFVuaUNsb3VkT2JqZWN0XVwiO2Nhc2VcInRvSlNPTlwiOnJldHVybnt9fXJldHVybiBmdW5jdGlvbih7Zm46ZSxpbnRlcmNlcHRvck5hbWU6dCxnZXRDYWxsYmFja0FyZ3M6bn09e30pe3JldHVybiBhc3luYyBmdW5jdGlvbiguLi5zKXtjb25zdCByPW4/bih7cGFyYW1zOnN9KTp7fTtsZXQgaSxvO3RyeXtyZXR1cm4gYXdhaXQgTShxKHQsXCJpbnZva2VcIiksey4uLnJ9KSxpPWF3YWl0IGUoLi4ucyksYXdhaXQgTShxKHQsXCJzdWNjZXNzXCIpLHsuLi5yLHJlc3VsdDppfSksaX1jYXRjaChlKXt0aHJvdyBvPWUsYXdhaXQgTShxKHQsXCJmYWlsXCIpLHsuLi5yLGVycm9yOm99KSxvfWZpbmFsbHl7YXdhaXQgTShxKHQsXCJjb21wbGV0ZVwiKSxvP3suLi5yLGVycm9yOm99OnsuLi5yLHJlc3VsdDppfSl9fX0oe2ZuOmFzeW5jIGZ1bmN0aW9uIHMoLi4uaCl7bGV0IGw7YSYmdW5pLnNob3dMb2FkaW5nKHt0aXRsZTpyLnRpdGxlLG1hc2s6ci5tYXNrfSk7Y29uc3QgZD17bmFtZTp0LHR5cGU6dSxkYXRhOnttZXRob2Q6YyxwYXJhbXM6aH19O1wib2JqZWN0XCI9PXR5cGVvZiBuLnNlY3JldE1ldGhvZHMmJmZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10LmRhdGEubWV0aG9kLHM9ZS5zZWNyZXRNZXRob2RzfHx7fSxyPXNbbl18fHNbXCIqXCJdO3ImJih0LnNlY3JldFR5cGU9cil9KG4sZCk7bGV0IHA9ITE7dHJ5e2w9YXdhaXQgZS5jYWxsRnVuY3Rpb24oZCl9Y2F0Y2goZSl7cD0hMCxsPXtyZXN1bHQ6bmV3IHRlKGUpfX1jb25zdHtlcnJTdWJqZWN0OmYsZXJyQ29kZTpnLGVyck1zZzptLG5ld1Rva2VuOnl9PWwucmVzdWx0fHx7fTtpZihhJiZ1bmkuaGlkZUxvYWRpbmcoKSx5JiZ5LnRva2VuJiZ5LnRva2VuRXhwaXJlZCYmKGllKHkpLFkoQix7Li4ueX0pKSxnKXtsZXQgZT1tO2lmKHAmJm8pe2U9KGF3YWl0IG8oe29iamVjdE5hbWU6dCxtZXRob2ROYW1lOmMscGFyYW1zOmgsZXJyU3ViamVjdDpmLGVyckNvZGU6ZyxlcnJNc2c6bX0pKS5lcnJNc2d8fG19aWYoYSlpZihcInRvYXN0XCI9PT1pLnR5cGUpdW5pLnNob3dUb2FzdCh7dGl0bGU6ZSxpY29uOlwibm9uZVwifSk7ZWxzZXtpZihcIm1vZGFsXCIhPT1pLnR5cGUpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVycm9yT3B0aW9ucy50eXBlOiAke2kudHlwZX1gKTt7Y29uc3R7Y29uZmlybTp0fT1hd2FpdCBhc3luYyBmdW5jdGlvbih7dGl0bGU6ZSxjb250ZW50OnQsc2hvd0NhbmNlbDpuLGNhbmNlbFRleHQ6cyxjb25maXJtVGV4dDpyfT17fSl7cmV0dXJuIG5ldyBQcm9taXNlKCgoaSxvKT0+e3VuaS5zaG93TW9kYWwoe3RpdGxlOmUsY29udGVudDp0LHNob3dDYW5jZWw6bixjYW5jZWxUZXh0OnMsY29uZmlybVRleHQ6cixzdWNjZXNzKGUpe2koZSl9LGZhaWwoKXtpKHtjb25maXJtOiExLGNhbmNlbDohMH0pfX0pfSkpfSh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50OmUsc2hvd0NhbmNlbDppLnJldHJ5LGNhbmNlbFRleHQ6XCLlj5bmtohcIixjb25maXJtVGV4dDppLnJldHJ5P1wi6YeN6K+VXCI6XCLnoa7lrppcIn0pO2lmKGkucmV0cnkmJnQpcmV0dXJuIHMoLi4uaCl9fWNvbnN0IG49bmV3IHRlKHtzdWJqZWN0OmYsY29kZTpnLG1lc3NhZ2U6bSxyZXF1ZXN0SWQ6bC5yZXF1ZXN0SWR9KTt0aHJvdyBuLmRldGFpbD1sLnJlc3VsdCxZKGose3R5cGU6eixjb250ZW50Om59KSxufXJldHVybiBZKGose3R5cGU6eixjb250ZW50OmwucmVzdWx0fSksbC5yZXN1bHR9LGludGVyY2VwdG9yTmFtZTpcImNhbGxPYmplY3RcIixnZXRDYWxsYmFja0FyZ3M6ZnVuY3Rpb24oe3BhcmFtczplfT17fSl7cmV0dXJue29iamVjdE5hbWU6dCxtZXRob2ROYW1lOmMscGFyYW1zOmV9fX0pfX0pfX1mdW5jdGlvbiBEcyhlKXtyZXR1cm4gTChcIl9nbG9iYWxVbmlDbG91ZFNlY3VyZU5ldHdvcmtDYWNoZV9fe3NwYWNlSWR9XCIucmVwbGFjZShcIntzcGFjZUlkfVwiLGUuY29uZmlnLnNwYWNlSWQpKX1hc3luYyBmdW5jdGlvbiBNcyh7b3BlbmlkOmUsY2FsbExvZ2luQnlXZWl4aW46dD0hMX09e30pe2NvbnN0IG49RHModGhpcyk7aWYoXCJtcC13ZWl4aW5cIiE9PUMpdGhyb3cgbmV3IEVycm9yKGBbU2VjdXJlTmV0d29ya10gQVBJIFxcYGluaXRTZWN1cmVOZXR3b3JrQnlXZWl4aW5cXGAgaXMgbm90IHN1cHBvcnRlZCBvbiBwbGF0Zm9ybSBcXGAke0N9XFxgYCk7aWYoZSYmdCl0aHJvdyBuZXcgRXJyb3IoXCJbU2VjdXJlTmV0d29ya10gb3BlbmlkIGFuZCBjYWxsTG9naW5CeVdlaXhpbiBjYW5ub3QgYmUgcGFzc2VkIGF0IHRoZSBzYW1lIHRpbWVcIik7aWYoZSlyZXR1cm4gbi5tcFdlaXhpbk9wZW5pZD1lLHt9O2NvbnN0IHM9YXdhaXQgbmV3IFByb21pc2UoKChlLHQpPT57dW5pLmxvZ2luKHtzdWNjZXNzKHQpe2UodC5jb2RlKX0sZmFpbChlKXt0KG5ldyBFcnJvcihlLmVyck1zZykpfX0pfSkpLHI9dGhpcy5pbXBvcnRPYmplY3QoXCJ1bmktaWQtY29cIix7Y3VzdG9tVUk6ITB9KTtyZXR1cm4gYXdhaXQgci5zZWN1cmVOZXR3b3JrSGFuZHNoYWtlQnlXZWl4aW4oe2NvZGU6cyxjYWxsTG9naW5CeVdlaXhpbjp0fSksbi5tcFdlaXhpbkNvZGU9cyx7Y29kZTpzfX1hc3luYyBmdW5jdGlvbiBxcyhlKXtjb25zdCB0PURzKHRoaXMpO3JldHVybiB0LmluaXRQcm9taXNlfHwodC5pbml0UHJvbWlzZT1Ncy5jYWxsKHRoaXMsZSkudGhlbigoZT0+ZSkpLmNhdGNoKChlPT57dGhyb3cgZGVsZXRlIHQuaW5pdFByb21pc2UsZX0pKSksdC5pbml0UHJvbWlzZX1mdW5jdGlvbiBGcyhlKXtyZXR1cm4gZnVuY3Rpb24oe29wZW5pZDp0LGNhbGxMb2dpbkJ5V2VpeGluOm49ITF9PXt9KXtyZXR1cm4gcXMuY2FsbChlLHtvcGVuaWQ6dCxjYWxsTG9naW5CeVdlaXhpbjpufSl9fWZ1bmN0aW9uIEtzKGUpeyFmdW5jdGlvbihlKXtoZT1lfShlKX1mdW5jdGlvbiBqcyhlKXtjb25zdCB0PXtnZXRTeXN0ZW1JbmZvOnVuaS5nZXRTeXN0ZW1JbmZvLGdldFB1c2hDbGllbnRJZDp1bmkuZ2V0UHVzaENsaWVudElkfTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBQcm9taXNlKCgocyxyKT0+e3RbZV0oey4uLm4sc3VjY2VzcyhlKXtzKGUpfSxmYWlsKGUpe3IoZSl9fSl9KSl9fWNsYXNzICRzIGV4dGVuZHMgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9jYWxsYmFjaz17fX1hZGRMaXN0ZW5lcihlLHQpe3RoaXMuX2NhbGxiYWNrW2VdfHwodGhpcy5fY2FsbGJhY2tbZV09W10pLHRoaXMuX2NhbGxiYWNrW2VdLnB1c2godCl9b24oZSx0KXtyZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihlLHQpfXJlbW92ZUxpc3RlbmVyKGUsdCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBmdW5jdGlvbi4gUmVjZWl2ZWQgdW5kZWZpbmVkJyk7Y29uc3Qgbj10aGlzLl9jYWxsYmFja1tlXTtpZighbilyZXR1cm47Y29uc3Qgcz1mdW5jdGlvbihlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfShuLHQpO24uc3BsaWNlKHMsMSl9b2ZmKGUsdCl7cmV0dXJuIHRoaXMucmVtb3ZlTGlzdGVuZXIoZSx0KX1yZW1vdmVBbGxMaXN0ZW5lcihlKXtkZWxldGUgdGhpcy5fY2FsbGJhY2tbZV19ZW1pdChlLC4uLnQpe2NvbnN0IG49dGhpcy5fY2FsbGJhY2tbZV07aWYobilmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdKC4uLnQpfX17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3VuaVB1c2hNZXNzYWdlQ2FsbGJhY2s9dGhpcy5fcmVjZWl2ZVB1c2hNZXNzYWdlLmJpbmQodGhpcyksdGhpcy5fY3VycmVudE1lc3NhZ2VJZD0tMSx0aGlzLl9wYXlsb2FkUXVldWU9W119aW5pdCgpe3JldHVybiBQcm9taXNlLmFsbChbanMoXCJnZXRTeXN0ZW1JbmZvXCIpKCksanMoXCJnZXRQdXNoQ2xpZW50SWRcIikoKV0pLnRoZW4oKChbe2FwcElkOmV9PXt9LHtjaWQ6dH09e31dPVtdKT0+e2lmKCFlKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXBwSWQsIHBsZWFzZSBjaGVjayB0aGUgbWFuaWZlc3QuanNvbiBmaWxlXCIpO2lmKCF0KXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcHVzaCBjbGllbnQgaWRcIik7dGhpcy5fYXBwSWQ9ZSx0aGlzLl9wdXNoQ2xpZW50SWQ9dCx0aGlzLl9zZXFJZD1EYXRlLm5vdygpK1wiLVwiK01hdGguZmxvb3IoOWU1Kk1hdGgucmFuZG9tKCkrMWU1KSx0aGlzLmVtaXQoXCJvcGVuXCIpLHRoaXMuX2luaXRNZXNzYWdlTGlzdGVuZXIoKX0pLChlPT57dGhyb3cgdGhpcy5lbWl0KFwiZXJyb3JcIixlKSx0aGlzLmNsb3NlKCksZX0pKX1hc3luYyBvcGVuKCl7cmV0dXJuIHRoaXMuaW5pdCgpfV9pc1VuaUNsb3VkU1NFKGUpe2lmKFwicmVjZWl2ZVwiIT09ZS50eXBlKXJldHVybiExO2NvbnN0IHQ9ZSYmZS5kYXRhJiZlLmRhdGEucGF5bG9hZDtyZXR1cm4hKCF0fHxcIlVOSV9DTE9VRF9TU0VcIiE9PXQuY2hhbm5lbHx8dC5zZXFJZCE9PXRoaXMuX3NlcUlkKX1fcmVjZWl2ZVB1c2hNZXNzYWdlKGUpe2lmKCF0aGlzLl9pc1VuaUNsb3VkU1NFKGUpKXJldHVybjtjb25zdCB0PWUmJmUuZGF0YSYmZS5kYXRhLnBheWxvYWQse2FjdGlvbjpuLG1lc3NhZ2VJZDpzLG1lc3NhZ2U6cn09dDt0aGlzLl9wYXlsb2FkUXVldWUucHVzaCh7YWN0aW9uOm4sbWVzc2FnZUlkOnMsbWVzc2FnZTpyfSksdGhpcy5fY29uc3VtTWVzc2FnZSgpfV9jb25zdW1NZXNzYWdlKCl7Zm9yKDs7KXtjb25zdCBlPXRoaXMuX3BheWxvYWRRdWV1ZS5maW5kKChlPT5lLm1lc3NhZ2VJZD09PXRoaXMuX2N1cnJlbnRNZXNzYWdlSWQrMSkpO2lmKCFlKWJyZWFrO3RoaXMuX2N1cnJlbnRNZXNzYWdlSWQrKyx0aGlzLl9wYXJzZU1lc3NhZ2VQYXlsb2FkKGUpfX1fcGFyc2VNZXNzYWdlUGF5bG9hZChlKXtjb25zdHthY3Rpb246dCxtZXNzYWdlSWQ6bixtZXNzYWdlOnN9PWU7XCJlbmRcIj09PXQ/dGhpcy5fZW5kKHttZXNzYWdlSWQ6bixtZXNzYWdlOnN9KTpcIm1lc3NhZ2VcIj09PXQmJnRoaXMuX2FwcGVuZE1lc3NhZ2Uoe21lc3NhZ2VJZDpuLG1lc3NhZ2U6c30pfV9hcHBlbmRNZXNzYWdlKHttZXNzYWdlSWQ6ZSxtZXNzYWdlOnR9PXt9KXt0aGlzLmVtaXQoXCJtZXNzYWdlXCIsdCl9X2VuZCh7bWVzc2FnZUlkOmUsbWVzc2FnZTp0fT17fSl7dGhpcy5lbWl0KFwiZW5kXCIsdCksdGhpcy5jbG9zZSgpfV9pbml0TWVzc2FnZUxpc3RlbmVyKCl7dW5pLm9uUHVzaE1lc3NhZ2UodGhpcy5fdW5pUHVzaE1lc3NhZ2VDYWxsYmFjayl9X2Rlc3Ryb3koKXt1bmkub2ZmUHVzaE1lc3NhZ2UodGhpcy5fdW5pUHVzaE1lc3NhZ2VDYWxsYmFjayl9dG9KU09OKCl7cmV0dXJue2FwcElkOnRoaXMuX2FwcElkLHB1c2hDbGllbnRJZDp0aGlzLl9wdXNoQ2xpZW50SWQsc2VxSWQ6dGhpcy5fc2VxSWR9fWNsb3NlKCl7dGhpcy5fZGVzdHJveSgpLHRoaXMuZW1pdChcImNsb3NlXCIpfX1hc3luYyBmdW5jdGlvbiBCcyhlLHQpe2NvbnN0IG49YGh0dHA6Ly8ke2V9OiR7dH0vc3lzdGVtL3BpbmdgO3RyeXtjb25zdCBlPWF3YWl0KHM9e3VybDpuLHRpbWVvdXQ6NTAwfSxuZXcgUHJvbWlzZSgoKGUsdCk9PntuZS5yZXF1ZXN0KHsuLi5zLHN1Y2Nlc3ModCl7ZSh0KX0sZmFpbChlKXt0KGUpfX0pfSkpKTtyZXR1cm4hKCFlLmRhdGF8fDAhPT1lLmRhdGEuY29kZSl9Y2F0Y2goZSl7cmV0dXJuITF9dmFyIHN9YXN5bmMgZnVuY3Rpb24gV3MoZSl7aWYoIVMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKFwiYXBwXCI9PT1DKXtjb25zdHtvc05hbWU6ZSxvc1ZlcnNpb246dH09Y2UoKTtcImlvc1wiPT09ZSYmZnVuY3Rpb24oZSl7aWYoIWV8fFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwO2NvbnN0IHQ9ZS5tYXRjaCgvXihcXGQrKS4vKTtyZXR1cm4gdCYmdFsxXT9wYXJzZUludCh0WzFdKTowfSh0KT49MTQmJmNvbnNvbGUud2FybihcImlPUyAxNOWPiuS7peS4iueJiOacrOi/nuaOpXVuaUNsb3Vk5pys5Zyw6LCD6K+V5pyN5Yqh6ZyA6KaB5YWB6K645a6i5oi356uv5p+l5om+5bm26L+e5o6l5Yiw5pys5Zyw572R57uc5LiK55qE6K6+5aSH77yI5LuF5byA5Y+R5pyf6Ze06ZyA6KaB77yM5Y+R6KGM5ZCO5LiN6ZyA6KaB77yJXCIpfWNvbnN0IHQ9ZS5fX2Rldl9fO2lmKCF0LmRlYnVnSW5mbylyZXR1cm47Y29uc3R7YWRkcmVzczpuLHNlcnZlUG9ydDpzfT10LmRlYnVnSW5mbyx7YWRkcmVzczpyfT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQpe2xldCBuO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXtjb25zdCByPWVbc107aWYoYXdhaXQgQnMocix0KSl7bj1yO2JyZWFrfX1yZXR1cm57YWRkcmVzczpuLHBvcnQ6dH19KG4scyk7aWYocilyZXR1cm4gdC5sb2NhbEFkZHJlc3M9cix2b2lkKHQubG9jYWxQb3J0PXMpO2NvbnN0IGk9Y29uc29sZVtcImFwcFwiPT09Qz9cImVycm9yXCI6XCJ3YXJuXCJdO2xldCBvPVwiXCI7aWYoXCJyZW1vdGVcIj09PXQuZGVidWdJbmZvLmluaXRpYWxMYXVuY2hUeXBlPyh0LmRlYnVnSW5mby5mb3JjZVJlbW90ZT0hMCxvPVwi5b2T5YmN5a6i5oi356uv5ZKMSEJ1aWxkZXJY5LiN5Zyo5ZCM5LiA5bGA5Z+f572R5LiL77yI5oiW5YW25LuW572R57uc5Y6f5Zug5peg5rOV6L+e5o6lSEJ1aWxkZXJY77yJ77yMdW5pQ2xvdWTmnKzlnLDosIPor5XmnI3liqHkuI3lr7nlvZPliY3lrqLmiLfnq6/nlJ/mlYjjgIJcXG4tIOWmguaenOS4jeS9v+eUqHVuaUNsb3Vk5pys5Zyw6LCD6K+V5pyN5Yqh77yM6K+355u05o6l5b+955Wl5q2k5L+h5oGv44CCXFxuLSDlpoLpnIDkvb/nlKh1bmlDbG91ZOacrOWcsOiwg+ivleacjeWKoe+8jOivt+WwhuWuouaIt+err+S4juS4u+acuui/nuaOpeWIsOWQjOS4gOWxgOWfn+e9keS4i+W5tumHjeaWsOi/kOihjOWIsOWuouaIt+err+OAglwiKTpvPVwi5peg5rOV6L+e5o6ldW5pQ2xvdWTmnKzlnLDosIPor5XmnI3liqHvvIzor7fmo4Dmn6XlvZPliY3lrqLmiLfnq6/mmK/lkKbkuI7kuLvmnLrlnKjlkIzkuIDlsYDln5/nvZHkuIvjgIJcXG4tIOWmgumcgOS9v+eUqHVuaUNsb3Vk5pys5Zyw6LCD6K+V5pyN5Yqh77yM6K+35bCG5a6i5oi356uv5LiO5Li75py66L+e5o6l5Yiw5ZCM5LiA5bGA5Z+f572R5LiL5bm26YeN5paw6L+Q6KGM5Yiw5a6i5oi356uv44CCXCIsbys9XCJcXG4tIOWmguaenOWcqEhCdWlsZGVyWOW8gOWQr+eahOeKtuaAgeS4i+WIh+aNoui/h+e9kee7nOeOr+Wig++8jOivt+mHjeWQr0hCdWlsZGVyWOWQjuWGjeivlVxcbi0g5qOA5p+l57O757uf6Ziy54Gr5aKZ5piv5ZCm5oum5oiq5LqGSEJ1aWxkZXJY6Ieq5bim55qEbm9kZWpzXFxuLSDmo4Dmn6XmmK/lkKbplJnor6/nmoTkvb/nlKjmi6bmiKrlmajkv67mlLl1bmkucmVxdWVzdOaWueazleeahOWPguaVsFwiLFwid2ViXCI9PT1DJiYobys9XCJcXG4tIOmDqOWIhua1j+iniOWZqOW8gOWQr+iKgua1geaooeW8j+S5i+WQjuiuv+mXruacrOWcsOWcsOWdgOWPl+mZkO+8jOivt+ajgOafpeaYr+WQpuWQr+eUqOS6huiKgua1geaooeW8j1wiKSwwPT09Qy5pbmRleE9mKFwibXAtXCIpJiYobys9XCJcXG4tIOWwj+eoi+W6j+S4reWmguS9leS9v+eUqHVuaUNsb3Vk77yM6K+35Y+C6ICD77yaaHR0cHM6Ly91bmlhcHAuZGNsb3VkLm5ldC5jbi91bmlDbG91ZC9wdWJsaXNoLmh0bWwjdXNlaW5tcFwiKSwhdC5kZWJ1Z0luZm8uZm9yY2VSZW1vdGUpdGhyb3cgbmV3IEVycm9yKG8pO2kobyl9ZnVuY3Rpb24gSHMoZSl7ZS5faW5pdFByb21pc2VIdWJ8fChlLl9pbml0UHJvbWlzZUh1Yj1uZXcgdih7Y3JlYXRlUHJvbWlzZTpmdW5jdGlvbigpe2xldCB0PVByb21pc2UucmVzb2x2ZSgpO3ZhciBuO249MSx0PW5ldyBQcm9taXNlKChlPT57c2V0VGltZW91dCgoKCk9PntlKCl9KSxuKX0pKTtjb25zdCBzPWUuYXV0aCgpO3JldHVybiB0LnRoZW4oKCgpPT5zLmdldExvZ2luU3RhdGUoKSkpLnRoZW4oKGU9PmU/UHJvbWlzZS5yZXNvbHZlKCk6cy5zaWduSW5Bbm9ueW1vdXNseSgpKSl9fSkpfWNvbnN0IHpzPXt0Y2I6YnQsdGVuY2VudDpidCxhbGl5dW46ZmUscHJpdmF0ZTpBdCxhbGlwYXk6TnR9O2xldCBKcz1uZXcgY2xhc3N7aW5pdChlKXtsZXQgdD17fTtjb25zdCBuPXpzW2UucHJvdmlkZXJdO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIuacquaPkOS+m+ato+ehrueahHByb3ZpZGVy5Y+C5pWwXCIpO3Q9bi5pbml0KGUpLFMmJmZ1bmN0aW9uKGUpe2lmKCFTKXJldHVybjtjb25zdCB0PXt9O2UuX19kZXZfXz10LHQuZGVidWdMb2c9UyYmKFwid2ViXCI9PT1DJiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJIQnVpbGRlclhcIik+MHx8XCJhcHBcIj09PUMpO2NvbnN0IG49UDtuJiYhbi5jb2RlJiYodC5kZWJ1Z0luZm89bik7Y29uc3Qgcz1uZXcgdih7Y3JlYXRlUHJvbWlzZTpmdW5jdGlvbigpe3JldHVybiBXcyhlKX19KTt0LmluaXRMb2NhbE5ldHdvcms9ZnVuY3Rpb24oKXtyZXR1cm4gcy5leGVjKCl9fSh0KSxIcyh0KSxCbih0KSxmdW5jdGlvbihlKXtjb25zdCB0PWUudXBsb2FkRmlsZTtlLnVwbG9hZEZpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfX0odCksZnVuY3Rpb24oZSl7ZS5kYXRhYmFzZT1mdW5jdGlvbih0KXtpZih0JiZPYmplY3Qua2V5cyh0KS5sZW5ndGg+MClyZXR1cm4gZS5pbml0KHQpLmRhdGFiYXNlKCk7aWYodGhpcy5fZGF0YWJhc2UpcmV0dXJuIHRoaXMuX2RhdGFiYXNlO2NvbnN0IG49ZXModHMse3VuaUNsaWVudDplfSk7cmV0dXJuIHRoaXMuX2RhdGFiYXNlPW4sbn0sZS5kYXRhYmFzZUZvckpRTD1mdW5jdGlvbih0KXtpZih0JiZPYmplY3Qua2V5cyh0KS5sZW5ndGg+MClyZXR1cm4gZS5pbml0KHQpLmRhdGFiYXNlRm9ySlFMKCk7aWYodGhpcy5fZGF0YWJhc2VGb3JKUUwpcmV0dXJuIHRoaXMuX2RhdGFiYXNlRm9ySlFMO2NvbnN0IG49ZXModHMse3VuaUNsaWVudDplLGlzSlFMOiEwfSk7cmV0dXJuIHRoaXMuX2RhdGFiYXNlRm9ySlFMPW4sbn19KHQpLGZ1bmN0aW9uKGUpe2UuZ2V0Q3VycmVudFVzZXJJbmZvPU9zLGUuY2hvb3NlQW5kVXBsb2FkRmlsZT1Mcy5pbml0Q2hvb3NlQW5kVXBsb2FkRmlsZShlKSxPYmplY3QuYXNzaWduKGUse2dldCBtaXhpbkRhdGFjb20oKXtyZXR1cm4gVXMoZSl9fSksZS5TU0VDaGFubmVsPSRzLGUuaW5pdFNlY3VyZU5ldHdvcmtCeVdlaXhpbj1GcyhlKSxlLnNldEN1c3RvbUNsaWVudEluZm89S3MsZS5pbXBvcnRPYmplY3Q9TnMoZSl9KHQpO3JldHVybltcImNhbGxGdW5jdGlvblwiLFwidXBsb2FkRmlsZVwiLFwiZGVsZXRlRmlsZVwiLFwiZ2V0VGVtcEZpbGVVUkxcIixcImRvd25sb2FkRmlsZVwiLFwiY2hvb3NlQW5kVXBsb2FkRmlsZVwiXS5mb3JFYWNoKChlPT57aWYoIXRbZV0pcmV0dXJuO2NvbnN0IG49dFtlXTt0W2VdPWZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkodCxBcnJheS5mcm9tKGFyZ3VtZW50cykpfSx0W2VdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCBzPSExO2lmKFwiY2FsbEZ1bmN0aW9uXCI9PT10KXtjb25zdCBlPW4mJm4udHlwZXx8YztzPWUhPT1jfWNvbnN0IHI9XCJjYWxsRnVuY3Rpb25cIj09PXQmJiFzLGk9dGhpcy5faW5pdFByb21pc2VIdWIuZXhlYygpO249bnx8e307Y29uc3R7c3VjY2VzczpvLGZhaWw6YSxjb21wbGV0ZTp1fT1lZShuKSxoPWkudGhlbigoKCk9PnM/UHJvbWlzZS5yZXNvbHZlKCk6TShxKHQsXCJpbnZva2VcIiksbikpKS50aGVuKCgoKT0+ZS5jYWxsKHRoaXMsbikpKS50aGVuKChlPT5zP1Byb21pc2UucmVzb2x2ZShlKTpNKHEodCxcInN1Y2Nlc3NcIiksZSkudGhlbigoKCk9Pk0ocSh0LFwiY29tcGxldGVcIiksZSkpKS50aGVuKCgoKT0+KHImJlkoaix7dHlwZTpILGNvbnRlbnQ6ZX0pLFByb21pc2UucmVzb2x2ZShlKSkpKSksKGU9PnM/UHJvbWlzZS5yZWplY3QoZSk6TShxKHQsXCJmYWlsXCIpLGUpLnRoZW4oKCgpPT5NKHEodCxcImNvbXBsZXRlXCIpLGUpKSkudGhlbigoKCk9PihZKGose3R5cGU6SCxjb250ZW50OmV9KSxQcm9taXNlLnJlamVjdChlKSkpKSkpO2lmKCEob3x8YXx8dSkpcmV0dXJuIGg7aC50aGVuKChlPT57byYmbyhlKSx1JiZ1KGUpLHImJlkoaix7dHlwZTpILGNvbnRlbnQ6ZX0pfSksKGU9PnthJiZhKGUpLHUmJnUoZSksciYmWShqLHt0eXBlOkgsY29udGVudDplfSl9KSl9fSh0W2VdLGUpLmJpbmQodCl9KSksdC5pbml0PXRoaXMuaW5pdCx0fX07KCgpPT57Y29uc3QgZT1UO2xldCB0PXt9O2lmKGUmJjE9PT1lLmxlbmd0aCl0PWVbMF0sSnM9SnMuaW5pdCh0KSxKcy5faXNEZWZhdWx0PSEwO2Vsc2V7Y29uc3QgdD1bXCJhdXRoXCIsXCJjYWxsRnVuY3Rpb25cIixcInVwbG9hZEZpbGVcIixcImRlbGV0ZUZpbGVcIixcImdldFRlbXBGaWxlVVJMXCIsXCJkb3dubG9hZEZpbGVcIixcImRhdGFiYXNlXCIsXCJnZXRDdXJyZW50VVNlckluZm9cIixcImltcG9ydE9iamVjdFwiXTtsZXQgbjtuPWUmJmUubGVuZ3RoPjA/XCLlupTnlKjmnInlpJrkuKrmnI3liqHnqbrpl7TvvIzor7fpgJrov4d1bmlDbG91ZC5pbml05pa55rOV5oyH5a6a6KaB5L2/55So55qE5pyN5Yqh56m66Ze0XCI6eD9cIuW6lOeUqOacquWFs+iBlOacjeWKoeepuumXtO+8jOivt+WcqHVuaUNsb3Vk55uu5b2V5Y+z6ZSu5YWz6IGU5pyN5Yqh56m66Ze0XCI6XCJ1bmktYXBwIGNsaemhueebruWGheS9v+eUqHVuaUNsb3Vk6ZyA6KaB5L2/55SoSEJ1aWxkZXJY55qE6L+Q6KGM6I+c5Y2V6L+Q6KGM6aG555uu77yM5LiU6ZyA6KaB5ZyodW5pQ2xvdWTnm67lvZXlhbPogZTmnI3liqHnqbrpl7RcIix0LmZvckVhY2goKGU9PntKc1tlXT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKG4pLFByb21pc2UucmVqZWN0KG5ldyB0ZSh7Y29kZTpcIlNZU19FUlJcIixtZXNzYWdlOm59KSl9fSkpfU9iamVjdC5hc3NpZ24oSnMse2dldCBtaXhpbkRhdGFjb20oKXtyZXR1cm4gVXMoSnMpfX0pLENzKEpzKSxKcy5hZGRJbnRlcmNlcHRvcj1OLEpzLnJlbW92ZUludGVyY2VwdG9yPUQsSnMuaW50ZXJjZXB0T2JqZWN0PUYsUyYmXCJ3ZWJcIj09PUMmJih3aW5kb3cudW5pQ2xvdWQ9SnMpfSkoKTt2YXIgVnM9SnM7ZXhwb3J0e1ZzIGFzIGRlZmF1bHR9O1xuIiwiPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwidW5pLXN0YXRfX3NlbGVjdFwiPlxyXG5cdFx0PHNwYW4gdi1pZj1cImxhYmVsXCIgY2xhc3M9XCJ1bmktbGFiZWwtdGV4dCBoaWRlLW9uLXBob25lXCI+e3tsYWJlbCArICfvvJonfX08L3NwYW4+XHJcblx0XHQ8dmlldyBjbGFzcz1cInVuaS1zdGF0LWJveFwiIDpjbGFzcz1cInsndW5pLXN0YXRfX2FjdGl2ZWQnOiBjdXJyZW50fVwiPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1zZWxlY3RcIiAgOmNsYXNzPVwieyd1bmktc2VsZWN0LS1kaXNhYmxlZCc6ZGlzYWJsZWR9XCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktc2VsZWN0X19pbnB1dC1ib3hcIiBAY2xpY2s9XCJ0b2dnbGVTZWxlY3RvclwiPlxyXG5cdFx0XHRcdFx0PHZpZXcgdi1pZj1cImN1cnJlbnRcIiBjbGFzcz1cInVuaS1zZWxlY3RfX2lucHV0LXRleHRcIj57e2N1cnJlbnR9fTwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3IHYtZWxzZSBjbGFzcz1cInVuaS1zZWxlY3RfX2lucHV0LXRleHQgdW5pLXNlbGVjdF9faW5wdXQtcGxhY2Vob2xkZXJcIj57e3R5cGVQbGFjZWhvbGRlcn19PC92aWV3PlxyXG5cdFx0XHRcdFx0PHVuaS1pY29ucyB2LWlmPVwiY3VycmVudCAmJiBjbGVhclwiIHR5cGU9XCJjbGVhclwiIGNvbG9yPVwiI2MwYzRjY1wiIHNpemU9XCIyNFwiIEBjbGljaz1cImNsZWFyVmFsXCIgLz5cclxuXHRcdFx0XHRcdDx1bmktaWNvbnMgdi1lbHNlIDp0eXBlPVwic2hvd1NlbGVjdG9yPyAndG9wJyA6ICdib3R0b20nXCIgc2l6ZT1cIjE0XCIgY29sb3I9XCIjOTk5XCIgLz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktc2VsZWN0LS1tYXNrXCIgdi1pZj1cInNob3dTZWxlY3RvclwiIEBjbGljaz1cInRvZ2dsZVNlbGVjdG9yXCIgLz5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1zZWxlY3RfX3NlbGVjdG9yXCIgdi1pZj1cInNob3dTZWxlY3RvclwiPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktcG9wcGVyX19hcnJvd1wiPjwvdmlldz5cclxuXHRcdFx0XHRcdDxzY3JvbGwtdmlldyBzY3JvbGwteT1cInRydWVcIiBjbGFzcz1cInVuaS1zZWxlY3RfX3NlbGVjdG9yLXNjcm9sbFwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1zZWxlY3RfX3NlbGVjdG9yLWVtcHR5XCIgdi1pZj1cIm1peGluRGF0YWNvbVJlc0RhdGEubGVuZ3RoID09PSAwXCI+XHJcblx0XHRcdFx0XHRcdFx0PHRleHQ+e3tlbXB0eVRpcHN9fTwvdGV4dD5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlldyB2LWVsc2UgY2xhc3M9XCJ1bmktc2VsZWN0X19zZWxlY3Rvci1pdGVtXCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gbWl4aW5EYXRhY29tUmVzRGF0YVwiXHJcblx0XHRcdFx0XHRcdFx0OmtleT1cImluZGV4XCIgQGNsaWNrPVwiY2hhbmdlKGl0ZW0pXCI+XHJcblx0XHRcdFx0XHRcdFx0PHRleHRcclxuXHRcdFx0XHRcdFx0XHRcdDpjbGFzcz1cInsndW5pLXNlbGVjdF9fc2VsZWN0b3JfX2Rpc2FibGVkJzogaXRlbS5kaXNhYmxlfVwiPnt7Zm9ybWF0SXRlbU5hbWUoaXRlbSl9fTwvdGV4dD5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PC9zY3JvbGwtdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHQ8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5cdC8qKlxyXG5cdCAqIERhdGFDaGVja2xpc3Qg5pWw5o2u6YCJ5oup5ZmoXHJcblx0ICogQGRlc2NyaXB0aW9uIOmAmui/h+aVsOaNrua4suafk+eahOS4i+aLieahhue7hOS7tlxyXG5cdCAqIEB0dXRvcmlhbCBodHRwczovL3VuaWFwcC5kY2xvdWQuaW8vY29tcG9uZW50L3VuaXVpL3VuaS1kYXRhLXNlbGVjdFxyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB2YWx1ZSDpu5jorqTlgLxcclxuXHQgKiBAcHJvcGVydHkge0FycmF5fSBsb2NhbGRhdGEg5pys5Zyw5pWw5o2uIO+8jOagvOW8jyBbe3RleHQ6JycsdmFsdWU6Jyd9XVxyXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gY2xlYXIg5piv5ZCm5Y+v5Lul5riF56m65bey6YCJ6aG5XHJcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBlbXB0eVRleHQg5rKh5pyJ5pWw5o2u5pe25pi+56S655qE5paH5a2XIO+8jOacrOWcsOaVsOaNruaXoOaViFxyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBsYWJlbCDlt6bkvqfmoIfpophcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcGxhY2Vob2xkZXIg6L6T5YWl5qGG55qE5o+Q56S65paH5a2XXHJcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkaXNhYmxlZCDmmK/lkKbnpoHnlKhcclxuXHQgKiBAZXZlbnQge0Z1bmN0aW9ufSBjaGFuZ2UgIOmAieS4reWPkeeUn+WPmOWMluinpuWPkVxyXG5cdCAqL1xyXG5cclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRuYW1lOiBcInVuaS1zdGF0LXNlbGVjdFwiLFxyXG5cdFx0bWl4aW5zOiBbdW5pQ2xvdWQubWl4aW5EYXRhY29tIHx8IHt9XSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0c2hvd1NlbGVjdG9yOiBmYWxzZSxcclxuXHRcdFx0XHRjdXJyZW50OiAnJyxcclxuXHRcdFx0XHRtaXhpbkRhdGFjb21SZXNEYXRhOiBbXSxcclxuXHRcdFx0XHRhcHBzOiBbXSxcclxuXHRcdFx0XHRjaGFubmVsczogW11cclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblx0XHRwcm9wczoge1xyXG5cdFx0XHRsb2NhbGRhdGE6IHtcclxuXHRcdFx0XHR0eXBlOiBBcnJheSxcclxuXHRcdFx0XHRkZWZhdWx0ICgpIHtcclxuXHRcdFx0XHRcdHJldHVybiBbXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dmFsdWU6IHtcclxuXHRcdFx0XHR0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdG1vZGVsVmFsdWU6IHtcclxuXHRcdFx0XHR0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdGxhYmVsOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdHBsYWNlaG9sZGVyOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICfor7fpgInmi6knXHJcblx0XHRcdH0sXHJcblx0XHRcdGVtcHR5VGlwczoge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAn5peg6YCJ6aG5J1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRjbGVhcjoge1xyXG5cdFx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdFx0ZGVmYXVsdDogdHJ1ZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkZWZJdGVtOiB7XHJcblx0XHRcdFx0dHlwZTogTnVtYmVyLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IDBcclxuXHRcdFx0fSxcclxuICAgICAgZGlzYWJsZWQ6IHtcclxuXHRcdFx0XHR0eXBlOiBCb29sZWFuLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRjcmVhdGVkKCkge1xyXG5cdFx0XHR0aGlzLmxhc3QgPSBgJHt0aGlzLmNvbGxlY3Rpb259X2xhc3Rfc2VsZWN0ZWRfb3B0aW9uX3ZhbHVlYFxyXG5cdFx0XHRpZiAodGhpcy5jb2xsZWN0aW9uICYmICF0aGlzLmxvY2FsZGF0YS5sZW5ndGgpIHtcclxuXHRcdFx0XHR0aGlzLm1peGluRGF0YWNvbUVhc3lHZXQoKVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Y29tcHV0ZWQ6IHtcclxuXHRcdFx0dHlwZVBsYWNlaG9sZGVyKCkge1xyXG5cdFx0XHRcdGNvbnN0IHRleHQgPSB7XHJcblx0XHRcdFx0XHQnb3BlbmRiLXN0YXQtYXBwLXZlcnNpb25zJzogJ+eJiOacrCcsXHJcblx0XHRcdFx0XHQnb3BlbmRiLWFwcC1jaGFubmVscyc6ICfmuKDpgZMnLFxyXG5cdFx0XHRcdFx0J29wZW5kYi1hcHAtbGlzdCc6ICflupTnlKgnXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGNvbW1vbiA9IHRoaXMucGxhY2Vob2xkZXJcclxuXHRcdFx0XHRjb25zdCBwbGFjZWhvbGRlciA9IHRleHRbdGhpcy5jb2xsZWN0aW9uXVxyXG5cdFx0XHRcdHJldHVybiBwbGFjZWhvbGRlciA/XHJcblx0XHRcdFx0XHRjb21tb24gKyBwbGFjZWhvbGRlciA6XHJcblx0XHRcdFx0XHRjb21tb25cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdHdhdGNoOiB7XHJcblx0XHRcdGxvY2FsZGF0YToge1xyXG5cdFx0XHRcdGltbWVkaWF0ZTogdHJ1ZSxcclxuXHRcdFx0XHRoYW5kbGVyKHZhbCwgb2xkKSB7XHJcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpICYmIG9sZCAhPT0gdmFsKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubWl4aW5EYXRhY29tUmVzRGF0YSA9IHZhbFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gI2lmbmRlZiBWVUUzXHJcblx0XHRcdHZhbHVlKCkge1xyXG5cdFx0XHRcdHRoaXMuaW5pdERlZlZhbCgpXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vICNlbmRpZlxyXG5cdFx0XHQvLyAjaWZkZWYgVlVFM1xyXG5cdFx0XHRtb2RlbFZhbHVlKCkge1xyXG5cdFx0XHRcdHRoaXMuaW5pdERlZlZhbCgpXHJcblx0XHRcdH0sXHJcblx0XHRcdC8vICNlbmRpZlxyXG5cdFx0XHRtaXhpbkRhdGFjb21SZXNEYXRhOiB7XHJcblx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlLFxyXG5cdFx0XHRcdGhhbmRsZXIodmFsKSB7XHJcblx0XHRcdFx0XHRpZiAodmFsLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmluaXREZWZWYWwoKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0aW5pdERlZlZhbCgpIHtcclxuXHRcdFx0XHRsZXQgZGVmVmFsdWUgPSAnJ1xyXG5cdFx0XHRcdGlmICgodGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlID09PSAwKSAmJiAhdGhpcy5pc0Rpc2FibGVkKHRoaXMudmFsdWUpKSB7XHJcblx0XHRcdFx0XHRkZWZWYWx1ZSA9IHRoaXMudmFsdWVcclxuXHRcdFx0XHR9IGVsc2UgaWYgKCh0aGlzLm1vZGVsVmFsdWUgfHwgdGhpcy5tb2RlbFZhbHVlID09PSAwKSAmJiAhdGhpcy5pc0Rpc2FibGVkKHRoaXMubW9kZWxWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdGRlZlZhbHVlID0gdGhpcy5tb2RlbFZhbHVlXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGxldCBzdHJvZ2VWYWx1ZVxyXG5cdFx0XHRcdFx0aWYgKHRoaXMuY29sbGVjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRzdHJvZ2VWYWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYyh0aGlzLmxhc3QpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoc3Ryb2dlVmFsdWUgfHwgc3Ryb2dlVmFsdWUgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0ZGVmVmFsdWUgPSBzdHJvZ2VWYWx1ZVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bGV0IGRlZkl0ZW0gPSAnJ1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5kZWZJdGVtID4gMCAmJiB0aGlzLmRlZkl0ZW0gPCB0aGlzLm1peGluRGF0YWNvbVJlc0RhdGEubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGVmSXRlbSA9IHRoaXMubWl4aW5EYXRhY29tUmVzRGF0YVt0aGlzLmRlZkl0ZW0gLSAxXS52YWx1ZVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGRlZlZhbHVlID0gZGVmSXRlbVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5lbWl0KGRlZlZhbHVlKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBkZWYgPSB0aGlzLm1peGluRGF0YWNvbVJlc0RhdGEuZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IGRlZlZhbHVlKVxyXG5cdFx0XHRcdHRoaXMuY3VycmVudCA9IGRlZiA/IHRoaXMuZm9ybWF0SXRlbU5hbWUoZGVmKSA6ICcnXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogQHBhcmFtIHtbU3RyaW5nLCBOdW1iZXJdfSB2YWx1ZVxyXG5cdFx0XHQgKiDliKTmlq3nlKjmiLfnu5nnmoQgdmFsdWUg5piv5ZCm5ZCM5pe25Li656aB55So54q25oCBXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRpc0Rpc2FibGVkKHZhbHVlKSB7XHJcblx0XHRcdFx0bGV0IGlzRGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0dGhpcy5taXhpbkRhdGFjb21SZXNEYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbS52YWx1ZSA9PT0gdmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0aXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblxyXG5cdFx0XHRcdHJldHVybiBpc0Rpc2FibGVkO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0Y2xlYXJWYWwoKSB7XHJcblx0XHRcdFx0dGhpcy5lbWl0KCcnKVxyXG5cdFx0XHRcdGlmICh0aGlzLmNvbGxlY3Rpb24pIHtcclxuXHRcdFx0XHRcdHVuaS5yZW1vdmVTdG9yYWdlU3luYyh0aGlzLmxhc3QpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjaGFuZ2UoaXRlbSkge1xyXG5cdFx0XHRcdGlmICghaXRlbS5kaXNhYmxlKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dTZWxlY3RvciA9IGZhbHNlXHJcblx0XHRcdFx0XHR0aGlzLmN1cnJlbnQgPSB0aGlzLmZvcm1hdEl0ZW1OYW1lKGl0ZW0pXHJcblx0XHRcdFx0XHR0aGlzLmVtaXQoaXRlbS52YWx1ZSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGVtaXQodmFsKSB7XHJcblx0XHRcdFx0dGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsKVxyXG5cdFx0XHRcdHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKVxyXG5cdFx0XHRcdHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsKVxyXG5cdFx0XHRcdGlmICh0aGlzLmNvbGxlY3Rpb24pIHtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYyh0aGlzLmxhc3QsIHZhbClcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHR0b2dnbGVTZWxlY3RvcigpIHtcclxuICAgICAgICBpZih0aGlzLmRpc2FibGVkKXtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcblx0XHRcdFx0dGhpcy5zaG93U2VsZWN0b3IgPSAhdGhpcy5zaG93U2VsZWN0b3JcclxuXHRcdFx0fSxcclxuXHRcdFx0Zm9ybWF0SXRlbU5hbWUoaXRlbSkge1xyXG5cdFx0XHRcdGxldCB7XHJcblx0XHRcdFx0XHR0ZXh0LFxyXG5cdFx0XHRcdFx0dmFsdWUsXHJcblx0XHRcdFx0XHRjaGFubmVsX2NvZGVcclxuXHRcdFx0XHR9ID0gaXRlbVxyXG5cdFx0XHRcdGNoYW5uZWxfY29kZSA9IGNoYW5uZWxfY29kZSA/IGAoJHtjaGFubmVsX2NvZGV9KWAgOiAnJ1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb24uaW5kZXhPZignYXBwLWxpc3QnKSA+IDAgP1xyXG5cdFx0XHRcdFx0YCR7dGV4dH0oJHt2YWx1ZX0pYCA6XHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdHRleHQgP1xyXG5cdFx0XHRcdFx0XHR0ZXh0IDpcclxuXHRcdFx0XHRcdFx0YOacquWRveWQjSR7Y2hhbm5lbF9jb2RlfWBcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuXHQkdW5pLWJhc2UtY29sb3I6ICM2YTZhNmEgIWRlZmF1bHQ7XHJcblx0JHVuaS1tYWluLWNvbG9yOiAjMzMzICFkZWZhdWx0O1xyXG5cdCR1bmktc2Vjb25kYXJ5LWNvbG9yOiAjOTA5Mzk5ICFkZWZhdWx0O1xyXG5cdCR1bmktYm9yZGVyLTM6ICNlNWU1ZTU7XHJcblxyXG5cclxuXHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTAwcHgpIHtcclxuXHRcdC5oaWRlLW9uLXBob25lIHtcclxuXHRcdFx0ZGlzcGxheTogbm9uZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qICNlbmRpZiAqL1xyXG5cdC51bmktc3RhdF9fc2VsZWN0IHtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdFx0Ly8gcGFkZGluZzogMTVweDtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0ZmxleDogMTtcclxuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0fVxyXG5cclxuXHQudW5pLXN0YXQtYm94IHtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0ZmxleDogMTtcclxuXHR9XHJcblxyXG5cdC51bmktc3RhdF9fYWN0aXZlZCB7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdGZsZXg6IDE7XHJcblx0XHQvLyBvdXRsaW5lOiAxcHggc29saWQgIzI5NzlmZjtcclxuXHR9XHJcblxyXG5cdC51bmktbGFiZWwtdGV4dCB7XHJcblx0XHRmb250LXNpemU6IDE0cHg7XHJcblx0XHRmb250LXdlaWdodDogYm9sZDtcclxuXHRcdGNvbG9yOiAkdW5pLWJhc2UtY29sb3I7XHJcblx0XHRtYXJnaW46IGF1dG8gMDtcclxuXHRcdG1hcmdpbi1yaWdodDogNXB4O1xyXG5cdH1cclxuXHJcblx0LnVuaS1zZWxlY3Qge1xyXG5cdFx0Zm9udC1zaXplOiAxNHB4O1xyXG5cdFx0Ym9yZGVyOiAxcHggc29saWQgJHVuaS1ib3JkZXItMztcclxuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0XHRib3JkZXItcmFkaXVzOiA0cHg7XHJcblx0XHRwYWRkaW5nOiAwIDVweDtcclxuXHRcdHBhZGRpbmctbGVmdDogMTBweDtcclxuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHR1c2VyLXNlbGVjdDogbm9uZTtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0ZmxleC1kaXJlY3Rpb246IHJvdztcclxuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0XHRib3JkZXItYm90dG9tOiBzb2xpZCAxcHggJHVuaS1ib3JkZXItMztcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0ZmxleDogMTtcclxuXHRcdGhlaWdodDogMzVweDtcclxuXHJcbiAgICAmLS1kaXNhYmxlZHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjdmYTtcclxuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcclxuICAgIH1cclxuXHR9XHJcblxyXG5cdC51bmktc2VsZWN0X19sYWJlbCB7XHJcblx0XHRmb250LXNpemU6IDE2cHg7XHJcblx0XHQvLyBsaW5lLWhlaWdodDogMjJweDtcclxuXHRcdGhlaWdodDogMzVweDtcclxuXHRcdHBhZGRpbmctcmlnaHQ6IDEwcHg7XHJcblx0XHRjb2xvcjogJHVuaS1zZWNvbmRhcnktY29sb3I7XHJcblx0fVxyXG5cclxuXHQudW5pLXNlbGVjdF9faW5wdXQtYm94IHtcclxuXHRcdGhlaWdodDogMzVweDtcclxuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdGZsZXg6IDE7XHJcblx0XHRmbGV4LWRpcmVjdGlvbjogcm93O1xyXG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHR9XHJcblxyXG5cdC51bmktc2VsZWN0X19pbnB1dCB7XHJcblx0XHRmbGV4OiAxO1xyXG5cdFx0Zm9udC1zaXplOiAxNHB4O1xyXG5cdFx0aGVpZ2h0OiAyMnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDIycHg7XHJcblx0fVxyXG5cclxuXHQudW5pLXNlbGVjdF9faW5wdXQtcGxhYyB7XHJcblx0XHRmb250LXNpemU6IDE0cHg7XHJcblx0XHRjb2xvcjogJHVuaS1zZWNvbmRhcnktY29sb3I7XHJcblx0fVxyXG5cclxuXHQudW5pLXNlbGVjdF9fc2VsZWN0b3Ige1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0dG9wOiBjYWxjKDEwMCUgKyAxMnB4KTtcclxuXHRcdGxlZnQ6IDA7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XHJcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjRUJFRUY1O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNnB4O1xyXG5cdFx0Ym94LXNoYWRvdzogMCAycHggMTJweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuXHRcdHotaW5kZXg6IDM7XHJcblx0XHRwYWRkaW5nOiA0cHggMDtcclxuXHR9XHJcblxyXG5cdC51bmktc2VsZWN0X19zZWxlY3Rvci1zY3JvbGwge1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0bWF4LWhlaWdodDogMjAwcHg7XHJcblx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0fVxyXG5cclxuXHQudW5pLXNlbGVjdF9fc2VsZWN0b3ItZW1wdHksXHJcblx0LnVuaS1zZWxlY3RfX3NlbGVjdG9yLWl0ZW0ge1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0bGluZS1oZWlnaHQ6IDM1cHg7XHJcblx0XHRmb250LXNpemU6IDE0cHg7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHQvKiBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggJHVuaS1ib3JkZXItMzsgKi9cclxuXHRcdHBhZGRpbmc6IDBweCAxMHB4O1xyXG5cdH1cclxuXHJcblx0LnVuaS1zZWxlY3RfX3NlbGVjdG9yLWl0ZW06aG92ZXIge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcclxuXHR9XHJcblxyXG5cdC51bmktc2VsZWN0X19zZWxlY3Rvci1lbXB0eTpsYXN0LWNoaWxkLFxyXG5cdC51bmktc2VsZWN0X19zZWxlY3Rvci1pdGVtOmxhc3QtY2hpbGQge1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdH1cclxuXHJcblx0LnVuaS1zZWxlY3RfX3NlbGVjdG9yX19kaXNhYmxlZCB7XHJcblx0XHRvcGFjaXR5OiAwLjQ7XHJcblx0XHRjdXJzb3I6IGRlZmF1bHQ7XHJcblx0fVxyXG5cclxuXHQvKiBwaWNrZXIg5by55Ye65bGC6YCa55So55qE5oyH56S65bCP5LiJ6KeSICovXHJcblx0LnVuaS1wb3BwZXJfX2Fycm93LFxyXG5cdC51bmktcG9wcGVyX19hcnJvdzo6YWZ0ZXIge1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0ZGlzcGxheTogYmxvY2s7XHJcblx0XHR3aWR0aDogMDtcclxuXHRcdGhlaWdodDogMDtcclxuXHRcdGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcblx0XHRib3JkZXItc3R5bGU6IHNvbGlkO1xyXG5cdFx0Ym9yZGVyLXdpZHRoOiA2cHg7XHJcblx0fVxyXG5cclxuXHQudW5pLXBvcHBlcl9fYXJyb3cge1xyXG5cdFx0ZmlsdGVyOiBkcm9wLXNoYWRvdygwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4wMykpO1xyXG5cdFx0dG9wOiAtNnB4O1xyXG5cdFx0bGVmdDogMTAlO1xyXG5cdFx0bWFyZ2luLXJpZ2h0OiAzcHg7XHJcblx0XHRib3JkZXItdG9wLXdpZHRoOiAwO1xyXG5cdFx0Ym9yZGVyLWJvdHRvbS1jb2xvcjogI0VCRUVGNTtcclxuXHR9XHJcblxyXG5cdC51bmktcG9wcGVyX19hcnJvdzo6YWZ0ZXIge1xyXG5cdFx0Y29udGVudDogXCIgXCI7XHJcblx0XHR0b3A6IDFweDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAtNnB4O1xyXG5cdFx0Ym9yZGVyLXRvcC13aWR0aDogMDtcclxuXHRcdGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7XHJcblx0fVxyXG5cclxuXHQudW5pLXNlbGVjdF9faW5wdXQtdGV4dCB7XHJcblx0XHQvLyB3aWR0aDogMjgwcHg7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdGNvbG9yOiAkdW5pLW1haW4tY29sb3I7XHJcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG5cdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcblx0XHQtby10ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuXHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0fVxyXG5cclxuXHQudW5pLXNlbGVjdF9faW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdFx0Y29sb3I6ICR1bmktYmFzZS1jb2xvcjtcclxuXHRcdGZvbnQtc2l6ZTogMTJweDtcclxuXHR9XHJcblxyXG5cdC51bmktc2VsZWN0LS1tYXNrIHtcclxuXHRcdHBvc2l0aW9uOiBmaXhlZDtcclxuXHRcdHRvcDogMDtcclxuXHRcdGJvdHRvbTogMDtcclxuXHRcdHJpZ2h0OiAwO1xyXG5cdFx0bGVmdDogMDtcclxuXHR9XHJcbjwvc3R5bGU+XHJcbiIsIlxuZXhwb3J0IGRlZmF1bHQge1xyXG5cdGRhdGEoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcclxuXHRcdH1cclxuXHR9LFxuXHRjcmVhdGVkKCl7XG5cdFx0dGhpcy5wb3B1cCA9IHRoaXMuZ2V0UGFyZW50KClcblx0fSxcblx0bWV0aG9kczp7XG5cdFx0LyoqXG5cdFx0ICog6I635Y+W54i25YWD57Sg5a6e5L6LXG5cdFx0ICovXG5cdFx0Z2V0UGFyZW50KG5hbWUgPSAndW5pUG9wdXAnKSB7XG5cdFx0XHRsZXQgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuXHRcdFx0bGV0IHBhcmVudE5hbWUgPSBwYXJlbnQuJG9wdGlvbnMubmFtZTtcblx0XHRcdHdoaWxlIChwYXJlbnROYW1lICE9PSBuYW1lKSB7XG5cdFx0XHRcdHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuXHRcdFx0XHRpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlXG5cdFx0XHRcdHBhcmVudE5hbWUgPSBwYXJlbnQuJG9wdGlvbnMubmFtZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXJlbnQ7XG5cdFx0fSxcblx0fVxyXG59XHJcbiIsIjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cInVuaS1wb3B1cC1tZXNzYWdlXCI+XHJcblx0XHQ8dmlldyBjbGFzcz1cInVuaS1wb3B1cC1tZXNzYWdlX19ib3ggZml4Zm9ycGMtd2lkdGhcIiA6Y2xhc3M9XCIndW5pLXBvcHVwX18nK3R5cGVcIj5cclxuXHRcdFx0PHNsb3Q+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJ1bmktcG9wdXAtbWVzc2FnZS10ZXh0XCIgOmNsYXNzPVwiJ3VuaS1wb3B1cF9fJyt0eXBlKyctdGV4dCdcIj57e21lc3NhZ2V9fTwvdGV4dD5cclxuXHRcdFx0PC9zbG90PlxyXG5cdFx0PC92aWV3PlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcblx0aW1wb3J0IHBvcHVwIGZyb20gJy4uL3VuaS1wb3B1cC9wb3B1cC5qcydcclxuXHQvKipcclxuXHQgKiBQb3BVcCDlvLnlh7rlsYIt5raI5oGv5o+Q56S6XHJcblx0ICogQGRlc2NyaXB0aW9uIOW8ueWHuuWxgi3mtojmga/mj5DnpLpcclxuXHQgKiBAdHV0b3JpYWwgaHR0cHM6Ly9leHQuZGNsb3VkLm5ldC5jbi9wbHVnaW4/aWQ9MzI5XHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHR5cGUgPSBbc3VjY2Vzc3x3YXJuaW5nfGluZm98ZXJyb3JdIOS4u+mimOagt+W8j1xyXG5cdCAqICBAdmFsdWUgc3VjY2VzcyDmiJDlip9cclxuXHQgKiBcdEB2YWx1ZSB3YXJuaW5nIOaPkOekulxyXG5cdCAqIFx0QHZhbHVlIGluZm8g5raI5oGvXHJcblx0ICogXHRAdmFsdWUgZXJyb3Ig6ZSZ6K+vXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1lc3NhZ2Ug5raI5oGv5o+Q56S65paH5a2XXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGR1cmF0aW9uIOaYvuekuuaXtumXtO+8jOiuvue9ruS4uiAwIOWImeS4jeS8muiHquWKqOWFs+mXrVxyXG5cdCAqL1xyXG5cclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRuYW1lOiAndW5pUG9wdXBNZXNzYWdlJyxcclxuXHRcdG1peGluczpbcG9wdXBdLFxyXG5cdFx0cHJvcHM6IHtcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOS4u+mimCBzdWNjZXNzL3dhcm5pbmcvaW5mby9lcnJvclx0ICDpu5jorqQgc3VjY2Vzc1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0dHlwZToge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAnc3VjY2VzcydcclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOa2iOaBr+aWh+Wtl1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0bWVzc2FnZToge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog5pi+56S65pe26Ze077yM6K6+572u5Li6IDAg5YiZ5LiN5Lya6Ieq5Yqo5YWz6ZetXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRkdXJhdGlvbjoge1xyXG5cdFx0XHRcdHR5cGU6IE51bWJlcixcclxuXHRcdFx0XHRkZWZhdWx0OiAzMDAwXHJcblx0XHRcdH0sXHJcblx0XHRcdG1hc2tTaG93OntcclxuXHRcdFx0XHR0eXBlOkJvb2xlYW4sXHJcblx0XHRcdFx0ZGVmYXVsdDpmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHt9XHJcblx0XHR9LFxyXG5cdFx0Y3JlYXRlZCgpIHtcclxuXHRcdFx0dGhpcy5wb3B1cC5tYXNrU2hvdyA9IHRoaXMubWFza1Nob3dcclxuXHRcdFx0dGhpcy5wb3B1cC5tZXNzYWdlQ2hpbGQgPSB0aGlzXHJcblx0XHR9LFxyXG5cdFx0bWV0aG9kczoge1xyXG5cdFx0XHR0aW1lckNsb3NlKCl7XHJcblx0XHRcdFx0aWYodGhpcy5kdXJhdGlvbiA9PT0gMCkgcmV0dXJuXHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpIFxyXG5cdFx0XHRcdHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpPT57XHJcblx0XHRcdFx0XHR0aGlzLnBvcHVwLmNsb3NlKClcclxuXHRcdFx0XHR9LHRoaXMuZHVyYXRpb24pXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbjwvc2NyaXB0PlxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiA+XHJcblx0LnVuaS1wb3B1cC1tZXNzYWdlIHtcclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHR9XHJcblxyXG5cdC51bmktcG9wdXAtbWVzc2FnZV9fYm94IHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNlMWYzZDg7XHJcblx0XHRwYWRkaW5nOiAxMHB4IDE1cHg7XHJcblx0XHRib3JkZXItY29sb3I6ICNlZWU7XHJcblx0XHRib3JkZXItc3R5bGU6IHNvbGlkO1xyXG5cdFx0Ym9yZGVyLXdpZHRoOiAxcHg7XHJcblx0XHRmbGV4OiAxO1xyXG5cdH1cclxuXHJcblx0QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHtcclxuXHRcdC5maXhmb3JwYy13aWR0aCB7XHJcblx0XHRcdG1hcmdpbi10b3A6IDIwcHg7XHJcblx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcclxuXHRcdFx0ZmxleDogbm9uZTtcclxuXHRcdFx0bWluLXdpZHRoOiAzODBweDtcclxuXHRcdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0XHRtYXgtd2lkdGg6IDUwJTtcclxuXHRcdFx0LyogI2VuZGlmICovXHJcblx0XHRcdC8qICNpZmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0XHRtYXgtd2lkdGg6IDUwMHB4O1xyXG5cdFx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC51bmktcG9wdXAtbWVzc2FnZS10ZXh0IHtcclxuXHRcdGZvbnQtc2l6ZTogMTRweDtcclxuXHRcdHBhZGRpbmc6IDA7XHJcblx0fVxyXG5cclxuXHQudW5pLXBvcHVwX19zdWNjZXNzIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNlMWYzZDg7XHJcblx0fVxyXG5cclxuXHQudW5pLXBvcHVwX19zdWNjZXNzLXRleHQge1xyXG5cdFx0Y29sb3I6ICM2N0MyM0E7XHJcblx0fVxyXG5cclxuXHQudW5pLXBvcHVwX193YXJuIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmYWVjZDg7XHJcblx0fVxyXG5cclxuXHQudW5pLXBvcHVwX193YXJuLXRleHQge1xyXG5cdFx0Y29sb3I6ICNFNkEyM0M7XHJcblx0fVxyXG5cclxuXHQudW5pLXBvcHVwX19lcnJvciB7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmRlMmUyO1xyXG5cdH1cclxuXHJcblx0LnVuaS1wb3B1cF9fZXJyb3ItdGV4dCB7XHJcblx0XHRjb2xvcjogI0Y1NkM2QztcclxuXHR9XHJcblxyXG5cdC51bmktcG9wdXBfX2luZm8ge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI0YyRjZGQztcclxuXHR9XHJcblxyXG5cdC51bmktcG9wdXBfX2luZm8tdGV4dCB7XHJcblx0XHRjb2xvcjogIzkwOTM5OTtcclxuXHR9XHJcbjwvc3R5bGU+XHJcbiIsIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anM9ZSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PTFlMyxlPTZlNCxuPTM2ZTUscj1cIm1pbGxpc2Vjb25kXCIsaT1cInNlY29uZFwiLHM9XCJtaW51dGVcIix1PVwiaG91clwiLGE9XCJkYXlcIixvPVwid2Vla1wiLGM9XCJtb250aFwiLGY9XCJxdWFydGVyXCIsaD1cInllYXJcIixkPVwiZGF0ZVwiLGw9XCJJbnZhbGlkIERhdGVcIiwkPS9eKFxcZHs0fSlbLS9dPyhcXGR7MSwyfSk/Wy0vXT8oXFxkezAsMn0pW1R0XFxzXSooXFxkezEsMn0pPzo/KFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Wy46XT8oXFxkKyk/JC8seT0vXFxbKFteXFxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csTT17bmFtZTpcImVuXCIsd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24odCl7dmFyIGU9W1widGhcIixcInN0XCIsXCJuZFwiLFwicmRcIl0sbj10JTEwMDtyZXR1cm5cIltcIit0KyhlWyhuLTIwKSUxMF18fGVbbl18fGVbMF0pK1wiXVwifX0sbT1mdW5jdGlvbih0LGUsbil7dmFyIHI9U3RyaW5nKHQpO3JldHVybiFyfHxyLmxlbmd0aD49ZT90OlwiXCIrQXJyYXkoZSsxLXIubGVuZ3RoKS5qb2luKG4pK3R9LHY9e3M6bSx6OmZ1bmN0aW9uKHQpe3ZhciBlPS10LnV0Y09mZnNldCgpLG49TWF0aC5hYnMoZSkscj1NYXRoLmZsb29yKG4vNjApLGk9biU2MDtyZXR1cm4oZTw9MD9cIitcIjpcIi1cIikrbShyLDIsXCIwXCIpK1wiOlwiK20oaSwyLFwiMFwiKX0sbTpmdW5jdGlvbiB0KGUsbil7aWYoZS5kYXRlKCk8bi5kYXRlKCkpcmV0dXJuLXQobixlKTt2YXIgcj0xMioobi55ZWFyKCktZS55ZWFyKCkpKyhuLm1vbnRoKCktZS5tb250aCgpKSxpPWUuY2xvbmUoKS5hZGQocixjKSxzPW4taTwwLHU9ZS5jbG9uZSgpLmFkZChyKyhzPy0xOjEpLGMpO3JldHVybisoLShyKyhuLWkpLyhzP2ktdTp1LWkpKXx8MCl9LGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD9NYXRoLmNlaWwodCl8fDA6TWF0aC5mbG9vcih0KX0scDpmdW5jdGlvbih0KXtyZXR1cm57TTpjLHk6aCx3Om8sZDphLEQ6ZCxoOnUsbTpzLHM6aSxtczpyLFE6Zn1bdF18fFN0cmluZyh0fHxcIlwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLyxcIlwiKX0sdTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dH19LGc9XCJlblwiLEQ9e307RFtnXT1NO3ZhciBwPVwiJGlzRGF5anNPYmplY3RcIixTPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgX3x8ISghdHx8IXRbcF0pfSx3PWZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpO2lmKCFlKXJldHVybiBnO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgcz1lLnRvTG93ZXJDYXNlKCk7RFtzXSYmKGk9cyksbiYmKERbc109bixpPXMpO3ZhciB1PWUuc3BsaXQoXCItXCIpO2lmKCFpJiZ1Lmxlbmd0aD4xKXJldHVybiB0KHVbMF0pfWVsc2V7dmFyIGE9ZS5uYW1lO0RbYV09ZSxpPWF9cmV0dXJuIXImJmkmJihnPWkpLGl8fCFyJiZnfSxPPWZ1bmN0aW9uKHQsZSl7aWYoUyh0KSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBuPVwib2JqZWN0XCI9PXR5cGVvZiBlP2U6e307cmV0dXJuIG4uZGF0ZT10LG4uYXJncz1hcmd1bWVudHMsbmV3IF8obil9LGI9djtiLmw9dyxiLmk9UyxiLnc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTyh0LHtsb2NhbGU6ZS4kTCx1dGM6ZS4kdSx4OmUuJHgsJG9mZnNldDplLiRvZmZzZXR9KX07dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKHQpe3RoaXMuJEw9dyh0LmxvY2FsZSxudWxsLCEwKSx0aGlzLnBhcnNlKHQpLHRoaXMuJHg9dGhpcy4keHx8dC54fHx7fSx0aGlzW3BdPSEwfXZhciBtPU0ucHJvdG90eXBlO3JldHVybiBtLnBhcnNlPWZ1bmN0aW9uKHQpe3RoaXMuJGQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRlLG49dC51dGM7aWYobnVsbD09PWUpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoYi51KGUpKXJldHVybiBuZXcgRGF0ZTtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoZSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiEvWiQvaS50ZXN0KGUpKXt2YXIgcj1lLm1hdGNoKCQpO2lmKHIpe3ZhciBpPXJbMl0tMXx8MCxzPShyWzddfHxcIjBcIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIG4/bmV3IERhdGUoRGF0ZS5VVEMoclsxXSxpLHJbM118fDEscls0XXx8MCxyWzVdfHwwLHJbNl18fDAscykpOm5ldyBEYXRlKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpfX1yZXR1cm4gbmV3IERhdGUoZSl9KHQpLHRoaXMuaW5pdCgpfSxtLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRNb250aCgpLHRoaXMuJEQ9dC5nZXREYXRlKCksdGhpcy4kVz10LmdldERheSgpLHRoaXMuJEg9dC5nZXRIb3VycygpLHRoaXMuJG09dC5nZXRNaW51dGVzKCksdGhpcy4kcz10LmdldFNlY29uZHMoKSx0aGlzLiRtcz10LmdldE1pbGxpc2Vjb25kcygpfSxtLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBifSxtLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuJGQudG9TdHJpbmcoKT09PWwpfSxtLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuPU8odCk7cmV0dXJuIHRoaXMuc3RhcnRPZihlKTw9biYmbjw9dGhpcy5lbmRPZihlKX0sbS5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCk8dGhpcy5zdGFydE9mKGUpfSxtLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZW5kT2YoZSk8Tyh0KX0sbS4kZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGIudSh0KT90aGlzW2VdOnRoaXMuc2V0KG4sdCl9LG0udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LG0udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sbS5zdGFydE9mPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPSEhYi51KGUpfHxlLGY9Yi5wKHQpLGw9ZnVuY3Rpb24odCxlKXt2YXIgaT1iLncobi4kdT9EYXRlLlVUQyhuLiR5LGUsdCk6bmV3IERhdGUobi4keSxlLHQpLG4pO3JldHVybiByP2k6aS5lbmRPZihhKX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBiLncobi50b0RhdGUoKVt0XS5hcHBseShuLnRvRGF0ZShcInNcIiksKHI/WzAsMCwwLDBdOlsyMyw1OSw1OSw5OTldKS5zbGljZShlKSksbil9LHk9dGhpcy4kVyxNPXRoaXMuJE0sbT10aGlzLiRELHY9XCJzZXRcIisodGhpcy4kdT9cIlVUQ1wiOlwiXCIpO3N3aXRjaChmKXtjYXNlIGg6cmV0dXJuIHI/bCgxLDApOmwoMzEsMTEpO2Nhc2UgYzpyZXR1cm4gcj9sKDEsTSk6bCgwLE0rMSk7Y2FzZSBvOnZhciBnPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCxEPSh5PGc/eSs3OnkpLWc7cmV0dXJuIGwocj9tLUQ6bSsoNi1EKSxNKTtjYXNlIGE6Y2FzZSBkOnJldHVybiAkKHYrXCJIb3Vyc1wiLDApO2Nhc2UgdTpyZXR1cm4gJCh2K1wiTWludXRlc1wiLDEpO2Nhc2UgczpyZXR1cm4gJCh2K1wiU2Vjb25kc1wiLDIpO2Nhc2UgaTpyZXR1cm4gJCh2K1wiTWlsbGlzZWNvbmRzXCIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sbS5lbmRPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFydE9mKHQsITEpfSxtLiRzZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWIucCh0KSxmPVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKSxsPShuPXt9LG5bYV09ZitcIkRhdGVcIixuW2RdPWYrXCJEYXRlXCIsbltjXT1mK1wiTW9udGhcIixuW2hdPWYrXCJGdWxsWWVhclwiLG5bdV09ZitcIkhvdXJzXCIsbltzXT1mK1wiTWludXRlc1wiLG5baV09ZitcIlNlY29uZHNcIixuW3JdPWYrXCJNaWxsaXNlY29uZHNcIixuKVtvXSwkPW89PT1hP3RoaXMuJEQrKGUtdGhpcy4kVyk6ZTtpZihvPT09Y3x8bz09PWgpe3ZhciB5PXRoaXMuY2xvbmUoKS5zZXQoZCwxKTt5LiRkW2xdKCQpLHkuaW5pdCgpLHRoaXMuJGQ9eS5zZXQoZCxNYXRoLm1pbih0aGlzLiRELHkuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgbCYmdGhpcy4kZFtsXSgkKTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sbS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQodCxlKX0sbS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbYi5wKHQpXSgpfSxtLmFkZD1mdW5jdGlvbihyLGYpe3ZhciBkLGw9dGhpcztyPU51bWJlcihyKTt2YXIgJD1iLnAoZikseT1mdW5jdGlvbih0KXt2YXIgZT1PKGwpO3JldHVybiBiLncoZS5kYXRlKGUuZGF0ZSgpK01hdGgucm91bmQodCpyKSksbCl9O2lmKCQ9PT1jKXJldHVybiB0aGlzLnNldChjLHRoaXMuJE0rcik7aWYoJD09PWgpcmV0dXJuIHRoaXMuc2V0KGgsdGhpcy4keStyKTtpZigkPT09YSlyZXR1cm4geSgxKTtpZigkPT09bylyZXR1cm4geSg3KTt2YXIgTT0oZD17fSxkW3NdPWUsZFt1XT1uLGRbaV09dCxkKVskXXx8MSxtPXRoaXMuJGQuZ2V0VGltZSgpK3IqTTtyZXR1cm4gYi53KG0sdGhpcyl9LG0uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGQoLTEqdCxlKX0sbS5mb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbi5pbnZhbGlkRGF0ZXx8bDt2YXIgcj10fHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIsaT1iLnoodGhpcykscz10aGlzLiRILHU9dGhpcy4kbSxhPXRoaXMuJE0sbz1uLndlZWtkYXlzLGM9bi5tb250aHMsZj1uLm1lcmlkaWVtLGg9ZnVuY3Rpb24odCxuLGkscyl7cmV0dXJuIHQmJih0W25dfHx0KGUscikpfHxpW25dLnNsaWNlKDAscyl9LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGIucyhzJTEyfHwxMix0LFwiMFwiKX0sJD1mfHxmdW5jdGlvbih0LGUsbil7dmFyIHI9dDwxMj9cIkFNXCI6XCJQTVwiO3JldHVybiBuP3IudG9Mb3dlckNhc2UoKTpyfTtyZXR1cm4gci5yZXBsYWNlKHksKGZ1bmN0aW9uKHQscil7cmV0dXJuIHJ8fGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlXCJZWVwiOnJldHVybiBTdHJpbmcoZS4keSkuc2xpY2UoLTIpO2Nhc2VcIllZWVlcIjpyZXR1cm4gYi5zKGUuJHksNCxcIjBcIik7Y2FzZVwiTVwiOnJldHVybiBhKzE7Y2FzZVwiTU1cIjpyZXR1cm4gYi5zKGErMSwyLFwiMFwiKTtjYXNlXCJNTU1cIjpyZXR1cm4gaChuLm1vbnRoc1Nob3J0LGEsYywzKTtjYXNlXCJNTU1NXCI6cmV0dXJuIGgoYyxhKTtjYXNlXCJEXCI6cmV0dXJuIGUuJEQ7Y2FzZVwiRERcIjpyZXR1cm4gYi5zKGUuJEQsMixcIjBcIik7Y2FzZVwiZFwiOnJldHVybiBTdHJpbmcoZS4kVyk7Y2FzZVwiZGRcIjpyZXR1cm4gaChuLndlZWtkYXlzTWluLGUuJFcsbywyKTtjYXNlXCJkZGRcIjpyZXR1cm4gaChuLndlZWtkYXlzU2hvcnQsZS4kVyxvLDMpO2Nhc2VcImRkZGRcIjpyZXR1cm4gb1tlLiRXXTtjYXNlXCJIXCI6cmV0dXJuIFN0cmluZyhzKTtjYXNlXCJISFwiOnJldHVybiBiLnMocywyLFwiMFwiKTtjYXNlXCJoXCI6cmV0dXJuIGQoMSk7Y2FzZVwiaGhcIjpyZXR1cm4gZCgyKTtjYXNlXCJhXCI6cmV0dXJuICQocyx1LCEwKTtjYXNlXCJBXCI6cmV0dXJuICQocyx1LCExKTtjYXNlXCJtXCI6cmV0dXJuIFN0cmluZyh1KTtjYXNlXCJtbVwiOnJldHVybiBiLnModSwyLFwiMFwiKTtjYXNlXCJzXCI6cmV0dXJuIFN0cmluZyhlLiRzKTtjYXNlXCJzc1wiOnJldHVybiBiLnMoZS4kcywyLFwiMFwiKTtjYXNlXCJTU1NcIjpyZXR1cm4gYi5zKGUuJG1zLDMsXCIwXCIpO2Nhc2VcIlpcIjpyZXR1cm4gaX1yZXR1cm4gbnVsbH0odCl8fGkucmVwbGFjZShcIjpcIixcIlwiKX0pKX0sbS51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sbS5kaWZmPWZ1bmN0aW9uKHIsZCxsKXt2YXIgJCx5PXRoaXMsTT1iLnAoZCksbT1PKHIpLHY9KG0udXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSkqZSxnPXRoaXMtbSxEPWZ1bmN0aW9uKCl7cmV0dXJuIGIubSh5LG0pfTtzd2l0Y2goTSl7Y2FzZSBoOiQ9RCgpLzEyO2JyZWFrO2Nhc2UgYzokPUQoKTticmVhaztjYXNlIGY6JD1EKCkvMzticmVhaztjYXNlIG86JD0oZy12KS82MDQ4ZTU7YnJlYWs7Y2FzZSBhOiQ9KGctdikvODY0ZTU7YnJlYWs7Y2FzZSB1OiQ9Zy9uO2JyZWFrO2Nhc2UgczokPWcvZTticmVhaztjYXNlIGk6JD1nL3Q7YnJlYWs7ZGVmYXVsdDokPWd9cmV0dXJuIGw/JDpiLmEoJCl9LG0uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRPZihjKS4kRH0sbS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIERbdGhpcy4kTF19LG0ubG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIHRoaXMuJEw7dmFyIG49dGhpcy5jbG9uZSgpLHI9dyh0LGUsITApO3JldHVybiByJiYobi4kTD1yKSxufSxtLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGIudyh0aGlzLiRkLHRoaXMpfSxtLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG0udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxtLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LE19KCksaz1fLnByb3RvdHlwZTtyZXR1cm4gTy5wcm90b3R5cGU9ayxbW1wiJG1zXCIscl0sW1wiJHNcIixpXSxbXCIkbVwiLHNdLFtcIiRIXCIsdV0sW1wiJFdcIixhXSxbXCIkTVwiLGNdLFtcIiR5XCIsaF0sW1wiJERcIixkXV0uZm9yRWFjaCgoZnVuY3Rpb24odCl7a1t0WzFdXT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kZyhlLHRbMF0sdFsxXSl9fSkpLE8uZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuJGl8fCh0KGUsXyxPKSx0LiRpPSEwKSxPfSxPLmxvY2FsZT13LE8uaXNEYXlqcz1TLE8udW5peD1mdW5jdGlvbih0KXtyZXR1cm4gTygxZTMqdCl9LE8uZW49RFtnXSxPLkxzPUQsTy5wPXt9LE99KSk7IiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8vLyBudWxsID0g5pyq6K+35rGC77yMMSA9IOW3suWFgeiuuO+8jDAgPSDmi5Lnu5185Y+X6ZmQLCAyID0g57O757uf5pyq5byA5ZCvXG5cbnZhciBpc0lPU1xuXG5mdW5jdGlvbiBhbGJ1bSgpIHtcbiAgdmFyIHJlc3VsdCA9IDBcbiAgdmFyIFBIUGhvdG9MaWJyYXJ5ID0gcGx1cy5pb3MuaW1wb3J0KCdQSFBob3RvTGlicmFyeScpXG4gIHZhciBhdXRoU3RhdHVzID0gUEhQaG90b0xpYnJhcnkuYXV0aG9yaXphdGlvblN0YXR1cygpXG4gIGlmIChhdXRoU3RhdHVzID09PSAwKSB7XG4gICAgcmVzdWx0ID0gbnVsbFxuICB9IGVsc2UgaWYgKGF1dGhTdGF0dXMgPT0gMykge1xuICAgIHJlc3VsdCA9IDFcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAwXG4gIH1cbiAgcGx1cy5pb3MuZGVsZXRlT2JqZWN0KFBIUGhvdG9MaWJyYXJ5KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGNhbWVyYSgpIHtcbiAgdmFyIHJlc3VsdCA9IDBcbiAgdmFyIEFWQ2FwdHVyZURldmljZSA9IHBsdXMuaW9zLmltcG9ydCgnQVZDYXB0dXJlRGV2aWNlJylcbiAgdmFyIGF1dGhTdGF0dXMgPSBBVkNhcHR1cmVEZXZpY2UuYXV0aG9yaXphdGlvblN0YXR1c0Zvck1lZGlhVHlwZSgndmlkZScpXG4gIGlmIChhdXRoU3RhdHVzID09PSAwKSB7XG4gICAgcmVzdWx0ID0gbnVsbFxuICB9IGVsc2UgaWYgKGF1dGhTdGF0dXMgPT0gMykge1xuICAgIHJlc3VsdCA9IDFcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAwXG4gIH1cbiAgcGx1cy5pb3MuZGVsZXRlT2JqZWN0KEFWQ2FwdHVyZURldmljZSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBsb2NhdGlvbigpIHtcbiAgdmFyIHJlc3VsdCA9IDBcbiAgdmFyIGNsbG9jYXRpb25NYW5nZXIgPSBwbHVzLmlvcy5pbXBvcnQoJ0NMTG9jYXRpb25NYW5hZ2VyJylcbiAgdmFyIGVuYWJsZSA9IGNsbG9jYXRpb25NYW5nZXIubG9jYXRpb25TZXJ2aWNlc0VuYWJsZWQoKVxuICB2YXIgc3RhdHVzID0gY2xsb2NhdGlvbk1hbmdlci5hdXRob3JpemF0aW9uU3RhdHVzKClcbiAgaWYgKCFlbmFibGUpIHtcbiAgICByZXN1bHQgPSAyXG4gIH0gZWxzZSBpZiAoc3RhdHVzID09PSAwKSB7XG4gICAgcmVzdWx0ID0gbnVsbFxuICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMyB8fCBzdGF0dXMgPT09IDQpIHtcbiAgICByZXN1bHQgPSAxXG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gMFxuICB9XG4gIHBsdXMuaW9zLmRlbGV0ZU9iamVjdChjbGxvY2F0aW9uTWFuZ2VyKVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHB1c2goKSB7XG4gIHZhciByZXN1bHQgPSAwXG4gIHZhciBVSUFwcGxpY2F0aW9uID0gcGx1cy5pb3MuaW1wb3J0KCdVSUFwcGxpY2F0aW9uJylcbiAgdmFyIGFwcCA9IFVJQXBwbGljYXRpb24uc2hhcmVkQXBwbGljYXRpb24oKVxuICB2YXIgZW5hYmxlZFR5cGVzID0gMFxuICBpZiAoYXBwLmN1cnJlbnRVc2VyTm90aWZpY2F0aW9uU2V0dGluZ3MpIHtcbiAgICB2YXIgc2V0dGluZ3MgPSBhcHAuY3VycmVudFVzZXJOb3RpZmljYXRpb25TZXR0aW5ncygpXG4gICAgZW5hYmxlZFR5cGVzID0gc2V0dGluZ3MucGx1c0dldEF0dHJpYnV0ZSgndHlwZXMnKVxuICAgIGlmIChlbmFibGVkVHlwZXMgPT0gMCkge1xuICAgICAgcmVzdWx0ID0gMFxuICAgICAgY29uc29sZS5sb2coJ+aOqOmAgeadg+mZkOayoeacieW8gOWQrycpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IDFcbiAgICAgIGNvbnNvbGUubG9nKCflt7Lnu4/lvIDlkK/mjqjpgIHlip/og70hJylcbiAgICB9XG4gICAgcGx1cy5pb3MuZGVsZXRlT2JqZWN0KHNldHRpbmdzKVxuICB9IGVsc2Uge1xuICAgIGVuYWJsZWRUeXBlcyA9IGFwcC5lbmFibGVkUmVtb3RlTm90aWZpY2F0aW9uVHlwZXMoKVxuICAgIGlmIChlbmFibGVkVHlwZXMgPT0gMCkge1xuICAgICAgcmVzdWx0ID0gM1xuICAgICAgY29uc29sZS5sb2coJ+aOqOmAgeadg+mZkOayoeacieW8gOWQryEnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSA0XG4gICAgICBjb25zb2xlLmxvZygn5bey57uP5byA5ZCv5o6o6YCB5Yqf6IO9IScpXG4gICAgfVxuICB9XG4gIHBsdXMuaW9zLmRlbGV0ZU9iamVjdChhcHApXG4gIHBsdXMuaW9zLmRlbGV0ZU9iamVjdChVSUFwcGxpY2F0aW9uKVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGNvbnRhY3QoKSB7XG4gIHZhciByZXN1bHQgPSAwXG4gIHZhciBDTkNvbnRhY3RTdG9yZSA9IHBsdXMuaW9zLmltcG9ydCgnQ05Db250YWN0U3RvcmUnKVxuICB2YXIgY25BdXRoU3RhdHVzID0gQ05Db250YWN0U3RvcmUuYXV0aG9yaXphdGlvblN0YXR1c0ZvckVudGl0eVR5cGUoMClcbiAgaWYgKGNuQXV0aFN0YXR1cyA9PT0gMCkge1xuICAgIHJlc3VsdCA9IG51bGxcbiAgfSBlbHNlIGlmIChjbkF1dGhTdGF0dXMgPT0gMykge1xuICAgIHJlc3VsdCA9IDFcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAwXG4gIH1cbiAgcGx1cy5pb3MuZGVsZXRlT2JqZWN0KENOQ29udGFjdFN0b3JlKVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHJlY29yZCgpIHtcbiAgdmFyIHJlc3VsdCA9IG51bGxcbiAgdmFyIGF2YXVkaW9zZXNzaW9uID0gcGx1cy5pb3MuaW1wb3J0KCdBVkF1ZGlvU2Vzc2lvbicpXG4gIHZhciBhdmF1ZGlvID0gYXZhdWRpb3Nlc3Npb24uc2hhcmVkSW5zdGFuY2UoKVxuICB2YXIgc3RhdHVzID0gYXZhdWRpby5yZWNvcmRQZXJtaXNzaW9uKClcbiAgY29uc29sZS5sb2coJ3Blcm1pc3Npb25TdGF0dXM6JyArIHN0YXR1cylcbiAgaWYgKHN0YXR1cyA9PT0gMTk3MDE2ODk0OCkge1xuICAgIHJlc3VsdCA9IG51bGxcbiAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDE3MzU1NTI2MjgpIHtcbiAgICByZXN1bHQgPSAxXG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gMFxuICB9XG4gIHBsdXMuaW9zLmRlbGV0ZU9iamVjdChhdmF1ZGlvc2Vzc2lvbilcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBjYWxlbmRhcigpIHtcbiAgdmFyIHJlc3VsdCA9IG51bGxcbiAgdmFyIEVLRXZlbnRTdG9yZSA9IHBsdXMuaW9zLmltcG9ydCgnRUtFdmVudFN0b3JlJylcbiAgdmFyIGVrQXV0aFN0YXR1cyA9IEVLRXZlbnRTdG9yZS5hdXRob3JpemF0aW9uU3RhdHVzRm9yRW50aXR5VHlwZSgwKVxuICBpZiAoZWtBdXRoU3RhdHVzID09IDMpIHtcbiAgICByZXN1bHQgPSAxXG4gICAgY29uc29sZS5sb2coJ+aXpeWOhuadg+mZkOW3sue7j+W8gOWQrycpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coJ+aXpeWOhuadg+mZkOayoeacieW8gOWQrycpXG4gIH1cbiAgcGx1cy5pb3MuZGVsZXRlT2JqZWN0KEVLRXZlbnRTdG9yZSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBtZW1vKCkge1xuICB2YXIgcmVzdWx0ID0gbnVsbFxuICB2YXIgRUtFdmVudFN0b3JlID0gcGx1cy5pb3MuaW1wb3J0KCdFS0V2ZW50U3RvcmUnKVxuICB2YXIgZWtBdXRoU3RhdHVzID0gRUtFdmVudFN0b3JlLmF1dGhvcml6YXRpb25TdGF0dXNGb3JFbnRpdHlUeXBlKDEpXG4gIGlmIChla0F1dGhTdGF0dXMgPT0gMykge1xuICAgIHJlc3VsdCA9IDFcbiAgICBjb25zb2xlLmxvZygn5aSH5b+Y5b2V5p2D6ZmQ5bey57uP5byA5ZCvJylcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZygn5aSH5b+Y5b2V5p2D6ZmQ5rKh5pyJ5byA5ZCvJylcbiAgfVxuICBwbHVzLmlvcy5kZWxldGVPYmplY3QoRUtFdmVudFN0b3JlKVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RJT1MocGVybWlzc2lvbklEKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHN3aXRjaCAocGVybWlzc2lvbklEKSB7XG4gICAgICBjYXNlICdwdXNoJzpcbiAgICAgICAgcmVzb2x2ZShwdXNoKCkpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdsb2NhdGlvbic6XG4gICAgICAgIHJlc29sdmUobG9jYXRpb24oKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3JlY29yZCc6XG4gICAgICAgIHJlc29sdmUocmVjb3JkKCkpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdjYW1lcmEnOlxuICAgICAgICByZXNvbHZlKGNhbWVyYSgpKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYWxidW0nOlxuICAgICAgICByZXNvbHZlKGFsYnVtKCkpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdjb250YWN0JzpcbiAgICAgICAgcmVzb2x2ZShjb250YWN0KCkpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdjYWxlbmRhcic6XG4gICAgICAgIHJlc29sdmUoY2FsZW5kYXIoKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ21lbW8nOlxuICAgICAgICByZXNvbHZlKG1lbW8oKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlc29sdmUoMClcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RBbmRyb2lkKHBlcm1pc3Npb25JRCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBwbHVzLmFuZHJvaWQucmVxdWVzdFBlcm1pc3Npb25zKFxuICAgICAgW3Blcm1pc3Npb25JRF0sXG4gICAgICBmdW5jdGlvbiAocmVzdWx0T2JqKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0T2JqLmdyYW50ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZ3JhbnRlZFBlcm1pc3Npb24gPSByZXN1bHRPYmouZ3JhbnRlZFtpXVxuICAgICAgICAgIGNvbnNvbGUubG9nKCflt7Lojrflj5bnmoTmnYPpmZDvvJonICsgZ3JhbnRlZFBlcm1pc3Npb24pXG4gICAgICAgICAgcmVzdWx0ID0gMVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0T2JqLmRlbmllZFByZXNlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZGVuaWVkUHJlc2VudFBlcm1pc3Npb24gPSByZXN1bHRPYmouZGVuaWVkUHJlc2VudFtpXVxuICAgICAgICAgIGNvbnNvbGUubG9nKCfmi5Lnu53mnKzmrKHnlLPor7fnmoTmnYPpmZDvvJonICsgZGVuaWVkUHJlc2VudFBlcm1pc3Npb24pXG4gICAgICAgICAgcmVzdWx0ID0gMFxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0T2JqLmRlbmllZEFsd2F5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBkZW5pZWRBbHdheXNQZXJtaXNzaW9uID0gcmVzdWx0T2JqLmRlbmllZEFsd2F5c1tpXVxuICAgICAgICAgIGNvbnNvbGUubG9nKCfmsLjkuYXmi5Lnu53nlLPor7fnmoTmnYPpmZDvvJonICsgZGVuaWVkQWx3YXlzUGVybWlzc2lvbilcbiAgICAgICAgICByZXN1bHQgPSAtMVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZygncmVzdWx0IGVycm9yOiAnICsgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgY29kZTogZXJyb3IuY29kZSxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdvdG9BcHBQZXJtaXNzaW9uU2V0dGluZygpIHtcbiAgaWYgKHBlcm1pc3Npb24uaXNJT1MpIHtcbiAgICB2YXIgVUlBcHBsaWNhdGlvbiA9IHBsdXMuaW9zLmltcG9ydCgnVUlBcHBsaWNhdGlvbicpXG4gICAgdmFyIGFwcGxpY2F0aW9uMiA9IFVJQXBwbGljYXRpb24uc2hhcmVkQXBwbGljYXRpb24oKVxuICAgIHZhciBOU1VSTDIgPSBwbHVzLmlvcy5pbXBvcnQoJ05TVVJMJylcbiAgICB2YXIgc2V0dGluZzIgPSBOU1VSTDIuVVJMV2l0aFN0cmluZygnYXBwLXNldHRpbmdzOicpXG4gICAgYXBwbGljYXRpb24yLm9wZW5VUkwoc2V0dGluZzIpXG4gICAgcGx1cy5pb3MuZGVsZXRlT2JqZWN0KHNldHRpbmcyKVxuICAgIHBsdXMuaW9zLmRlbGV0ZU9iamVjdChOU1VSTDIpXG4gICAgcGx1cy5pb3MuZGVsZXRlT2JqZWN0KGFwcGxpY2F0aW9uMilcbiAgfSBlbHNlIHtcbiAgICB2YXIgSW50ZW50ID0gcGx1cy5hbmRyb2lkLmltcG9ydENsYXNzKCdhbmRyb2lkLmNvbnRlbnQuSW50ZW50JylcbiAgICB2YXIgU2V0dGluZ3MgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoJ2FuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MnKVxuICAgIHZhciBVcmkgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoJ2FuZHJvaWQubmV0LlVyaScpXG4gICAgdmFyIG1haW5BY3Rpdml0eSA9IHBsdXMuYW5kcm9pZC5ydW50aW1lTWFpbkFjdGl2aXR5KClcbiAgICB2YXIgaW50ZW50ID0gbmV3IEludGVudCgpXG4gICAgaW50ZW50LnNldEFjdGlvbihTZXR0aW5ncy5BQ1RJT05fQVBQTElDQVRJT05fREVUQUlMU19TRVRUSU5HUylcbiAgICB2YXIgdXJpID0gVXJpLmZyb21QYXJ0cygncGFja2FnZScsIG1haW5BY3Rpdml0eS5nZXRQYWNrYWdlTmFtZSgpLCBudWxsKVxuICAgIGludGVudC5zZXREYXRhKHVyaSlcbiAgICBtYWluQWN0aXZpdHkuc3RhcnRBY3Rpdml0eShpbnRlbnQpXG4gIH1cbn1cblxuY29uc3QgcGVybWlzc2lvbiA9IHtcbiAgZ2V0IGlzSU9TKCkge1xuICAgIHJldHVybiB0eXBlb2YgaXNJT1MgPT09ICdib29sZWFuJyA/IGlzSU9TIDogKGlzSU9TID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKCkucGxhdGZvcm0gPT09ICdpb3MnKVxuICB9LFxuICByZXF1ZXN0SU9TOiByZXF1ZXN0SU9TLFxuICByZXF1ZXN0QW5kcm9pZDogcmVxdWVzdEFuZHJvaWQsXG4gIGdvdG9BcHBTZXR0aW5nOiBnb3RvQXBwUGVybWlzc2lvblNldHRpbmcsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHBlcm1pc3Npb25cbiIsImltcG9ydCBwZXJtaXNpb24gZnJvbSAnLi9wZXJtaXNzaW9uLmpzJ1xuXG4vKipcbiAqIOaXpeacn+agvOW8j+WMluWHveaVsFxuICogQHBhcmFtIGRhdGUg5pel5pyf5a+56LGhXG4gKiBAcGFyYW0gZm9ybWF0IOaXpeacn+agvOW8j++8jOm7mOiupOS4uiBZWVlZLU1NLUREIEhIOm1tOnNzXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXREYXRlID0gKGRhdGU6IERhdGUsIGZvcm1hdCA9ICdZWVlZLU1NLUREIEhIOm1tOnNzJykgPT4ge1xuICAvLyDojrflj5blubTmnIjml6Xml7bliIbnp5LvvIzpgJrov4cgcGFkU3RhcnQg6KGlIDBcbiAgY29uc3QgeWVhciA9IFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpXG4gIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IGhvdXJzID0gU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBtaW51dGVzID0gU3RyaW5nKGRhdGUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IHNlY29uZHMgPSBTdHJpbmcoZGF0ZS5nZXRTZWNvbmRzKCkpLnBhZFN0YXJ0KDIsICcwJylcblxuICAvLyDov5Tlm57moLzlvI/ljJblkI7nmoTnu5PmnpxcbiAgcmV0dXJuIGZvcm1hdFxuICAgIC5yZXBsYWNlKCdZWVlZJywgeWVhcilcbiAgICAucmVwbGFjZSgnTU0nLCBtb250aClcbiAgICAucmVwbGFjZSgnREQnLCBkYXkpXG4gICAgLnJlcGxhY2UoJ0hIJywgaG91cnMpXG4gICAgLnJlcGxhY2UoJ21tJywgbWludXRlcylcbiAgICAucmVwbGFjZSgnc3MnLCBzZWNvbmRzKVxufVxuXG5leHBvcnQgY29uc3QgY2hlY2tQZXJtaXNzaW9uID0gYXN5bmMgKCkgPT4ge1xuICBsZXQgc3RhdHVzID0gcGVybWlzaW9uLmlzSU9TXG4gICAgPyBhd2FpdCBwZXJtaXNpb24ucmVxdWVzdElPUygnY2FtZXJhJylcbiAgICA6IGF3YWl0IHBlcm1pc2lvbi5yZXF1ZXN0QW5kcm9pZCgnYW5kcm9pZC5wZXJtaXNzaW9uLkNBTUVSQScpXG5cbiAgaWYgKHN0YXR1cyA9PT0gbnVsbCB8fCBzdGF0dXMgPT09IDEpIHtcbiAgICBzdGF0dXMgPSAxXG4gIH0gZWxzZSB7XG4gICAgdW5pLnNob3dNb2RhbCh7XG4gICAgICBjb250ZW50OiAnQ2FtZXJhIHBlcm1pc3Npb24gcmVxdWlyZWQnLFxuICAgICAgY29uZmlybVRleHQ6ICdTZXR0aW5nJyxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgaWYgKHJlcy5jb25maXJtKSB7XG4gICAgICAgICAgcGVybWlzaW9uLmdvdG9BcHBTZXR0aW5nKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KVxuICB9XG4gIHJldHVybiBzdGF0dXNcbn1cbiIsImltcG9ydCB0eXBlIHsgQWxpeXVuT3NzU2lnbmF0dXJlIH0gZnJvbSAnQC90eXBlcy9hbGl5dW5Pc3NTaWduYXR1cmUnXG5pbXBvcnQgdHlwZSB7IEJpbmRQYXJhbXMgfSBmcm9tICdAL3R5cGVzL2JpbmRQYXJhbXMnXG5pbXBvcnQgdHlwZSB7IFNwYWNlcyB9IGZyb20gJ0AvdHlwZXMvd2FyZWhvdXNlU3BhY2UnXG5pbXBvcnQgeyBodHRwIH0gZnJvbSAnQC91dGlscy9odHRwJ1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnXG5cbi8qKlxuICogT3NzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBbGl5dW5Pc3NTaWduYXR1cmUgPSAoKSA9PiB7XG4gIHJldHVybiBodHRwPEFsaXl1bk9zc1NpZ25hdHVyZT4oe1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgdXJsOiAnL2FkbWluL0NvbmZpZy9nZXRBbGl5dW5Pc3NTaWduYXR1cmUnLFxuICB9KVxufVxuXG4vKipcbiAqIOaJk+WNsOWwvueoi+mdouWNlVxuICovXG5leHBvcnQgY29uc3QgcHJpbnRXYXliaWxsTGFiZWwgPSAoZGF0YToge1xuICBvcmRlcl9ubzogc3RyaW5nXG4gIHByaW50ZXJfY29kZTogUmVmPG51bWJlciwgbnVtYmVyPlxufSkgPT4ge1xuICByZXR1cm4gaHR0cDx7IGV4cHJlc3NfbGFiZWw6IHN0cmluZyB9Pih7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiAnL2FkbWluL29yZGVyLlNjYW5PcmRlci9wcmludFdheWJpbGxMYWJlbCcsXG4gICAgZGF0YSxcbiAgfSlcbn1cbi8qKlxuICog56ew6YeNXG4gKi9cbmV4cG9ydCBjb25zdCB3ZWlnaCA9IChkYXRhOiB7XG4gIG9yZGVyX25vOiBzdHJpbmdcbiAgd2VpZ2h0OiBzdHJpbmdcbiAgaXNfc2F2ZV9nb29kczogbnVtYmVyXG4gIGltYWdlczogYW55W11cbn0pID0+IHtcbiAgcmV0dXJuIGh0dHA8YW55Pih7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiAnL2FkbWluL29yZGVyLnNjYW5PcmRlci93ZWlnaCcsXG4gICAgZGF0YSxcbiAgfSlcbn1cbi8qKlxuICog5Ye65bqTXG4gKi9cbmV4cG9ydCBjb25zdCBvdXRTdG9jayA9IChkYXRhOiB7XG4gIG9yZGVyX25vOiBzdHJpbmdcbiAgYmF0Y2hfbnVtYmVyOiBzdHJpbmdcbiAgZXhwcmVzc19jb21wYW55X2lkPzogbnVtYmVyXG4gIGV4cHJlc3Nfbm8/OiBzdHJpbmdcbiAgZXhwcmVzc190cmFja2luZ19udW1iZXI/OiBzdHJpbmdcbn0pID0+IHtcbiAgcmV0dXJuIGh0dHA8YW55Pih7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiAnL2FkbWluL29yZGVyLnNjYW5PcmRlci9vdXRTdG9jaycsXG4gICAgZGF0YSxcbiAgfSlcbn1cbi8qKlxuICog5YWl5bqTXG4gKi9cbmV4cG9ydCBjb25zdCBpbnN0b2NrID0gKGRhdGE6IHsgb3JkZXJfbm86IHN0cmluZzsgc3BhY2VfY29kZTogc3RyaW5nOyBpbWFnZXM6IGFueVtdIH0pID0+IHtcbiAgcmV0dXJuIGh0dHA8eyBleHByZXNzX2xhYmVsOiBzdHJpbmc7IG1zZzogc3RyaW5nIH0+KHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICcvYWRtaW4vb3JkZXIuc2Nhbk9yZGVyL2luc3RvY2snLFxuICAgIGRhdGEsXG4gIH0pXG59XG4vKipcbiAqIOiOt+WPliDmiavmj48g5omY55uY5Y+344CB5om55qyh5Y+3XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCaW5kUGFyYW1zID0gKCkgPT4ge1xuICByZXR1cm4gaHR0cDxCaW5kUGFyYW1zPih7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICB1cmw6ICcvYWRtaW4vb3JkZXIuc2Nhbk9yZGVyL2dldEJpbmRQYXJhbXMnLFxuICB9KVxufVxuLyoqXG4gKiDojrflj5borqLljZXor6bmg4VcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9yZGVySW5mbyA9IChkYXRhOiB7IG9yZGVyX25vOiBzdHJpbmcgfSkgPT4ge1xuICByZXR1cm4gaHR0cDxCaW5kUGFyYW1zPih7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICB1cmw6ICcvYWRtaW4vb3JkZXIuc2Nhbk9yZGVyL2dldE9yZGVySW5mbycsXG4gICAgZGF0YSxcbiAgfSlcbn1cbi8qKlxuICog5qOA5p+l5piv5ZCm5a2Y5Zyo54mp5ZOBXG4gKiBAcGFyYW0gb3JkZXJfbm8g6K6i5Y2V5Y+3XG4gKi9cbmV4cG9ydCBjb25zdCBjaGVja1dheWJpbGxHb29kcyA9IChvcmRlcl9ubzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBodHRwPHsgaXNfZ29vZHNfZW1wdHk6IGJvb2xlYW4gfT4oe1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogJy9hZG1pbi9vcmRlci5zY2FuT3JkZXIvY2hlY2tXYXliaWxsR29vZHMnLFxuICAgIGRhdGE6IHsgb3JkZXJfbm8gfSxcbiAgfSlcbn1cbi8qKlxuICog5LuT5L2N57yW56CBXG4gKiBAcGFyYW0gY29kZSDku5PkvY3nvJbnoIFcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFdhcmVob3VzZVNwYWNlID0gKGNvZGUgPSAnJykgPT4ge1xuICByZXR1cm4gaHR0cDxTcGFjZXM+KHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICcvYWRtaW4vb3JkZXIuU2Nhbk9yZGVyL2dldFdhcmVob3VzZVNwYWNlJyxcbiAgICBkYXRhOiB7IGNvZGUgfSxcbiAgfSlcbn1cbiIsImNvbnN0IGhleExpc3Q6IHN0cmluZ1tdID0gW11cbmZvciAobGV0IGkgPSAwOyBpIDw9IDE1OyBpKyspIHtcbiAgaGV4TGlzdFtpXSA9IGkudG9TdHJpbmcoMTYpXG59XG5cbi8qKlxuICog55Sf5oiQ6ZqP5py65pWwXG4gKiBAcGFyYW0gbWluIOacgOWwj+WAvFxuICogQHBhcmFtIG1heCDmnIDlpKflgLxcbiAqIEByZXR1cm5zIOeUn+aIkOeahOmaj+acuuaVsFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tTnVtKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gcGFyc2VJbnQoKE1hdGgucmFuZG9tKCkgKiBtaW4gKyAxKS50b1N0cmluZygpLCAxMClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHBhcnNlSW50KChNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKS50b1N0cmluZygpLCAxMClcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwXG4gICAgICBicmVha1xuICB9XG59XG5cbi8qKlxuICog55Sf5oiQ5YWo55CD5ZSv5LiA5qCH6K+GXG4gKiBAcmV0dXJucyB1dWlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1dWlkKCk6IHN0cmluZyB7XG4gIGxldCB1dWlkID0gJydcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMzY7IGkrKykge1xuICAgIGlmIChpID09PSA5IHx8IGkgPT09IDE0IHx8IGkgPT09IDE5IHx8IGkgPT09IDI0KSB7XG4gICAgICB1dWlkICs9ICctJ1xuICAgIH0gZWxzZSBpZiAoaSA9PT0gMTUpIHtcbiAgICAgIHV1aWQgKz0gNFxuICAgIH0gZWxzZSBpZiAoaSA9PT0gMjApIHtcbiAgICAgIHV1aWQgKz0gaGV4TGlzdFsoTWF0aC5yYW5kb20oKSAqIDQpIHwgOF1cbiAgICB9IGVsc2Uge1xuICAgICAgdXVpZCArPSBoZXhMaXN0WyhNYXRoLnJhbmRvbSgpICogMTYpIHwgMF1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHV1aWRcbn1cbiIsIjx0ZW1wbGF0ZT5cbiAgPHZpZXcgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8dmlldyBjbGFzcz1cImV4YW1wbGVcIj5cbiAgICAgIDwhLS0g5Z+656GA6KGo5Y2V5qCh6aqMIC0tPlxuICAgICAgPHVuaS1mb3Jtc1xuICAgICAgICByZWY9XCJ2YWxpRm9ybVwiXG4gICAgICAgIGxhYmVsLWFsaWduPVwicmlnaHRcIlxuICAgICAgICBsYWJlbC13aWR0aD1cIjgwcHhcIlxuICAgICAgICA6cnVsZXM9XCJydWxlc1wiXG4gICAgICAgIDptb2RlbFZhbHVlPVwidmFsaUZvcm1EYXRhXCJcbiAgICAgID5cbiAgICAgICAgPHVuaS1mb3Jtcy1pdGVtIGxhYmVsPVwi5Y2V5Y+3XCIgcmVxdWlyZWQgbmFtZT1cIm9yZGVyTnVtXCI+XG4gICAgICAgICAgPHVuaS1lYXN5aW5wdXRcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEub3JkZXJOdW1cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXljZXlj7dcIlxuICAgICAgICAgICAgc3VmZml4SWNvbj1cInNjYW5cIlxuICAgICAgICAgICAgOmZvY3VzPVwiZm9jdXNUeXBlXCJcbiAgICAgICAgICAgIEBpY29uQ2xpY2s9XCJzY2FuXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxuICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLku5PkvY3nvJbnoIFcIiBuYW1lPVwic3BhY2VfY29kZVwiPlxuICAgICAgICAgIDx1bmktZGF0YS1zZWxlY3RcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEuc3BhY2VfY29kZVwiXG4gICAgICAgICAgICA6bG9jYWxkYXRhPVwic3BhY2VzXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oup5LuT5L2N57yW56CBXCJcbiAgICAgICAgICA+PC91bmktZGF0YS1zZWxlY3Q+XG4gICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG5cbiAgICAgICAgPHVuaS1mb3Jtcy1pdGVtIGxhYmVsPVwi5Zu+54mHXCIgbmFtZT1cImltYWdlc1wiPlxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXBsb2FkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmV2aWV3XCI+XG4gICAgICAgICAgICAgIDx2aWV3IHYtZm9yPVwiKGltZywgaW5kZXgpIGluIGltYWdlc1wiIDprZXk9XCJpbmRleFwiIGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGltYWdlXG4gICAgICAgICAgICAgICAgICA6c3JjPVwiaW1nLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWltYWdlXCJcbiAgICAgICAgICAgICAgICAgIG1vZGU9XCJhc3BlY3RGaWxsXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljaz1cIm9wZW5QcmV2aWV3KGltZy5wYXRoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgIDpwZXJjZW50PVwiaW1nLnByb2dyZXNzIHx8IDBcIlxuICAgICAgICAgICAgICAgICAgOmFjdGl2ZUNvbG9yPVwiTnVtYmVyKGltZy5wcm9ncmVzcyB8fCAwKSA9PT0gMTAwID8gJyMwMGZmMDAnIDogJyMxMEFFRkYnXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8dGV4dCB2LWlmPVwiaW1nLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnXCI+MTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dW5pLWljb25zXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUltYWdlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIjIwXCJcbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwicmVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgICAgICAgIDx2aWV3XG4gICAgICAgICAgICAgICAgdi1pZj1cImltYWdlcy5sZW5ndGggPCBtYXhJbWFnZXNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hvb3NlLWltYWdlLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiY2hvb3NlSW1hZ2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHVuaS1pY29ucyB0eXBlPVwicGx1c2VtcHR5XCIgc2l6ZT1cIjQwXCIgY29sb3I9XCIjY2NjXCIgLz5cbiAgICAgICAgICAgICAgPC92aWV3PlxuICAgICAgICAgICAgPC92aWV3PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9XCJwYWRkaW5nLXRvcDogOHB4XCI+5pyA5aSa6YCJ5oupNuW8oOWbvueJhzwvdGV4dD5cbiAgICAgICAgICAgIDwhLS0g5pS+5aSn6aKE6KeIIC0tPlxuICAgICAgICAgICAgPHZpZXcgdi1pZj1cInByZXZpZXdJbWFnZVwiIGNsYXNzPVwicHJldmlldy1tb2RhbFwiIEBjbGljaz1cImNsb3NlUHJldmlld1wiPlxuICAgICAgICAgICAgICA8aW1hZ2VcbiAgICAgICAgICAgICAgICA6c3JjPVwicHJldmlld0ltYWdlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInByZXZpZXctbGFyZ2VcIlxuICAgICAgICAgICAgICAgIG1vZGU9XCJhc3BlY3RGaXRcIlxuICAgICAgICAgICAgICAgIEBjbGljay5zdG9wPVwiY2xvc2VQcmV2aWV3XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG4gICAgICA8L3VuaS1mb3Jtcz5cbiAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImluZm9cIiBAY2xpY2s9XCJyZXNldFwiPumHjee9rjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwib25zdWJtaXRcIiA6bG9hZGluZz1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8dW5pLWljb25zIHYtaWY9XCIhbG9hZGluZ1wiIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiIHNpemU9XCIxOFwiIGNvbG9yPVwid2hpdGVcIj48L3VuaS1pY29ucz5cbiAgICAgICAgICDmj5DkuqRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3ZpZXc+XG4gICAgPC92aWV3PlxuXG4gICAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XG4gICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiBoaXN0b3J5TGlzdC5zbGljZSgwLCA1KVwiIDprZXk9XCJpXCI+XG4gICAgICAgIDx0ZXh0IGNsYXNzPVwiY29kZVwiIDpzdHlsZT1cInsgY29sb3I6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2JyB9XCI+XG4gICAgICAgICAge3sgaXRlbS5vcmRlck51bSB9fVxuICAgICAgICAgIDx0ZXh0IHYtaWY9XCJpdGVtLnNwYWNlXCI+5LuT5L2N57yW56CBOiB7eyBpdGVtLnNwYWNlIH19PC90ZXh0PlxuICAgICAgICAgIHt7IGl0ZW0udHlwZSB9fVxuICAgICAgICA8L3RleHQ+XG5cbiAgICAgICAgPHVuaS1pY29uc1xuICAgICAgICAgIHYtaWY9XCJpdGVtLnN0YXR1c1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrbWFya2VtcHR5XCJcbiAgICAgICAgICBjbGFzcz1cInN0YXR1c1wiXG4gICAgICAgICAgc2l6ZT1cIjE2XCJcbiAgICAgICAgICBjb2xvcj1cImdyZWVuXCJcbiAgICAgICAgPjwvdW5pLWljb25zPlxuICAgICAgICA8dGV4dCBjbGFzcz1cInN0YXR1cyBmYWlsXCIgdi1lbHNlPkY8L3RleHQ+XG5cbiAgICAgICAgPHRleHQgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBycHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj5cbiAgICAgICAgICB7eyAnXFxyXFxuJyArIGl0ZW0uY3JlYXRlVGltZSB9fVxuICAgICAgICA8L3RleHQ+XG4gICAgICA8L3ZpZXc+XG4gICAgPC92aWV3PlxuXG4gICAgPHVuaS1wb3B1cCByZWY9XCJtZXNzYWdlXCIgdHlwZT1cIm1lc3NhZ2VcIj5cbiAgICAgIDx1bmktcG9wdXAtbWVzc2FnZVxuICAgICAgICA6dHlwZT1cIm1lc3NhZ2VUeXBlXCJcbiAgICAgICAgOm1lc3NhZ2U9XCJtZXNzYWdlVGV4dFwiXG4gICAgICAgIDpkdXJhdGlvbj1cIjIwMDBcIlxuICAgICAgPjwvdW5pLXBvcHVwLW1lc3NhZ2U+XG4gICAgPC91bmktcG9wdXA+XG4gIDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyByZWYsIHJlYWN0aXZlLCBuZXh0VGljaywgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBvblNob3csIG9uSGlkZSwgb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXG5pbXBvcnQgeyBjaGVja1Blcm1pc3Npb24gfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0QWxpeXVuT3NzU2lnbmF0dXJlLCBpbnN0b2NrLCBnZXRXYXJlaG91c2VTcGFjZSB9IGZyb20gJ0Avc2VydmljZXMvd2VpZ2gnXG5cbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAL3V0aWxzL3JhbmRvbSdcbmNvbnN0IG1lc3NhZ2UgPSByZWYoKVxuY29uc3QgdmFsaUZvcm0gPSByZWYoKVxuY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSlcbmNvbnN0IGltYWdlcyA9IHJlZihbXSBhcyBhbnkpXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZignJylcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKCcnKVxuY29uc3Qgc3BhY2VzID0gcmVmKFtdIGFzIGFueSlcbmNvbnN0IHByZXZpZXdJbWFnZSA9IHJlZihudWxsKVxuY29uc3QgbWF4SW1hZ2VzID0gcmVmKDYpIC8vIOacgOWkp+S4iuS8oOWbvueJh+aVsOmHj1xuY29uc3QgaGlzdG9yeUxpc3QgPSByZWYoW10gYXMgYW55KVxuY29uc3QgZm9jdXNUeXBlID0gcmVmKHRydWUpXG5jb25zdCByZXN1bHQgPSByZWYoKVxuLy8g5qCh6aqM6KGo5Y2V5pWw5o2uXG5jb25zdCB2YWxpRm9ybURhdGEgPSByZWFjdGl2ZSh7XG4gIGltYWdlczogW10sXG4gIG9yZGVyTnVtOiAnJyxcbiAgc3BhY2VfY29kZTogJycsXG4gIHdlaWdodDogJycsXG4gIHR5cGluZzogdHJ1ZSxcbn0pXG5cbmNvbnN0IHJ1bGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG9yZGVyTnVtOiB7XG4gICAgICBydWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiAn5Y2V5Y+35LiN6IO95Li656m6JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfVxufSlcbmNvbnN0IHNwYWNlUmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IHNwYWNlcy52YWx1ZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUgPT09IHZhbGlGb3JtRGF0YS5zcGFjZV9jb2RlKSBhcyBhbnlcbiAgICByZXR1cm4gcmVzPy50ZXh0XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvaW5ib3VuZC9pbmJvdW5kLnZ1ZToxNjMnLGUpXG4gICAgcmV0dXJuICcnXG4gIH1cbn0pXG5vblNob3coYXN5bmMgKCkgPT4ge1xuICBmb2N1c1R5cGUudmFsdWUgPSB0cnVlXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICBhd2FpdCBfZ2V0V2FyZWhvdXNlU3BhY2UoKVxufSlcbm9uSGlkZSgoKSA9PiB7XG4gIGZvY3VzVHlwZS52YWx1ZSA9IGZhbHNlXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxufSlcbm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCgoZXZlbnQ6IGFueSkgPT4ge1xuICBpZiAoZXZlbnQuaW5kZXggPT09IDApIHtcbiAgICB1bmkubmF2aWdhdGVUbyh7XG4gICAgICB1cmw6ICcvcGFnZXMvaW5ib3VuZC9sb2dMaXN0JyxcbiAgICB9KVxuICB9XG59KVxuXG5jb25zdCBfZ2V0V2FyZWhvdXNlU3BhY2UgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldFdhcmVob3VzZVNwYWNlKClcbiAgaWYgKHJlcy5jb2RlID09PSAxKSB7XG4gICAgc3BhY2VzLnZhbHVlID0gcmVzLmRhdGEuc3BhY2VzLm1hcCgoaXRlbTogeyBuYW1lOiBhbnk7IGNvZGU6IGFueSB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiBpdGVtLm5hbWUsXG4gICAgICAgIHZhbHVlOiBpdGVtLmNvZGUsXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCByZXNldCA9ICgpID0+IHtcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG4gIGZvY3VzVHlwZS52YWx1ZSA9IGZhbHNlXG4gIGltYWdlcy52YWx1ZSA9IFtdXG4gIHZhbGlGb3JtRGF0YS5vcmRlck51bSA9ICcnXG4gIHZhbGlGb3JtRGF0YS53ZWlnaHQgPSAnJ1xuICB2YWxpRm9ybURhdGEudHlwaW5nID0gdHJ1ZVxuICBuZXh0VGljaygoKSA9PiB7XG4gICAgZm9jdXNUeXBlLnZhbHVlID0gdHJ1ZVxuICB9KVxufVxuXG5jb25zdCBzY2FuID0gYXN5bmMgKCkgPT4ge1xuXG4gIGxldCBzdGF0dXMgPSBhd2FpdCBjaGVja1Blcm1pc3Npb24oKVxuICBpZiAoc3RhdHVzICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB1bmkuc2NhbkNvZGUoe1xuICAgIHN1Y2Nlc3M6IChyZXM6IGFueSkgPT4ge1xuICAgICAgcmVzdWx0LnZhbHVlID0gcmVzLnJlc3VsdFxuICAgICAgdmFsaUZvcm1EYXRhLm9yZGVyTnVtID0gcmVzLnJlc3VsdFxuICAgIH0sXG4gICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgLy8g6ZyA6KaB5rOo5oSP55qE5piv5bCP56iL5bqP5omr56CB5LiN6ZyA6KaB55Sz6K+355u45py65p2D6ZmQXG4gICAgfSxcbiAgfSlcbn1cblxubGV0IHN0OiBudW1iZXJcbmNvbnN0IHdhcmVob3VzZVNjYW4gPSBhc3luYyAoKSA9PiB7XG4gIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgaW5zdG9ja1NjYW4oKVxufVxuXG5jb25zdCBpbnN0b2NrU2NhbiA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgaW1hZ2VzID0gZ2V0SW1hZ2VzKClcbiAgbGV0IGFsbEltZ1ZlcmlmeSA9IHRydWVcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWltYWdlc1tpXS5zYXZlUGF0aCkge1xuICAgICAgYWxsSW1nVmVyaWZ5ID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgaWYgKCFhbGxJbWdWZXJpZnkpIHtcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICflm77niYfov5jmsqHkuIrkvKDlrozmr5XvvIzor7fnqI3lkI4uLi4nXG4gICAgbWVzc2FnZS52YWx1ZS5vcGVuKClcbiAgICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCByZXMgPSBhd2FpdCBpbnN0b2NrKHtcbiAgICBvcmRlcl9ubzogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgIHNwYWNlX2NvZGU6IHZhbGlGb3JtRGF0YS5zcGFjZV9jb2RlLFxuICAgIGltYWdlcyxcbiAgfSlcblxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgaWYgKHJlcy5jb2RlID09IDEpIHtcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XG4gICAgICBvcmRlck51bTogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHNwYWNlOiBzcGFjZVJlcy52YWx1ZSxcbiAgICAgIHR5cGU6ICflhaXlupMnLFxuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgIH1cbiAgICBoaXN0b3J5TGlzdC52YWx1ZS51bnNoaWZ0KGhpc3RvcnlJdGVtKVxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnaW5ib3VuZEhpc3RvcnknLCBoaXN0b3J5TGlzdC52YWx1ZSlcbiAgICBnZXRIaXN0b3J5KClcbiAgICBzdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVzZXQoKVxuICAgICAgc3QgJiYgY2xlYXJUaW1lb3V0KHN0KVxuICAgIH0sIDEwMDApXG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXG4gICAgbWVzc2FnZS52YWx1ZS5vcGVuKClcbiAgICBjb25zdCBoaXN0b3J5SXRlbSA9IHtcbiAgICAgIG9yZGVyTnVtOiB2YWxpRm9ybURhdGEub3JkZXJOdW0sXG4gICAgICBjcmVhdGVUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgc3BhY2U6IHNwYWNlUmVzLnZhbHVlLFxuICAgICAgdHlwZTogJ+WFpeW6kycsXG4gICAgICBzdGF0dXM6IGZhbHNlLFxuICAgIH1cbiAgICBoaXN0b3J5TGlzdC52YWx1ZS51bnNoaWZ0KGhpc3RvcnlJdGVtKVxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnaW5ib3VuZEhpc3RvcnknLCBoaXN0b3J5TGlzdC52YWx1ZSlcbiAgICBnZXRIaXN0b3J5KClcbiAgICBzdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVzZXQoKVxuICAgICAgc3QgJiYgY2xlYXJUaW1lb3V0KHN0KVxuICAgIH0sIDEwMDApXG4gIH1cbn1cblxuY29uc3Qgb25zdWJtaXQgPSAoKSA9PiB7XG4gIHZhbGlGb3JtLnZhbHVlXG4gICAgLnZhbGlkYXRlKClcbiAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgIHdhcmVob3VzZVNjYW4oKVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xuICAgICAgX19mX18oJ2xvZycsJ2F0IHBhZ2VzL2luYm91bmQvaW5ib3VuZC52dWU6MzAwJywnZXJyJywgZXJyKVxuICAgIH0pXG59XG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xuICBoaXN0b3J5TGlzdC52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygnaW5ib3VuZEhpc3RvcnknKVxufVxuY29uc3QgZ2V0SW1hZ2VzID0gKCkgPT4ge1xuICBjb25zdCByZXMgPSBpbWFnZXMudmFsdWUubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgc2F2ZVBhdGg6IGl0ZW0uc2VydmVyVXJsLFxuICAgICAgZmlsZVNpemU6IGl0ZW0uc2l6ZSxcbiAgICAgIG1pbWVUeXBlOiBpdGVtLnR5cGUsXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzXG59XG5cbi8vIOiOt+WPlumYv+mHjOS6kW9zc+etvuWQjVxuY29uc3QgX2dldEFsaXl1bk9zc1NpZ25hdHVyZSA9IGFzeW5jIChyYXdGaWxlczogYW55W10pID0+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0QWxpeXVuT3NzU2lnbmF0dXJlKClcbiAgY29uc3Qgc2lnbmF0dXJlID0gcmVzLmRhdGEuc2lnbmF0dXJlXG5cbiAgY29uc3QgdXBsb2FkUHJvbWlzZXMgPSByYXdGaWxlcy5tYXAoKGltYWdlOiBhbnkpID0+IHtcbiAgICByZXR1cm4gdXBMb2FkRmlsZShzaWduYXR1cmUsIGltYWdlKVxuICB9KVxuXG4gIFByb21pc2UuYWxsKHVwbG9hZFByb21pc2VzKVxuICAgIC50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvaW5ib3VuZC9pbmJvdW5kLnZ1ZTozMjknLCfmiYDmnInlm77niYfliqDovb3miJDlip86JywgcmVzdWx0cylcbiAgICAgIHVuaS5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogJ+WKoOi9veaIkOWKnycsXG4gICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgIH0pXG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBfX2ZfXygnZXJyb3InLCdhdCBwYWdlcy9pbmJvdW5kL2luYm91bmQudnVlOjMzNicsJ+WKoOi9veWksei0pTonLCBlcnJvcilcbiAgICAgIHVuaS5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogJ+WKoOi9veWksei0pScsXG4gICAgICAgIGljb246ICdub25lJyxcbiAgICAgIH0pXG4gICAgfSlcbn1cbmNvbnN0IHVwTG9hZEZpbGUgPSAoXG4gIHNpZ25hdHVyZTogeyBwb2xpY3k6IGFueTsgc2lnbmF0dXJlOiBhbnk7IG9zc0FjY2Vzc0tleUlkOiBhbnk7IGRpcjogYW55OyBob3N0OiBhbnkgfSxcbiAgaW1hZ2U6IHtcbiAgICBzZXJ2ZXJVcmw6IHN0cmluZ1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIGZpbGU6IGFueVxuICAgIHBhdGg6IGFueVxuICAgIHByb2dyZXNzOiBudW1iZXJcbiAgfSxcbikgPT4ge1xuICBjb25zdCBmaWxlRGF0YSA9IHtcbiAgICBwb2xpY3k6IHNpZ25hdHVyZS5wb2xpY3ksXG4gICAgc2lnbmF0dXJlOiBzaWduYXR1cmUuc2lnbmF0dXJlLFxuICAgIG9zc2FjY2Vzc0tleUlkOiBzaWduYXR1cmUub3NzQWNjZXNzS2V5SWQsXG4gICAga2V5OiBzaWduYXR1cmUuZGlyICsgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTUREJykgKyAnLycgKyB1dWlkKCkgKyAnXycgKyBpbWFnZS5uYW1lLFxuICAgIGRpcjogc2lnbmF0dXJlLmRpcixcbiAgICBob3N0OiBzaWduYXR1cmUuaG9zdCxcbiAgICBmaWxlOiBpbWFnZS5maWxlLFxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IG5hbWUgPSBpbWFnZS5uYW1lXG5cbiAgICBuYW1lID0gJ2ZpbGUnXG5cbiAgICBjb25zdCB1cGxvYWRUYXNrID0gdW5pLnVwbG9hZEZpbGUoe1xuICAgICAgdXJsOiBzaWduYXR1cmUuaG9zdCwgLy8g5L2g55qE5LiK5Lyg5o6l5Y+j5Zyw5Z2AXG4gICAgICBmaWxlUGF0aDogaW1hZ2UucGF0aCxcbiAgICAgIG5hbWU6IG5hbWUsIC8vIOi/memHjOagueaNruWQjuerr+mcgOimgeeahOWtl+auteadpeWumuS5iVxuICAgICAgZm9ybURhdGE6IGZpbGVEYXRhLFxuICAgICAgc3VjY2VzczogKHVwbG9hZEZpbGVSZXMpID0+IHtcbiAgICAgICAgaWYgKHVwbG9hZEZpbGVSZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHVwbG9hZEZpbGVSZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgaW1hZ2UhLnNlcnZlclVybCA9IGZpbGVEYXRhLmtleVxuICAgICAgICAgIHJlc29sdmUodXBsb2FkRmlsZVJlcylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QodXBsb2FkRmlsZVJlcylcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZhaWw6IChlcnJvcikgPT4ge1xuICAgICAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvaW5ib3VuZC9pbmJvdW5kLnZ1ZTozODEnLCdlcnJvcisrJywgZXJyb3IpXG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0sXG4gICAgICAvLyDmm7TmlrDkuIrkvKDov5vluqZcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIF9fZl9fKCdsb2cnLCdhdCBwYWdlcy9pbmJvdW5kL2luYm91bmQudnVlOjM4NicsJ2NvbXBsZXRlLS0tJylcbiAgICAgICAgaW1hZ2UucHJvZ3Jlc3MgPSAxMDBcbiAgICAgIH0sXG4gICAgfSlcbiAgICAvLyDlj6/pgInvvJrnm5HlkKzkuIrkvKDov5vluqblj5jljJZcbiAgICB1cGxvYWRUYXNrLm9uUHJvZ3Jlc3NVcGRhdGUoKHByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgIGltYWdlLnByb2dyZXNzID0gcHJvZ3Jlc3NFdmVudC5wcm9ncmVzcyAvLyDmm7TmlrDov5vluqZcbiAgICB9KVxuICB9KVxufVxuY29uc3QgY2hvb3NlSW1hZ2UgPSAoKSA9PiB7XG4gIHVuaS5jaG9vc2VJbWFnZSh7XG4gICAgY291bnQ6IG1heEltYWdlcy52YWx1ZSAtIGltYWdlcy52YWx1ZS5sZW5ndGgsXG4gICAgc3VjY2VzczogKHJlczogYW55KSA9PiB7XG4gICAgICBpbWFnZXMudmFsdWUgPSBpbWFnZXMudmFsdWUuY29uY2F0KFxuICAgICAgICByZXMudGVtcEZpbGVzLm1hcCgoaXRlbTogeyBzaXplOiBhbnk7IHBhdGg6IHN0cmluZzsgbmFtZTogYW55OyB0eXBlOiBhbnkgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHNpemU6IGl0ZW0uc2l6ZSxcbiAgICAgICAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIHByb2dyZXNzOiAwLFxuICAgICAgICAgICAgZmlsZTogaXRlbSxcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIC8v5paH5Lu25ZCN5pON5L2cXG4gICAgICAgICAgLy/ojrflj5bmlofku7blkI7nvIBcbiAgICAgICAgICBjb25zdCBzdWZmaXggPSBpdGVtLnBhdGguc3Vic3RyaW5nKGl0ZW0ucGF0aC5sYXN0SW5kZXhPZignLicpICsgMSlcbiAgICAgICAgICAvL+iOt+WPluaWh+S7tuWQjVxuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gaXRlbS5wYXRoLnN1YnN0cmluZyhpdGVtLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpXG4gICAgICAgICAgcmVzLm5hbWUgPSBmaWxlTmFtZVxuICAgICAgICAgIHJlcy50eXBlID0gc3VmZml4XG5cblxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICBjb25zdCBwYWRkaW5nSW1hZ2VzID0gaW1hZ2VzLnZhbHVlLmZpbHRlcigoaW1hZ2U6IGFueSkgPT4gaW1hZ2UucHJvZ3Jlc3MgPT09IDApXG5cbiAgICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgX2dldEFsaXl1bk9zc1NpZ25hdHVyZShwYWRkaW5nSW1hZ2VzKVxuICAgICAgfSlcbiAgICB9LFxuICAgIGZhaWw6IChlcnIpID0+IHtcbiAgICAgIF9fZl9fKCdlcnJvcicsJ2F0IHBhZ2VzL2luYm91bmQvaW5ib3VuZC52dWU6NDMxJyxlcnIpXG4gICAgfSxcbiAgfSlcbn1cbmNvbnN0IGRlbGV0ZUltYWdlID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgaW1hZ2VzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbn1cblxuY29uc3Qgb3BlblByZXZpZXcgPSAoaW1hZ2U6IG51bGwpID0+IHtcbiAgcHJldmlld0ltYWdlLnZhbHVlID0gaW1hZ2UgLy8g6K6+572u5pS+5aSn6aKE6KeI55qE5Zu+54mHXG59XG5jb25zdCBjbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gIHByZXZpZXdJbWFnZS52YWx1ZSA9IG51bGwgLy8g5YWz6Zet6aKE6KeIXG59XG48L3NjcmlwdD5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmV4YW1wbGUge1xuICBwYWRkaW5nOiAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnV0dG9uLWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG5cbiAgYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAzNXB4O1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgZm9udC1zaXplOiAyNHJweDtcbiAgfVxuXG4gIC51bmktaWNvbnMge1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxufVxuXG4ud2VpZ2h0LXJpZ2h0IHtcbiAgcGFkZGluZy1yaWdodDogMTBycHg7XG59XG5cbi5oaXN0b3J5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xuXG4gIC50aXRsZSB7XG4gICAgcGFkZGluZzogMjBycHg7XG4gICAgZm9udC1zaXplOiAyNHJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLmNvZGUge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAuaXRlbSB7XG4gICAgcGFkZGluZzogMjBycHg7XG4gICAgZm9udC1zaXplOiAyMHJweDtcbiAgICBjb2xvcjogIzY2NjtcblxuICAgIC5zdGF0dXMge1xuICAgICAgcGFkZGluZy1sZWZ0OiAyMHJweDtcbiAgICB9XG5cbiAgICAuZmFpbCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmMDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuPHN0eWxlIHNjb3BlZD5cbi51cGxvYWQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMTZweDtcbn1cblxuLnByZXZpZXcge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5pbWFnZS1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLnByZXZpZXctaW1hZ2Uge1xuICB3aWR0aDogMTMwcnB4O1xuICBoZWlnaHQ6IDEzMHJweDtcbn1cblxuLmRlbGV0ZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jaG9vc2UtaW1hZ2UtY29udGFpbmVyIHtcbiAgd2lkdGg6IDEzMHJweDtcbiAgLyog5LiO5Zu+54mH5aSn5bCP5LiA6Ie0ICovXG4gIGhlaWdodDogMTMwcnB4O1xuICAvKiDkuI7lm77niYflpKflsI/kuIDoh7QgKi9cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC8qIOiDjOaZr+minOiJsuS4uueZveiJsiAqL1xuICBib3JkZXI6IDFweCBkYXNoZWQgI2NjY2NjYztcbiAgLyog6Jma57q/6L655qGGICovXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgLyog5ZyG6KeSICovXG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnByZXZpZXctbW9kYWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpO1xuICAvKiDljYrpgI/mmI7og4zmma8gKi9cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDk5OTtcbn1cblxuLnByZXZpZXctbGFyZ2Uge1xuICBtYXgtd2lkdGg6IDkwJTtcbiAgLyog5pyA5aSn5a695bqmICovXG4gIG1heC1oZWlnaHQ6IDkwJTtcbiAgLyog5pyA5aSn6auY5bqmICovXG59XG5cbi5wcm9ncmVzcy1iYXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8dmlldyBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgIDx2aWV3IGNsYXNzPVwiZXhhbXBsZVwiPlxuICAgICAgPCEtLSDln7rnoYDooajljZXmoKHpqowgLS0+XG4gICAgICA8dW5pLWZvcm1zXG4gICAgICAgIHJlZj1cInZhbGlGb3JtXCJcbiAgICAgICAgbGFiZWwtYWxpZ249XCJyaWdodFwiXG4gICAgICAgIGxhYmVsLXdpZHRoPVwiODBweFwiXG4gICAgICAgIDpydWxlcz1cInJ1bGVzXCJcbiAgICAgICAgOm1vZGVsVmFsdWU9XCJ2YWxpRm9ybURhdGFcIlxuICAgICAgPlxuICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLljZXlj7dcIiByZXF1aXJlZCBuYW1lPVwib3JkZXJOdW1cIj5cbiAgICAgICAgICA8dW5pLWVhc3lpbnB1dFxuICAgICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS5vcmRlck51bVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWNleWPt1wiXG4gICAgICAgICAgICBzdWZmaXhJY29uPVwic2NhblwiXG4gICAgICAgICAgICA6Zm9jdXM9XCJmb2N1c1R5cGVcIlxuICAgICAgICAgICAgQGljb25DbGljaz1cInNjYW5cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG4gICAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIuS7k+S9jee8lueggVwiIG5hbWU9XCJzcGFjZV9jb2RlXCI+XG4gICAgICAgICAgPHVuaS1kYXRhLXNlbGVjdFxuICAgICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS5zcGFjZV9jb2RlXCJcbiAgICAgICAgICAgIDpsb2NhbGRhdGE9XCJzcGFjZXNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fpgInmi6nku5PkvY3nvJbnoIFcIlxuICAgICAgICAgID48L3VuaS1kYXRhLXNlbGVjdD5cbiAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cblxuICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLlm77niYdcIiBuYW1lPVwiaW1hZ2VzXCI+XG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1cGxvYWQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInByZXZpZXdcIj5cbiAgICAgICAgICAgICAgPHZpZXcgdi1mb3I9XCIoaW1nLCBpbmRleCkgaW4gaW1hZ2VzXCIgOmtleT1cImluZGV4XCIgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8aW1hZ2VcbiAgICAgICAgICAgICAgICAgIDpzcmM9XCJpbWcucGF0aFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInByZXZpZXctaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgbW9kZT1cImFzcGVjdEZpbGxcIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwib3BlblByZXZpZXcoaW1nLnBhdGgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgOnBlcmNlbnQ9XCJpbWcucHJvZ3Jlc3MgfHwgMFwiXG4gICAgICAgICAgICAgICAgICA6YWN0aXZlQ29sb3I9XCJOdW1iZXIoaW1nLnByb2dyZXNzIHx8IDApID09PSAxMDAgPyAnIzAwZmYwMCcgOiAnIzEwQUVGRidcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDx0ZXh0IHYtaWY9XCJpbWcuc3RhdHVzID09PSAnc3VjY2VzcydcIj4xPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx1bmktaWNvbnNcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlSW1hZ2UoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjbGVhclwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJyZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgICAgICAgPHZpZXdcbiAgICAgICAgICAgICAgICB2LWlmPVwiaW1hZ2VzLmxlbmd0aCA8IG1heEltYWdlc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaG9vc2UtaW1hZ2UtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJjaG9vc2VJbWFnZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dW5pLWljb25zIHR5cGU9XCJwbHVzZW1wdHlcIiBzaXplPVwiNDBcIiBjb2xvcj1cIiNjY2NcIiAvPlxuICAgICAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT1cInBhZGRpbmctdG9wOiA4cHhcIj7mnIDlpJrpgInmi6k25byg5Zu+54mHPC90ZXh0PlxuICAgICAgICAgICAgPCEtLSDmlL7lpKfpooTop4ggLS0+XG4gICAgICAgICAgICA8dmlldyB2LWlmPVwicHJldmlld0ltYWdlXCIgY2xhc3M9XCJwcmV2aWV3LW1vZGFsXCIgQGNsaWNrPVwiY2xvc2VQcmV2aWV3XCI+XG4gICAgICAgICAgICAgIDxpbWFnZVxuICAgICAgICAgICAgICAgIDpzcmM9XCJwcmV2aWV3SW1hZ2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHJldmlldy1sYXJnZVwiXG4gICAgICAgICAgICAgICAgbW9kZT1cImFzcGVjdEZpdFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnN0b3A9XCJjbG9zZVByZXZpZXdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC92aWV3PlxuICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cbiAgICAgIDwvdW5pLWZvcm1zPlxuICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiaW5mb1wiIEBjbGljaz1cInJlc2V0XCI+6YeN572uPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJvbnN1Ym1pdFwiIDpsb2FkaW5nPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDx1bmktaWNvbnMgdi1pZj1cIiFsb2FkaW5nXCIgdHlwZT1cImNoZWNrbWFya2VtcHR5XCIgc2l6ZT1cIjE4XCIgY29sb3I9XCJ3aGl0ZVwiPjwvdW5pLWljb25zPlxuICAgICAgICAgIOaPkOS6pFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdmlldz5cbiAgICA8L3ZpZXc+XG5cbiAgICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIGhpc3RvcnlMaXN0LnNsaWNlKDAsIDUpXCIgOmtleT1cImlcIj5cbiAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLm9yZGVyTnVtIH19XG4gICAgICAgICAgPHRleHQgdi1pZj1cIml0ZW0uc3BhY2VcIj7ku5PkvY3nvJbnoIE6IHt7IGl0ZW0uc3BhY2UgfX08L3RleHQ+XG4gICAgICAgICAge3sgaXRlbS50eXBlIH19XG4gICAgICAgIDwvdGV4dD5cblxuICAgICAgICA8dW5pLWljb25zXG4gICAgICAgICAgdi1pZj1cIml0ZW0uc3RhdHVzXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIlxuICAgICAgICAgIGNsYXNzPVwic3RhdHVzXCJcbiAgICAgICAgICBzaXplPVwiMTZcIlxuICAgICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxuICAgICAgICA+PC91bmktaWNvbnM+XG4gICAgICAgIDx0ZXh0IGNsYXNzPVwic3RhdHVzIGZhaWxcIiB2LWVsc2U+RjwvdGV4dD5cblxuICAgICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxuICAgICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgIDwvdmlldz5cbiAgICA8L3ZpZXc+XG5cbiAgICA8dW5pLXBvcHVwIHJlZj1cIm1lc3NhZ2VcIiB0eXBlPVwibWVzc2FnZVwiPlxuICAgICAgPHVuaS1wb3B1cC1tZXNzYWdlXG4gICAgICAgIDp0eXBlPVwibWVzc2FnZVR5cGVcIlxuICAgICAgICA6bWVzc2FnZT1cIm1lc3NhZ2VUZXh0XCJcbiAgICAgICAgOmR1cmF0aW9uPVwiMjAwMFwiXG4gICAgICA+PC91bmktcG9wdXAtbWVzc2FnZT5cbiAgICA8L3VuaS1wb3B1cD5cbiAgPC92aWV3PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IHJlZiwgcmVhY3RpdmUsIG5leHRUaWNrLCBjb21wdXRlZCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IG9uU2hvdywgb25IaWRlLCBvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcbmltcG9ydCB7IGNoZWNrUGVybWlzc2lvbiB9IGZyb20gJ0AvdXRpbHMnXG5pbXBvcnQgeyBnZXRBbGl5dW5Pc3NTaWduYXR1cmUsIGluc3RvY2ssIGdldFdhcmVob3VzZVNwYWNlIH0gZnJvbSAnQC9zZXJ2aWNlcy93ZWlnaCdcblxuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0AvdXRpbHMvcmFuZG9tJ1xuY29uc3QgbWVzc2FnZSA9IHJlZigpXG5jb25zdCB2YWxpRm9ybSA9IHJlZigpXG5jb25zdCBsb2FkaW5nID0gcmVmKGZhbHNlKVxuY29uc3QgaW1hZ2VzID0gcmVmKFtdIGFzIGFueSlcbmNvbnN0IG1lc3NhZ2VUeXBlID0gcmVmKCcnKVxuY29uc3QgbWVzc2FnZVRleHQgPSByZWYoJycpXG5jb25zdCBzcGFjZXMgPSByZWYoW10gYXMgYW55KVxuY29uc3QgcHJldmlld0ltYWdlID0gcmVmKG51bGwpXG5jb25zdCBtYXhJbWFnZXMgPSByZWYoNikgLy8g5pyA5aSn5LiK5Lyg5Zu+54mH5pWw6YePXG5jb25zdCBoaXN0b3J5TGlzdCA9IHJlZihbXSBhcyBhbnkpXG5jb25zdCBmb2N1c1R5cGUgPSByZWYodHJ1ZSlcbmNvbnN0IHJlc3VsdCA9IHJlZigpXG4vLyDmoKHpqozooajljZXmlbDmja5cbmNvbnN0IHZhbGlGb3JtRGF0YSA9IHJlYWN0aXZlKHtcbiAgaW1hZ2VzOiBbXSxcbiAgb3JkZXJOdW06ICcnLFxuICBzcGFjZV9jb2RlOiAnJyxcbiAgd2VpZ2h0OiAnJyxcbiAgdHlwaW5nOiB0cnVlLFxufSlcblxuY29uc3QgcnVsZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgb3JkZXJOdW06IHtcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6ICfljZXlj7fkuI3og73kuLrnqbonLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9XG59KVxuY29uc3Qgc3BhY2VSZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gc3BhY2VzLnZhbHVlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS52YWx1ZSA9PT0gdmFsaUZvcm1EYXRhLnNwYWNlX2NvZGUpIGFzIGFueVxuICAgIHJldHVybiByZXM/LnRleHRcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKGUpXG4gICAgcmV0dXJuICcnXG4gIH1cbn0pXG5vblNob3coYXN5bmMgKCkgPT4ge1xuICBmb2N1c1R5cGUudmFsdWUgPSB0cnVlXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICBhd2FpdCBfZ2V0V2FyZWhvdXNlU3BhY2UoKVxufSlcbm9uSGlkZSgoKSA9PiB7XG4gIGZvY3VzVHlwZS52YWx1ZSA9IGZhbHNlXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxufSlcbm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCgoZXZlbnQ6IGFueSkgPT4ge1xuICBpZiAoZXZlbnQuaW5kZXggPT09IDApIHtcbiAgICB1bmkubmF2aWdhdGVUbyh7XG4gICAgICB1cmw6ICcvcGFnZXMvaW5ib3VuZC9sb2dMaXN0JyxcbiAgICB9KVxuICB9XG59KVxuXG5jb25zdCBfZ2V0V2FyZWhvdXNlU3BhY2UgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldFdhcmVob3VzZVNwYWNlKClcbiAgaWYgKHJlcy5jb2RlID09PSAxKSB7XG4gICAgc3BhY2VzLnZhbHVlID0gcmVzLmRhdGEuc3BhY2VzLm1hcCgoaXRlbTogeyBuYW1lOiBhbnk7IGNvZGU6IGFueSB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiBpdGVtLm5hbWUsXG4gICAgICAgIHZhbHVlOiBpdGVtLmNvZGUsXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCByZXNldCA9ICgpID0+IHtcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG4gIGZvY3VzVHlwZS52YWx1ZSA9IGZhbHNlXG4gIGltYWdlcy52YWx1ZSA9IFtdXG4gIHZhbGlGb3JtRGF0YS5vcmRlck51bSA9ICcnXG4gIHZhbGlGb3JtRGF0YS53ZWlnaHQgPSAnJ1xuICB2YWxpRm9ybURhdGEudHlwaW5nID0gdHJ1ZVxuICBuZXh0VGljaygoKSA9PiB7XG4gICAgZm9jdXNUeXBlLnZhbHVlID0gdHJ1ZVxuICB9KVxufVxuXG5jb25zdCBzY2FuID0gYXN5bmMgKCkgPT4ge1xuICAvLyAjaWZkZWYgQVBQLVBMVVNcbiAgbGV0IHN0YXR1cyA9IGF3YWl0IGNoZWNrUGVybWlzc2lvbigpXG4gIGlmIChzdGF0dXMgIT09IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvLyAjZW5kaWZcbiAgdW5pLnNjYW5Db2RlKHtcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcbiAgICAgIHJlc3VsdC52YWx1ZSA9IHJlcy5yZXN1bHRcbiAgICAgIHZhbGlGb3JtRGF0YS5vcmRlck51bSA9IHJlcy5yZXN1bHRcbiAgICB9LFxuICAgIGZhaWw6IChlcnIpID0+IHtcbiAgICAgIC8vIOmcgOimgeazqOaEj+eahOaYr+Wwj+eoi+W6j+aJq+eggeS4jemcgOimgeeUs+ivt+ebuOacuuadg+mZkFxuICAgIH0sXG4gIH0pXG59XG5cbmxldCBzdDogbnVtYmVyXG5jb25zdCB3YXJlaG91c2VTY2FuID0gYXN5bmMgKCkgPT4ge1xuICBzdCAmJiBjbGVhclRpbWVvdXQoc3QpXG4gIGluc3RvY2tTY2FuKClcbn1cblxuY29uc3QgaW5zdG9ja1NjYW4gPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGltYWdlcyA9IGdldEltYWdlcygpXG4gIGxldCBhbGxJbWdWZXJpZnkgPSB0cnVlXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFpbWFnZXNbaV0uc2F2ZVBhdGgpIHtcbiAgICAgIGFsbEltZ1ZlcmlmeSA9IGZhbHNlXG4gICAgfVxuICB9XG4gIGlmICghYWxsSW1nVmVyaWZ5KSB7XG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSAn5Zu+54mH6L+Y5rKh5LiK5Lyg5a6M5q+V77yM6K+356iN5ZCOLi4uJ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgcmVzID0gYXdhaXQgaW5zdG9jayh7XG4gICAgb3JkZXJfbm86IHZhbGlGb3JtRGF0YS5vcmRlck51bSxcbiAgICBzcGFjZV9jb2RlOiB2YWxpRm9ybURhdGEuc3BhY2VfY29kZSxcbiAgICBpbWFnZXMsXG4gIH0pXG5cbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG4gIGlmIChyZXMuY29kZSA9PSAxKSB7XG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnc3VjY2VzcydcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcbiAgICBtZXNzYWdlLnZhbHVlLm9wZW4oKVxuICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xuICAgICAgb3JkZXJOdW06IHZhbGlGb3JtRGF0YS5vcmRlck51bSxcbiAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXG4gICAgICBzcGFjZTogc3BhY2VSZXMudmFsdWUsXG4gICAgICB0eXBlOiAn5YWl5bqTJyxcbiAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICB9XG4gICAgaGlzdG9yeUxpc3QudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ2luYm91bmRIaXN0b3J5JywgaGlzdG9yeUxpc3QudmFsdWUpXG4gICAgZ2V0SGlzdG9yeSgpXG4gICAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc2V0KClcbiAgICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgICB9LCAxMDAwKVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XG4gICAgICBvcmRlck51bTogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHNwYWNlOiBzcGFjZVJlcy52YWx1ZSxcbiAgICAgIHR5cGU6ICflhaXlupMnLFxuICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICB9XG4gICAgaGlzdG9yeUxpc3QudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ2luYm91bmRIaXN0b3J5JywgaGlzdG9yeUxpc3QudmFsdWUpXG4gICAgZ2V0SGlzdG9yeSgpXG4gICAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc2V0KClcbiAgICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgICB9LCAxMDAwKVxuICB9XG59XG5cbmNvbnN0IG9uc3VibWl0ID0gKCkgPT4ge1xuICB2YWxpRm9ybS52YWx1ZVxuICAgIC52YWxpZGF0ZSgpXG4gICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICB3YXJlaG91c2VTY2FuKClcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdlcnInLCBlcnIpXG4gICAgfSlcbn1cbmNvbnN0IGdldEhpc3RvcnkgPSAoKSA9PiB7XG4gIGhpc3RvcnlMaXN0LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdpbmJvdW5kSGlzdG9yeScpXG59XG5jb25zdCBnZXRJbWFnZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHJlcyA9IGltYWdlcy52YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICBzYXZlUGF0aDogaXRlbS5zZXJ2ZXJVcmwsXG4gICAgICBmaWxlU2l6ZTogaXRlbS5zaXplLFxuICAgICAgbWltZVR5cGU6IGl0ZW0udHlwZSxcbiAgICB9XG4gIH0pXG4gIHJldHVybiByZXNcbn1cblxuLy8g6I635Y+W6Zi/6YeM5LqRb3Nz562+5ZCNXG5jb25zdCBfZ2V0QWxpeXVuT3NzU2lnbmF0dXJlID0gYXN5bmMgKHJhd0ZpbGVzOiBhbnlbXSkgPT4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBnZXRBbGl5dW5Pc3NTaWduYXR1cmUoKVxuICBjb25zdCBzaWduYXR1cmUgPSByZXMuZGF0YS5zaWduYXR1cmVcblxuICBjb25zdCB1cGxvYWRQcm9taXNlcyA9IHJhd0ZpbGVzLm1hcCgoaW1hZ2U6IGFueSkgPT4ge1xuICAgIHJldHVybiB1cExvYWRGaWxlKHNpZ25hdHVyZSwgaW1hZ2UpXG4gIH0pXG5cbiAgUHJvbWlzZS5hbGwodXBsb2FkUHJvbWlzZXMpXG4gICAgLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCfmiYDmnInlm77niYfliqDovb3miJDlip86JywgcmVzdWx0cylcbiAgICAgIHVuaS5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogJ+WKoOi9veaIkOWKnycsXG4gICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgIH0pXG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCfliqDovb3lpLHotKU6JywgZXJyb3IpXG4gICAgICB1bmkuc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6ICfliqDovb3lpLHotKUnLFxuICAgICAgICBpY29uOiAnbm9uZScsXG4gICAgICB9KVxuICAgIH0pXG59XG5jb25zdCB1cExvYWRGaWxlID0gKFxuICBzaWduYXR1cmU6IHsgcG9saWN5OiBhbnk7IHNpZ25hdHVyZTogYW55OyBvc3NBY2Nlc3NLZXlJZDogYW55OyBkaXI6IGFueTsgaG9zdDogYW55IH0sXG4gIGltYWdlOiB7XG4gICAgc2VydmVyVXJsOiBzdHJpbmdcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBmaWxlOiBhbnlcbiAgICBwYXRoOiBhbnlcbiAgICBwcm9ncmVzczogbnVtYmVyXG4gIH0sXG4pID0+IHtcbiAgY29uc3QgZmlsZURhdGEgPSB7XG4gICAgcG9saWN5OiBzaWduYXR1cmUucG9saWN5LFxuICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlLnNpZ25hdHVyZSxcbiAgICBvc3NhY2Nlc3NLZXlJZDogc2lnbmF0dXJlLm9zc0FjY2Vzc0tleUlkLFxuICAgIGtleTogc2lnbmF0dXJlLmRpciArIGRheWpzKCkuZm9ybWF0KCdZWVlZTU1ERCcpICsgJy8nICsgdXVpZCgpICsgJ18nICsgaW1hZ2UubmFtZSxcbiAgICBkaXI6IHNpZ25hdHVyZS5kaXIsXG4gICAgaG9zdDogc2lnbmF0dXJlLmhvc3QsXG4gICAgZmlsZTogaW1hZ2UuZmlsZSxcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBuYW1lID0gaW1hZ2UubmFtZVxuICAgIC8vICNpZmRlZiBBUFAtUExVU1xuICAgIG5hbWUgPSAnZmlsZSdcbiAgICAvLyAjZW5kaWZcbiAgICBjb25zdCB1cGxvYWRUYXNrID0gdW5pLnVwbG9hZEZpbGUoe1xuICAgICAgdXJsOiBzaWduYXR1cmUuaG9zdCwgLy8g5L2g55qE5LiK5Lyg5o6l5Y+j5Zyw5Z2AXG4gICAgICBmaWxlUGF0aDogaW1hZ2UucGF0aCxcbiAgICAgIG5hbWU6IG5hbWUsIC8vIOi/memHjOagueaNruWQjuerr+mcgOimgeeahOWtl+auteadpeWumuS5iVxuICAgICAgZm9ybURhdGE6IGZpbGVEYXRhLFxuICAgICAgc3VjY2VzczogKHVwbG9hZEZpbGVSZXMpID0+IHtcbiAgICAgICAgaWYgKHVwbG9hZEZpbGVSZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHVwbG9hZEZpbGVSZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgaW1hZ2UhLnNlcnZlclVybCA9IGZpbGVEYXRhLmtleVxuICAgICAgICAgIHJlc29sdmUodXBsb2FkRmlsZVJlcylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QodXBsb2FkRmlsZVJlcylcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZhaWw6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IrKycsIGVycm9yKVxuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9LFxuICAgICAgLy8g5pu05paw5LiK5Lyg6L+b5bqmXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnY29tcGxldGUtLS0nKVxuICAgICAgICBpbWFnZS5wcm9ncmVzcyA9IDEwMFxuICAgICAgfSxcbiAgICB9KVxuICAgIC8vIOWPr+mAie+8muebkeWQrOS4iuS8oOi/m+W6puWPmOWMllxuICAgIHVwbG9hZFRhc2sub25Qcm9ncmVzc1VwZGF0ZSgocHJvZ3Jlc3NFdmVudCkgPT4ge1xuICAgICAgaW1hZ2UucHJvZ3Jlc3MgPSBwcm9ncmVzc0V2ZW50LnByb2dyZXNzIC8vIOabtOaWsOi/m+W6plxuICAgIH0pXG4gIH0pXG59XG5jb25zdCBjaG9vc2VJbWFnZSA9ICgpID0+IHtcbiAgdW5pLmNob29zZUltYWdlKHtcbiAgICBjb3VudDogbWF4SW1hZ2VzLnZhbHVlIC0gaW1hZ2VzLnZhbHVlLmxlbmd0aCxcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcbiAgICAgIGltYWdlcy52YWx1ZSA9IGltYWdlcy52YWx1ZS5jb25jYXQoXG4gICAgICAgIHJlcy50ZW1wRmlsZXMubWFwKChpdGVtOiB7IHNpemU6IGFueTsgcGF0aDogc3RyaW5nOyBuYW1lOiBhbnk7IHR5cGU6IGFueSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgc2l6ZTogaXRlbS5zaXplLFxuICAgICAgICAgICAgcGF0aDogaXRlbS5wYXRoLFxuICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICAgICAgICBmaWxlOiBpdGVtLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vICNpZmRlZiBBUFAtUExVU1xuICAgICAgICAgIC8v5paH5Lu25ZCN5pON5L2cXG4gICAgICAgICAgLy/ojrflj5bmlofku7blkI7nvIBcbiAgICAgICAgICBjb25zdCBzdWZmaXggPSBpdGVtLnBhdGguc3Vic3RyaW5nKGl0ZW0ucGF0aC5sYXN0SW5kZXhPZignLicpICsgMSlcbiAgICAgICAgICAvL+iOt+WPluaWh+S7tuWQjVxuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gaXRlbS5wYXRoLnN1YnN0cmluZyhpdGVtLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpXG4gICAgICAgICAgcmVzLm5hbWUgPSBmaWxlTmFtZVxuICAgICAgICAgIHJlcy50eXBlID0gc3VmZml4XG4gICAgICAgICAgLy8gI2VuZGlmXG5cbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgY29uc3QgcGFkZGluZ0ltYWdlcyA9IGltYWdlcy52YWx1ZS5maWx0ZXIoKGltYWdlOiBhbnkpID0+IGltYWdlLnByb2dyZXNzID09PSAwKVxuXG4gICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIF9nZXRBbGl5dW5Pc3NTaWduYXR1cmUocGFkZGluZ0ltYWdlcylcbiAgICAgIH0pXG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9LFxuICB9KVxufVxuY29uc3QgZGVsZXRlSW1hZ2UgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICBpbWFnZXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxufVxuXG5jb25zdCBvcGVuUHJldmlldyA9IChpbWFnZTogbnVsbCkgPT4ge1xuICBwcmV2aWV3SW1hZ2UudmFsdWUgPSBpbWFnZSAvLyDorr7nva7mlL7lpKfpooTop4jnmoTlm77niYdcbn1cbmNvbnN0IGNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgcHJldmlld0ltYWdlLnZhbHVlID0gbnVsbCAvLyDlhbPpl63pooTop4hcbn1cbjwvc2NyaXB0PlxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZXhhbXBsZSB7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5idXR0b24tZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcblxuICBidXR0b24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDM1cHg7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICBmb250LXNpemU6IDI0cnB4O1xuICB9XG5cbiAgLnVuaS1pY29ucyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB9XG59XG5cbi53ZWlnaHQtcmlnaHQge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHJweDtcbn1cblxuLmhpc3Rvcnkge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XG5cbiAgLnRpdGxlIHtcbiAgICBwYWRkaW5nOiAyMHJweDtcbiAgICBmb250LXNpemU6IDI0cnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAuY29kZSB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgfVxuXG4gIC5pdGVtIHtcbiAgICBwYWRkaW5nOiAyMHJweDtcbiAgICBmb250LXNpemU6IDIwcnB4O1xuICAgIGNvbG9yOiAjNjY2O1xuXG4gICAgLnN0YXR1cyB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xuICAgIH1cblxuICAgIC5mYWlsIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogI2YwMDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG48c3R5bGUgc2NvcGVkPlxuLnVwbG9hZC1jb250YWluZXIge1xuICBwYWRkaW5nOiAxNnB4O1xufVxuXG4ucHJldmlldyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLmltYWdlLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4ucHJldmlldy1pbWFnZSB7XG4gIHdpZHRoOiAxMzBycHg7XG4gIGhlaWdodDogMTMwcnB4O1xufVxuXG4uZGVsZXRlLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmNob29zZS1pbWFnZS1jb250YWluZXIge1xuICB3aWR0aDogMTMwcnB4O1xuICAvKiDkuI7lm77niYflpKflsI/kuIDoh7QgKi9cbiAgaGVpZ2h0OiAxMzBycHg7XG4gIC8qIOS4juWbvueJh+Wkp+Wwj+S4gOiHtCAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLyog6IOM5pmv6aKc6Imy5Li655m96ImyICovXG4gIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjY2NjO1xuICAvKiDomZrnur/ovrnmoYYgKi9cbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAvKiDlnIbop5IgKi9cbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucHJldmlldy1tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gIC8qIOWNiumAj+aYjuiDjOaZryAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgei1pbmRleDogOTk5O1xufVxuXG4ucHJldmlldy1sYXJnZSB7XG4gIG1heC13aWR0aDogOTAlO1xuICAvKiDmnIDlpKflrr3luqYgKi9cbiAgbWF4LWhlaWdodDogOTAlO1xuICAvKiDmnIDlpKfpq5jluqYgKi9cbn1cblxuLnByb2dyZXNzLWJhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiBoaXN0b3J5TGlzdFwiIDprZXk9XCJpXCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwiY29kZVwiIDpzdHlsZT1cInsgY29sb3I6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2JyB9XCI+XHJcbiAgICAgICAge3sgaXRlbS5vcmRlck51bSB9fVxyXG4gICAgICAgIDx0ZXh0IHYtaWY9XCJpdGVtLnNwYWNlXCI+5LuT5L2N57yW56CBOiB7eyBpdGVtLnNwYWNlIH19PC90ZXh0PlxyXG4gICAgICAgIHt7IGl0ZW0udHlwZSB9fVxyXG4gICAgICA8L3RleHQ+XHJcbiAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxyXG4gICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgIHNpemU9XCIxNlwiXHJcbiAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxyXG4gICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJoaXN0b3J5TGlzdC5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IGhpc3RvcnlMaXN0ID0gcmVmKFtdIGFzIGFueVtdKVxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIGhpc3RvcnlMaXN0LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdpbmJvdW5kSGlzdG9yeScpXHJcbn1cclxub25Mb2FkKCgpID0+IHtcclxuICBnZXRIaXN0b3J5KClcclxufSlcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5oaXN0b3J5IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuICAudHlwZSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG4gIC5jb2RlIHtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgfVxyXG5cclxuICAuaXRlbSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjBycHg7XHJcbiAgICBjb2xvcjogIzY2NjtcclxuXHJcbiAgICAuc3RhdHVzIHtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAyMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAuZmFpbCB7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgIGNvbG9yOiAjZjAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmlzLWVtcHR5IHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbjogNDBweCAwO1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIGhpc3RvcnlMaXN0XCIgOmtleT1cImlcIj5cclxuICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj5cclxuICAgICAgICB7eyBpdGVtLm9yZGVyTnVtIH19XHJcbiAgICAgICAgPHRleHQgdi1pZj1cIml0ZW0uc3BhY2VcIj7ku5PkvY3nvJbnoIE6IHt7IGl0ZW0uc3BhY2UgfX08L3RleHQ+XHJcbiAgICAgICAge3sgaXRlbS50eXBlIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgICAgPHVuaS1pY29uc1xyXG4gICAgICAgIHYtaWY9XCJpdGVtLnN0YXR1c1wiXHJcbiAgICAgICAgdHlwZT1cImNoZWNrbWFya2VtcHR5XCJcclxuICAgICAgICBjbGFzcz1cInN0YXR1c1wiXHJcbiAgICAgICAgc2l6ZT1cIjE2XCJcclxuICAgICAgICBjb2xvcj1cImdyZWVuXCJcclxuICAgICAgPjwvdW5pLWljb25zPlxyXG4gICAgICA8dGV4dCBjbGFzcz1cInN0YXR1cyBmYWlsXCIgdi1lbHNlPkY8L3RleHQ+XHJcbiAgICAgIDx0ZXh0IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcnB4OyBmb250LXdlaWdodDogMzAwXCI+XHJcbiAgICAgICAge3sgJ1xcclxcbicgKyBpdGVtLmNyZWF0ZVRpbWUgfX1cclxuICAgICAgPC90ZXh0PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgdi1pZj1cImhpc3RvcnlMaXN0Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiaXMtZW1wdHlcIj7mmoLml6Dljoblj7I8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuY29uc3QgaGlzdG9yeUxpc3QgPSByZWYoW10gYXMgYW55W10pXHJcbmNvbnN0IGdldEhpc3RvcnkgPSAoKSA9PiB7XHJcbiAgaGlzdG9yeUxpc3QudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2luYm91bmRIaXN0b3J5JylcclxufVxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIGdldEhpc3RvcnkoKVxyXG59KVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLmhpc3Rvcnkge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBqdXN0aWZ5LWl0ZW1zOiBzdGFydDtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgfVxyXG4gIC50eXBlIHtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICB9XHJcbiAgLmNvZGUge1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG5cclxuICAgIC5zdGF0dXMge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mYWlsIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6ICNmMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuaXMtZW1wdHkge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4IDA7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiY29uc3QgaXNPYmplY3QgPSAodmFsKSA9PiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG5jb25zdCBkZWZhdWx0RGVsaW1pdGVycyA9IFsneycsICd9J107XG5jbGFzcyBCYXNlRm9ybWF0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgaW50ZXJwb2xhdGUobWVzc2FnZSwgdmFsdWVzLCBkZWxpbWl0ZXJzID0gZGVmYXVsdERlbGltaXRlcnMpIHtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBbbWVzc2FnZV07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRva2VucyA9IHRoaXMuX2NhY2hlc1ttZXNzYWdlXTtcbiAgICAgICAgaWYgKCF0b2tlbnMpIHtcbiAgICAgICAgICAgIHRva2VucyA9IHBhcnNlKG1lc3NhZ2UsIGRlbGltaXRlcnMpO1xuICAgICAgICAgICAgdGhpcy5fY2FjaGVzW21lc3NhZ2VdID0gdG9rZW5zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21waWxlKHRva2VucywgdmFsdWVzKTtcbiAgICB9XG59XG5jb25zdCBSRV9UT0tFTl9MSVNUX1ZBTFVFID0gL14oPzpcXGQpKy87XG5jb25zdCBSRV9UT0tFTl9OQU1FRF9WQUxVRSA9IC9eKD86XFx3KSsvO1xuZnVuY3Rpb24gcGFyc2UoZm9ybWF0LCBbc3RhcnREZWxpbWl0ZXIsIGVuZERlbGltaXRlcl0pIHtcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgZm9ybWF0Lmxlbmd0aCkge1xuICAgICAgICBsZXQgY2hhciA9IGZvcm1hdFtwb3NpdGlvbisrXTtcbiAgICAgICAgaWYgKGNoYXIgPT09IHN0YXJ0RGVsaW1pdGVyKSB7XG4gICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdGV4dCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHQgPSAnJztcbiAgICAgICAgICAgIGxldCBzdWIgPSAnJztcbiAgICAgICAgICAgIGNoYXIgPSBmb3JtYXRbcG9zaXRpb24rK107XG4gICAgICAgICAgICB3aGlsZSAoY2hhciAhPT0gdW5kZWZpbmVkICYmIGNoYXIgIT09IGVuZERlbGltaXRlcikge1xuICAgICAgICAgICAgICAgIHN1YiArPSBjaGFyO1xuICAgICAgICAgICAgICAgIGNoYXIgPSBmb3JtYXRbcG9zaXRpb24rK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpc0Nsb3NlZCA9IGNoYXIgPT09IGVuZERlbGltaXRlcjtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBSRV9UT0tFTl9MSVNUX1ZBTFVFLnRlc3Qoc3ViKVxuICAgICAgICAgICAgICAgID8gJ2xpc3QnXG4gICAgICAgICAgICAgICAgOiBpc0Nsb3NlZCAmJiBSRV9UT0tFTl9OQU1FRF9WQUxVRS50ZXN0KHN1YilcbiAgICAgICAgICAgICAgICAgICAgPyAnbmFtZWQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3Vua25vd24nO1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB2YWx1ZTogc3ViLCB0eXBlIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vICBlbHNlIGlmIChjaGFyID09PSAnJScpIHtcbiAgICAgICAgLy8gICAvLyB3aGVuIGZvdW5kIHJhaWxzIGkxOG4gc3ludGF4LCBza2lwIHRleHQgY2FwdHVyZVxuICAgICAgICAvLyAgIGlmIChmb3JtYXRbcG9zaXRpb25dICE9PSAneycpIHtcbiAgICAgICAgLy8gICAgIHRleHQgKz0gY2hhclxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRleHQgKz0gY2hhcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXh0ICYmIHRva2Vucy5wdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdGV4dCB9KTtcbiAgICByZXR1cm4gdG9rZW5zO1xufVxuZnVuY3Rpb24gY29tcGlsZSh0b2tlbnMsIHZhbHVlcykge1xuICAgIGNvbnN0IGNvbXBpbGVkID0gW107XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBtb2RlID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpXG4gICAgICAgID8gJ2xpc3QnXG4gICAgICAgIDogaXNPYmplY3QodmFsdWVzKVxuICAgICAgICAgICAgPyAnbmFtZWQnXG4gICAgICAgICAgICA6ICd1bmtub3duJztcbiAgICBpZiAobW9kZSA9PT0gJ3Vua25vd24nKSB7XG4gICAgICAgIHJldHVybiBjb21waWxlZDtcbiAgICB9XG4gICAgd2hpbGUgKGluZGV4IDwgdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF07XG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgICAgICAgY29tcGlsZWQucHVzaCh0b2tlbi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgICAgICAgICBjb21waWxlZC5wdXNoKHZhbHVlc1twYXJzZUludCh0b2tlbi52YWx1ZSwgMTApXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduYW1lZCc6XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICduYW1lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQucHVzaCh2YWx1ZXNbdG9rZW4udmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFR5cGUgb2YgdG9rZW4gJyR7dG9rZW4udHlwZX0nIGFuZCBmb3JtYXQgb2YgdmFsdWUgJyR7bW9kZX0nIGRvbid0IG1hdGNoIWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndW5rbm93bic6XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEZXRlY3QgJ3Vua25vd24nIHR5cGUgb2YgdG9rZW4hYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZDtcbn1cblxuY29uc3QgTE9DQUxFX1pIX0hBTlMgPSAnemgtSGFucyc7XG5jb25zdCBMT0NBTEVfWkhfSEFOVCA9ICd6aC1IYW50JztcbmNvbnN0IExPQ0FMRV9FTiA9ICdlbic7XG5jb25zdCBMT0NBTEVfRlIgPSAnZnInO1xuY29uc3QgTE9DQUxFX0VTID0gJ2VzJztcbmNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmNvbnN0IGhhc093biA9ICh2YWwsIGtleSkgPT4gaGFzT3duUHJvcGVydHkuY2FsbCh2YWwsIGtleSk7XG5jb25zdCBkZWZhdWx0Rm9ybWF0dGVyID0gbmV3IEJhc2VGb3JtYXR0ZXIoKTtcbmZ1bmN0aW9uIGluY2x1ZGUoc3RyLCBwYXJ0cykge1xuICAgIHJldHVybiAhIXBhcnRzLmZpbmQoKHBhcnQpID0+IHN0ci5pbmRleE9mKHBhcnQpICE9PSAtMSk7XG59XG5mdW5jdGlvbiBzdGFydHNXaXRoKHN0ciwgcGFydHMpIHtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCkgPT4gc3RyLmluZGV4T2YocGFydCkgPT09IDApO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGxvY2FsZSwgbWVzc2FnZXMpIHtcbiAgICBpZiAoIWxvY2FsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvY2FsZSA9IGxvY2FsZS50cmltKCkucmVwbGFjZSgvXy9nLCAnLScpO1xuICAgIGlmIChtZXNzYWdlcyAmJiBtZXNzYWdlc1tsb2NhbGVdKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgfVxuICAgIGxvY2FsZSA9IGxvY2FsZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb2NhbGUgPT09ICdjaGluZXNlJykge1xuICAgICAgICAvLyDmlK/ku5jlrp1cbiAgICAgICAgcmV0dXJuIExPQ0FMRV9aSF9IQU5TO1xuICAgIH1cbiAgICBpZiAobG9jYWxlLmluZGV4T2YoJ3poJykgPT09IDApIHtcbiAgICAgICAgaWYgKGxvY2FsZS5pbmRleE9mKCctaGFucycpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBMT0NBTEVfWkhfSEFOUztcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLmluZGV4T2YoJy1oYW50JykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIExPQ0FMRV9aSF9IQU5UO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmNsdWRlKGxvY2FsZSwgWyctdHcnLCAnLWhrJywgJy1tbycsICctY2h0J10pKSB7XG4gICAgICAgICAgICByZXR1cm4gTE9DQUxFX1pIX0hBTlQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIExPQ0FMRV9aSF9IQU5TO1xuICAgIH1cbiAgICBsZXQgbG9jYWxlcyA9IFtMT0NBTEVfRU4sIExPQ0FMRV9GUiwgTE9DQUxFX0VTXTtcbiAgICBpZiAobWVzc2FnZXMgJiYgT2JqZWN0LmtleXMobWVzc2FnZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9jYWxlcyA9IE9iamVjdC5rZXlzKG1lc3NhZ2VzKTtcbiAgICB9XG4gICAgY29uc3QgbGFuZyA9IHN0YXJ0c1dpdGgobG9jYWxlLCBsb2NhbGVzKTtcbiAgICBpZiAobGFuZykge1xuICAgICAgICByZXR1cm4gbGFuZztcbiAgICB9XG59XG5jbGFzcyBJMThuIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGxvY2FsZSwgZmFsbGJhY2tMb2NhbGUsIG1lc3NhZ2VzLCB3YXRjaGVyLCBmb3JtYXRlciwgfSkge1xuICAgICAgICB0aGlzLmxvY2FsZSA9IExPQ0FMRV9FTjtcbiAgICAgICAgdGhpcy5mYWxsYmFja0xvY2FsZSA9IExPQ0FMRV9FTjtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0ge307XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSB7fTtcbiAgICAgICAgdGhpcy53YXRjaGVycyA9IFtdO1xuICAgICAgICBpZiAoZmFsbGJhY2tMb2NhbGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmFsbGJhY2tMb2NhbGUgPSBmYWxsYmFja0xvY2FsZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1hdGVyID0gZm9ybWF0ZXIgfHwgZGVmYXVsdEZvcm1hdHRlcjtcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzIHx8IHt9O1xuICAgICAgICB0aGlzLnNldExvY2FsZShsb2NhbGUgfHwgTE9DQUxFX0VOKTtcbiAgICAgICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgICAgICAgIHRoaXMud2F0Y2hMb2NhbGUod2F0Y2hlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0TG9jYWxlKGxvY2FsZSkge1xuICAgICAgICBjb25zdCBvbGRMb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBub3JtYWxpemVMb2NhbGUobG9jYWxlLCB0aGlzLm1lc3NhZ2VzKSB8fCB0aGlzLmZhbGxiYWNrTG9jYWxlO1xuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXNbdGhpcy5sb2NhbGVdKSB7XG4gICAgICAgICAgICAvLyDlj6/og73liJ3lp4vljJbml7bkuI3lrZjlnKhcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXNbdGhpcy5sb2NhbGVdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy5tZXNzYWdlc1t0aGlzLmxvY2FsZV07XG4gICAgICAgIC8vIOS7heWPkeeUn+WPmOWMluaXtu+8jOmAmuefpVxuICAgICAgICBpZiAob2xkTG9jYWxlICE9PSB0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgdGhpcy53YXRjaGVycy5mb3JFYWNoKCh3YXRjaGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgd2F0Y2hlcih0aGlzLmxvY2FsZSwgb2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICAgIH1cbiAgICB3YXRjaExvY2FsZShmbikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMud2F0Y2hlcnMucHVzaChmbikgLSAxO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy53YXRjaGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBhZGQobG9jYWxlLCBtZXNzYWdlLCBvdmVycmlkZSA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgY3VyTWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzW2xvY2FsZV07XG4gICAgICAgIGlmIChjdXJNZXNzYWdlcykge1xuICAgICAgICAgICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjdXJNZXNzYWdlcywgbWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtZXNzYWdlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNPd24oY3VyTWVzc2FnZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ck1lc3NhZ2VzW2tleV0gPSBtZXNzYWdlW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXNbbG9jYWxlXSA9IG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZihtZXNzYWdlLCB2YWx1ZXMsIGRlbGltaXRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZXIuaW50ZXJwb2xhdGUobWVzc2FnZSwgdmFsdWVzLCBkZWxpbWl0ZXJzKS5qb2luKCcnKTtcbiAgICB9XG4gICAgdChrZXksIGxvY2FsZSwgdmFsdWVzKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlO1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGxvY2FsZSA9IG5vcm1hbGl6ZUxvY2FsZShsb2NhbGUsIHRoaXMubWVzc2FnZXMpO1xuICAgICAgICAgICAgbG9jYWxlICYmIChtZXNzYWdlID0gdGhpcy5tZXNzYWdlc1tsb2NhbGVdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IGxvY2FsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc093bihtZXNzYWdlLCBrZXkpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCB0cmFuc2xhdGUgdGhlIHZhbHVlIG9mIGtleXBhdGggJHtrZXl9LiBVc2UgdGhlIHZhbHVlIG9mIGtleXBhdGggYXMgZGVmYXVsdC5gKTtcbiAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0ZXIuaW50ZXJwb2xhdGUobWVzc2FnZVtrZXldLCB2YWx1ZXMpLmpvaW4oJycpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gd2F0Y2hBcHBMb2NhbGUoYXBwVm0sIGkxOG4pIHtcbiAgICAvLyDpnIDopoHkv53or4Egd2F0Y2gg55qE6Kem5Y+R5Zyo57uE5Lu25riy5p+T5LmL5YmNXG4gICAgaWYgKGFwcFZtLiR3YXRjaExvY2FsZSkge1xuICAgICAgICAvLyB2dWUyXG4gICAgICAgIGFwcFZtLiR3YXRjaExvY2FsZSgobmV3TG9jYWxlKSA9PiB7XG4gICAgICAgICAgICBpMThuLnNldExvY2FsZShuZXdMb2NhbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFwcFZtLiR3YXRjaCgoKSA9PiBhcHBWbS4kbG9jYWxlLCAobmV3TG9jYWxlKSA9PiB7XG4gICAgICAgICAgICBpMThuLnNldExvY2FsZShuZXdMb2NhbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0TG9jYWxlKCkge1xuICAgIGlmICh0eXBlb2YgdW5pICE9PSAndW5kZWZpbmVkJyAmJiB1bmkuZ2V0TG9jYWxlKSB7XG4gICAgICAgIHJldHVybiB1bmkuZ2V0TG9jYWxlKCk7XG4gICAgfVxuICAgIC8vIOWwj+eoi+W6j+W5s+WPsO+8jHVuaSDlkowgdW5pLWkxOG4g5LqS55u45byV55So77yM5a+86Ie06K6/6Zeu5LiN5YiwIHVuae+8jOaVheWcqCBnbG9iYWwg5LiK5oyC5LqGIGdldExvY2FsZVxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuZ2V0TG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwuZ2V0TG9jYWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBMT0NBTEVfRU47XG59XG5mdW5jdGlvbiBpbml0VnVlSTE4bihsb2NhbGUsIG1lc3NhZ2VzID0ge30sIGZhbGxiYWNrTG9jYWxlLCB3YXRjaGVyKSB7XG4gICAgLy8g5YW85a655pen54mI5pys5YWl5Y+CXG4gICAgaWYgKHR5cGVvZiBsb2NhbGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIDtbbG9jYWxlLCBtZXNzYWdlc10gPSBbXG4gICAgICAgIC8vICAgbWVzc2FnZXMgYXMgdW5rbm93biBhcyBzdHJpbmcsXG4gICAgICAgIC8vICAgbG9jYWxlIGFzIHVua25vd24gYXMgTG9jYWxlTWVzc2FnZXMsXG4gICAgICAgIC8vIF1cbiAgICAgICAgLy8g5pqC5LiN5L2/55So5pWw57uE6Kej5p6E77yMdXRz57yW6K+R5Zmo5pqC5pyq5pSv5oyB44CCXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgXTtcbiAgICAgICAgbG9jYWxlID0gb3B0aW9uc1swXTtcbiAgICAgICAgbWVzc2FnZXMgPSBvcHRpb25zWzFdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGxvY2FsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8g5Zug5Li65bCP56iL5bqP5bmz5Y+w77yMdW5pLWkxOG4g5ZKMIHVuaSDkupLnm7jlvJXnlKjvvIzlr7zoh7TmraTml7borr/pl64gdW5pIOaXtu+8jOS4uiB1bmRlZmluZWRcbiAgICAgICAgbG9jYWxlID0gZ2V0RGVmYXVsdExvY2FsZSgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGZhbGxiYWNrTG9jYWxlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBmYWxsYmFja0xvY2FsZSA9XG4gICAgICAgICAgICAodHlwZW9mIF9fdW5pQ29uZmlnICE9PSAndW5kZWZpbmVkJyAmJiBfX3VuaUNvbmZpZy5mYWxsYmFja0xvY2FsZSkgfHxcbiAgICAgICAgICAgICAgICBMT0NBTEVfRU47XG4gICAgfVxuICAgIGNvbnN0IGkxOG4gPSBuZXcgSTE4bih7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICB3YXRjaGVyLFxuICAgIH0pO1xuICAgIGxldCB0ID0gKGtleSwgdmFsdWVzKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0QXBwICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBhcHAgdmlld1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tZnVuYy1hc3NpZ24gKi9cbiAgICAgICAgICAgIHQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTE4bi50KGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXNXYXRjaGVkQXBwTG9jYWxlID0gZmFsc2U7XG4gICAgICAgICAgICB0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBwVm0gPSBnZXRBcHAoKS4kdm07XG4gICAgICAgICAgICAgICAgLy8g5Y+v6IO9JHZt6L+Y5LiN5a2Y5Zyo77yM5q+U5aaC5Zyo5pSv5LuY5a6d5bCP56iL5bqP5Lit77yM57uE5Lu25a6a5LmJ6L6D5pep77yM5ZyocHJvcHPnmoRkZWZhdWx06YeM5L2/55So5LqGdCgp5Ye95pWw77yI5aaCdW5pLWdvb2RzLW5hdu+8ie+8jOatpOaXtmFwcOi/mOacquWIneWni+WMllxuICAgICAgICAgICAgICAgIC8vIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAvLyBcdHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgICAgIC8vIFx0ZGVmYXVsdCAoKSB7XG4gICAgICAgICAgICAgICAgLy8gXHRcdHJldHVybiBbe1xuICAgICAgICAgICAgICAgIC8vIFx0XHRcdGljb246ICdzaG9wJyxcbiAgICAgICAgICAgICAgICAvLyBcdFx0XHR0ZXh0OiB0KFwidW5pLWdvb2RzLW5hdi5vcHRpb25zLnNob3BcIiksXG4gICAgICAgICAgICAgICAgLy8gXHRcdH0sIHtcbiAgICAgICAgICAgICAgICAvLyBcdFx0XHRpY29uOiAnY2FydCcsXG4gICAgICAgICAgICAgICAgLy8gXHRcdFx0dGV4dDogdChcInVuaS1nb29kcy1uYXYub3B0aW9ucy5jYXJ0XCIpXG4gICAgICAgICAgICAgICAgLy8gXHRcdH1dXG4gICAgICAgICAgICAgICAgLy8gXHR9XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICBpZiAoYXBwVm0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6Kem5Y+R5ZON5bqU5byPXG4gICAgICAgICAgICAgICAgICAgIGFwcFZtLiRsb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNXYXRjaGVkQXBwTG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1dhdGNoZWRBcHBMb2NhbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hBcHBMb2NhbGUoYXBwVm0sIGkxOG4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpMThuLnQoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdChrZXksIHZhbHVlcyk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpMThuLFxuICAgICAgICBmKG1lc3NhZ2UsIHZhbHVlcywgZGVsaW1pdGVycykge1xuICAgICAgICAgICAgcmV0dXJuIGkxOG4uZihtZXNzYWdlLCB2YWx1ZXMsIGRlbGltaXRlcnMpO1xuICAgICAgICB9LFxuICAgICAgICB0KGtleSwgdmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdChrZXksIHZhbHVlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZChsb2NhbGUsIG1lc3NhZ2UsIG92ZXJyaWRlID0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGkxOG4uYWRkKGxvY2FsZSwgbWVzc2FnZSwgb3ZlcnJpZGUpO1xuICAgICAgICB9LFxuICAgICAgICB3YXRjaChmbikge1xuICAgICAgICAgICAgcmV0dXJuIGkxOG4ud2F0Y2hMb2NhbGUoZm4pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRMb2NhbGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gaTE4bi5nZXRMb2NhbGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0TG9jYWxlKG5ld0xvY2FsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGkxOG4uc2V0TG9jYWxlKG5ld0xvY2FsZSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuY29uc3QgaXNTdHJpbmcgPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbmxldCBmb3JtYXRlcjtcbmZ1bmN0aW9uIGhhc0kxOG5Kc29uKGpzb25PYmosIGRlbGltaXRlcnMpIHtcbiAgICBpZiAoIWZvcm1hdGVyKSB7XG4gICAgICAgIGZvcm1hdGVyID0gbmV3IEJhc2VGb3JtYXR0ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHdhbGtKc29uT2JqKGpzb25PYmosIChqc29uT2JqLCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBqc29uT2JqW2tleV07XG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpc0kxOG5TdHIodmFsdWUsIGRlbGltaXRlcnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaGFzSTE4bkpzb24odmFsdWUsIGRlbGltaXRlcnMpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBwYXJzZUkxOG5Kc29uKGpzb25PYmosIHZhbHVlcywgZGVsaW1pdGVycykge1xuICAgIGlmICghZm9ybWF0ZXIpIHtcbiAgICAgICAgZm9ybWF0ZXIgPSBuZXcgQmFzZUZvcm1hdHRlcigpO1xuICAgIH1cbiAgICB3YWxrSnNvbk9iaihqc29uT2JqLCAoanNvbk9iaiwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0ganNvbk9ialtrZXldO1xuICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoaXNJMThuU3RyKHZhbHVlLCBkZWxpbWl0ZXJzKSkge1xuICAgICAgICAgICAgICAgIGpzb25PYmpba2V5XSA9IGNvbXBpbGVTdHIodmFsdWUsIHZhbHVlcywgZGVsaW1pdGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJzZUkxOG5Kc29uKHZhbHVlLCB2YWx1ZXMsIGRlbGltaXRlcnMpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGpzb25PYmo7XG59XG5mdW5jdGlvbiBjb21waWxlSTE4bkpzb25TdHIoanNvblN0ciwgeyBsb2NhbGUsIGxvY2FsZXMsIGRlbGltaXRlcnMsIH0pIHtcbiAgICBpZiAoIWlzSTE4blN0cihqc29uU3RyLCBkZWxpbWl0ZXJzKSkge1xuICAgICAgICByZXR1cm4ganNvblN0cjtcbiAgICB9XG4gICAgaWYgKCFmb3JtYXRlcikge1xuICAgICAgICBmb3JtYXRlciA9IG5ldyBCYXNlRm9ybWF0dGVyKCk7XG4gICAgfVxuICAgIGNvbnN0IGxvY2FsZVZhbHVlcyA9IFtdO1xuICAgIE9iamVjdC5rZXlzKGxvY2FsZXMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgaWYgKG5hbWUgIT09IGxvY2FsZSkge1xuICAgICAgICAgICAgbG9jYWxlVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGxvY2FsZTogbmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGxvY2FsZXNbbmFtZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGxvY2FsZVZhbHVlcy51bnNoaWZ0KHsgbG9jYWxlLCB2YWx1ZXM6IGxvY2FsZXNbbG9jYWxlXSB9KTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY29tcGlsZUpzb25PYmooSlNPTi5wYXJzZShqc29uU3RyKSwgbG9jYWxlVmFsdWVzLCBkZWxpbWl0ZXJzKSwgbnVsbCwgMik7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7IH1cbiAgICByZXR1cm4ganNvblN0cjtcbn1cbmZ1bmN0aW9uIGlzSTE4blN0cih2YWx1ZSwgZGVsaW1pdGVycykge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGRlbGltaXRlcnNbMF0pID4gLTE7XG59XG5mdW5jdGlvbiBjb21waWxlU3RyKHZhbHVlLCB2YWx1ZXMsIGRlbGltaXRlcnMpIHtcbiAgICByZXR1cm4gZm9ybWF0ZXIuaW50ZXJwb2xhdGUodmFsdWUsIHZhbHVlcywgZGVsaW1pdGVycykuam9pbignJyk7XG59XG5mdW5jdGlvbiBjb21waWxlVmFsdWUoanNvbk9iaiwga2V5LCBsb2NhbGVWYWx1ZXMsIGRlbGltaXRlcnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGpzb25PYmpba2V5XTtcbiAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIC8vIOWtmOWcqOWbvemZheWMllxuICAgICAgICBpZiAoaXNJMThuU3RyKHZhbHVlLCBkZWxpbWl0ZXJzKSkge1xuICAgICAgICAgICAganNvbk9ialtrZXldID0gY29tcGlsZVN0cih2YWx1ZSwgbG9jYWxlVmFsdWVzWzBdLnZhbHVlcywgZGVsaW1pdGVycyk7XG4gICAgICAgICAgICBpZiAobG9jYWxlVmFsdWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyDmoLzlvI/ljJblm73pmYXljJbor63oqIBcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUxvY2FsZXMgPSAoanNvbk9ialtrZXkgKyAnTG9jYWxlcyddID0ge30pO1xuICAgICAgICAgICAgICAgIGxvY2FsZVZhbHVlcy5mb3JFYWNoKChsb2NhbFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlTG9jYWxlc1tsb2NhbFZhbHVlLmxvY2FsZV0gPSBjb21waWxlU3RyKHZhbHVlLCBsb2NhbFZhbHVlLnZhbHVlcywgZGVsaW1pdGVycyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbXBpbGVKc29uT2JqKHZhbHVlLCBsb2NhbGVWYWx1ZXMsIGRlbGltaXRlcnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbXBpbGVKc29uT2JqKGpzb25PYmosIGxvY2FsZVZhbHVlcywgZGVsaW1pdGVycykge1xuICAgIHdhbGtKc29uT2JqKGpzb25PYmosIChqc29uT2JqLCBrZXkpID0+IHtcbiAgICAgICAgY29tcGlsZVZhbHVlKGpzb25PYmosIGtleSwgbG9jYWxlVmFsdWVzLCBkZWxpbWl0ZXJzKTtcbiAgICB9KTtcbiAgICByZXR1cm4ganNvbk9iajtcbn1cbmZ1bmN0aW9uIHdhbGtKc29uT2JqKGpzb25PYmosIHdhbGspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uT2JqKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGpzb25PYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh3YWxrKGpzb25PYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoanNvbk9iaikpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4ganNvbk9iaikge1xuICAgICAgICAgICAgaWYgKHdhbGsoanNvbk9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUxvY2FsZShsb2NhbGVzKSB7XG4gICAgcmV0dXJuIChsb2NhbGUpID0+IHtcbiAgICAgICAgaWYgKCFsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgbG9jYWxlID0gbm9ybWFsaXplTG9jYWxlKGxvY2FsZSkgfHwgbG9jYWxlO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZUxvY2FsZUNoYWluKGxvY2FsZSkuZmluZCgobG9jYWxlKSA9PiBsb2NhbGVzLmluZGV4T2YobG9jYWxlKSA+IC0xKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVzb2x2ZUxvY2FsZUNoYWluKGxvY2FsZSkge1xuICAgIGNvbnN0IGNoYWluID0gW107XG4gICAgY29uc3QgdG9rZW5zID0gbG9jYWxlLnNwbGl0KCctJyk7XG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgY2hhaW4ucHVzaCh0b2tlbnMuam9pbignLScpKTtcbiAgICAgICAgdG9rZW5zLnBvcCgpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhaW47XG59XG5cbmV4cG9ydCB7IEJhc2VGb3JtYXR0ZXIgYXMgRm9ybWF0dGVyLCBJMThuLCBMT0NBTEVfRU4sIExPQ0FMRV9FUywgTE9DQUxFX0ZSLCBMT0NBTEVfWkhfSEFOUywgTE9DQUxFX1pIX0hBTlQsIGNvbXBpbGVJMThuSnNvblN0ciwgaGFzSTE4bkpzb24sIGluaXRWdWVJMThuLCBpc0kxOG5TdHIsIGlzU3RyaW5nLCBub3JtYWxpemVMb2NhbGUsIHBhcnNlSTE4bkpzb24sIHJlc29sdmVMb2NhbGUgfTtcbiIsImltcG9ydCBlbiBmcm9tICcuL2VuLmpzb24nXHJcbmltcG9ydCB6aEhhbnMgZnJvbSAnLi96aC1IYW5zLmpzb24nXHJcbmltcG9ydCB6aEhhbnQgZnJvbSAnLi96aC1IYW50Lmpzb24nXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHRlbixcclxuXHQnemgtSGFucyc6IHpoSGFucyxcclxuXHQnemgtSGFudCc6IHpoSGFudFxyXG59XG4iLCI8dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJ1bmktcG9wdXAtZGlhbG9nXCI+XHJcblx0XHQ8dmlldyBjbGFzcz1cInVuaS1kaWFsb2ctdGl0bGVcIj5cclxuXHRcdFx0PHRleHQgY2xhc3M9XCJ1bmktZGlhbG9nLXRpdGxlLXRleHRcIiA6Y2xhc3M9XCJbJ3VuaS1wb3B1cF9fJytkaWFsb2dUeXBlXVwiPnt7dGl0bGVUZXh0fX08L3RleHQ+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldyB2LWlmPVwibW9kZSA9PT0gJ2Jhc2UnXCIgY2xhc3M9XCJ1bmktZGlhbG9nLWNvbnRlbnRcIj5cclxuXHRcdFx0PHNsb3Q+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJ1bmktZGlhbG9nLWNvbnRlbnQtdGV4dFwiPnt7Y29udGVudH19PC90ZXh0PlxyXG5cdFx0XHQ8L3Nsb3Q+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldyB2LWVsc2UgY2xhc3M9XCJ1bmktZGlhbG9nLWNvbnRlbnRcIj5cclxuXHRcdFx0PHNsb3Q+XHJcblx0XHRcdFx0PGlucHV0IGNsYXNzPVwidW5pLWRpYWxvZy1pbnB1dFwiIHYtbW9kZWw9XCJ2YWxcIiB0eXBlPVwidGV4dFwiIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyVGV4dFwiIDpmb2N1cz1cImZvY3VzXCIgPlxyXG5cdFx0XHQ8L3Nsb3Q+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldyBjbGFzcz1cInVuaS1kaWFsb2ctYnV0dG9uLWdyb3VwXCI+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidW5pLWRpYWxvZy1idXR0b25cIiBAY2xpY2s9XCJjbG9zZURpYWxvZ1wiPlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwidW5pLWRpYWxvZy1idXR0b24tdGV4dFwiPnt7Y2xvc2VUZXh0fX08L3RleHQ+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktZGlhbG9nLWJ1dHRvbiB1bmktYm9yZGVyLWxlZnRcIiBAY2xpY2s9XCJvbk9rXCI+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJ1bmktZGlhbG9nLWJ1dHRvbi10ZXh0IHVuaS1idXR0b24tY29sb3JcIj57e29rVGV4dH19PC90ZXh0PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcblx0aW1wb3J0IHBvcHVwIGZyb20gJy4uL3VuaS1wb3B1cC9wb3B1cC5qcydcclxuXHRpbXBvcnQge1xyXG5cdGluaXRWdWVJMThuXHJcblx0fSBmcm9tICdAZGNsb3VkaW8vdW5pLWkxOG4nXHJcblx0aW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL3VuaS1wb3B1cC9pMThuL2luZGV4LmpzJ1xyXG5cdGNvbnN0IHtcdHQgfSA9IGluaXRWdWVJMThuKG1lc3NhZ2VzKVxyXG5cdC8qKlxyXG5cdCAqIFBvcFVwIOW8ueWHuuWxgi3lr7nor53moYbmoLflvI9cclxuXHQgKiBAZGVzY3JpcHRpb24g5by55Ye65bGCLeWvueivneahhuagt+W8j1xyXG5cdCAqIEB0dXRvcmlhbCBodHRwczovL2V4dC5kY2xvdWQubmV0LmNuL3BsdWdpbj9pZD0zMjlcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gdmFsdWUgaW5wdXQg5qih5byP5LiL55qE6buY6K6k5YC8XHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHBsYWNlaG9sZGVyIGlucHV0IOaooeW8j+S4i+i+k+WFpeaPkOekulxyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0eXBlID0gW3N1Y2Nlc3N8d2FybmluZ3xpbmZvfGVycm9yXSDkuLvpopjmoLflvI9cclxuXHQgKiAgQHZhbHVlIHN1Y2Nlc3Mg5oiQ5YqfXHJcblx0ICogXHRAdmFsdWUgd2FybmluZyDmj5DnpLpcclxuXHQgKiBcdEB2YWx1ZSBpbmZvIOa2iOaBr1xyXG5cdCAqIFx0QHZhbHVlIGVycm9yIOmUmeivr1xyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtb2RlID0gW2Jhc2V8aW5wdXRdIOaooeW8j+OAgVxyXG5cdCAqIFx0QHZhbHVlIGJhc2Ug5Z+656GA5a+56K+d5qGGXHJcblx0ICogXHRAdmFsdWUgaW5wdXQg5Y+v6L6T5YWl5a+56K+d5qGGXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGNvbnRlbnQg5a+56K+d5qGG5YaF5a65XHJcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBiZWZvcmVDbG9zZSDmmK/lkKbmi6bmiKrlj5bmtojkuovku7ZcclxuXHQgKiBAZXZlbnQge0Z1bmN0aW9ufSBjb25maXJtIOeCueWHu+ehruiupOaMiemSruinpuWPkVxyXG5cdCAqIEBldmVudCB7RnVuY3Rpb259IGNsb3NlIOeCueWHu+WPlua2iOaMiemSruinpuWPkVxyXG5cdCAqL1xyXG5cclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRuYW1lOiBcInVuaVBvcHVwRGlhbG9nXCIsXHJcblx0XHRtaXhpbnM6IFtwb3B1cF0sXHJcblx0XHRlbWl0czpbJ2NvbmZpcm0nLCdjbG9zZSddLFxyXG5cdFx0cHJvcHM6IHtcclxuXHRcdFx0dmFsdWU6IHtcclxuXHRcdFx0XHR0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdHBsYWNlaG9sZGVyOiB7XHJcblx0XHRcdFx0dHlwZTogW1N0cmluZywgTnVtYmVyXSxcclxuXHRcdFx0XHRkZWZhdWx0OiAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0eXBlOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICdlcnJvcidcclxuXHRcdFx0fSxcclxuXHRcdFx0bW9kZToge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAnYmFzZSdcclxuXHRcdFx0fSxcclxuXHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJydcclxuXHRcdFx0fSxcclxuXHRcdFx0Y29udGVudDoge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRiZWZvcmVDbG9zZToge1xyXG5cdFx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdFx0ZGVmYXVsdDogZmFsc2VcclxuXHRcdFx0fSxcblx0XHRcdGNhbmNlbFRleHQ6e1xuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlybVRleHQ6e1xuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRkaWFsb2dUeXBlOiAnZXJyb3InLFxyXG5cdFx0XHRcdGZvY3VzOiBmYWxzZSxcclxuXHRcdFx0XHR2YWw6IFwiXCJcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGNvbXB1dGVkOiB7XHJcblx0XHRcdG9rVGV4dCgpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25maXJtVGV4dCB8fCB0KFwidW5pLXBvcHVwLm9rXCIpXHJcblx0XHRcdH0sXHJcblx0XHRcdGNsb3NlVGV4dCgpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYW5jZWxUZXh0IHx8IHQoXCJ1bmktcG9wdXAuY2FuY2VsXCIpXHJcblx0XHRcdH0sXHJcblx0XHRcdHBsYWNlaG9sZGVyVGV4dCgpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wbGFjZWhvbGRlciB8fCB0KFwidW5pLXBvcHVwLnBsYWNlaG9sZGVyXCIpXHJcblx0XHRcdH0sXHJcblx0XHRcdHRpdGxlVGV4dCgpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy50aXRsZSB8fCB0KFwidW5pLXBvcHVwLnRpdGxlXCIpXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHR3YXRjaDoge1xyXG5cdFx0XHR0eXBlKHZhbCkge1xyXG5cdFx0XHRcdHRoaXMuZGlhbG9nVHlwZSA9IHZhbFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRtb2RlKHZhbCkge1xyXG5cdFx0XHRcdGlmICh2YWwgPT09ICdpbnB1dCcpIHtcclxuXHRcdFx0XHRcdHRoaXMuZGlhbG9nVHlwZSA9ICdpbmZvJ1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dmFsdWUodmFsKSB7XHJcblx0XHRcdFx0dGhpcy52YWwgPSB2YWxcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGNyZWF0ZWQoKSB7XHJcblx0XHRcdC8vIOWvueivneahhumBrue9qeS4jeWPr+eCueWHu1xyXG5cdFx0XHR0aGlzLnBvcHVwLmRpc2FibGVNYXNrKClcclxuXHRcdFx0Ly8gdGhpcy5wb3B1cC5jbG9zZU1hc2soKVxyXG5cdFx0XHRpZiAodGhpcy5tb2RlID09PSAnaW5wdXQnKSB7XHJcblx0XHRcdFx0dGhpcy5kaWFsb2dUeXBlID0gJ2luZm8nXHJcblx0XHRcdFx0dGhpcy52YWwgPSB0aGlzLnZhbHVlXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5kaWFsb2dUeXBlID0gdGhpcy50eXBlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRtb3VudGVkKCkge1xyXG5cdFx0XHR0aGlzLmZvY3VzID0gdHJ1ZVxyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOeCueWHu+ehruiupOaMiemSrlxyXG5cdFx0XHQgKi9cclxuXHRcdFx0b25PaygpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5tb2RlID09PSAnaW5wdXQnKXtcclxuXHRcdFx0XHRcdHRoaXMuJGVtaXQoJ2NvbmZpcm0nLCB0aGlzLnZhbClcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdHRoaXMuJGVtaXQoJ2NvbmZpcm0nKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZih0aGlzLmJlZm9yZUNsb3NlKSByZXR1cm5cclxuXHRcdFx0XHR0aGlzLnBvcHVwLmNsb3NlKClcclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOeCueWHu+WPlua2iOaMiemSrlxyXG5cdFx0XHQgKi9cclxuXHRcdFx0Y2xvc2VEaWFsb2coKSB7XHJcblx0XHRcdFx0dGhpcy4kZW1pdCgnY2xvc2UnKVxyXG5cdFx0XHRcdGlmKHRoaXMuYmVmb3JlQ2xvc2UpIHJldHVyblxyXG5cdFx0XHRcdHRoaXMucG9wdXAuY2xvc2UoKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjbG9zZSgpe1xyXG5cdFx0XHRcdHRoaXMucG9wdXAuY2xvc2UoKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiID5cclxuXHQudW5pLXBvcHVwLWRpYWxvZyB7XHJcblx0XHR3aWR0aDogMzAwcHg7XHJcblx0XHRib3JkZXItcmFkaXVzOiAxMXB4O1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHR9XHJcblxyXG5cdC51bmktZGlhbG9nLXRpdGxlIHtcclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHRcdHBhZGRpbmctdG9wOiAyNXB4O1xyXG5cdH1cclxuXHJcblx0LnVuaS1kaWFsb2ctdGl0bGUtdGV4dCB7XHJcblx0XHRmb250LXNpemU6IDE2cHg7XHJcblx0XHRmb250LXdlaWdodDogNTAwO1xyXG5cdH1cclxuXHJcblx0LnVuaS1kaWFsb2ctY29udGVudCB7XHJcblx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0XHRmbGV4LWRpcmVjdGlvbjogcm93O1xyXG5cdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdFx0cGFkZGluZzogMjBweDtcclxuXHR9XHJcblxyXG5cdC51bmktZGlhbG9nLWNvbnRlbnQtdGV4dCB7XHJcblx0XHRmb250LXNpemU6IDE0cHg7XHJcblx0XHRjb2xvcjogIzZDNkM2QztcclxuXHR9XHJcblxyXG5cdC51bmktZGlhbG9nLWJ1dHRvbi1ncm91cCB7XHJcblx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0XHRmbGV4LWRpcmVjdGlvbjogcm93O1xyXG5cdFx0Ym9yZGVyLXRvcC1jb2xvcjogI2Y1ZjVmNTtcclxuXHRcdGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xyXG5cdFx0Ym9yZGVyLXRvcC13aWR0aDogMXB4O1xyXG5cdH1cclxuXHJcblx0LnVuaS1kaWFsb2ctYnV0dG9uIHtcclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHJcblx0XHRmbGV4OiAxO1xyXG5cdFx0ZmxleC1kaXJlY3Rpb246IHJvdztcclxuXHRcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHRcdGhlaWdodDogNDVweDtcclxuXHR9XHJcblxyXG5cdC51bmktYm9yZGVyLWxlZnQge1xyXG5cdFx0Ym9yZGVyLWxlZnQtY29sb3I6ICNmMGYwZjA7XHJcblx0XHRib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XHJcblx0XHRib3JkZXItbGVmdC13aWR0aDogMXB4O1xyXG5cdH1cclxuXHJcblx0LnVuaS1kaWFsb2ctYnV0dG9uLXRleHQge1xyXG5cdFx0Zm9udC1zaXplOiAxNnB4O1xyXG5cdFx0Y29sb3I6ICMzMzM7XHJcblx0fVxyXG5cclxuXHQudW5pLWJ1dHRvbi1jb2xvciB7XHJcblx0XHRjb2xvcjogIzAwN2FmZjtcclxuXHR9XHJcblxyXG5cdC51bmktZGlhbG9nLWlucHV0IHtcclxuXHRcdGZsZXg6IDE7XHJcblx0XHRmb250LXNpemU6IDE0cHg7XHJcblx0XHRib3JkZXI6IDFweCAjZWVlIHNvbGlkO1xyXG5cdFx0aGVpZ2h0OiA0MHB4O1xyXG5cdFx0cGFkZGluZzogMCAxMHB4O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xyXG5cdFx0Y29sb3I6ICM1NTU7XHJcblx0fVxyXG5cclxuXHQudW5pLXBvcHVwX19zdWNjZXNzIHtcclxuXHRcdGNvbG9yOiAjNGNkOTY0O1xyXG5cdH1cclxuXHJcblx0LnVuaS1wb3B1cF9fd2FybiB7XHJcblx0XHRjb2xvcjogI2YwYWQ0ZTtcclxuXHR9XHJcblxyXG5cdC51bmktcG9wdXBfX2Vycm9yIHtcclxuXHRcdGNvbG9yOiAjZGQ1MjRkO1xyXG5cdH1cclxuXHJcblx0LnVuaS1wb3B1cF9faW5mbyB7XHJcblx0XHRjb2xvcjogIzkwOTM5OTtcclxuXHR9XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cbiAgPHZpZXcgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8dmlldyBjbGFzcz1cImV4YW1wbGVcIj5cbiAgICAgIDwhLS0g5Z+656GA6KGo5Y2V5qCh6aqMIC0tPlxuICAgICAgPHVuaS1mb3Jtc1xuICAgICAgICByZWY9XCJ2YWxpRm9ybVwiXG4gICAgICAgIGxhYmVsLWFsaWduPVwicmlnaHRcIlxuICAgICAgICBsYWJlbC13aWR0aD1cIjgwcHhcIlxuICAgICAgICA6cnVsZXM9XCJydWxlc1wiXG4gICAgICAgIDptb2RlbFZhbHVlPVwidmFsaUZvcm1EYXRhXCJcbiAgICAgID5cbiAgICAgICAgPHVuaS1mb3Jtcy1pdGVtIGxhYmVsPVwi5Y2V5Y+3XCIgcmVxdWlyZWQgbmFtZT1cIm9yZGVyTnVtXCI+XG4gICAgICAgICAgPHVuaS1lYXN5aW5wdXRcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEub3JkZXJOdW1cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXljZXlj7dcIlxuICAgICAgICAgICAgc3VmZml4SWNvbj1cInNjYW5cIlxuICAgICAgICAgICAgOmZvY3VzPVwiZm9jdXNUeXBlXCJcbiAgICAgICAgICAgIEBpY29uQ2xpY2s9XCJzY2FuXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxuICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLph43ph49cIiByZXF1aXJlZCBuYW1lPVwid2VpZ2h0XCI+XG4gICAgICAgICAgPHVuaS1lYXN5aW5wdXRcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEud2VpZ2h0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl6YeN6YePXCJcbiAgICAgICAgICAgIG9uaW5wdXQ9XCJ2YWx1ZT12YWx1ZS5yZXBsYWNlKC9bXlxcZC5dL2csJycpLnJlcGxhY2UoL15cXC4vZywgJycpLnJlcGxhY2UoL1xcLnsyLH0vZywgJycpLnJlcGxhY2UoJy4nLCAnJCMkJykucmVwbGFjZSgvXFwuL2csICcnKS5yZXBsYWNlKCckIyQnLCAnLicpLm1hdGNoKC9eXFxkKihcXC4/XFxkezAsMn0pL2cpWzBdIHx8IG51bGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSAjcmlnaHQ+XG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwid2VpZ2h0LXJpZ2h0XCI+S0c8L3ZpZXc+XG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgIDwvdW5pLWVhc3lpbnB1dD5cbiAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cblxuICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLlm77niYdcIiBuYW1lPVwiaW1hZ2VzXCI+XG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1cGxvYWQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInByZXZpZXdcIj5cbiAgICAgICAgICAgICAgPHZpZXcgdi1mb3I9XCIoaW1nLCBpbmRleCkgaW4gaW1hZ2VzXCIgOmtleT1cImluZGV4XCIgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8aW1hZ2VcbiAgICAgICAgICAgICAgICAgIDpzcmM9XCJpbWcucGF0aFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInByZXZpZXctaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgbW9kZT1cImFzcGVjdEZpbGxcIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwib3BlblByZXZpZXcoaW1nLnBhdGgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgOnBlcmNlbnQ9XCJpbWcucHJvZ3Jlc3MgfHwgMFwiXG4gICAgICAgICAgICAgICAgICA6YWN0aXZlQ29sb3I9XCJOdW1iZXIoaW1nLnByb2dyZXNzIHx8IDApID09PSAxMDAgPyAnIzAwZmYwMCcgOiAnIzEwQUVGRidcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDx0ZXh0IHYtaWY9XCJpbWcuc3RhdHVzID09PSAnc3VjY2VzcydcIj4xPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx1bmktaWNvbnNcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlSW1hZ2UoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjbGVhclwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJyZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgICAgICAgPHZpZXdcbiAgICAgICAgICAgICAgICB2LWlmPVwiaW1hZ2VzLmxlbmd0aCA8IG1heEltYWdlc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaG9vc2UtaW1hZ2UtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJjaG9vc2VJbWFnZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dW5pLWljb25zIHR5cGU9XCJwbHVzZW1wdHlcIiBzaXplPVwiNDBcIiBjb2xvcj1cIiNjY2NcIiAvPlxuICAgICAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT1cInBhZGRpbmctdG9wOiA4cHhcIj7mnIDlpJrpgInmi6k25byg5Zu+54mHPC90ZXh0PlxuICAgICAgICAgICAgPCEtLSDmlL7lpKfpooTop4ggLS0+XG4gICAgICAgICAgICA8dmlldyB2LWlmPVwicHJldmlld0ltYWdlXCIgY2xhc3M9XCJwcmV2aWV3LW1vZGFsXCIgQGNsaWNrPVwiY2xvc2VQcmV2aWV3XCI+XG4gICAgICAgICAgICAgIDxpbWFnZVxuICAgICAgICAgICAgICAgIDpzcmM9XCJwcmV2aWV3SW1hZ2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHJldmlldy1sYXJnZVwiXG4gICAgICAgICAgICAgICAgbW9kZT1cImFzcGVjdEZpdFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnN0b3A9XCJjbG9zZVByZXZpZXdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC92aWV3PlxuICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cbiAgICAgIDwvdW5pLWZvcm1zPlxuICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiaW5mb1wiIEBjbGljaz1cInJlc2V0XCI+6YeN572uPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJvbnN1Ym1pdFwiIDpsb2FkaW5nPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDx1bmktaWNvbnMgdi1pZj1cIiFsb2FkaW5nXCIgdHlwZT1cImNoZWNrbWFya2VtcHR5XCIgc2l6ZT1cIjE4XCIgY29sb3I9XCJ3aGl0ZVwiPjwvdW5pLWljb25zPlxuICAgICAgICAgIOaPkOS6pFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdmlldz5cbiAgICA8L3ZpZXc+XG5cbiAgICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIGhpc3RvcnlMaXN0LnNsaWNlKDAsIDUpXCIgOmtleT1cImlcIj5cbiAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLm9yZGVyTnVtIH19XG4gICAgICAgICAge3sgaXRlbS50eXBlIH19XG4gICAgICAgIDwvdGV4dD5cblxuICAgICAgICA8dW5pLWljb25zXG4gICAgICAgICAgdi1pZj1cIml0ZW0uc3RhdHVzXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIlxuICAgICAgICAgIGNsYXNzPVwic3RhdHVzXCJcbiAgICAgICAgICBzaXplPVwiMTZcIlxuICAgICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxuICAgICAgICA+PC91bmktaWNvbnM+XG4gICAgICAgIDx0ZXh0IGNsYXNzPVwic3RhdHVzIGZhaWxcIiB2LWVsc2U+RjwvdGV4dD5cblxuICAgICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxuICAgICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgIDwvdmlldz5cbiAgICA8L3ZpZXc+XG5cbiAgICA8dW5pLXBvcHVwIHJlZj1cIm1lc3NhZ2VcIiB0eXBlPVwibWVzc2FnZVwiPlxuICAgICAgPHVuaS1wb3B1cC1tZXNzYWdlXG4gICAgICAgIDp0eXBlPVwibWVzc2FnZVR5cGVcIlxuICAgICAgICA6bWVzc2FnZT1cIm1lc3NhZ2VUZXh0XCJcbiAgICAgICAgOmR1cmF0aW9uPVwiMjAwMFwiXG4gICAgICA+PC91bmktcG9wdXAtbWVzc2FnZT5cbiAgICA8L3VuaS1wb3B1cD5cblxuICAgIDx1bmktcG9wdXAgcmVmPVwiYWxlcnREaWFsb2dcIiB0eXBlPVwiZGlhbG9nXCI+XG4gICAgICA8dW5pLXBvcHVwLWRpYWxvZ1xuICAgICAgICB0eXBlPVwiaW5mb1wiXG4gICAgICAgIGNhbmNlbFRleHQ9XCLlkKZcIlxuICAgICAgICBjb25maXJtVGV4dD1cIuaYr1wiXG4gICAgICAgIHRpdGxlPVwi5o+Q56S6XCJcbiAgICAgICAgY29udGVudD1cIuaYr+WQpuaMiem7mOiupOeUs+aKpe+8iOm7mOiupOeUs+aKpeS4uu+8muiho+acje+8jDEw5Lu277yM5Y2V5Lu3Me+8iVwiXG4gICAgICAgIEBjb25maXJtPVwiZGlhbG9nQ29uZmlybVwiXG4gICAgICAgIEBjbG9zZT1cImRpYWxvZ0Nsb3NlXCJcbiAgICAgID48L3VuaS1wb3B1cC1kaWFsb2c+XG4gICAgPC91bmktcG9wdXA+XG4gIDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyByZWYsIHJlYWN0aXZlLCBuZXh0VGljaywgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBvblNob3csIG9uSGlkZSwgb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXG5pbXBvcnQgeyBjaGVja1Blcm1pc3Npb24gfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0QWxpeXVuT3NzU2lnbmF0dXJlLCB3ZWlnaCwgY2hlY2tXYXliaWxsR29vZHMgfSBmcm9tICdAL3NlcnZpY2VzL3dlaWdoJ1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0AvdXRpbHMvcmFuZG9tJ1xuXG5jb25zdCBhbGVydERpYWxvZyA9IHJlZigpXG5jb25zdCBtZXNzYWdlID0gcmVmKClcbmNvbnN0IHZhbGlGb3JtID0gcmVmKClcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXG5jb25zdCBpbWFnZXMgPSByZWYoW10gYXMgYW55KVxuY29uc3QgbWVzc2FnZVR5cGUgPSByZWYoJycpXG5jb25zdCBtZXNzYWdlVGV4dCA9IHJlZignJylcbmNvbnN0IHByZXZpZXdJbWFnZSA9IHJlZihudWxsKVxuY29uc3QgbWF4SW1hZ2VzID0gcmVmKDYpIC8vIOacgOWkp+S4iuS8oOWbvueJh+aVsOmHj1xuY29uc3QgaGlzdG9yeUxpc3QgPSByZWYoW10gYXMgYW55KVxuXG5jb25zdCBmb2N1c1R5cGUgPSByZWYodHJ1ZSlcbmNvbnN0IHJlc3VsdCA9IHJlZigpXG4vLyDmoKHpqozooajljZXmlbDmja5cbmNvbnN0IHZhbGlGb3JtRGF0YSA9IHJlYWN0aXZlKHtcbiAgaW1hZ2VzOiBbXSxcbiAgb3JkZXJOdW06ICcnLFxuICB3ZWlnaHQ6ICcnLFxuICB0eXBpbmc6IHRydWUsXG59KVxuXG5jb25zdCBydWxlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBvcmRlck51bToge1xuICAgICAgcnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGVycm9yTWVzc2FnZTogJ+WNleWPt+S4jeiDveS4uuepuicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgd2VpZ2h0OiB7XG4gICAgICBydWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiAn6YeN6YeP5LiN6IO95Li656m6JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1hdDogJ251bWJlcicsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiAn6YeN6YeP5Y+q6IO96L6T5YWl5pWw5a2XJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfVxufSlcblxub25TaG93KGFzeW5jICgpID0+IHtcbiAgZm9jdXNUeXBlLnZhbHVlID0gdHJ1ZVxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2Vcbn0pXG5vbkhpZGUoKCkgPT4ge1xuICBmb2N1c1R5cGUudmFsdWUgPSBmYWxzZVxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2Vcbn0pXG5vbk5hdmlnYXRpb25CYXJCdXR0b25UYXAoKGV2ZW50OiBhbnkpID0+IHtcbiAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XG4gICAgdW5pLm5hdmlnYXRlVG8oe1xuICAgICAgdXJsOiAnL3BhZ2VzL3dlaWdoL2xvZ0xpc3QnLFxuICAgIH0pXG4gIH1cbn0pXG5cbmNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgZm9jdXNUeXBlLnZhbHVlID0gZmFsc2VcbiAgaW1hZ2VzLnZhbHVlID0gW11cbiAgdmFsaUZvcm1EYXRhLm9yZGVyTnVtID0gJydcbiAgdmFsaUZvcm1EYXRhLndlaWdodCA9ICcnXG4gIHZhbGlGb3JtRGF0YS50eXBpbmcgPSB0cnVlXG4gIG5leHRUaWNrKCgpID0+IHtcbiAgICBmb2N1c1R5cGUudmFsdWUgPSB0cnVlXG4gIH0pXG59XG5cbmNvbnN0IHNjYW4gPSBhc3luYyAoKSA9PiB7XG5cbiAgbGV0IHN0YXR1cyA9IGF3YWl0IGNoZWNrUGVybWlzc2lvbigpXG4gIGlmIChzdGF0dXMgIT09IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHVuaS5zY2FuQ29kZSh7XG4gICAgc3VjY2VzczogKHJlczogYW55KSA9PiB7XG4gICAgICByZXN1bHQudmFsdWUgPSByZXMucmVzdWx0XG4gICAgICB2YWxpRm9ybURhdGEub3JkZXJOdW0gPSByZXMucmVzdWx0XG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICAvLyDpnIDopoHms6jmhI/nmoTmmK/lsI/nqIvluo/miavnoIHkuI3pnIDopoHnlLPor7fnm7jmnLrmnYPpmZBcbiAgICB9LFxuICB9KVxufVxuXG5sZXQgc3Q6IG51bWJlclxuY29uc3Qgd2FyZWhvdXNlU2NhbiA9IGFzeW5jICgpID0+IHtcbiAgc3QgJiYgY2xlYXJUaW1lb3V0KHN0KVxuICBhd2FpdCBfY2hlY2tXYXliaWxsR29vZHMoKVxufVxuXG5jb25zdCBfY2hlY2tXYXliaWxsR29vZHMgPSBhc3luYyAoKSA9PiB7XG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGNoZWNrV2F5YmlsbEdvb2RzKHZhbGlGb3JtRGF0YS5vcmRlck51bSlcbiAgaWYgKHJlcy5jb2RlID09PSAxKSB7XG4gICAgaWYgKHJlcy5kYXRhLmlzX2dvb2RzX2VtcHR5KSB7XG4gICAgICBhbGVydERpYWxvZy52YWx1ZS5vcGVuKClcbiAgICB9IGVsc2Uge1xuICAgICAgd2VpZ2hTY2FuKDApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG4gIH1cbn1cblxuY29uc3Qgd2VpZ2hTY2FuID0gYXN5bmMgKGlzX3NhdmVfZ29vZHM6IG51bWJlcikgPT4ge1xuICBjb25zdCBpbWFnZXMgPSBnZXRJbWFnZXMoKVxuICBsZXQgYWxsSW1nVmVyaWZ5ID0gdHJ1ZVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaW1hZ2VzW2ldLnNhdmVQYXRoKSB7XG4gICAgICBhbGxJbWdWZXJpZnkgPSBmYWxzZVxuICAgIH1cbiAgfVxuICBpZiAoIWFsbEltZ1ZlcmlmeSkge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+WbvueJh+i/mOayoeS4iuS8oOWujOavle+8jOivt+eojeWQji4uLidcbiAgICBtZXNzYWdlLnZhbHVlLm9wZW4oKVxuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IHJlcyA9IGF3YWl0IHdlaWdoKHtcbiAgICBvcmRlcl9ubzogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgIHdlaWdodDogdmFsaUZvcm1EYXRhLndlaWdodCxcbiAgICBpc19zYXZlX2dvb2RzOiBpc19zYXZlX2dvb2RzLFxuICAgIGltYWdlcyxcbiAgfSlcblxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgaWYgKHJlcy5jb2RlID09IDEpIHtcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XG4gICAgICBvcmRlck51bTogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICfnp7Dph40nLFxuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgIH1cbiAgICBoaXN0b3J5TGlzdC52YWx1ZS51bnNoaWZ0KGhpc3RvcnlJdGVtKVxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnd2VpZ2hIaXN0b3J5JywgaGlzdG9yeUxpc3QudmFsdWUpXG4gICAgZ2V0SGlzdG9yeSgpXG4gICAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc2V0KClcbiAgICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgICB9LCAxMDAwKVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XG4gICAgICBvcmRlck51bTogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICfnp7Dph40nLFxuICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICB9XG4gICAgaGlzdG9yeUxpc3QudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3dlaWdoSGlzdG9yeScsIGhpc3RvcnlMaXN0LnZhbHVlKVxuICAgIGdldEhpc3RvcnkoKVxuICAgIHN0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZXNldCgpXG4gICAgICBzdCAmJiBjbGVhclRpbWVvdXQoc3QpXG4gICAgfSwgMTAwMClcbiAgfVxufVxuXG5jb25zdCBkaWFsb2dDb25maXJtID0gKCkgPT4ge1xuICB3ZWlnaFNjYW4oMSlcbn1cbmNvbnN0IGRpYWxvZ0Nsb3NlID0gKCkgPT4ge1xuICB3ZWlnaFNjYW4oMClcbn1cblxuY29uc3Qgb25zdWJtaXQgPSAoKSA9PiB7XG4gIHZhbGlGb3JtLnZhbHVlXG4gICAgLnZhbGlkYXRlKClcbiAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgIHdhcmVob3VzZVNjYW4oKVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xuICAgICAgX19mX18oJ2xvZycsJ2F0IHBhZ2VzL3dlaWdoL3dlaWdoLnZ1ZTozMjknLCdlcnInLCBlcnIpXG4gICAgfSlcbn1cbmNvbnN0IGdldEhpc3RvcnkgPSAoKSA9PiB7XG4gIGhpc3RvcnlMaXN0LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3ZWlnaEhpc3RvcnknKVxufVxuY29uc3QgZ2V0SW1hZ2VzID0gKCkgPT4ge1xuICBjb25zdCByZXMgPSBpbWFnZXMudmFsdWUubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgc2F2ZVBhdGg6IGl0ZW0uc2VydmVyVXJsLFxuICAgICAgZmlsZVNpemU6IGl0ZW0uc2l6ZSxcbiAgICAgIG1pbWVUeXBlOiBpdGVtLnR5cGUsXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzXG59XG5cbi8vIOiOt+WPlumYv+mHjOS6kW9zc+etvuWQjVxuY29uc3QgX2dldEFsaXl1bk9zc1NpZ25hdHVyZSA9IGFzeW5jIChyYXdGaWxlczogYW55W10pID0+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0QWxpeXVuT3NzU2lnbmF0dXJlKClcbiAgY29uc3Qgc2lnbmF0dXJlID0gcmVzLmRhdGEuc2lnbmF0dXJlXG5cbiAgY29uc3QgdXBsb2FkUHJvbWlzZXMgPSByYXdGaWxlcy5tYXAoKGltYWdlOiBhbnkpID0+IHtcbiAgICByZXR1cm4gdXBMb2FkRmlsZShzaWduYXR1cmUsIGltYWdlKVxuICB9KVxuXG4gIFByb21pc2UuYWxsKHVwbG9hZFByb21pc2VzKVxuICAgIC50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICB1bmkuc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6ICfliqDovb3miJDlip8nLFxuICAgICAgICBpY29uOiAnc3VjY2VzcycsXG4gICAgICB9KVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgX19mX18oJ2Vycm9yJywnYXQgcGFnZXMvd2VpZ2gvd2VpZ2gudnVlOjM2NCcsJ+WKoOi9veWksei0pTonLCBlcnJvcilcbiAgICAgIHVuaS5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogJ+WKoOi9veWksei0pScsXG4gICAgICAgIGljb246ICdub25lJyxcbiAgICAgIH0pXG4gICAgfSlcbn1cbmNvbnN0IHVwTG9hZEZpbGUgPSAoXG4gIHNpZ25hdHVyZTogeyBwb2xpY3k6IGFueTsgc2lnbmF0dXJlOiBhbnk7IG9zc0FjY2Vzc0tleUlkOiBhbnk7IGRpcjogYW55OyBob3N0OiBhbnkgfSxcbiAgaW1hZ2U6IHtcbiAgICBzZXJ2ZXJVcmw6IHN0cmluZ1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIGZpbGU6IGFueVxuICAgIHBhdGg6IGFueVxuICAgIHByb2dyZXNzOiBudW1iZXJcbiAgfSxcbikgPT4ge1xuICBjb25zdCBmaWxlRGF0YSA9IHtcbiAgICBwb2xpY3k6IHNpZ25hdHVyZS5wb2xpY3ksXG4gICAgc2lnbmF0dXJlOiBzaWduYXR1cmUuc2lnbmF0dXJlLFxuICAgIG9zc2FjY2Vzc0tleUlkOiBzaWduYXR1cmUub3NzQWNjZXNzS2V5SWQsXG4gICAga2V5OiBzaWduYXR1cmUuZGlyICsgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTUREJykgKyAnLycgKyB1dWlkKCkgKyAnXycgKyBpbWFnZS5uYW1lLFxuICAgIGRpcjogc2lnbmF0dXJlLmRpcixcbiAgICBob3N0OiBzaWduYXR1cmUuaG9zdCxcbiAgICBmaWxlOiBpbWFnZS5maWxlLFxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IG5hbWUgPSBpbWFnZS5uYW1lXG5cbiAgICBuYW1lID0gJ2ZpbGUnXG5cbiAgICBjb25zdCB1cGxvYWRUYXNrID0gdW5pLnVwbG9hZEZpbGUoe1xuICAgICAgdXJsOiBzaWduYXR1cmUuaG9zdCwgLy8g5L2g55qE5LiK5Lyg5o6l5Y+j5Zyw5Z2AXG4gICAgICBmaWxlUGF0aDogaW1hZ2UucGF0aCxcbiAgICAgIG5hbWU6IG5hbWUsIC8vIOi/memHjOagueaNruWQjuerr+mcgOimgeeahOWtl+auteadpeWumuS5iVxuICAgICAgZm9ybURhdGE6IGZpbGVEYXRhLFxuICAgICAgc3VjY2VzczogKHVwbG9hZEZpbGVSZXMpID0+IHtcbiAgICAgICAgaWYgKHVwbG9hZEZpbGVSZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHVwbG9hZEZpbGVSZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgaW1hZ2UhLnNlcnZlclVybCA9IGZpbGVEYXRhLmtleVxuICAgICAgICAgIHJlc29sdmUodXBsb2FkRmlsZVJlcylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QodXBsb2FkRmlsZVJlcylcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZhaWw6IChlcnJvcikgPT4ge1xuICAgICAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvd2VpZ2gvd2VpZ2gudnVlOjQwOScsJ2Vycm9yKysnLCBlcnJvcilcbiAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSxcbiAgICAgIC8vIOabtOaWsOS4iuS8oOi/m+W6plxuICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgX19mX18oJ2xvZycsJ2F0IHBhZ2VzL3dlaWdoL3dlaWdoLnZ1ZTo0MTQnLCdjb21wbGV0ZS0tLScpXG4gICAgICAgIGltYWdlLnByb2dyZXNzID0gMTAwXG4gICAgICB9LFxuICAgIH0pXG4gICAgLy8g5Y+v6YCJ77ya55uR5ZCs5LiK5Lyg6L+b5bqm5Y+Y5YyWXG4gICAgdXBsb2FkVGFzay5vblByb2dyZXNzVXBkYXRlKChwcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICBpbWFnZS5wcm9ncmVzcyA9IHByb2dyZXNzRXZlbnQucHJvZ3Jlc3MgLy8g5pu05paw6L+b5bqmXG4gICAgfSlcbiAgfSlcbn1cbmNvbnN0IGNob29zZUltYWdlID0gKCkgPT4ge1xuICB1bmkuY2hvb3NlSW1hZ2Uoe1xuICAgIGNvdW50OiBtYXhJbWFnZXMudmFsdWUgLSBpbWFnZXMudmFsdWUubGVuZ3RoLFxuICAgIHN1Y2Nlc3M6IChyZXM6IGFueSkgPT4ge1xuICAgICAgaW1hZ2VzLnZhbHVlID0gaW1hZ2VzLnZhbHVlLmNvbmNhdChcbiAgICAgICAgcmVzLnRlbXBGaWxlcy5tYXAoKGl0ZW06IHsgc2l6ZTogYW55OyBwYXRoOiBzdHJpbmc7IG5hbWU6IGFueTsgdHlwZTogYW55IH0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBzaXplOiBpdGVtLnNpemUsXG4gICAgICAgICAgICBwYXRoOiBpdGVtLnBhdGgsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBwcm9ncmVzczogMCxcbiAgICAgICAgICAgIGZpbGU6IGl0ZW0sXG4gICAgICAgICAgfVxuXG5cbiAgICAgICAgICAvL+aWh+S7tuWQjeaTjeS9nFxuICAgICAgICAgIC8v6I635Y+W5paH5Lu25ZCO57yAXG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gaXRlbS5wYXRoLnN1YnN0cmluZyhpdGVtLnBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpXG4gICAgICAgICAgLy/ojrflj5bmlofku7blkI1cbiAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGl0ZW0ucGF0aC5zdWJzdHJpbmcoaXRlbS5wYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKVxuICAgICAgICAgIHJlcy5uYW1lID0gZmlsZU5hbWVcbiAgICAgICAgICByZXMudHlwZSA9IHN1ZmZpeFxuXG5cbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgY29uc3QgcGFkZGluZ0ltYWdlcyA9IGltYWdlcy52YWx1ZS5maWx0ZXIoKGltYWdlOiBhbnkpID0+IGltYWdlLnByb2dyZXNzID09PSAwKVxuXG4gICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIF9nZXRBbGl5dW5Pc3NTaWduYXR1cmUocGFkZGluZ0ltYWdlcylcbiAgICAgIH0pXG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICBfX2ZfXygnZXJyb3InLCdhdCBwYWdlcy93ZWlnaC93ZWlnaC52dWU6NDU5JyxlcnIpXG4gICAgfSxcbiAgfSlcbn1cbmNvbnN0IGRlbGV0ZUltYWdlID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgaW1hZ2VzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbn1cblxuY29uc3Qgb3BlblByZXZpZXcgPSAoaW1hZ2U6IG51bGwpID0+IHtcbiAgcHJldmlld0ltYWdlLnZhbHVlID0gaW1hZ2UgLy8g6K6+572u5pS+5aSn6aKE6KeI55qE5Zu+54mHXG59XG5jb25zdCBjbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gIHByZXZpZXdJbWFnZS52YWx1ZSA9IG51bGwgLy8g5YWz6Zet6aKE6KeIXG59XG48L3NjcmlwdD5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmV4YW1wbGUge1xuICBwYWRkaW5nOiAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnV0dG9uLWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG5cbiAgYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAzNXB4O1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgZm9udC1zaXplOiAyNHJweDtcbiAgfVxuXG4gIC51bmktaWNvbnMge1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxufVxuXG4ud2VpZ2h0LXJpZ2h0IHtcbiAgcGFkZGluZy1yaWdodDogMTBycHg7XG59XG5cbi5oaXN0b3J5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xuXG4gIC50aXRsZSB7XG4gICAgcGFkZGluZzogMjBycHg7XG4gICAgZm9udC1zaXplOiAyNHJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLmNvZGUge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAuaXRlbSB7XG4gICAgcGFkZGluZzogMjBycHg7XG4gICAgZm9udC1zaXplOiAyMHJweDtcbiAgICBjb2xvcjogIzY2NjtcblxuICAgIC5zdGF0dXMge1xuICAgICAgcGFkZGluZy1sZWZ0OiAyMHJweDtcbiAgICB9XG5cbiAgICAuZmFpbCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmMDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuPHN0eWxlIHNjb3BlZD5cbi51cGxvYWQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMTZweDtcbn1cblxuLnByZXZpZXcge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5pbWFnZS1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLnByZXZpZXctaW1hZ2Uge1xuICB3aWR0aDogMTMwcnB4O1xuICBoZWlnaHQ6IDEzMHJweDtcbn1cblxuLmRlbGV0ZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jaG9vc2UtaW1hZ2UtY29udGFpbmVyIHtcbiAgd2lkdGg6IDEzMHJweDtcbiAgLyog5LiO5Zu+54mH5aSn5bCP5LiA6Ie0ICovXG4gIGhlaWdodDogMTMwcnB4O1xuICAvKiDkuI7lm77niYflpKflsI/kuIDoh7QgKi9cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC8qIOiDjOaZr+minOiJsuS4uueZveiJsiAqL1xuICBib3JkZXI6IDFweCBkYXNoZWQgI2NjY2NjYztcbiAgLyog6Jma57q/6L655qGGICovXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgLyog5ZyG6KeSICovXG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnByZXZpZXctbW9kYWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpO1xuICAvKiDljYrpgI/mmI7og4zmma8gKi9cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDk5OTtcbn1cblxuLnByZXZpZXctbGFyZ2Uge1xuICBtYXgtd2lkdGg6IDkwJTtcbiAgLyog5pyA5aSn5a695bqmICovXG4gIG1heC1oZWlnaHQ6IDkwJTtcbiAgLyog5pyA5aSn6auY5bqmICovXG59XG5cbi5wcm9ncmVzcy1iYXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8dmlldyBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgIDx2aWV3IGNsYXNzPVwiZXhhbXBsZVwiPlxuICAgICAgPCEtLSDln7rnoYDooajljZXmoKHpqowgLS0+XG4gICAgICA8dW5pLWZvcm1zXG4gICAgICAgIHJlZj1cInZhbGlGb3JtXCJcbiAgICAgICAgbGFiZWwtYWxpZ249XCJyaWdodFwiXG4gICAgICAgIGxhYmVsLXdpZHRoPVwiODBweFwiXG4gICAgICAgIDpydWxlcz1cInJ1bGVzXCJcbiAgICAgICAgOm1vZGVsVmFsdWU9XCJ2YWxpRm9ybURhdGFcIlxuICAgICAgPlxuICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLljZXlj7dcIiByZXF1aXJlZCBuYW1lPVwib3JkZXJOdW1cIj5cbiAgICAgICAgICA8dW5pLWVhc3lpbnB1dFxuICAgICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS5vcmRlck51bVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWNleWPt1wiXG4gICAgICAgICAgICBzdWZmaXhJY29uPVwic2NhblwiXG4gICAgICAgICAgICA6Zm9jdXM9XCJmb2N1c1R5cGVcIlxuICAgICAgICAgICAgQGljb25DbGljaz1cInNjYW5cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG4gICAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIumHjemHj1wiIHJlcXVpcmVkIG5hbWU9XCJ3ZWlnaHRcIj5cbiAgICAgICAgICA8dW5pLWVhc3lpbnB1dFxuICAgICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS53ZWlnaHRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXph43ph49cIlxuICAgICAgICAgICAgb25pbnB1dD1cInZhbHVlPXZhbHVlLnJlcGxhY2UoL1teXFxkLl0vZywnJykucmVwbGFjZSgvXlxcLi9nLCAnJykucmVwbGFjZSgvXFwuezIsfS9nLCAnJykucmVwbGFjZSgnLicsICckIyQnKS5yZXBsYWNlKC9cXC4vZywgJycpLnJlcGxhY2UoJyQjJCcsICcuJykubWF0Y2goL15cXGQqKFxcLj9cXGR7MCwyfSkvZylbMF0gfHwgbnVsbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRlbXBsYXRlICNyaWdodD5cbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ3ZWlnaHQtcmlnaHRcIj5LRzwvdmlldz5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPC91bmktZWFzeWlucHV0PlxuICAgICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxuXG4gICAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIuWbvueJh1wiIG5hbWU9XCJpbWFnZXNcIj5cbiAgICAgICAgICA8dmlldyBjbGFzcz1cInVwbG9hZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJldmlld1wiPlxuICAgICAgICAgICAgICA8dmlldyB2LWZvcj1cIihpbWcsIGluZGV4KSBpbiBpbWFnZXNcIiA6a2V5PVwiaW5kZXhcIiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxpbWFnZVxuICAgICAgICAgICAgICAgICAgOnNyYz1cImltZy5wYXRoXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJldmlldy1pbWFnZVwiXG4gICAgICAgICAgICAgICAgICBtb2RlPVwiYXNwZWN0RmlsbFwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2s9XCJvcGVuUHJldmlldyhpbWcucGF0aClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHByb2dyZXNzXG4gICAgICAgICAgICAgICAgICA6cGVyY2VudD1cImltZy5wcm9ncmVzcyB8fCAwXCJcbiAgICAgICAgICAgICAgICAgIDphY3RpdmVDb2xvcj1cIk51bWJlcihpbWcucHJvZ3Jlc3MgfHwgMCkgPT09IDEwMCA/ICcjMDBmZjAwJyA6ICcjMTBBRUZGJ1wiXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCJcbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgPHRleHQgdi1pZj1cImltZy5zdGF0dXMgPT09ICdzdWNjZXNzJ1wiPjE8L3RleHQ+XG4gICAgICAgICAgICAgICAgPHVuaS1pY29uc1xuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGUtaWNvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVJbWFnZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNsZWFyXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCIyMFwiXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cInJlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC92aWV3PlxuICAgICAgICAgICAgICA8dmlld1xuICAgICAgICAgICAgICAgIHYtaWY9XCJpbWFnZXMubGVuZ3RoIDwgbWF4SW1hZ2VzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNob29zZS1pbWFnZS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImNob29zZUltYWdlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx1bmktaWNvbnMgdHlwZT1cInBsdXNlbXB0eVwiIHNpemU9XCI0MFwiIGNvbG9yPVwiI2NjY1wiIC8+XG4gICAgICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgICAgIDwvdmlldz5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPVwicGFkZGluZy10b3A6IDhweFwiPuacgOWkmumAieaLqTblvKDlm77niYc8L3RleHQ+XG4gICAgICAgICAgICA8IS0tIOaUvuWkp+mihOiniCAtLT5cbiAgICAgICAgICAgIDx2aWV3IHYtaWY9XCJwcmV2aWV3SW1hZ2VcIiBjbGFzcz1cInByZXZpZXctbW9kYWxcIiBAY2xpY2s9XCJjbG9zZVByZXZpZXdcIj5cbiAgICAgICAgICAgICAgPGltYWdlXG4gICAgICAgICAgICAgICAgOnNyYz1cInByZXZpZXdJbWFnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWxhcmdlXCJcbiAgICAgICAgICAgICAgICBtb2RlPVwiYXNwZWN0Rml0XCJcbiAgICAgICAgICAgICAgICBAY2xpY2suc3RvcD1cImNsb3NlUHJldmlld1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgICAgPC92aWV3PlxuICAgICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxuICAgICAgPC91bmktZm9ybXM+XG4gICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJpbmZvXCIgQGNsaWNrPVwicmVzZXRcIj7ph43nva48L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIm9uc3VibWl0XCIgOmxvYWRpbmc9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPHVuaS1pY29ucyB2LWlmPVwiIWxvYWRpbmdcIiB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIiBzaXplPVwiMThcIiBjb2xvcj1cIndoaXRlXCI+PC91bmktaWNvbnM+XG4gICAgICAgICAg5o+Q5LqkXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC92aWV3PlxuICAgIDwvdmlldz5cblxuICAgIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gaGlzdG9yeUxpc3Quc2xpY2UoMCwgNSlcIiA6a2V5PVwiaVwiPlxuICAgICAgICA8dGV4dCBjbGFzcz1cImNvZGVcIiA6c3R5bGU9XCJ7IGNvbG9yOiBpdGVtLnN0YXR1cyA/ICdncmVlbicgOiAnIzY2NicgfVwiPlxuICAgICAgICAgIHt7IGl0ZW0ub3JkZXJOdW0gfX1cbiAgICAgICAgICB7eyBpdGVtLnR5cGUgfX1cbiAgICAgICAgPC90ZXh0PlxuXG4gICAgICAgIDx1bmktaWNvbnNcbiAgICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXG4gICAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxuICAgICAgICAgIHNpemU9XCIxNlwiXG4gICAgICAgICAgY29sb3I9XCJncmVlblwiXG4gICAgICAgID48L3VuaS1pY29ucz5cbiAgICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxuXG4gICAgICAgIDx0ZXh0IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcnB4OyBmb250LXdlaWdodDogMzAwXCI+XG4gICAgICAgICAge3sgJ1xcclxcbicgKyBpdGVtLmNyZWF0ZVRpbWUgfX1cbiAgICAgICAgPC90ZXh0PlxuICAgICAgPC92aWV3PlxuICAgIDwvdmlldz5cblxuICAgIDx1bmktcG9wdXAgcmVmPVwibWVzc2FnZVwiIHR5cGU9XCJtZXNzYWdlXCI+XG4gICAgICA8dW5pLXBvcHVwLW1lc3NhZ2VcbiAgICAgICAgOnR5cGU9XCJtZXNzYWdlVHlwZVwiXG4gICAgICAgIDptZXNzYWdlPVwibWVzc2FnZVRleHRcIlxuICAgICAgICA6ZHVyYXRpb249XCIyMDAwXCJcbiAgICAgID48L3VuaS1wb3B1cC1tZXNzYWdlPlxuICAgIDwvdW5pLXBvcHVwPlxuXG4gICAgPHVuaS1wb3B1cCByZWY9XCJhbGVydERpYWxvZ1wiIHR5cGU9XCJkaWFsb2dcIj5cbiAgICAgIDx1bmktcG9wdXAtZGlhbG9nXG4gICAgICAgIHR5cGU9XCJpbmZvXCJcbiAgICAgICAgY2FuY2VsVGV4dD1cIuWQplwiXG4gICAgICAgIGNvbmZpcm1UZXh0PVwi5pivXCJcbiAgICAgICAgdGl0bGU9XCLmj5DnpLpcIlxuICAgICAgICBjb250ZW50PVwi5piv5ZCm5oyJ6buY6K6k55Sz5oql77yI6buY6K6k55Sz5oql5Li677ya6KGj5pyN77yMMTDku7bvvIzljZXku7cx77yJXCJcbiAgICAgICAgQGNvbmZpcm09XCJkaWFsb2dDb25maXJtXCJcbiAgICAgICAgQGNsb3NlPVwiZGlhbG9nQ2xvc2VcIlxuICAgICAgPjwvdW5pLXBvcHVwLWRpYWxvZz5cbiAgICA8L3VuaS1wb3B1cD5cbiAgPC92aWV3PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IHJlZiwgcmVhY3RpdmUsIG5leHRUaWNrLCBjb21wdXRlZCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IG9uU2hvdywgb25IaWRlLCBvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcbmltcG9ydCB7IGNoZWNrUGVybWlzc2lvbiB9IGZyb20gJ0AvdXRpbHMnXG5pbXBvcnQgeyBnZXRBbGl5dW5Pc3NTaWduYXR1cmUsIHdlaWdoLCBjaGVja1dheWJpbGxHb29kcyB9IGZyb20gJ0Avc2VydmljZXMvd2VpZ2gnXG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQC91dGlscy9yYW5kb20nXG5cbmNvbnN0IGFsZXJ0RGlhbG9nID0gcmVmKClcbmNvbnN0IG1lc3NhZ2UgPSByZWYoKVxuY29uc3QgdmFsaUZvcm0gPSByZWYoKVxuY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSlcbmNvbnN0IGltYWdlcyA9IHJlZihbXSBhcyBhbnkpXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZignJylcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKCcnKVxuY29uc3QgcHJldmlld0ltYWdlID0gcmVmKG51bGwpXG5jb25zdCBtYXhJbWFnZXMgPSByZWYoNikgLy8g5pyA5aSn5LiK5Lyg5Zu+54mH5pWw6YePXG5jb25zdCBoaXN0b3J5TGlzdCA9IHJlZihbXSBhcyBhbnkpXG5cbmNvbnN0IGZvY3VzVHlwZSA9IHJlZih0cnVlKVxuY29uc3QgcmVzdWx0ID0gcmVmKClcbi8vIOagoemqjOihqOWNleaVsOaNrlxuY29uc3QgdmFsaUZvcm1EYXRhID0gcmVhY3RpdmUoe1xuICBpbWFnZXM6IFtdLFxuICBvcmRlck51bTogJycsXG4gIHdlaWdodDogJycsXG4gIHR5cGluZzogdHJ1ZSxcbn0pXG5cbmNvbnN0IHJ1bGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG9yZGVyTnVtOiB7XG4gICAgICBydWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiAn5Y2V5Y+35LiN6IO95Li656m6JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB3ZWlnaHQ6IHtcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6ICfph43ph4/kuI3og73kuLrnqbonLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZm9ybWF0OiAnbnVtYmVyJyxcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6ICfph43ph4/lj6rog73ovpPlhaXmlbDlrZcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9XG59KVxuXG5vblNob3coYXN5bmMgKCkgPT4ge1xuICBmb2N1c1R5cGUudmFsdWUgPSB0cnVlXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxufSlcbm9uSGlkZSgoKSA9PiB7XG4gIGZvY3VzVHlwZS52YWx1ZSA9IGZhbHNlXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxufSlcbm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCgoZXZlbnQ6IGFueSkgPT4ge1xuICBpZiAoZXZlbnQuaW5kZXggPT09IDApIHtcbiAgICB1bmkubmF2aWdhdGVUbyh7XG4gICAgICB1cmw6ICcvcGFnZXMvd2VpZ2gvbG9nTGlzdCcsXG4gICAgfSlcbiAgfVxufSlcblxuY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICBmb2N1c1R5cGUudmFsdWUgPSBmYWxzZVxuICBpbWFnZXMudmFsdWUgPSBbXVxuICB2YWxpRm9ybURhdGEub3JkZXJOdW0gPSAnJ1xuICB2YWxpRm9ybURhdGEud2VpZ2h0ID0gJydcbiAgdmFsaUZvcm1EYXRhLnR5cGluZyA9IHRydWVcbiAgbmV4dFRpY2soKCkgPT4ge1xuICAgIGZvY3VzVHlwZS52YWx1ZSA9IHRydWVcbiAgfSlcbn1cblxuY29uc3Qgc2NhbiA9IGFzeW5jICgpID0+IHtcbiAgLy8gI2lmZGVmIEFQUC1QTFVTXG4gIGxldCBzdGF0dXMgPSBhd2FpdCBjaGVja1Blcm1pc3Npb24oKVxuICBpZiAoc3RhdHVzICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgLy8gI2VuZGlmXG4gIHVuaS5zY2FuQ29kZSh7XG4gICAgc3VjY2VzczogKHJlczogYW55KSA9PiB7XG4gICAgICByZXN1bHQudmFsdWUgPSByZXMucmVzdWx0XG4gICAgICB2YWxpRm9ybURhdGEub3JkZXJOdW0gPSByZXMucmVzdWx0XG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICAvLyDpnIDopoHms6jmhI/nmoTmmK/lsI/nqIvluo/miavnoIHkuI3pnIDopoHnlLPor7fnm7jmnLrmnYPpmZBcbiAgICB9LFxuICB9KVxufVxuXG5sZXQgc3Q6IG51bWJlclxuY29uc3Qgd2FyZWhvdXNlU2NhbiA9IGFzeW5jICgpID0+IHtcbiAgc3QgJiYgY2xlYXJUaW1lb3V0KHN0KVxuICBhd2FpdCBfY2hlY2tXYXliaWxsR29vZHMoKVxufVxuXG5jb25zdCBfY2hlY2tXYXliaWxsR29vZHMgPSBhc3luYyAoKSA9PiB7XG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGNoZWNrV2F5YmlsbEdvb2RzKHZhbGlGb3JtRGF0YS5vcmRlck51bSlcbiAgaWYgKHJlcy5jb2RlID09PSAxKSB7XG4gICAgaWYgKHJlcy5kYXRhLmlzX2dvb2RzX2VtcHR5KSB7XG4gICAgICBhbGVydERpYWxvZy52YWx1ZS5vcGVuKClcbiAgICB9IGVsc2Uge1xuICAgICAgd2VpZ2hTY2FuKDApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG4gIH1cbn1cblxuY29uc3Qgd2VpZ2hTY2FuID0gYXN5bmMgKGlzX3NhdmVfZ29vZHM6IG51bWJlcikgPT4ge1xuICBjb25zdCBpbWFnZXMgPSBnZXRJbWFnZXMoKVxuICBsZXQgYWxsSW1nVmVyaWZ5ID0gdHJ1ZVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaW1hZ2VzW2ldLnNhdmVQYXRoKSB7XG4gICAgICBhbGxJbWdWZXJpZnkgPSBmYWxzZVxuICAgIH1cbiAgfVxuICBpZiAoIWFsbEltZ1ZlcmlmeSkge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+WbvueJh+i/mOayoeS4iuS8oOWujOavle+8jOivt+eojeWQji4uLidcbiAgICBtZXNzYWdlLnZhbHVlLm9wZW4oKVxuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IHJlcyA9IGF3YWl0IHdlaWdoKHtcbiAgICBvcmRlcl9ubzogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgIHdlaWdodDogdmFsaUZvcm1EYXRhLndlaWdodCxcbiAgICBpc19zYXZlX2dvb2RzOiBpc19zYXZlX2dvb2RzLFxuICAgIGltYWdlcyxcbiAgfSlcblxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgaWYgKHJlcy5jb2RlID09IDEpIHtcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XG4gICAgICBvcmRlck51bTogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICfnp7Dph40nLFxuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgIH1cbiAgICBoaXN0b3J5TGlzdC52YWx1ZS51bnNoaWZ0KGhpc3RvcnlJdGVtKVxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnd2VpZ2hIaXN0b3J5JywgaGlzdG9yeUxpc3QudmFsdWUpXG4gICAgZ2V0SGlzdG9yeSgpXG4gICAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc2V0KClcbiAgICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgICB9LCAxMDAwKVxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XG4gICAgICBvcmRlck51bTogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICfnp7Dph40nLFxuICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICB9XG4gICAgaGlzdG9yeUxpc3QudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3dlaWdoSGlzdG9yeScsIGhpc3RvcnlMaXN0LnZhbHVlKVxuICAgIGdldEhpc3RvcnkoKVxuICAgIHN0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZXNldCgpXG4gICAgICBzdCAmJiBjbGVhclRpbWVvdXQoc3QpXG4gICAgfSwgMTAwMClcbiAgfVxufVxuXG5jb25zdCBkaWFsb2dDb25maXJtID0gKCkgPT4ge1xuICB3ZWlnaFNjYW4oMSlcbn1cbmNvbnN0IGRpYWxvZ0Nsb3NlID0gKCkgPT4ge1xuICB3ZWlnaFNjYW4oMClcbn1cblxuY29uc3Qgb25zdWJtaXQgPSAoKSA9PiB7XG4gIHZhbGlGb3JtLnZhbHVlXG4gICAgLnZhbGlkYXRlKClcbiAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgIHdhcmVob3VzZVNjYW4oKVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2VycicsIGVycilcbiAgICB9KVxufVxuY29uc3QgZ2V0SGlzdG9yeSA9ICgpID0+IHtcbiAgaGlzdG9yeUxpc3QudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dlaWdoSGlzdG9yeScpXG59XG5jb25zdCBnZXRJbWFnZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHJlcyA9IGltYWdlcy52YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICBzYXZlUGF0aDogaXRlbS5zZXJ2ZXJVcmwsXG4gICAgICBmaWxlU2l6ZTogaXRlbS5zaXplLFxuICAgICAgbWltZVR5cGU6IGl0ZW0udHlwZSxcbiAgICB9XG4gIH0pXG4gIHJldHVybiByZXNcbn1cblxuLy8g6I635Y+W6Zi/6YeM5LqRb3Nz562+5ZCNXG5jb25zdCBfZ2V0QWxpeXVuT3NzU2lnbmF0dXJlID0gYXN5bmMgKHJhd0ZpbGVzOiBhbnlbXSkgPT4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBnZXRBbGl5dW5Pc3NTaWduYXR1cmUoKVxuICBjb25zdCBzaWduYXR1cmUgPSByZXMuZGF0YS5zaWduYXR1cmVcblxuICBjb25zdCB1cGxvYWRQcm9taXNlcyA9IHJhd0ZpbGVzLm1hcCgoaW1hZ2U6IGFueSkgPT4ge1xuICAgIHJldHVybiB1cExvYWRGaWxlKHNpZ25hdHVyZSwgaW1hZ2UpXG4gIH0pXG5cbiAgUHJvbWlzZS5hbGwodXBsb2FkUHJvbWlzZXMpXG4gICAgLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgIHVuaS5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogJ+WKoOi9veaIkOWKnycsXG4gICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgIH0pXG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCfliqDovb3lpLHotKU6JywgZXJyb3IpXG4gICAgICB1bmkuc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6ICfliqDovb3lpLHotKUnLFxuICAgICAgICBpY29uOiAnbm9uZScsXG4gICAgICB9KVxuICAgIH0pXG59XG5jb25zdCB1cExvYWRGaWxlID0gKFxuICBzaWduYXR1cmU6IHsgcG9saWN5OiBhbnk7IHNpZ25hdHVyZTogYW55OyBvc3NBY2Nlc3NLZXlJZDogYW55OyBkaXI6IGFueTsgaG9zdDogYW55IH0sXG4gIGltYWdlOiB7XG4gICAgc2VydmVyVXJsOiBzdHJpbmdcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBmaWxlOiBhbnlcbiAgICBwYXRoOiBhbnlcbiAgICBwcm9ncmVzczogbnVtYmVyXG4gIH0sXG4pID0+IHtcbiAgY29uc3QgZmlsZURhdGEgPSB7XG4gICAgcG9saWN5OiBzaWduYXR1cmUucG9saWN5LFxuICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlLnNpZ25hdHVyZSxcbiAgICBvc3NhY2Nlc3NLZXlJZDogc2lnbmF0dXJlLm9zc0FjY2Vzc0tleUlkLFxuICAgIGtleTogc2lnbmF0dXJlLmRpciArIGRheWpzKCkuZm9ybWF0KCdZWVlZTU1ERCcpICsgJy8nICsgdXVpZCgpICsgJ18nICsgaW1hZ2UubmFtZSxcbiAgICBkaXI6IHNpZ25hdHVyZS5kaXIsXG4gICAgaG9zdDogc2lnbmF0dXJlLmhvc3QsXG4gICAgZmlsZTogaW1hZ2UuZmlsZSxcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBuYW1lID0gaW1hZ2UubmFtZVxuICAgIC8vICNpZmRlZiBBUFAtUExVU1xuICAgIG5hbWUgPSAnZmlsZSdcbiAgICAvLyAjZW5kaWZcbiAgICBjb25zdCB1cGxvYWRUYXNrID0gdW5pLnVwbG9hZEZpbGUoe1xuICAgICAgdXJsOiBzaWduYXR1cmUuaG9zdCwgLy8g5L2g55qE5LiK5Lyg5o6l5Y+j5Zyw5Z2AXG4gICAgICBmaWxlUGF0aDogaW1hZ2UucGF0aCxcbiAgICAgIG5hbWU6IG5hbWUsIC8vIOi/memHjOagueaNruWQjuerr+mcgOimgeeahOWtl+auteadpeWumuS5iVxuICAgICAgZm9ybURhdGE6IGZpbGVEYXRhLFxuICAgICAgc3VjY2VzczogKHVwbG9hZEZpbGVSZXMpID0+IHtcbiAgICAgICAgaWYgKHVwbG9hZEZpbGVSZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHVwbG9hZEZpbGVSZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgaW1hZ2UhLnNlcnZlclVybCA9IGZpbGVEYXRhLmtleVxuICAgICAgICAgIHJlc29sdmUodXBsb2FkRmlsZVJlcylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QodXBsb2FkRmlsZVJlcylcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZhaWw6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IrKycsIGVycm9yKVxuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9LFxuICAgICAgLy8g5pu05paw5LiK5Lyg6L+b5bqmXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnY29tcGxldGUtLS0nKVxuICAgICAgICBpbWFnZS5wcm9ncmVzcyA9IDEwMFxuICAgICAgfSxcbiAgICB9KVxuICAgIC8vIOWPr+mAie+8muebkeWQrOS4iuS8oOi/m+W6puWPmOWMllxuICAgIHVwbG9hZFRhc2sub25Qcm9ncmVzc1VwZGF0ZSgocHJvZ3Jlc3NFdmVudCkgPT4ge1xuICAgICAgaW1hZ2UucHJvZ3Jlc3MgPSBwcm9ncmVzc0V2ZW50LnByb2dyZXNzIC8vIOabtOaWsOi/m+W6plxuICAgIH0pXG4gIH0pXG59XG5jb25zdCBjaG9vc2VJbWFnZSA9ICgpID0+IHtcbiAgdW5pLmNob29zZUltYWdlKHtcbiAgICBjb3VudDogbWF4SW1hZ2VzLnZhbHVlIC0gaW1hZ2VzLnZhbHVlLmxlbmd0aCxcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcbiAgICAgIGltYWdlcy52YWx1ZSA9IGltYWdlcy52YWx1ZS5jb25jYXQoXG4gICAgICAgIHJlcy50ZW1wRmlsZXMubWFwKChpdGVtOiB7IHNpemU6IGFueTsgcGF0aDogc3RyaW5nOyBuYW1lOiBhbnk7IHR5cGU6IGFueSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgc2l6ZTogaXRlbS5zaXplLFxuICAgICAgICAgICAgcGF0aDogaXRlbS5wYXRoLFxuICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICAgICAgICBmaWxlOiBpdGVtLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vICNpZmRlZiBBUFAtUExVU1xuICAgICAgICAgIC8v5paH5Lu25ZCN5pON5L2cXG4gICAgICAgICAgLy/ojrflj5bmlofku7blkI7nvIBcbiAgICAgICAgICBjb25zdCBzdWZmaXggPSBpdGVtLnBhdGguc3Vic3RyaW5nKGl0ZW0ucGF0aC5sYXN0SW5kZXhPZignLicpICsgMSlcbiAgICAgICAgICAvL+iOt+WPluaWh+S7tuWQjVxuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gaXRlbS5wYXRoLnN1YnN0cmluZyhpdGVtLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpXG4gICAgICAgICAgcmVzLm5hbWUgPSBmaWxlTmFtZVxuICAgICAgICAgIHJlcy50eXBlID0gc3VmZml4XG4gICAgICAgICAgLy8gI2VuZGlmXG5cbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgY29uc3QgcGFkZGluZ0ltYWdlcyA9IGltYWdlcy52YWx1ZS5maWx0ZXIoKGltYWdlOiBhbnkpID0+IGltYWdlLnByb2dyZXNzID09PSAwKVxuXG4gICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIF9nZXRBbGl5dW5Pc3NTaWduYXR1cmUocGFkZGluZ0ltYWdlcylcbiAgICAgIH0pXG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9LFxuICB9KVxufVxuY29uc3QgZGVsZXRlSW1hZ2UgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICBpbWFnZXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxufVxuXG5jb25zdCBvcGVuUHJldmlldyA9IChpbWFnZTogbnVsbCkgPT4ge1xuICBwcmV2aWV3SW1hZ2UudmFsdWUgPSBpbWFnZSAvLyDorr7nva7mlL7lpKfpooTop4jnmoTlm77niYdcbn1cbmNvbnN0IGNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgcHJldmlld0ltYWdlLnZhbHVlID0gbnVsbCAvLyDlhbPpl63pooTop4hcbn1cbjwvc2NyaXB0PlxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZXhhbXBsZSB7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5idXR0b24tZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcblxuICBidXR0b24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDM1cHg7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICBmb250LXNpemU6IDI0cnB4O1xuICB9XG5cbiAgLnVuaS1pY29ucyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB9XG59XG5cbi53ZWlnaHQtcmlnaHQge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHJweDtcbn1cblxuLmhpc3Rvcnkge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XG5cbiAgLnRpdGxlIHtcbiAgICBwYWRkaW5nOiAyMHJweDtcbiAgICBmb250LXNpemU6IDI0cnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAuY29kZSB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgfVxuXG4gIC5pdGVtIHtcbiAgICBwYWRkaW5nOiAyMHJweDtcbiAgICBmb250LXNpemU6IDIwcnB4O1xuICAgIGNvbG9yOiAjNjY2O1xuXG4gICAgLnN0YXR1cyB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xuICAgIH1cblxuICAgIC5mYWlsIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogI2YwMDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG48c3R5bGUgc2NvcGVkPlxuLnVwbG9hZC1jb250YWluZXIge1xuICBwYWRkaW5nOiAxNnB4O1xufVxuXG4ucHJldmlldyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLmltYWdlLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4ucHJldmlldy1pbWFnZSB7XG4gIHdpZHRoOiAxMzBycHg7XG4gIGhlaWdodDogMTMwcnB4O1xufVxuXG4uZGVsZXRlLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmNob29zZS1pbWFnZS1jb250YWluZXIge1xuICB3aWR0aDogMTMwcnB4O1xuICAvKiDkuI7lm77niYflpKflsI/kuIDoh7QgKi9cbiAgaGVpZ2h0OiAxMzBycHg7XG4gIC8qIOS4juWbvueJh+Wkp+Wwj+S4gOiHtCAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLyog6IOM5pmv6aKc6Imy5Li655m96ImyICovXG4gIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjY2NjO1xuICAvKiDomZrnur/ovrnmoYYgKi9cbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAvKiDlnIbop5IgKi9cbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucHJldmlldy1tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gIC8qIOWNiumAj+aYjuiDjOaZryAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgei1pbmRleDogOTk5O1xufVxuXG4ucHJldmlldy1sYXJnZSB7XG4gIG1heC13aWR0aDogOTAlO1xuICAvKiDmnIDlpKflrr3luqYgKi9cbiAgbWF4LWhlaWdodDogOTAlO1xuICAvKiDmnIDlpKfpq5jluqYgKi9cbn1cblxuLnByb2dyZXNzLWJhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiBoaXN0b3J5TGlzdFwiIDprZXk9XCJpXCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwiY29kZVwiIDpzdHlsZT1cInsgY29sb3I6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2JyB9XCI+XHJcbiAgICAgICAge3sgaXRlbS5vcmRlck51bSB9fVxyXG4gICAgICAgIHt7IGl0ZW0udHlwZSB9fVxyXG4gICAgICA8L3RleHQ+XHJcbiAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxyXG4gICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgIHNpemU9XCIxNlwiXHJcbiAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxyXG4gICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJoaXN0b3J5TGlzdC5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IGhpc3RvcnlMaXN0ID0gcmVmKFtdIGFzIGFueVtdKVxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIGhpc3RvcnlMaXN0LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3ZWlnaEhpc3RvcnknKVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uaGlzdG9yeSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICB3aWR0aDogMTAwJTtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiBoaXN0b3J5TGlzdFwiIDprZXk9XCJpXCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwiY29kZVwiIDpzdHlsZT1cInsgY29sb3I6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2JyB9XCI+XHJcbiAgICAgICAge3sgaXRlbS5vcmRlck51bSB9fVxyXG4gICAgICAgIHt7IGl0ZW0udHlwZSB9fVxyXG4gICAgICA8L3RleHQ+XHJcbiAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxyXG4gICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgIHNpemU9XCIxNlwiXHJcbiAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxyXG4gICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJoaXN0b3J5TGlzdC5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IGhpc3RvcnlMaXN0ID0gcmVmKFtdIGFzIGFueVtdKVxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIGhpc3RvcnlMaXN0LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3ZWlnaEhpc3RvcnknKVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uaGlzdG9yeSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICB3aWR0aDogMTAwJTtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgeyBodHRwIH0gZnJvbSAnQC91dGlscy9odHRwJ1xuXG4vKipcbiAqIOiOt+WPlueJqea1geWFrOWPuOWIl+ihqFxuICogQHBhcmFtIGRhdGEg6K+35rGC5Y+C5pWwXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzQ29tcGFueSA9IChkYXRhPzogeyBsaW1pdDogbnVtYmVyOyBvcmRlcjogc3RyaW5nIH0pID0+IHtcbiAgcmV0dXJuIGh0dHA8YW55Pih7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICB1cmw6ICcvYWRtaW4vZXhwcmVzc0NvbXBhbnkvaW5kZXgnLFxuICAgIGRhdGEsXG4gIH0pXG59XG4iLCI8dGVtcGxhdGU+XG4gIDx2aWV3IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPHZpZXcgY2xhc3M9XCJleGFtcGxlXCI+XG4gICAgICA8IS0tIOWfuuehgOihqOWNleagoemqjCAtLT5cbiAgICAgIDx1bmktZm9ybXNcbiAgICAgICAgcmVmPVwidmFsaUZvcm1cIlxuICAgICAgICBsYWJlbC1hbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgbGFiZWwtd2lkdGg9XCI4MHB4XCJcbiAgICAgICAgOnJ1bGVzPVwicnVsZXNcIlxuICAgICAgICA6bW9kZWxWYWx1ZT1cInZhbGlGb3JtRGF0YVwiXG4gICAgICA+XG4gICAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIuWNleWPt1wiIDpyZXF1aXJlZD1cInRydWVcIiBuYW1lPVwib3JkZXJOdW1cIj5cbiAgICAgICAgICA8dW5pLWVhc3lpbnB1dFxuICAgICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS5vcmRlck51bVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWNleWPt1wiXG4gICAgICAgICAgICBzdWZmaXhJY29uPVwic2NhblwiXG4gICAgICAgICAgICA6Zm9jdXM9XCJmb2N1c1R5cGVcIlxuICAgICAgICAgICAgQGljb25DbGljaz1cInNjYW4oJ29yZGVyTnVtJylcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG4gICAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIuaJueasoeWPt1wiIG5hbWU9XCJiYXRjaF9udW1iZXJcIj5cbiAgICAgICAgICA8dW5pLWRhdGEtc2VsZWN0XG4gICAgICAgICAgICB2LW1vZGVsPVwidmFsaUZvcm1EYXRhLmJhdGNoX251bWJlclwiXG4gICAgICAgICAgICA6bG9jYWxkYXRhPVwiYmF0Y2hPcHRpb25zXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oup5om55qyh5Y+3XCJcbiAgICAgICAgICA+PC91bmktZGF0YS1zZWxlY3Q+XG4gICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG4gICAgICAgIDx2aWV3IHYtaWY9XCJvcmRlckluZm8ub3JkZXJfaWRcIj5cbiAgICAgICAgICA8dmlldyB2LWlmPVwiIW9yZGVySW5mby5leHByZXNzX3NuXCI+XG4gICAgICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLnianmtYHlhazlj7hcIiBuYW1lPVwiZXhwcmVzc19jb21wYW55X2lkXCI+XG4gICAgICAgICAgICAgIDx1bmktZGF0YS1zZWxlY3RcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidmFsaUZvcm1EYXRhLmV4cHJlc3NfY29tcGFueV9pZFwiXG4gICAgICAgICAgICAgICAgOmxvY2FsZGF0YT1cImNvbXBhbnlPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+mAieaLqeeJqea1geWFrOWPuFwiXG4gICAgICAgICAgICAgID48L3VuaS1kYXRhLXNlbGVjdD5cbiAgICAgICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG4gICAgICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLnianmtYHljZXlj7dcIiBuYW1lPVwiZXhwcmVzc19ub1wiPlxuICAgICAgICAgICAgICA8dW5pLWVhc3lpbnB1dFxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEuZXhwcmVzc19ub1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXnianmtYHljZXlj7dcIlxuICAgICAgICAgICAgICAgIHN1ZmZpeEljb249XCJzY2FuXCJcbiAgICAgICAgICAgICAgICBAaWNvbkNsaWNrPVwic2NhbignZXhwcmVzc19ubycpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG4gICAgICAgICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLov73ouKrljZXlj7dcIiBuYW1lPVwiZXhwcmVzc190cmFja2luZ19udW1iZXJcIj5cbiAgICAgICAgICAgICAgPHVuaS1lYXN5aW5wdXRcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidmFsaUZvcm1EYXRhLmV4cHJlc3NfdHJhY2tpbmdfbnVtYmVyXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpei/vei4quWNleWPt1wiXG4gICAgICAgICAgICAgICAgc3VmZml4SWNvbj1cInNjYW5cIlxuICAgICAgICAgICAgICAgIEBpY29uQ2xpY2s9XCJzY2FuKCdleHByZXNzX3RyYWNraW5nX251bWJlcicpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XG4gICAgICAgICAgPC92aWV3PlxuICAgICAgICA8L3ZpZXc+XG4gICAgICA8L3VuaS1mb3Jtcz5cbiAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImluZm9cIiBAY2xpY2s9XCJyZXNldFwiPumHjee9rjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwib25zdWJtaXRcIiA6bG9hZGluZz1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8dW5pLWljb25zIHYtaWY9XCIhbG9hZGluZ1wiIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiIHNpemU9XCIxOFwiIGNvbG9yPVwid2hpdGVcIj48L3VuaS1pY29ucz5cbiAgICAgICAgICDmj5DkuqRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3ZpZXc+XG4gICAgPC92aWV3PlxuXG4gICAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XG4gICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiBoaXN0b3J5TGlzdC5zbGljZSgwLCA1KVwiIDprZXk9XCJpXCI+XG4gICAgICAgIDx0ZXh0IGNsYXNzPVwiY29kZVwiIDpzdHlsZT1cInsgY29sb3I6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2JyB9XCI+XG4gICAgICAgICAge3sgaXRlbS5vcmRlck51bSB9fVxuICAgICAgICAgIDx0ZXh0IHYtaWY9XCJpdGVtLmJhdGNoX3RleHRcIj7mibnmrKHlj7c6IHt7IGl0ZW0uYmF0Y2hfdGV4dCB9fTwvdGV4dD5cbiAgICAgICAgICB7eyBpdGVtLnR5cGUgfX1cbiAgICAgICAgPC90ZXh0PlxuXG4gICAgICAgIDx1bmktaWNvbnNcbiAgICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXG4gICAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxuICAgICAgICAgIHNpemU9XCIxNlwiXG4gICAgICAgICAgY29sb3I9XCJncmVlblwiXG4gICAgICAgID48L3VuaS1pY29ucz5cbiAgICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxuXG4gICAgICAgIDx0ZXh0IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcnB4OyBmb250LXdlaWdodDogMzAwXCI+XG4gICAgICAgICAge3sgJ1xcclxcbicgKyBpdGVtLmNyZWF0ZVRpbWUgfX1cbiAgICAgICAgPC90ZXh0PlxuICAgICAgPC92aWV3PlxuICAgIDwvdmlldz5cblxuICAgIDx1bmktcG9wdXAgcmVmPVwibWVzc2FnZVwiIHR5cGU9XCJtZXNzYWdlXCI+XG4gICAgICA8dW5pLXBvcHVwLW1lc3NhZ2VcbiAgICAgICAgOnR5cGU9XCJtZXNzYWdlVHlwZVwiXG4gICAgICAgIDptZXNzYWdlPVwibWVzc2FnZVRleHRcIlxuICAgICAgICA6ZHVyYXRpb249XCIyMDAwXCJcbiAgICAgID48L3VuaS1wb3B1cC1tZXNzYWdlPlxuICAgIDwvdW5pLXBvcHVwPlxuICA8L3ZpZXc+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxuaW1wb3J0IHsgcmVmLCByZWFjdGl2ZSwgbmV4dFRpY2ssIGNvbXB1dGVkIH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgb25TaG93LCBvbkhpZGUsIG9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xuaW1wb3J0IHsgY2hlY2tQZXJtaXNzaW9uIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7IG91dFN0b2NrLCBnZXRCaW5kUGFyYW1zLCBnZXRPcmRlckluZm8gfSBmcm9tICdAL3NlcnZpY2VzL3dlaWdoJ1xuaW1wb3J0IHsgZ2V0RXhwcmVzc0NvbXBhbnkgfSBmcm9tICdAL3NlcnZpY2VzL2V4cHJlc3NDb21wYW55J1xuXG5jb25zdCBtZXNzYWdlID0gcmVmKClcbmNvbnN0IHZhbGlGb3JtID0gcmVmKClcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZignJylcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKCcnKVxuY29uc3QgYmF0Y2hPcHRpb25zID0gcmVmKFtdIGFzIGFueSlcbmNvbnN0IGNvbXBhbnlPcHRpb25zID0gcmVmKFtdIGFzIGFueSlcbmNvbnN0IG9yZGVySW5mbyA9IHJlZih7fSBhcyBhbnkpXG5jb25zdCBoaXN0b3J5TGlzdCA9IHJlZihbXSBhcyBhbnkpXG5jb25zdCBmb2N1c1R5cGUgPSByZWYodHJ1ZSlcbmNvbnN0IHJlc3VsdCA9IHJlZigpXG4vLyDmoKHpqozooajljZXmlbDmja5cbmNvbnN0IHZhbGlGb3JtRGF0YSA9IHJlYWN0aXZlKHtcbiAgb3JkZXJOdW06ICcnLFxuICBiYXRjaF9udW1iZXI6ICcnLFxuICBleHByZXNzX2NvbXBhbnlfaWQ6ICcnLFxuICBleHByZXNzX25vOiAnJyxcbiAgZXhwcmVzc190cmFja2luZ19udW1iZXI6ICcnLFxuICB0eXBpbmc6IHRydWUsXG59IGFzIGFueSlcblxuY29uc3QgcnVsZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgb3JkZXJOdW06IHtcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6ICfljZXlj7fkuI3og73kuLrnqbonLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9XG59KVxuXG5vblNob3coYXN5bmMgKCkgPT4ge1xuICBmb2N1c1R5cGUudmFsdWUgPSB0cnVlXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICBhd2FpdCBQcm9taXNlLmFsbChbX2dldEJpbmRQYXJhbXMoKSwgX2dldEV4cHJlc3NDb21wYW55KCldKVxufSlcbm9uSGlkZSgoKSA9PiB7XG4gIGZvY3VzVHlwZS52YWx1ZSA9IGZhbHNlXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxufSlcbm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCgoZXZlbnQ6IGFueSkgPT4ge1xuICBpZiAoZXZlbnQuaW5kZXggPT09IDApIHtcbiAgICB1bmkubmF2aWdhdGVUbyh7XG4gICAgICB1cmw6ICcvcGFnZXMvb3V0Ym91bmQvbG9nTGlzdCcsXG4gICAgfSlcbiAgfVxufSlcblxuY29uc3QgX2dldEJpbmRQYXJhbXMgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldEJpbmRQYXJhbXMoKVxuICBpZiAocmVzLmNvZGUgPT09IDEpIHtcbiAgICBiYXRjaE9wdGlvbnMudmFsdWUgPSByZXMuZGF0YS5iYXRjaF9udW1iZXIubWFwKChpdGVtOiB7IG5hbWU6IGFueTsgaWQ6IGFueSB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiBpdGVtLm5hbWUsXG4gICAgICAgIHZhbHVlOiBpdGVtLmlkLFxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgX2dldEV4cHJlc3NDb21wYW55ID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBnZXRFeHByZXNzQ29tcGFueSh7XG4gICAgbGltaXQ6IDEwMCxcbiAgICBvcmRlcjogJ2lkLGRlc2MnLFxuICB9KVxuICBpZiAocmVzLmNvZGUgPT09IDEpIHtcbiAgICBjb21wYW55T3B0aW9ucy52YWx1ZSA9IHJlcy5kYXRhLmxpc3QubWFwKChpdGVtOiB7IG5hbWU6IGFueTsgaWQ6IGFueSB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiBpdGVtLm5hbWUsXG4gICAgICAgIHZhbHVlOiBpdGVtLmlkLFxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgYmF0Y2hUZXh0ID0gKGJhdGNoX251bWJlcjogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBiYXRjaE9wdGlvbnMudmFsdWUuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlID09PSBiYXRjaF9udW1iZXIpPy50ZXh0XG59XG5cbmNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgZm9jdXNUeXBlLnZhbHVlID0gZmFsc2VcbiAgdmFsaUZvcm1EYXRhLm9yZGVyTnVtID0gJydcbiAgdmFsaUZvcm1EYXRhLmJhdGNoX251bWJlciA9ICcnXG4gIHZhbGlGb3JtRGF0YS5leHByZXNzX2NvbXBhbnlfaWQgPSAnJ1xuICB2YWxpRm9ybURhdGEuZXhwcmVzc19ubyA9ICcnXG4gIHZhbGlGb3JtRGF0YS5leHByZXNzX3RyYWNraW5nX251bWJlciA9ICcnXG4gIHZhbGlGb3JtRGF0YS50eXBpbmcgPSB0cnVlXG4gIG5leHRUaWNrKCgpID0+IHtcbiAgICBmb2N1c1R5cGUudmFsdWUgPSB0cnVlXG4gIH0pXG59XG5cbmxldCBzdDI6IG51bWJlclxuY29uc3Qgb3JkZXJOdW1DaGFuZ2UgPSAocmVzOiBhbnkpID0+IHtcbiAgdmFsaUZvcm1EYXRhLm9yZGVyTnVtID0gcmVzXG4gIHN0MiAmJiBjbGVhclRpbWVvdXQoc3QyKVxuICBzdDIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBfZ2V0T3JkZXJJbmZvKClcbiAgICBjbGVhclRpbWVvdXQoc3QyKVxuICB9LCA4MDApXG59XG5cbmNvbnN0IF9nZXRPcmRlckluZm8gPSBhc3luYyAoKSA9PiB7XG4gIGlmICh2YWxpRm9ybURhdGEub3JkZXJOdW0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0T3JkZXJJbmZvKHtcbiAgICBvcmRlcl9ubzogdmFsaUZvcm1EYXRhLm9yZGVyTnVtLFxuICB9KVxuXG4gIGlmIChyZXMuY29kZSA9PT0gMSkge1xuICAgIG9yZGVySW5mby52YWx1ZSA9IHJlcy5kYXRhXG4gIH0gZWxzZSB7XG4gICAgb3JkZXJJbmZvLnZhbHVlID0ge31cbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcbiAgICBtZXNzYWdlLnZhbHVlLm9wZW4oKVxuICB9XG59XG5cbmNvbnN0IHNjYW4gPSBhc3luYyAoa2V5OiBzdHJpbmcpID0+IHtcblxuICBsZXQgc3RhdHVzID0gYXdhaXQgY2hlY2tQZXJtaXNzaW9uKClcbiAgaWYgKHN0YXR1cyAhPT0gMSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdW5pLnNjYW5Db2RlKHtcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcbiAgICAgIHJlc3VsdC52YWx1ZSA9IHJlcy5yZXN1bHRcbiAgICAgIHZhbGlGb3JtRGF0YVtrZXldID0gcmVzLnJlc3VsdFxuICAgICAgaWYgKGtleSA9PT0gJ29yZGVyTnVtJykge1xuICAgICAgICBvcmRlck51bUNoYW5nZShyZXMucmVzdWx0KVxuICAgICAgfVxuICAgIH0sXG4gICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgLy8g6ZyA6KaB5rOo5oSP55qE5piv5bCP56iL5bqP5omr56CB5LiN6ZyA6KaB55Sz6K+355u45py65p2D6ZmQXG4gICAgfSxcbiAgfSlcbn1cblxubGV0IHN0OiBudW1iZXJcbmNvbnN0IHdhcmVob3VzZVNjYW4gPSBhc3luYyAoKSA9PiB7XG4gIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgYXdhaXQgc2Nhbk91dHN0b2NrKClcbn1cblxuY29uc3Qgc2Nhbk91dHN0b2NrID0gYXN5bmMgKCkgPT4ge1xuICBpZiAodmFsaUZvcm1EYXRhLm9yZGVyTnVtLmxlbmd0aCA9PT0gMCAmJiB2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+WNleWPt+aIluaJueasoeWPt+iHs+WwkeWhq+S4gOS4qidcbiAgICBtZXNzYWdlLnZhbHVlLm9wZW4oKVxuICAgIHJldHVyblxuICB9XG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlXG4gIGxldCBkYXRhID0ge1xuICAgIG9yZGVyX25vOiB2YWxpRm9ybURhdGEub3JkZXJOdW0sXG4gICAgYmF0Y2hfbnVtYmVyOiB2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyLFxuICB9IGFzIGFueVxuICBOdW1iZXIodmFsaUZvcm1EYXRhLmV4cHJlc3NfY29tcGFueV9pZCkgJiZcbiAgICAoZGF0YS5leHByZXNzX2NvbXBhbnlfaWQgPSBOdW1iZXIodmFsaUZvcm1EYXRhLmV4cHJlc3NfY29tcGFueV9pZCkpXG4gIHZhbGlGb3JtRGF0YS5leHByZXNzX25vICYmIChkYXRhLmV4cHJlc3Nfbm8gPSB2YWxpRm9ybURhdGEuZXhwcmVzc19ubylcbiAgdmFsaUZvcm1EYXRhLmV4cHJlc3NfdHJhY2tpbmdfbnVtYmVyICYmXG4gICAgKGRhdGEuZXhwcmVzc190cmFja2luZ19udW1iZXIgPSB2YWxpRm9ybURhdGEuZXhwcmVzc190cmFja2luZ19udW1iZXIpXG5cbiAgY29uc3QgcmVzID0gYXdhaXQgb3V0U3RvY2soZGF0YSlcblxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcblxuICBpZiAocmVzLmNvZGUgPT0gMSkge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ3N1Y2Nlc3MnXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXG4gICAgbWVzc2FnZS52YWx1ZS5vcGVuKClcblxuICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xuICAgICAgb3JkZXJOdW06IHZhbGlGb3JtRGF0YS5vcmRlck51bSxcbiAgICAgIGJhdGNoX3RleHQ6IGJhdGNoVGV4dCh2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyKSxcbiAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAn5Ye65bqTJyxcbiAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICB9XG4gICAgaGlzdG9yeUxpc3QudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcbiAgICBoaXN0b3J5TGlzdC52YWx1ZS5sZW5ndGggPiAxMCAmJiAoaGlzdG9yeUxpc3QudmFsdWUubGVuZ3RoID0gMTApXG4gICAgdW5pLnNldFN0b3JhZ2VTeW5jKCdvdXRib3VuZEhpc3RvcnknLCBoaXN0b3J5TGlzdC52YWx1ZSlcbiAgICBnZXRIaXN0b3J5KClcblxuICAgIHN0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZXNldCgpXG4gICAgICBzdCAmJiBjbGVhclRpbWVvdXQoc3QpXG4gICAgICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgICB9LCA3MDApXG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXG4gICAgbWVzc2FnZS52YWx1ZS5vcGVuKClcblxuICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xuICAgICAgb3JkZXJOdW06IHZhbGlGb3JtRGF0YS5vcmRlck51bSxcbiAgICAgIGJhdGNoX3RleHQ6IGJhdGNoVGV4dCh2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyKSxcbiAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAn5Ye65bqTJyxcbiAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgfVxuICAgIGhpc3RvcnlMaXN0LnZhbHVlLnVuc2hpZnQoaGlzdG9yeUl0ZW0pXG4gICAgaGlzdG9yeUxpc3QudmFsdWUubGVuZ3RoID4gMTAgJiYgKGhpc3RvcnlMaXN0LnZhbHVlLmxlbmd0aCA9IDEwKVxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnb3V0Ym91bmRIaXN0b3J5JywgaGlzdG9yeUxpc3QudmFsdWUpXG4gICAgZ2V0SGlzdG9yeSgpXG4gICAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc2V0KClcbiAgICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICAgIH0sIDcwMClcbiAgfVxufVxuXG5jb25zdCBvbnN1Ym1pdCA9ICgpID0+IHtcbiAgdmFsaUZvcm0udmFsdWVcbiAgICAudmFsaWRhdGUoKVxuICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgd2FyZWhvdXNlU2NhbigpXG4gICAgfSlcbiAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvb3V0Ym91bmQvb3V0Ym91bmQudnVlOjMzMScsJ2VycicsIGVycilcbiAgICB9KVxufVxuY29uc3QgZ2V0SGlzdG9yeSA9ICgpID0+IHtcbiAgaGlzdG9yeUxpc3QudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ291dGJvdW5kSGlzdG9yeScpXG59XG48L3NjcmlwdD5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmV4YW1wbGUge1xuICBwYWRkaW5nOiAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnV0dG9uLWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG5cbiAgYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAzNXB4O1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgZm9udC1zaXplOiAyNHJweDtcbiAgfVxuXG4gIC51bmktaWNvbnMge1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxufVxuXG4uaGlzdG9yeSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWl0ZW1zOiBzdGFydDtcblxuICAudGl0bGUge1xuICAgIHBhZGRpbmc6IDIwcnB4O1xuICAgIGZvbnQtc2l6ZTogMjRycHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgfVxuXG4gIC5jb2RlIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLml0ZW0ge1xuICAgIHBhZGRpbmc6IDIwcnB4O1xuICAgIGZvbnQtc2l6ZTogMjBycHg7XG4gICAgY29sb3I6ICM2NjY7XG5cbiAgICAuc3RhdHVzIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XG4gICAgfVxuXG4gICAgLmZhaWwge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjZjAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbjxzdHlsZSBzY29wZWQ+XG4udXBsb2FkLWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDE2cHg7XG59XG5cbi5wcmV2aWV3IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuXG4uaW1hZ2UtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi5wcmV2aWV3LWltYWdlIHtcbiAgd2lkdGg6IDEzMHJweDtcbiAgaGVpZ2h0OiAxMzBycHg7XG59XG5cbi5kZWxldGUtaWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY2hvb3NlLWltYWdlLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMzBycHg7XG4gIC8qIOS4juWbvueJh+Wkp+Wwj+S4gOiHtCAqL1xuICBoZWlnaHQ6IDEzMHJweDtcbiAgLyog5LiO5Zu+54mH5aSn5bCP5LiA6Ie0ICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAvKiDog4zmma/popzoibLkuLrnmb3oibIgKi9cbiAgYm9yZGVyOiAxcHggZGFzaGVkICNjY2NjY2M7XG4gIC8qIOiZmue6v+i+ueahhiAqL1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIC8qIOWchuinkiAqL1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wcmV2aWV3LW1vZGFsIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcbiAgLyog5Y2K6YCP5piO6IOM5pmvICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB6LWluZGV4OiA5OTk7XG59XG5cbi5wcmV2aWV3LWxhcmdlIHtcbiAgbWF4LXdpZHRoOiA5MCU7XG4gIC8qIOacgOWkp+WuveW6piAqL1xuICBtYXgtaGVpZ2h0OiA5MCU7XG4gIC8qIOacgOWkp+mrmOW6piAqL1xufVxuXG4ucHJvZ3Jlc3MtYmFyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHZpZXcgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8dmlldyBjbGFzcz1cImV4YW1wbGVcIj5cbiAgICAgIDwhLS0g5Z+656GA6KGo5Y2V5qCh6aqMIC0tPlxuICAgICAgPHVuaS1mb3Jtc1xuICAgICAgICByZWY9XCJ2YWxpRm9ybVwiXG4gICAgICAgIGxhYmVsLWFsaWduPVwicmlnaHRcIlxuICAgICAgICBsYWJlbC13aWR0aD1cIjgwcHhcIlxuICAgICAgICA6cnVsZXM9XCJydWxlc1wiXG4gICAgICAgIDptb2RlbFZhbHVlPVwidmFsaUZvcm1EYXRhXCJcbiAgICAgID5cbiAgICAgICAgPHVuaS1mb3Jtcy1pdGVtIGxhYmVsPVwi5Y2V5Y+3XCIgOnJlcXVpcmVkPVwidHJ1ZVwiIG5hbWU9XCJvcmRlck51bVwiPlxuICAgICAgICAgIDx1bmktZWFzeWlucHV0XG4gICAgICAgICAgICB2LW1vZGVsPVwidmFsaUZvcm1EYXRhLm9yZGVyTnVtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5Y2V5Y+3XCJcbiAgICAgICAgICAgIHN1ZmZpeEljb249XCJzY2FuXCJcbiAgICAgICAgICAgIDpmb2N1cz1cImZvY3VzVHlwZVwiXG4gICAgICAgICAgICBAaWNvbkNsaWNrPVwic2Nhbignb3JkZXJOdW0nKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cbiAgICAgICAgPHVuaS1mb3Jtcy1pdGVtIGxhYmVsPVwi5om55qyh5Y+3XCIgbmFtZT1cImJhdGNoX251bWJlclwiPlxuICAgICAgICAgIDx1bmktZGF0YS1zZWxlY3RcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyXCJcbiAgICAgICAgICAgIDpsb2NhbGRhdGE9XCJiYXRjaE9wdGlvbnNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fpgInmi6nmibnmrKHlj7dcIlxuICAgICAgICAgID48L3VuaS1kYXRhLXNlbGVjdD5cbiAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cbiAgICAgICAgPHZpZXcgdi1pZj1cIm9yZGVySW5mby5vcmRlcl9pZFwiPlxuICAgICAgICAgIDx2aWV3IHYtaWY9XCIhb3JkZXJJbmZvLmV4cHJlc3Nfc25cIj5cbiAgICAgICAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIueJqea1geWFrOWPuFwiIG5hbWU9XCJleHByZXNzX2NvbXBhbnlfaWRcIj5cbiAgICAgICAgICAgICAgPHVuaS1kYXRhLXNlbGVjdFxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEuZXhwcmVzc19jb21wYW55X2lkXCJcbiAgICAgICAgICAgICAgICA6bG9jYWxkYXRhPVwiY29tcGFueU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oup54mp5rWB5YWs5Y+4XCJcbiAgICAgICAgICAgICAgPjwvdW5pLWRhdGEtc2VsZWN0PlxuICAgICAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cbiAgICAgICAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIueJqea1geWNleWPt1wiIG5hbWU9XCJleHByZXNzX25vXCI+XG4gICAgICAgICAgICAgIDx1bmktZWFzeWlucHV0XG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS5leHByZXNzX25vXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeeJqea1geWNleWPt1wiXG4gICAgICAgICAgICAgICAgc3VmZml4SWNvbj1cInNjYW5cIlxuICAgICAgICAgICAgICAgIEBpY29uQ2xpY2s9XCJzY2FuKCdleHByZXNzX25vJylcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cbiAgICAgICAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIui/vei4quWNleWPt1wiIG5hbWU9XCJleHByZXNzX3RyYWNraW5nX251bWJlclwiPlxuICAgICAgICAgICAgICA8dW5pLWVhc3lpbnB1dFxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEuZXhwcmVzc190cmFja2luZ19udW1iZXJcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl6L+96Liq5Y2V5Y+3XCJcbiAgICAgICAgICAgICAgICBzdWZmaXhJY29uPVwic2NhblwiXG4gICAgICAgICAgICAgICAgQGljb25DbGljaz1cInNjYW4oJ2V4cHJlc3NfdHJhY2tpbmdfbnVtYmVyJylcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC91bmktZm9ybXMtaXRlbT5cbiAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgIDwvdmlldz5cbiAgICAgIDwvdW5pLWZvcm1zPlxuICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiaW5mb1wiIEBjbGljaz1cInJlc2V0XCI+6YeN572uPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJvbnN1Ym1pdFwiIDpsb2FkaW5nPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDx1bmktaWNvbnMgdi1pZj1cIiFsb2FkaW5nXCIgdHlwZT1cImNoZWNrbWFya2VtcHR5XCIgc2l6ZT1cIjE4XCIgY29sb3I9XCJ3aGl0ZVwiPjwvdW5pLWljb25zPlxuICAgICAgICAgIOaPkOS6pFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdmlldz5cbiAgICA8L3ZpZXc+XG5cbiAgICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIGhpc3RvcnlMaXN0LnNsaWNlKDAsIDUpXCIgOmtleT1cImlcIj5cbiAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLm9yZGVyTnVtIH19XG4gICAgICAgICAgPHRleHQgdi1pZj1cIml0ZW0uYmF0Y2hfdGV4dFwiPuaJueasoeWPtzoge3sgaXRlbS5iYXRjaF90ZXh0IH19PC90ZXh0PlxuICAgICAgICAgIHt7IGl0ZW0udHlwZSB9fVxuICAgICAgICA8L3RleHQ+XG5cbiAgICAgICAgPHVuaS1pY29uc1xuICAgICAgICAgIHYtaWY9XCJpdGVtLnN0YXR1c1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrbWFya2VtcHR5XCJcbiAgICAgICAgICBjbGFzcz1cInN0YXR1c1wiXG4gICAgICAgICAgc2l6ZT1cIjE2XCJcbiAgICAgICAgICBjb2xvcj1cImdyZWVuXCJcbiAgICAgICAgPjwvdW5pLWljb25zPlxuICAgICAgICA8dGV4dCBjbGFzcz1cInN0YXR1cyBmYWlsXCIgdi1lbHNlPkY8L3RleHQ+XG5cbiAgICAgICAgPHRleHQgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBycHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj5cbiAgICAgICAgICB7eyAnXFxyXFxuJyArIGl0ZW0uY3JlYXRlVGltZSB9fVxuICAgICAgICA8L3RleHQ+XG4gICAgICA8L3ZpZXc+XG4gICAgPC92aWV3PlxuXG4gICAgPHVuaS1wb3B1cCByZWY9XCJtZXNzYWdlXCIgdHlwZT1cIm1lc3NhZ2VcIj5cbiAgICAgIDx1bmktcG9wdXAtbWVzc2FnZVxuICAgICAgICA6dHlwZT1cIm1lc3NhZ2VUeXBlXCJcbiAgICAgICAgOm1lc3NhZ2U9XCJtZXNzYWdlVGV4dFwiXG4gICAgICAgIDpkdXJhdGlvbj1cIjIwMDBcIlxuICAgICAgPjwvdW5pLXBvcHVwLW1lc3NhZ2U+XG4gICAgPC91bmktcG9wdXA+XG4gIDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgeyByZWYsIHJlYWN0aXZlLCBuZXh0VGljaywgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBvblNob3csIG9uSGlkZSwgb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXG5pbXBvcnQgeyBjaGVja1Blcm1pc3Npb24gfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgb3V0U3RvY2ssIGdldEJpbmRQYXJhbXMsIGdldE9yZGVySW5mbyB9IGZyb20gJ0Avc2VydmljZXMvd2VpZ2gnXG5pbXBvcnQgeyBnZXRFeHByZXNzQ29tcGFueSB9IGZyb20gJ0Avc2VydmljZXMvZXhwcmVzc0NvbXBhbnknXG5cbmNvbnN0IG1lc3NhZ2UgPSByZWYoKVxuY29uc3QgdmFsaUZvcm0gPSByZWYoKVxuY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSlcbmNvbnN0IG1lc3NhZ2VUeXBlID0gcmVmKCcnKVxuY29uc3QgbWVzc2FnZVRleHQgPSByZWYoJycpXG5jb25zdCBiYXRjaE9wdGlvbnMgPSByZWYoW10gYXMgYW55KVxuY29uc3QgY29tcGFueU9wdGlvbnMgPSByZWYoW10gYXMgYW55KVxuY29uc3Qgb3JkZXJJbmZvID0gcmVmKHt9IGFzIGFueSlcbmNvbnN0IGhpc3RvcnlMaXN0ID0gcmVmKFtdIGFzIGFueSlcbmNvbnN0IGZvY3VzVHlwZSA9IHJlZih0cnVlKVxuY29uc3QgcmVzdWx0ID0gcmVmKClcbi8vIOagoemqjOihqOWNleaVsOaNrlxuY29uc3QgdmFsaUZvcm1EYXRhID0gcmVhY3RpdmUoe1xuICBvcmRlck51bTogJycsXG4gIGJhdGNoX251bWJlcjogJycsXG4gIGV4cHJlc3NfY29tcGFueV9pZDogJycsXG4gIGV4cHJlc3Nfbm86ICcnLFxuICBleHByZXNzX3RyYWNraW5nX251bWJlcjogJycsXG4gIHR5cGluZzogdHJ1ZSxcbn0gYXMgYW55KVxuXG5jb25zdCBydWxlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBvcmRlck51bToge1xuICAgICAgcnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGVycm9yTWVzc2FnZTogJ+WNleWPt+S4jeiDveS4uuepuicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH1cbn0pXG5cbm9uU2hvdyhhc3luYyAoKSA9PiB7XG4gIGZvY3VzVHlwZS52YWx1ZSA9IHRydWVcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG4gIGF3YWl0IFByb21pc2UuYWxsKFtfZ2V0QmluZFBhcmFtcygpLCBfZ2V0RXhwcmVzc0NvbXBhbnkoKV0pXG59KVxub25IaWRlKCgpID0+IHtcbiAgZm9jdXNUeXBlLnZhbHVlID0gZmFsc2VcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG59KVxub25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwKChldmVudDogYW55KSA9PiB7XG4gIGlmIChldmVudC5pbmRleCA9PT0gMCkge1xuICAgIHVuaS5uYXZpZ2F0ZVRvKHtcbiAgICAgIHVybDogJy9wYWdlcy9vdXRib3VuZC9sb2dMaXN0JyxcbiAgICB9KVxuICB9XG59KVxuXG5jb25zdCBfZ2V0QmluZFBhcmFtcyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0QmluZFBhcmFtcygpXG4gIGlmIChyZXMuY29kZSA9PT0gMSkge1xuICAgIGJhdGNoT3B0aW9ucy52YWx1ZSA9IHJlcy5kYXRhLmJhdGNoX251bWJlci5tYXAoKGl0ZW06IHsgbmFtZTogYW55OyBpZDogYW55IH0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcbiAgICAgICAgdmFsdWU6IGl0ZW0uaWQsXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCBfZ2V0RXhwcmVzc0NvbXBhbnkgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldEV4cHJlc3NDb21wYW55KHtcbiAgICBsaW1pdDogMTAwLFxuICAgIG9yZGVyOiAnaWQsZGVzYycsXG4gIH0pXG4gIGlmIChyZXMuY29kZSA9PT0gMSkge1xuICAgIGNvbXBhbnlPcHRpb25zLnZhbHVlID0gcmVzLmRhdGEubGlzdC5tYXAoKGl0ZW06IHsgbmFtZTogYW55OyBpZDogYW55IH0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcbiAgICAgICAgdmFsdWU6IGl0ZW0uaWQsXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCBiYXRjaFRleHQgPSAoYmF0Y2hfbnVtYmVyOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIGJhdGNoT3B0aW9ucy52YWx1ZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUgPT09IGJhdGNoX251bWJlcik/LnRleHRcbn1cblxuY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICBmb2N1c1R5cGUudmFsdWUgPSBmYWxzZVxuICB2YWxpRm9ybURhdGEub3JkZXJOdW0gPSAnJ1xuICB2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyID0gJydcbiAgdmFsaUZvcm1EYXRhLmV4cHJlc3NfY29tcGFueV9pZCA9ICcnXG4gIHZhbGlGb3JtRGF0YS5leHByZXNzX25vID0gJydcbiAgdmFsaUZvcm1EYXRhLmV4cHJlc3NfdHJhY2tpbmdfbnVtYmVyID0gJydcbiAgdmFsaUZvcm1EYXRhLnR5cGluZyA9IHRydWVcbiAgbmV4dFRpY2soKCkgPT4ge1xuICAgIGZvY3VzVHlwZS52YWx1ZSA9IHRydWVcbiAgfSlcbn1cblxubGV0IHN0MjogbnVtYmVyXG5jb25zdCBvcmRlck51bUNoYW5nZSA9IChyZXM6IGFueSkgPT4ge1xuICB2YWxpRm9ybURhdGEub3JkZXJOdW0gPSByZXNcbiAgc3QyICYmIGNsZWFyVGltZW91dChzdDIpXG4gIHN0MiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIF9nZXRPcmRlckluZm8oKVxuICAgIGNsZWFyVGltZW91dChzdDIpXG4gIH0sIDgwMClcbn1cblxuY29uc3QgX2dldE9yZGVySW5mbyA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHZhbGlGb3JtRGF0YS5vcmRlck51bS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRPcmRlckluZm8oe1xuICAgIG9yZGVyX25vOiB2YWxpRm9ybURhdGEub3JkZXJOdW0sXG4gIH0pXG5cbiAgaWYgKHJlcy5jb2RlID09PSAxKSB7XG4gICAgb3JkZXJJbmZvLnZhbHVlID0gcmVzLmRhdGFcbiAgfSBlbHNlIHtcbiAgICBvcmRlckluZm8udmFsdWUgPSB7fVxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xuICAgIG1lc3NhZ2UudmFsdWUub3BlbigpXG4gIH1cbn1cblxuY29uc3Qgc2NhbiA9IGFzeW5jIChrZXk6IHN0cmluZykgPT4ge1xuICAvLyAjaWZkZWYgQVBQLVBMVVNcbiAgbGV0IHN0YXR1cyA9IGF3YWl0IGNoZWNrUGVybWlzc2lvbigpXG4gIGlmIChzdGF0dXMgIT09IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvLyAjZW5kaWZcbiAgdW5pLnNjYW5Db2RlKHtcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcbiAgICAgIHJlc3VsdC52YWx1ZSA9IHJlcy5yZXN1bHRcbiAgICAgIHZhbGlGb3JtRGF0YVtrZXldID0gcmVzLnJlc3VsdFxuICAgICAgaWYgKGtleSA9PT0gJ29yZGVyTnVtJykge1xuICAgICAgICBvcmRlck51bUNoYW5nZShyZXMucmVzdWx0KVxuICAgICAgfVxuICAgIH0sXG4gICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgLy8g6ZyA6KaB5rOo5oSP55qE5piv5bCP56iL5bqP5omr56CB5LiN6ZyA6KaB55Sz6K+355u45py65p2D6ZmQXG4gICAgfSxcbiAgfSlcbn1cblxubGV0IHN0OiBudW1iZXJcbmNvbnN0IHdhcmVob3VzZVNjYW4gPSBhc3luYyAoKSA9PiB7XG4gIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgYXdhaXQgc2Nhbk91dHN0b2NrKClcbn1cblxuY29uc3Qgc2Nhbk91dHN0b2NrID0gYXN5bmMgKCkgPT4ge1xuICBpZiAodmFsaUZvcm1EYXRhLm9yZGVyTnVtLmxlbmd0aCA9PT0gMCAmJiB2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+WNleWPt+aIluaJueasoeWPt+iHs+WwkeWhq+S4gOS4qidcbiAgICBtZXNzYWdlLnZhbHVlLm9wZW4oKVxuICAgIHJldHVyblxuICB9XG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlXG4gIGxldCBkYXRhID0ge1xuICAgIG9yZGVyX25vOiB2YWxpRm9ybURhdGEub3JkZXJOdW0sXG4gICAgYmF0Y2hfbnVtYmVyOiB2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyLFxuICB9IGFzIGFueVxuICBOdW1iZXIodmFsaUZvcm1EYXRhLmV4cHJlc3NfY29tcGFueV9pZCkgJiZcbiAgICAoZGF0YS5leHByZXNzX2NvbXBhbnlfaWQgPSBOdW1iZXIodmFsaUZvcm1EYXRhLmV4cHJlc3NfY29tcGFueV9pZCkpXG4gIHZhbGlGb3JtRGF0YS5leHByZXNzX25vICYmIChkYXRhLmV4cHJlc3Nfbm8gPSB2YWxpRm9ybURhdGEuZXhwcmVzc19ubylcbiAgdmFsaUZvcm1EYXRhLmV4cHJlc3NfdHJhY2tpbmdfbnVtYmVyICYmXG4gICAgKGRhdGEuZXhwcmVzc190cmFja2luZ19udW1iZXIgPSB2YWxpRm9ybURhdGEuZXhwcmVzc190cmFja2luZ19udW1iZXIpXG5cbiAgY29uc3QgcmVzID0gYXdhaXQgb3V0U3RvY2soZGF0YSlcblxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcblxuICBpZiAocmVzLmNvZGUgPT0gMSkge1xuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ3N1Y2Nlc3MnXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXG4gICAgbWVzc2FnZS52YWx1ZS5vcGVuKClcblxuICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xuICAgICAgb3JkZXJOdW06IHZhbGlGb3JtRGF0YS5vcmRlck51bSxcbiAgICAgIGJhdGNoX3RleHQ6IGJhdGNoVGV4dCh2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyKSxcbiAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAn5Ye65bqTJyxcbiAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICB9XG4gICAgaGlzdG9yeUxpc3QudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcbiAgICBoaXN0b3J5TGlzdC52YWx1ZS5sZW5ndGggPiAxMCAmJiAoaGlzdG9yeUxpc3QudmFsdWUubGVuZ3RoID0gMTApXG4gICAgdW5pLnNldFN0b3JhZ2VTeW5jKCdvdXRib3VuZEhpc3RvcnknLCBoaXN0b3J5TGlzdC52YWx1ZSlcbiAgICBnZXRIaXN0b3J5KClcblxuICAgIHN0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZXNldCgpXG4gICAgICBzdCAmJiBjbGVhclRpbWVvdXQoc3QpXG4gICAgICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgICB9LCA3MDApXG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXG4gICAgbWVzc2FnZS52YWx1ZS5vcGVuKClcblxuICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xuICAgICAgb3JkZXJOdW06IHZhbGlGb3JtRGF0YS5vcmRlck51bSxcbiAgICAgIGJhdGNoX3RleHQ6IGJhdGNoVGV4dCh2YWxpRm9ybURhdGEuYmF0Y2hfbnVtYmVyKSxcbiAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAn5Ye65bqTJyxcbiAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgfVxuICAgIGhpc3RvcnlMaXN0LnZhbHVlLnVuc2hpZnQoaGlzdG9yeUl0ZW0pXG4gICAgaGlzdG9yeUxpc3QudmFsdWUubGVuZ3RoID4gMTAgJiYgKGhpc3RvcnlMaXN0LnZhbHVlLmxlbmd0aCA9IDEwKVxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnb3V0Ym91bmRIaXN0b3J5JywgaGlzdG9yeUxpc3QudmFsdWUpXG4gICAgZ2V0SGlzdG9yeSgpXG4gICAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc2V0KClcbiAgICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcbiAgICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICAgIH0sIDcwMClcbiAgfVxufVxuXG5jb25zdCBvbnN1Ym1pdCA9ICgpID0+IHtcbiAgdmFsaUZvcm0udmFsdWVcbiAgICAudmFsaWRhdGUoKVxuICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgd2FyZWhvdXNlU2NhbigpXG4gICAgfSlcbiAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnZXJyJywgZXJyKVxuICAgIH0pXG59XG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xuICBoaXN0b3J5TGlzdC52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygnb3V0Ym91bmRIaXN0b3J5Jylcbn1cbjwvc2NyaXB0PlxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZXhhbXBsZSB7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5idXR0b24tZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcblxuICBidXR0b24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDM1cHg7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICBmb250LXNpemU6IDI0cnB4O1xuICB9XG5cbiAgLnVuaS1pY29ucyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB9XG59XG5cbi5oaXN0b3J5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xuXG4gIC50aXRsZSB7XG4gICAgcGFkZGluZzogMjBycHg7XG4gICAgZm9udC1zaXplOiAyNHJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLmNvZGUge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAuaXRlbSB7XG4gICAgcGFkZGluZzogMjBycHg7XG4gICAgZm9udC1zaXplOiAyMHJweDtcbiAgICBjb2xvcjogIzY2NjtcblxuICAgIC5zdGF0dXMge1xuICAgICAgcGFkZGluZy1sZWZ0OiAyMHJweDtcbiAgICB9XG5cbiAgICAuZmFpbCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmMDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuPHN0eWxlIHNjb3BlZD5cbi51cGxvYWQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMTZweDtcbn1cblxuLnByZXZpZXcge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5pbWFnZS1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLnByZXZpZXctaW1hZ2Uge1xuICB3aWR0aDogMTMwcnB4O1xuICBoZWlnaHQ6IDEzMHJweDtcbn1cblxuLmRlbGV0ZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jaG9vc2UtaW1hZ2UtY29udGFpbmVyIHtcbiAgd2lkdGg6IDEzMHJweDtcbiAgLyog5LiO5Zu+54mH5aSn5bCP5LiA6Ie0ICovXG4gIGhlaWdodDogMTMwcnB4O1xuICAvKiDkuI7lm77niYflpKflsI/kuIDoh7QgKi9cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC8qIOiDjOaZr+minOiJsuS4uueZveiJsiAqL1xuICBib3JkZXI6IDFweCBkYXNoZWQgI2NjY2NjYztcbiAgLyog6Jma57q/6L655qGGICovXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgLyog5ZyG6KeSICovXG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnByZXZpZXctbW9kYWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpO1xuICAvKiDljYrpgI/mmI7og4zmma8gKi9cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDk5OTtcbn1cblxuLnByZXZpZXctbGFyZ2Uge1xuICBtYXgtd2lkdGg6IDkwJTtcbiAgLyog5pyA5aSn5a695bqmICovXG4gIG1heC1oZWlnaHQ6IDkwJTtcbiAgLyog5pyA5aSn6auY5bqmICovXG59XG5cbi5wcm9ncmVzcy1iYXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gaGlzdG9yeUxpc3RcIiA6a2V5PVwiaVwiPlxyXG4gICAgICA8dGV4dCBjbGFzcz1cImNvZGVcIiA6c3R5bGU9XCJ7IGNvbG9yOiBpdGVtLnN0YXR1cyA/ICdncmVlbicgOiAnIzY2NicgfVwiPlxyXG4gICAgICAgIHt7IGl0ZW0ub3JkZXJOdW0gfX1cclxuICAgICAgICA8dGV4dCB2LWlmPVwiaXRlbS5iYXRjaF90ZXh0XCI+5om55qyh5Y+3OiB7eyBpdGVtLmJhdGNoX3RleHQgfX08L3RleHQ+XHJcbiAgICAgICAge3sgaXRlbS50eXBlIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgICAgPHVuaS1pY29uc1xyXG4gICAgICAgIHYtaWY9XCJpdGVtLnN0YXR1c1wiXHJcbiAgICAgICAgdHlwZT1cImNoZWNrbWFya2VtcHR5XCJcclxuICAgICAgICBjbGFzcz1cInN0YXR1c1wiXHJcbiAgICAgICAgc2l6ZT1cIjE2XCJcclxuICAgICAgICBjb2xvcj1cImdyZWVuXCJcclxuICAgICAgPjwvdW5pLWljb25zPlxyXG4gICAgICA8dGV4dCBjbGFzcz1cInN0YXR1cyBmYWlsXCIgdi1lbHNlPkY8L3RleHQ+XHJcbiAgICAgIDx0ZXh0IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcnB4OyBmb250LXdlaWdodDogMzAwXCI+XHJcbiAgICAgICAge3sgJ1xcclxcbicgKyBpdGVtLmNyZWF0ZVRpbWUgfX1cclxuICAgICAgPC90ZXh0PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgdi1pZj1cImhpc3RvcnlMaXN0Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiaXMtZW1wdHlcIj7mmoLml6Dljoblj7I8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuY29uc3QgaGlzdG9yeUxpc3QgPSByZWYoW10gYXMgYW55W10pXHJcbmNvbnN0IGdldEhpc3RvcnkgPSAoKSA9PiB7XHJcbiAgaGlzdG9yeUxpc3QudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ291dGJvdW5kSGlzdG9yeScpXHJcbn1cclxub25Mb2FkKCgpID0+IHtcclxuICBnZXRIaXN0b3J5KClcclxufSlcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5oaXN0b3J5IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuICAudHlwZSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG4gIC5jb2RlIHtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgfVxyXG5cclxuICAuaXRlbSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjBycHg7XHJcbiAgICBjb2xvcjogIzY2NjtcclxuXHJcbiAgICAuc3RhdHVzIHtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAyMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAuZmFpbCB7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgIGNvbG9yOiAjZjAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmlzLWVtcHR5IHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbjogNDBweCAwO1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIGhpc3RvcnlMaXN0XCIgOmtleT1cImlcIj5cclxuICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj5cclxuICAgICAgICB7eyBpdGVtLm9yZGVyTnVtIH19XHJcbiAgICAgICAgPHRleHQgdi1pZj1cIml0ZW0uYmF0Y2hfdGV4dFwiPuaJueasoeWPtzoge3sgaXRlbS5iYXRjaF90ZXh0IH19PC90ZXh0PlxyXG4gICAgICAgIHt7IGl0ZW0udHlwZSB9fVxyXG4gICAgICA8L3RleHQ+XHJcbiAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxyXG4gICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgIHNpemU9XCIxNlwiXHJcbiAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxyXG4gICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJoaXN0b3J5TGlzdC5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IGhpc3RvcnlMaXN0ID0gcmVmKFtdIGFzIGFueVtdKVxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIGhpc3RvcnlMaXN0LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdvdXRib3VuZEhpc3RvcnknKVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uaGlzdG9yeSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICB3aWR0aDogMTAwJTtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgeyBodHRwIH0gZnJvbSAnQC91dGlscy9odHRwJ1xuXG4vKipcbiAqIOS4tOaXtuWNleaNri0t5a2X5q616YCJ6aG5XG4gKi9cbmV4cG9ydCBjb25zdCB3YXliaWxsTm9PcHRpb25zID0gKCkgPT4ge1xuICByZXR1cm4gaHR0cDxhbnk+KHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIHVybDogJy9hZG1pbi93YXJlaG91c2Uud2F5YmlsbE5vL2dldE9wdGlvbnMnLFxuICB9KVxufVxuXG4vKipcbiAqIOmdouWNlSDku5PlupPmiavmj49cbiAqL1xuZXhwb3J0IGNvbnN0IHdhcmVob3VzZVNjYW4gPSAoZGF0YTogeyBvcmRlcl9jb2RlOiBzdHJpbmcgfSkgPT4ge1xuICByZXR1cm4gaHR0cDxhbnk+KHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICcvYWRtaW4vb3JkZXIuc2hlZXRPcmRlci93YXJlaG91c2VTY2FuJyxcbiAgICBkYXRhLFxuICB9KVxufVxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICA8dW5pLWZvcm1zXHJcbiAgICAgIHJlZj1cInZhbGlGb3JtUmVmXCJcclxuICAgICAgbGFiZWwtYWxpZ249XCJyaWdodFwiXHJcbiAgICAgIDpsYWJlbC13aWR0aD1cIjgwXCJcclxuICAgICAgOnJ1bGVzPVwicnVsZXNcIlxyXG4gICAgICA6bW9kZWxWYWx1ZT1cInZhbGlGb3JtRGF0YVwiXHJcbiAgICA+XHJcbiAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIuWNleaNrue8luWPt1wiIHJlcXVpcmVkIG5hbWU9XCJvcmRlcl9jb2RlXCI+XHJcbiAgICAgICAgPHVuaS1lYXN5aW5wdXRcclxuICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEub3JkZXJfY29kZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWNleaNrue8luWPt1wiXHJcbiAgICAgICAgICBzdWZmaXhJY29uPVwic2NhblwiXHJcbiAgICAgICAgICA6Zm9jdXM9XCJmb2N1c1R5cGVcIlxyXG4gICAgICAgICAgQGljb25DbGljaz1cInNjYW5JbnB1dFwiXHJcbiAgICAgICAgICBAYmx1cj1cInNldGZvY3VzXCJcclxuICAgICAgICAgIEBjb25maXJtPVwib25zdWJtaXRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XHJcbiAgICA8L3VuaS1mb3Jtcz5cclxuICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJyZXNldFwiPumHjee9rjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwib25zdWJtaXRcIiA6bG9hZGluZz1cImxvYWRpbmdcIj5cclxuICAgICAgICA8dW5pLWljb25zIHYtaWY9XCIhbG9hZGluZ1wiIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiIHNpemU9XCIxOFwiIGNvbG9yPVwid2hpdGVcIj48L3VuaS1pY29ucz5cclxuICAgICAgICDmj5DkuqRcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyB2LWlmPVwid2FyZWhvdXNlTG9nSGlzdG9yeS5sZW5ndGggPiAwXCIgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwidGl0bGVcIj7orrDlvZUo5pyA6L+RNeadoSk8L3RleHQ+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gd2FyZWhvdXNlTG9nSGlzdG9yeS5zbGljZSgwLCA1KVwiIDprZXk9XCJpXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj57e1xyXG4gICAgICAgICAgaXRlbS5vcmRlcl9jb2RlXHJcbiAgICAgICAgfX08L3RleHQ+XHJcbiAgICAgICAgPHVuaS1pY29uc1xyXG4gICAgICAgICAgdi1pZj1cIml0ZW0uc3RhdHVzXCJcclxuICAgICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgICBjbGFzcz1cInN0YXR1c1wiXHJcbiAgICAgICAgICBzaXplPVwiMTZcIlxyXG4gICAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgICAgPjwvdW5pLWljb25zPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwic3RhdHVzIGZhaWxcIiB2LWVsc2U+RjwvdGV4dD5cclxuICAgICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgICAge3sgJ1xcclxcbicgKyBpdGVtLmNyZWF0ZVRpbWUgfX1cclxuICAgICAgICA8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuXHJcbiAgICA8dW5pLXBvcHVwIHJlZj1cIm1lc3NhZ2VSZWZcIiB0eXBlPVwibWVzc2FnZVwiPlxyXG4gICAgICA8dW5pLXBvcHVwLW1lc3NhZ2VcclxuICAgICAgICA6dHlwZT1cIm1lc3NhZ2VUeXBlXCJcclxuICAgICAgICA6bWVzc2FnZT1cIm1lc3NhZ2VUZXh0XCJcclxuICAgICAgICA6ZHVyYXRpb249XCIyMDAwXCJcclxuICAgICAgPjwvdW5pLXBvcHVwLW1lc3NhZ2U+XHJcbiAgICA8L3VuaS1wb3B1cD5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyByZWFjdGl2ZSwgcmVmLCBuZXh0VGljayB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHtcclxuICBvblNob3csXHJcbiAgb25Mb2FkLFxyXG4gIG9uVW5sb2FkLFxyXG4gIG9uSGlkZSxcclxuICBvbkJhY2tQcmVzcyxcclxuICBvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAsXHJcbn0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IGNoZWNrUGVybWlzc2lvbiB9IGZyb20gJ0AvdXRpbHMnXHJcbmltcG9ydCB7IHdhcmVob3VzZVNjYW4gfSBmcm9tICdAL3NlcnZpY2VzL3dhcmVob3VzZVNjYW4nXHJcblxyXG5jb25zdCB2YWxpRm9ybVJlZiA9IHJlZigpXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGhpZGVQYWdlID0gcmVmKGZhbHNlKVxyXG5jb25zdCBmb2N1c1R5cGUgPSByZWYodHJ1ZSlcclxuY29uc3Qgd2FyZWhvdXNlTG9nSGlzdG9yeSA9IHJlZihbXSBhcyBhbnkpXHJcbmNvbnN0IG1lc3NhZ2VSZWYgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZigpXHJcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKClcclxubGV0IHN0OiBudW1iZXJcclxuXHJcbmNvbnN0IHZhbGlGb3JtRGF0YSA9IHJlZih7XHJcbiAgb3JkZXJfY29kZTogJycsXHJcbn0pXHJcbmNvbnN0IHJ1bGVzID0gcmVhY3RpdmUoe1xyXG4gIG9yZGVyX2NvZGU6IHtcclxuICAgIHJ1bGVzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICBlcnJvck1lc3NhZ2U6ICfljZXmja7nvJblj7fkuI3og73kuLrnqbonLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG59KVxyXG5cclxuY29uc3Qgc2NhbklucHV0ID0gYXN5bmMgKCkgPT4ge1xyXG5cclxuICBsZXQgc3RhdHVzID0gYXdhaXQgY2hlY2tQZXJtaXNzaW9uKClcclxuICBpZiAoc3RhdHVzICE9PSAxKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIHVuaS5zY2FuQ29kZSh7XHJcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgdmFsaUZvcm1EYXRhLnZhbHVlLm9yZGVyX2NvZGUgPSByZXMucmVzdWx0XHJcbiAgICAgIG9uc3VibWl0KClcclxuICAgIH0sXHJcbiAgICBmYWlsOiAoZXJyKSA9PiB7XHJcbiAgICAgIC8vIOmcgOimgeazqOaEj+eahOaYr+Wwj+eoi+W6j+aJq+eggeS4jemcgOimgeeUs+ivt+ebuOacuuadg+mZkFxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcbmNvbnN0IHJlc2V0ID0gKCkgPT4ge1xyXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlcl9jb2RlID0gJydcclxufVxyXG5cclxuY29uc3Qgc2V0Zm9jdXMgPSAoKSA9PiB7XHJcbiAgaWYgKGhpZGVQYWdlLnZhbHVlKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgZm9jdXNUeXBlLnZhbHVlID0gZmFsc2VcclxuICBuZXh0VGljaygoKSA9PiB7XHJcbiAgICBmb2N1c1R5cGUudmFsdWUgPSB0cnVlXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3Qgb25zdWJtaXQgPSBhc3luYyAoKSA9PiB7XHJcbiAgc3QgJiYgY2xlYXJUaW1lb3V0KHN0KVxyXG5cclxuICBjb25zdCB2YWxpUmVzOiBhbnkgPSBhd2FpdCB2YWxpRm9ybVJlZi52YWx1ZS52YWxpZGF0ZSgpXHJcbiAgaWYgKCF2YWxpUmVzKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlXHJcblxyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IHdhcmVob3VzZVNjYW4oe1xyXG4gICAgb3JkZXJfY29kZTogdmFsaUZvcm1EYXRhLnZhbHVlLm9yZGVyX2NvZGUsXHJcbiAgfSlcclxuICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvd2FyZWhvdXNlU2Nhbi93YXJlaG91c2VTY2FuLnZ1ZToxNDMnLCdyZXMtLS0nLCByZXMpXHJcblxyXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIGlmIChyZXMuY29kZSA9PSAxKSB7XHJcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xyXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXHJcbiAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG5cclxuICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xyXG4gICAgICBvcmRlcl9jb2RlOiB2YWxpRm9ybURhdGEudmFsdWUub3JkZXJfY29kZSxcclxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcclxuICAgICAgdHlwZTogJ+WNleaNruaJq+aPjycsXHJcbiAgICAgIHN0YXR1czogdHJ1ZSxcclxuICAgIH1cclxuICAgIHdhcmVob3VzZUxvZ0hpc3RvcnkudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcclxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnd2FyZWhvdXNlTG9nSGlzdG9yeScsIHdhcmVob3VzZUxvZ0hpc3RvcnkudmFsdWUpXHJcbiAgICBnZXRIaXN0b3J5KClcclxuICB9IGVsc2Uge1xyXG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXHJcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICBjb25zdCBoaXN0b3J5SXRlbSA9IHtcclxuICAgICAgb3JkZXJfY29kZTogdmFsaUZvcm1EYXRhLnZhbHVlLm9yZGVyX2NvZGUsXHJcbiAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXHJcbiAgICAgIHR5cGU6ICfljZXmja7miavmj48nLFxyXG4gICAgICBzdGF0dXM6IGZhbHNlLFxyXG4gICAgfVxyXG4gICAgd2FyZWhvdXNlTG9nSGlzdG9yeS52YWx1ZS51bnNoaWZ0KGhpc3RvcnlJdGVtKVxyXG4gICAgdW5pLnNldFN0b3JhZ2VTeW5jKCd3YXJlaG91c2VMb2dIaXN0b3J5Jywgd2FyZWhvdXNlTG9nSGlzdG9yeS52YWx1ZSlcclxuICAgIGdldEhpc3RvcnkoKVxyXG4gIH1cclxuICBzdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgcmVzZXQoKVxyXG4gICAgc3QgJiYgY2xlYXJUaW1lb3V0KHN0KVxyXG4gIH0sIDEwMDApXHJcbn1cclxuXHJcbmNvbnN0IGdldEhpc3RvcnkgPSAoKSA9PiB7XHJcbiAgd2FyZWhvdXNlTG9nSGlzdG9yeS52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2FyZWhvdXNlTG9nSGlzdG9yeScpIHx8IFtdXHJcbn1cclxuY29uc3Qga2V5cHJlc3MgPSAoZTogYW55KSA9PiB7XHJcbiAgLy8gMTAyICDlt6bkvqcgICAgMTAzICDlj7PkvqcgICAxMDQgIOS4remXtOaMiemUrlxyXG4gIGlmIChlLmtleUNvZGUgPT09IDEwMiB8fCBlLmtleUNvZGUgPT09IDEwMyB8fCBlLmtleUNvZGUgPT09IDEwNCkge1xyXG4gICAgLy/ov5nph4zmjInplK7miJDlip9cclxuICB9XHJcblxyXG4gIGlmIChlLmtleUNvZGUgPT0gNjYpIHtcclxuICAgIC8vZW50ZXLmjInplK5cclxuICAgIC8v6L+Z6YeMaW5wdXTlt7Lnu4/mi7/liLDmlbDmja7kuobvvIzlnKjov5nph4zmiormi7/liLDnmoTmlbDmja7vvIzpgJrov4fmjqXlj6PmlbDmja7ogZTosIPotbfmnaVcclxuICAgIG9uc3VibWl0KClcclxuICB9XHJcbn1cclxub25Mb2FkKCgpID0+IHtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgcGx1cy5rZXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuXHJcblxyXG5cclxuXHJcbn0pXHJcbm9uVW5sb2FkKCgpID0+IHtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgcGx1cy5rZXkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuXHJcblxyXG5cclxuXHJcbn0pXHJcbm9uSGlkZSgoKSA9PiB7XHJcbiAgaGlkZVBhZ2UudmFsdWUgPSB0cnVlXHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcblxyXG5cclxuXHJcblxyXG59KVxyXG5vbkJhY2tQcmVzcygoKSA9PiB7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcblxyXG5cclxuXHJcblxyXG59KVxyXG5cclxub25TaG93KCgpID0+IHtcclxuICBoaWRlUGFnZS52YWx1ZSA9IGZhbHNlXHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcblxyXG5vbk5hdmlnYXRpb25CYXJCdXR0b25UYXAoKGV2ZW50KSA9PiB7XHJcbiAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XHJcbiAgICB1bmkubmF2aWdhdGVUbyh7XHJcbiAgICAgIHVybDogJy9wYWdlcy93YXJlaG91c2VTY2FuL2xvZ0xpc3QnLFxyXG4gICAgfSlcclxuICB9XHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uY29udGFpbmVyIHtcclxuICBwYWRkaW5nOiAxNXB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbi5idXR0b24tZ3JvdXAge1xyXG4gIG1hcmdpbi10b3A6IDE1cHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG5cclxuICBidXR0b24ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGhlaWdodDogMzVweDtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG5cclxuICAudW5pLWljb25zIHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxuICB9XHJcbn1cclxuXHJcbi5oaXN0b3J5IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuXHJcbiAgLmNvZGUge1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG5cclxuICAgIC5zdGF0dXMge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mYWlsIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6ICNmMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuaXMtZW1wdHkge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4IDA7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICA8dW5pLWZvcm1zXHJcbiAgICAgIHJlZj1cInZhbGlGb3JtUmVmXCJcclxuICAgICAgbGFiZWwtYWxpZ249XCJyaWdodFwiXHJcbiAgICAgIDpsYWJlbC13aWR0aD1cIjgwXCJcclxuICAgICAgOnJ1bGVzPVwicnVsZXNcIlxyXG4gICAgICA6bW9kZWxWYWx1ZT1cInZhbGlGb3JtRGF0YVwiXHJcbiAgICA+XHJcbiAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIuWNleaNrue8luWPt1wiIHJlcXVpcmVkIG5hbWU9XCJvcmRlcl9jb2RlXCI+XHJcbiAgICAgICAgPHVuaS1lYXN5aW5wdXRcclxuICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEub3JkZXJfY29kZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWNleaNrue8luWPt1wiXHJcbiAgICAgICAgICBzdWZmaXhJY29uPVwic2NhblwiXHJcbiAgICAgICAgICA6Zm9jdXM9XCJmb2N1c1R5cGVcIlxyXG4gICAgICAgICAgQGljb25DbGljaz1cInNjYW5JbnB1dFwiXHJcbiAgICAgICAgICBAYmx1cj1cInNldGZvY3VzXCJcclxuICAgICAgICAgIEBjb25maXJtPVwib25zdWJtaXRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XHJcbiAgICA8L3VuaS1mb3Jtcz5cclxuICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJyZXNldFwiPumHjee9rjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwib25zdWJtaXRcIiA6bG9hZGluZz1cImxvYWRpbmdcIj5cclxuICAgICAgICA8dW5pLWljb25zIHYtaWY9XCIhbG9hZGluZ1wiIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiIHNpemU9XCIxOFwiIGNvbG9yPVwid2hpdGVcIj48L3VuaS1pY29ucz5cclxuICAgICAgICDmj5DkuqRcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyB2LWlmPVwid2FyZWhvdXNlTG9nSGlzdG9yeS5sZW5ndGggPiAwXCIgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwidGl0bGVcIj7orrDlvZUo5pyA6L+RNeadoSk8L3RleHQ+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gd2FyZWhvdXNlTG9nSGlzdG9yeS5zbGljZSgwLCA1KVwiIDprZXk9XCJpXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj57e1xyXG4gICAgICAgICAgaXRlbS5vcmRlcl9jb2RlXHJcbiAgICAgICAgfX08L3RleHQ+XHJcbiAgICAgICAgPHVuaS1pY29uc1xyXG4gICAgICAgICAgdi1pZj1cIml0ZW0uc3RhdHVzXCJcclxuICAgICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgICBjbGFzcz1cInN0YXR1c1wiXHJcbiAgICAgICAgICBzaXplPVwiMTZcIlxyXG4gICAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgICAgPjwvdW5pLWljb25zPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwic3RhdHVzIGZhaWxcIiB2LWVsc2U+RjwvdGV4dD5cclxuICAgICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgICAge3sgJ1xcclxcbicgKyBpdGVtLmNyZWF0ZVRpbWUgfX1cclxuICAgICAgICA8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuXHJcbiAgICA8dW5pLXBvcHVwIHJlZj1cIm1lc3NhZ2VSZWZcIiB0eXBlPVwibWVzc2FnZVwiPlxyXG4gICAgICA8dW5pLXBvcHVwLW1lc3NhZ2VcclxuICAgICAgICA6dHlwZT1cIm1lc3NhZ2VUeXBlXCJcclxuICAgICAgICA6bWVzc2FnZT1cIm1lc3NhZ2VUZXh0XCJcclxuICAgICAgICA6ZHVyYXRpb249XCIyMDAwXCJcclxuICAgICAgPjwvdW5pLXBvcHVwLW1lc3NhZ2U+XHJcbiAgICA8L3VuaS1wb3B1cD5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyByZWFjdGl2ZSwgcmVmLCBuZXh0VGljayB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHtcclxuICBvblNob3csXHJcbiAgb25Mb2FkLFxyXG4gIG9uVW5sb2FkLFxyXG4gIG9uSGlkZSxcclxuICBvbkJhY2tQcmVzcyxcclxuICBvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAsXHJcbn0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IGNoZWNrUGVybWlzc2lvbiB9IGZyb20gJ0AvdXRpbHMnXHJcbmltcG9ydCB7IHdhcmVob3VzZVNjYW4gfSBmcm9tICdAL3NlcnZpY2VzL3dhcmVob3VzZVNjYW4nXHJcblxyXG5jb25zdCB2YWxpRm9ybVJlZiA9IHJlZigpXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGhpZGVQYWdlID0gcmVmKGZhbHNlKVxyXG5jb25zdCBmb2N1c1R5cGUgPSByZWYodHJ1ZSlcclxuY29uc3Qgd2FyZWhvdXNlTG9nSGlzdG9yeSA9IHJlZihbXSBhcyBhbnkpXHJcbmNvbnN0IG1lc3NhZ2VSZWYgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZigpXHJcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKClcclxubGV0IHN0OiBudW1iZXJcclxuXHJcbmNvbnN0IHZhbGlGb3JtRGF0YSA9IHJlZih7XHJcbiAgb3JkZXJfY29kZTogJycsXHJcbn0pXHJcbmNvbnN0IHJ1bGVzID0gcmVhY3RpdmUoe1xyXG4gIG9yZGVyX2NvZGU6IHtcclxuICAgIHJ1bGVzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICBlcnJvck1lc3NhZ2U6ICfljZXmja7nvJblj7fkuI3og73kuLrnqbonLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG59KVxyXG5cclxuY29uc3Qgc2NhbklucHV0ID0gYXN5bmMgKCkgPT4ge1xyXG4gIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gIGxldCBzdGF0dXMgPSBhd2FpdCBjaGVja1Blcm1pc3Npb24oKVxyXG4gIGlmIChzdGF0dXMgIT09IDEpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICAvLyAjZW5kaWZcclxuICB1bmkuc2NhbkNvZGUoe1xyXG4gICAgc3VjY2VzczogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlcl9jb2RlID0gcmVzLnJlc3VsdFxyXG4gICAgICBvbnN1Ym1pdCgpXHJcbiAgICB9LFxyXG4gICAgZmFpbDogKGVycikgPT4ge1xyXG4gICAgICAvLyDpnIDopoHms6jmhI/nmoTmmK/lsI/nqIvluo/miavnoIHkuI3pnIDopoHnlLPor7fnm7jmnLrmnYPpmZBcclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5jb25zdCByZXNldCA9ICgpID0+IHtcclxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcclxuICB2YWxpRm9ybURhdGEudmFsdWUub3JkZXJfY29kZSA9ICcnXHJcbn1cclxuXHJcbmNvbnN0IHNldGZvY3VzID0gKCkgPT4ge1xyXG4gIGlmIChoaWRlUGFnZS52YWx1ZSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGZvY3VzVHlwZS52YWx1ZSA9IGZhbHNlXHJcbiAgbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgZm9jdXNUeXBlLnZhbHVlID0gdHJ1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IG9uc3VibWl0ID0gYXN5bmMgKCkgPT4ge1xyXG4gIHN0ICYmIGNsZWFyVGltZW91dChzdClcclxuXHJcbiAgY29uc3QgdmFsaVJlczogYW55ID0gYXdhaXQgdmFsaUZvcm1SZWYudmFsdWUudmFsaWRhdGUoKVxyXG4gIGlmICghdmFsaVJlcykge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBsb2FkaW5nLnZhbHVlID0gdHJ1ZVxyXG5cclxuICBjb25zdCByZXMgPSBhd2FpdCB3YXJlaG91c2VTY2FuKHtcclxuICAgIG9yZGVyX2NvZGU6IHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlcl9jb2RlLFxyXG4gIH0pXHJcbiAgY29uc29sZS5sb2coJ3Jlcy0tLScsIHJlcylcclxuXHJcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXHJcbiAgaWYgKHJlcy5jb2RlID09IDEpIHtcclxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ3N1Y2Nlc3MnXHJcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcblxyXG4gICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XHJcbiAgICAgIG9yZGVyX2NvZGU6IHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlcl9jb2RlLFxyXG4gICAgICBjcmVhdGVUaW1lOiBuZXcgRGF0ZSgpLFxyXG4gICAgICB0eXBlOiAn5Y2V5o2u5omr5o+PJyxcclxuICAgICAgc3RhdHVzOiB0cnVlLFxyXG4gICAgfVxyXG4gICAgd2FyZWhvdXNlTG9nSGlzdG9yeS52YWx1ZS51bnNoaWZ0KGhpc3RvcnlJdGVtKVxyXG4gICAgdW5pLnNldFN0b3JhZ2VTeW5jKCd3YXJlaG91c2VMb2dIaXN0b3J5Jywgd2FyZWhvdXNlTG9nSGlzdG9yeS52YWx1ZSlcclxuICAgIGdldEhpc3RvcnkoKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcclxuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xyXG4gICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xyXG4gICAgICBvcmRlcl9jb2RlOiB2YWxpRm9ybURhdGEudmFsdWUub3JkZXJfY29kZSxcclxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcclxuICAgICAgdHlwZTogJ+WNleaNruaJq+aPjycsXHJcbiAgICAgIHN0YXR1czogZmFsc2UsXHJcbiAgICB9XHJcbiAgICB3YXJlaG91c2VMb2dIaXN0b3J5LnZhbHVlLnVuc2hpZnQoaGlzdG9yeUl0ZW0pXHJcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhcmVob3VzZUxvZ0hpc3RvcnknLCB3YXJlaG91c2VMb2dIaXN0b3J5LnZhbHVlKVxyXG4gICAgZ2V0SGlzdG9yeSgpXHJcbiAgfVxyXG4gIHN0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICByZXNldCgpXHJcbiAgICBzdCAmJiBjbGVhclRpbWVvdXQoc3QpXHJcbiAgfSwgMTAwMClcclxufVxyXG5cclxuY29uc3QgZ2V0SGlzdG9yeSA9ICgpID0+IHtcclxuICB3YXJlaG91c2VMb2dIaXN0b3J5LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3YXJlaG91c2VMb2dIaXN0b3J5JykgfHwgW11cclxufVxyXG5jb25zdCBrZXlwcmVzcyA9IChlOiBhbnkpID0+IHtcclxuICAvLyAxMDIgIOW3puS+pyAgICAxMDMgIOWPs+S+pyAgIDEwNCAg5Lit6Ze05oyJ6ZSuXHJcbiAgaWYgKGUua2V5Q29kZSA9PT0gMTAyIHx8IGUua2V5Q29kZSA9PT0gMTAzIHx8IGUua2V5Q29kZSA9PT0gMTA0KSB7XHJcbiAgICAvL+i/memHjOaMiemUruaIkOWKn1xyXG4gIH1cclxuXHJcbiAgaWYgKGUua2V5Q29kZSA9PSA2Nikge1xyXG4gICAgLy9lbnRlcuaMiemUrlxyXG4gICAgLy/ov5nph4xpbnB1dOW3sue7j+aLv+WIsOaVsOaNruS6hu+8jOWcqOi/memHjOaKiuaLv+WIsOeahOaVsOaNru+8jOmAmui/h+aOpeWPo+aVsOaNruiBlOiwg+i1t+adpVxyXG4gICAgb25zdWJtaXQoKVxyXG4gIH1cclxufVxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbiAgLy8gI2lmZGVmIEg1XHJcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuICAvLyAjZW5kaWZcclxufSlcclxub25VbmxvYWQoKCkgPT4ge1xyXG4gIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbiAgLy8gI2lmZGVmIEg1XHJcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuICAvLyAjZW5kaWZcclxufSlcclxub25IaWRlKCgpID0+IHtcclxuICBoaWRlUGFnZS52YWx1ZSA9IHRydWVcclxuICAvLyAjaWZkZWYgQVBQLVBMVVNcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICBwbHVzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG4gIC8vICNlbmRpZlxyXG4gIC8vICNpZmRlZiBINVxyXG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbn0pXHJcbm9uQmFja1ByZXNzKCgpID0+IHtcclxuICAvLyAjaWZkZWYgQVBQLVBMVVNcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICBwbHVzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG4gIC8vICNlbmRpZlxyXG4gIC8vICNpZmRlZiBINVxyXG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbn0pXHJcblxyXG5vblNob3coKCkgPT4ge1xyXG4gIGhpZGVQYWdlLnZhbHVlID0gZmFsc2VcclxuICBnZXRIaXN0b3J5KClcclxufSlcclxuXHJcbm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCgoZXZlbnQpID0+IHtcclxuICBpZiAoZXZlbnQuaW5kZXggPT09IDApIHtcclxuICAgIHVuaS5uYXZpZ2F0ZVRvKHtcclxuICAgICAgdXJsOiAnL3BhZ2VzL3dhcmVob3VzZVNjYW4vbG9nTGlzdCcsXHJcbiAgICB9KVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5jb250YWluZXIge1xyXG4gIHBhZGRpbmc6IDE1cHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxufVxyXG5cclxuLmJ1dHRvbi1ncm91cCB7XHJcbiAgbWFyZ2luLXRvcDogMTVweDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiAzNXB4O1xyXG4gICAgd2lkdGg6IDUwJTtcclxuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICB9XHJcblxyXG4gIC51bmktaWNvbnMge1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG4gIH1cclxufVxyXG5cclxuLmhpc3Rvcnkge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBqdXN0aWZ5LWl0ZW1zOiBzdGFydDtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgfVxyXG5cclxuICAudHlwZSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG5cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiB3YXJlaG91c2VMb2dIaXN0b3J5XCIgOmtleT1cImlcIj5cclxuICAgICAgPHRleHQgY2xhc3M9XCJ0eXBlXCI+e3sgaXRlbS50eXBlIH19PC90ZXh0PlxyXG4gICAgICA8dGV4dCBjbGFzcz1cImNvZGVcIiA6c3R5bGU9XCJ7IGNvbG9yOiBpdGVtLnN0YXR1cyA/ICdncmVlbicgOiAnIzY2NicgfVwiPnt7XHJcbiAgICAgICAgaXRlbS5vcmRlcl9jb2RlXHJcbiAgICAgIH19PC90ZXh0PlxyXG4gICAgICA8dW5pLWljb25zXHJcbiAgICAgICAgdi1pZj1cIml0ZW0uc3RhdHVzXCJcclxuICAgICAgICB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIlxyXG4gICAgICAgIGNsYXNzPVwic3RhdHVzXCJcclxuICAgICAgICBzaXplPVwiMTZcIlxyXG4gICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxyXG4gICAgICA+PC91bmktaWNvbnM+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwic3RhdHVzIGZhaWxcIiB2LWVsc2U+RjwvdGV4dD5cclxuICAgICAgPHRleHQgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBycHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj5cclxuICAgICAgICB7eyAnXFxyXFxuJyArIGl0ZW0uY3JlYXRlVGltZSB9fVxyXG4gICAgICA8L3RleHQ+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyB2LWlmPVwid2FyZWhvdXNlTG9nSGlzdG9yeS5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IHdhcmVob3VzZUxvZ0hpc3RvcnkgPSByZWYoW10gYXMgYW55KVxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIHdhcmVob3VzZUxvZ0hpc3RvcnkudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhcmVob3VzZUxvZ0hpc3RvcnknKVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uaGlzdG9yeSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICB3aWR0aDogMTAwJTtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiB3YXJlaG91c2VMb2dIaXN0b3J5XCIgOmtleT1cImlcIj5cclxuICAgICAgPHRleHQgY2xhc3M9XCJ0eXBlXCI+e3sgaXRlbS50eXBlIH19PC90ZXh0PlxyXG4gICAgICA8dGV4dCBjbGFzcz1cImNvZGVcIiA6c3R5bGU9XCJ7IGNvbG9yOiBpdGVtLnN0YXR1cyA/ICdncmVlbicgOiAnIzY2NicgfVwiPnt7XHJcbiAgICAgICAgaXRlbS5vcmRlcl9jb2RlXHJcbiAgICAgIH19PC90ZXh0PlxyXG4gICAgICA8dW5pLWljb25zXHJcbiAgICAgICAgdi1pZj1cIml0ZW0uc3RhdHVzXCJcclxuICAgICAgICB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIlxyXG4gICAgICAgIGNsYXNzPVwic3RhdHVzXCJcclxuICAgICAgICBzaXplPVwiMTZcIlxyXG4gICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxyXG4gICAgICA+PC91bmktaWNvbnM+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwic3RhdHVzIGZhaWxcIiB2LWVsc2U+RjwvdGV4dD5cclxuICAgICAgPHRleHQgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBycHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj5cclxuICAgICAgICB7eyAnXFxyXFxuJyArIGl0ZW0uY3JlYXRlVGltZSB9fVxyXG4gICAgICA8L3RleHQ+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyB2LWlmPVwid2FyZWhvdXNlTG9nSGlzdG9yeS5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IHdhcmVob3VzZUxvZ0hpc3RvcnkgPSByZWYoW10gYXMgYW55KVxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIHdhcmVob3VzZUxvZ0hpc3RvcnkudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhcmVob3VzZUxvZ0hpc3RvcnknKVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uaGlzdG9yeSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICB3aWR0aDogMTAwJTtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XG4gIDx2aWV3PlxuICAgIDxyYWRpby1ncm91cCBAY2hhbmdlPVwicmFkaW9DaGFuZ2VcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInVuaS1saXN0LWNlbGwgdW5pLWxpc3QtY2VsbC1wZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPiA8cmFkaW8gdmFsdWU9XCJyYkJUMlwiIGNoZWNrZWQ9XCJ0cnVlXCIgLz5CVDIuMCA8L2xhYmVsPlxuICAgICAgICA8dW5pLWRhdGEtc2VsZWN0IHYtbW9kZWw9XCJ1ZHNCVDJWYWx1ZVwiIDpsb2NhbGRhdGE9XCJ1ZHNCVDJSYW5nZVwiPjwvdW5pLWRhdGEtc2VsZWN0PlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInVuaS1saXN0LWNlbGwgdW5pLWxpc3QtY2VsbC1wZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPiA8cmFkaW8gdmFsdWU9XCJyYk5FVFwiIC8+TkVUIDwvbGFiZWw+XG4gICAgICAgIDx1bmktZGF0YS1zZWxlY3Qgdi1tb2RlbD1cInVkc05FVFZhbHVlXCIgOmxvY2FsZGF0YT1cInVkc05FVFJhbmdlXCI+PC91bmktZGF0YS1zZWxlY3Q+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGxhYmVsIGNsYXNzPVwidW5pLWxpc3QtY2VsbCB1bmktbGlzdC1jZWxsLXBkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCI+IDxyYWRpbyB2YWx1ZT1cInJiVVNCXCIgLz5VU0IgPC9sYWJlbD5cbiAgICAgICAgPHVuaS1kYXRhLXNlbGVjdCB2LW1vZGVsPVwidWRzVVNCVmFsdWVcIiA6bG9jYWxkYXRhPVwidWRzVVNCUmFuZ2VcIj48L3VuaS1kYXRhLXNlbGVjdD5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJ1bmktbGlzdC1jZWxsIHVuaS1saXN0LWNlbGwtcGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIj4gPHJhZGlvIHZhbHVlPVwicmJDT01cIiAvPkNPTSA8L2xhYmVsPlxuICAgICAgICA8dW5pLWRhdGEtc2VsZWN0IHYtbW9kZWw9XCJ1ZHNDT01WYWx1ZVwiIDpsb2NhbGRhdGE9XCJ1ZHNDT01SYW5nZVwiPjwvdW5pLWRhdGEtc2VsZWN0PlxuICAgICAgICA8dW5pLWRhdGEtc2VsZWN0XG4gICAgICAgICAgdi1tb2RlbD1cInVkc0NPTUJhdWRyYXRlVmFsdWVcIlxuICAgICAgICAgIDpsb2NhbGRhdGE9XCJ1ZHNDT01CYXVkcmF0ZVJhbmdlXCJcbiAgICAgICAgPjwvdW5pLWRhdGEtc2VsZWN0PlxuICAgICAgICA8dW5pLWRhdGEtc2VsZWN0XG4gICAgICAgICAgdi1tb2RlbD1cInVkc0NPTUZsb3dDb250cm9sVmFsdWVcIlxuICAgICAgICAgIDpsb2NhbGRhdGE9XCJ1ZHNDT01GbG93Q29udHJvbFJhbmdlXCJcbiAgICAgICAgPjwvdW5pLWRhdGEtc2VsZWN0PlxuICAgICAgPC9sYWJlbD5cbiAgICA8L3JhZGlvLWdyb3VwPlxuXG4gICAgPHZpZXcgY2xhc3M9XCJ1bmktZmxleCB1bmktcm93XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQGNsaWNrPVwiZW51bVBvcnRcIj5FbnVtIFBvcnQ8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJvcGVuUG9ydFwiIDpkaXNhYmxlZD1cImJ0bk9wZW5Qb3J0RGlzYWJsZWRcIj5PcGVuIFBvcnQ8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAY2xpY2s9XCJjbG9zZVBvcnRcIiA6ZGlzYWJsZWQ9XCJidG5DbG9zZVBvcnREaXNhYmxlZFwiPkNsb3NlIFBvcnQ8L2J1dHRvbj5cbiAgICA8L3ZpZXc+XG5cbiAgICA8dmlldz5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJUZXN0X0xhYmVsX1NhbXBsZVRpY2tldF81OE1NXzFcIj5cbiAgICAgICAgVGVzdF9MYWJlbF9TYW1wbGVUaWNrZXRfNThNTV8xXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJUZXN0X0xhYmVsX1NhbXBsZVRpY2tldF84ME1NXzFcIj5cbiAgICAgICAgVGVzdF9MYWJlbF9TYW1wbGVUaWNrZXRfODBNTV8xXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkdldFByaW50ZXJSZXNvbHV0aW9uSW5mb1wiPkdldFByaW50ZXJSZXNvbHV0aW9uSW5mbzwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkdldFByaW50ZXJGaXJtd2FyZVZlcnNpb25cIj5HZXRQcmludGVyRmlybXdhcmVWZXJzaW9uPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwiR2V0UHJpbnRlclN0YXR1c0luZm9cIj5HZXRQcmludGVyU3RhdHVzSW5mbzwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwiQ1BfUG9zX0tpY2tPdXREcmF3ZXJcIj5DUF9Qb3NfS2lja091dERyYXdlcjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX1Bvc19CZWVwXCI+Q1BfUG9zX0JlZXA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9Qb3NfUHJpbnRTZWxmVGVzdFBhZ2VcIj5DUF9Qb3NfUHJpbnRTZWxmVGVzdFBhZ2U8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9Qb3NfUmVzZXRQcmludGVyXCI+Q1BfUG9zX1Jlc2V0UHJpbnRlcjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX1Bvc19TZXRQcmludFNwZWVkXzEwMFwiPkNQX1Bvc19TZXRQcmludFNwZWVkXzEwMDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX1Bvc19TZXRQcmludFNwZWVkXzE1MFwiPkNQX1Bvc19TZXRQcmludFNwZWVkXzE1MDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX1Bvc19TZXRQcmludERlbnNpdHlfN1wiPkNQX1Bvc19TZXRQcmludERlbnNpdHlfNzwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX1Bvc19TZXRQcmludERlbnNpdHlfMTVcIj5DUF9Qb3NfU2V0UHJpbnREZW5zaXR5XzE1PC9idXR0b24+XG5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9MYWJlbF9FbmFibGVMYWJlbE1vZGVcIj5DUF9MYWJlbF9FbmFibGVMYWJlbE1vZGU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9MYWJlbF9EaXNhYmxlTGFiZWxNb2RlXCI+Q1BfTGFiZWxfRGlzYWJsZUxhYmVsTW9kZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX0xhYmVsX0NhbGlicmF0ZUxhYmVsXCI+Q1BfTGFiZWxfQ2FsaWJyYXRlTGFiZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9MYWJlbF9GZWVkTGFiZWxcIj5DUF9MYWJlbF9GZWVkTGFiZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9MYWJlbF9QYWdlQmVnaW5cIj5DUF9MYWJlbF9QYWdlQmVnaW48L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9MYWJlbF9QYWdlUHJpbnRcIj5DUF9MYWJlbF9QYWdlUHJpbnQ8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9MYWJlbF9EcmF3VGV4dFwiPkNQX0xhYmVsX0RyYXdUZXh0PC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwiQ1BfTGFiZWxfRHJhd1RleHRJblVURjhcIj5DUF9MYWJlbF9EcmF3VGV4dEluVVRGODwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX0xhYmVsX0RyYXdUZXh0SW5HQktcIj5DUF9MYWJlbF9EcmF3VGV4dEluR0JLPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwiQ1BfTGFiZWxfRHJhd0JhcmNvZGVcIj5DUF9MYWJlbF9EcmF3QmFyY29kZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX0xhYmVsX0RyYXdRUkNvZGVcIj5DUF9MYWJlbF9EcmF3UVJDb2RlPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwiQ1BfTGFiZWxfRHJhd1BERjQxN0NvZGVcIj5DUF9MYWJlbF9EcmF3UERGNDE3Q29kZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX0xhYmVsX0RyYXdJbWFnZUZyb21GaWxlXCI+Q1BfTGFiZWxfRHJhd0ltYWdlRnJvbUZpbGU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9MYWJlbF9EcmF3SW1hZ2VGcm9tUGl4ZWxzXCI+XG4gICAgICAgIENQX0xhYmVsX0RyYXdJbWFnZUZyb21QaXhlbHNcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIkNQX0xhYmVsX0RyYXdMaW5lXCI+Q1BfTGFiZWxfRHJhd0xpbmU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJDUF9MYWJlbF9EcmF3UmVjdFwiPkNQX0xhYmVsX0RyYXdSZWN0PC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwiQ1BfTGFiZWxfRHJhd0JveFwiPkNQX0xhYmVsX0RyYXdCb3g8L2J1dHRvbj5cbiAgICA8L3ZpZXc+XG4gIDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5jb25zdCBtb2RhbCA9IHVuaS5yZXF1aXJlTmF0aXZlUGx1Z2luKCdtb2RhbCcpXG5cbnZhciBBdXRvUmVwbHlQcmludFVuaU1vZHVsZSA9IHVuaS5yZXF1aXJlTmF0aXZlUGx1Z2luKCdBdXRvUmVwbHlQcmludFVuaU1vZHVsZScpXG52YXIgaFByaW50ZXIgPSAwXG52YXIgaXNFbnVtZXJhdGluZ0JUMiA9IGZhbHNlXG52YXIgaXNFbnVtZXJhdGluZ05FVCA9IGZhbHNlXG52YXIgc2VsZWN0ZWRQb3J0VHlwZSA9ICdyYkJUMidcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1ZHNCVDJWYWx1ZTogMCxcbiAgICAgIHVkc0JUMlJhbmdlOiBbXSxcblxuICAgICAgdWRzTkVUVmFsdWU6IDAsXG4gICAgICB1ZHNORVRSYW5nZTogW10sXG5cbiAgICAgIHVkc1VTQlZhbHVlOiAwLFxuICAgICAgdWRzVVNCUmFuZ2U6IFtdLFxuXG4gICAgICB1ZHNDT01WYWx1ZTogMCxcbiAgICAgIHVkc0NPTVJhbmdlOiBbXSxcbiAgICAgIHVkc0NPTUJhdWRyYXRlVmFsdWU6IDk2MDAsXG4gICAgICB1ZHNDT01CYXVkcmF0ZVJhbmdlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnOTYwMCcsXG4gICAgICAgICAgdmFsdWU6IDk2MDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnMTkyMDAnLFxuICAgICAgICAgIHZhbHVlOiAxOTIwMCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICczODQwMCcsXG4gICAgICAgICAgdmFsdWU6IDM4NDAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJzU3NjAwJyxcbiAgICAgICAgICB2YWx1ZTogNTc2MDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnMTE1MjAwJyxcbiAgICAgICAgICB2YWx1ZTogMTE1MjAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJzIzMDQwMCcsXG4gICAgICAgICAgdmFsdWU6IDIzMDQwMCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICcyNTYwMDAnLFxuICAgICAgICAgIHZhbHVlOiAyNTYwMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnNTAwMDAwJyxcbiAgICAgICAgICB2YWx1ZTogNTAwMDAwLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHVkc0NPTUZsb3dDb250cm9sVmFsdWU6IDAsXG4gICAgICB1ZHNDT01GbG93Q29udHJvbFJhbmdlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnTm9GbG93Q29udHJvbCcsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnSGFyZHdhcmUnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICB9LFxuICAgICAgXSxcblxuICAgICAgYnRuT3BlblBvcnREaXNhYmxlZDogZmFsc2UsXG4gICAgICBidG5DbG9zZVBvcnREaXNhYmxlZDogdHJ1ZSxcbiAgICB9XG4gIH0sXG4gIG9uTG9hZCgpIHtcbiAgICB1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHtcbiAgICAgIHRpdGxlOiAnU2FtcGxlTGFiZWwgJyArIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xpYnJhcnlfVmVyc2lvbigpLFxuICAgIH0pXG4gIH0sXG4gIG9uUmVhZHkoKSB7XG4gICAgLy/opoHlgZrliLDnrKzkuIDmrKHov5vlhaXnlYzpnaLnmoTml7blgJnvvIzoh6rliqjmkJzntKLkuIDmrKHjgILov5nmoLfnlKjkuI3ooYzjgIJcbiAgICAvL2VudW1Qb3J0KCk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICByYWRpb0NoYW5nZTogZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZWN0ZWRQb3J0VHlwZSA9IGV2dC5kZXRhaWwudmFsdWVcbiAgICB9LFxuICAgIGVudW1Qb3J0KCkge1xuICAgICAgdmFyIG5ld0NvbVJhbmdlID0gbmV3IEFycmF5KClcbiAgICAgIHZhciBjb21OYW1lTGlzdCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1BvcnRfRW51bUNvbSgpXG4gICAgICBpZiAoY29tTmFtZUxpc3QgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbU5hbWVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHRtcCA9IHtcbiAgICAgICAgICAgIHRleHQ6IGNvbU5hbWVMaXN0W2ldLFxuICAgICAgICAgICAgdmFsdWU6IGksXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKHRtcClcbiAgICAgICAgICBuZXdDb21SYW5nZS5wdXNoKHRtcClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy51ZHNDT01SYW5nZSA9IG5ld0NvbVJhbmdlXG5cbiAgICAgIHZhciBuZXdVc2JSYW5nZSA9IG5ldyBBcnJheSgpXG4gICAgICB2YXIgdXNiTmFtZUxpc3QgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3J0X0VudW1Vc2IoKVxuICAgICAgaWYgKHVzYk5hbWVMaXN0ICE9IG51bGwpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1c2JOYW1lTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCB0bXAgPSB7XG4gICAgICAgICAgICB0ZXh0OiB1c2JOYW1lTGlzdFtpXSxcbiAgICAgICAgICAgIHZhbHVlOiBpLFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyh0bXApXG4gICAgICAgICAgbmV3VXNiUmFuZ2UucHVzaCh0bXApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudWRzVVNCUmFuZ2UgPSBuZXdVc2JSYW5nZVxuXG4gICAgICBpZiAoIWlzRW51bWVyYXRpbmdCVDIpIHtcbiAgICAgICAgaXNFbnVtZXJhdGluZ0JUMiA9IHRydWVcbiAgICAgICAgY29uc29sZS5sb2coJ2lzRW51bWVyYXRpbmdCVDInKVxuICAgICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3J0X0VudW1CdERldmljZShcbiAgICAgICAgICAxMjAwMCxcbiAgICAgICAgICAocmV0KSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJldCk7XG4gICAgICAgICAgICB2YXIgdGV4dCA9IHJldC5kZXZpY2VfYWRkcmVzcyArICcoJyArIHJldC5kZXZpY2VfbmFtZSArICcpJ1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVkc0JUMlJhbmdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnVkc0JUMlJhbmdlW2ldLnRleHQgPT0gdGV4dCkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdG1wID0ge1xuICAgICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy51ZHNCVDJSYW5nZS5sZW5ndGgsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0bXApXG4gICAgICAgICAgICB0aGlzLnVkc0JUMlJhbmdlLnB1c2godG1wKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKHJldCkgPT4ge1xuICAgICAgICAgICAgaXNFbnVtZXJhdGluZ0JUMiA9IGZhbHNlXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZmluaXNoZWRFbnVtZXJhdGluZ0JUMicpXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRW51bWVyYXRpbmdORVQpIHtcbiAgICAgICAgaXNFbnVtZXJhdGluZ05FVCA9IHRydWVcbiAgICAgICAgY29uc29sZS5sb2coJ2lzRW51bWVyYXRpbmdORVQnKVxuICAgICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3J0X0VudW1OZXRQcmludGVyKFxuICAgICAgICAgIDEyMDAwLFxuICAgICAgICAgIChyZXQpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmV0KTtcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gcmV0LmRpc2NvdmVyZWRfaXAgKyAnKCcgKyByZXQuZGlzY292ZXJlZF9uYW1lICsgJyknXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudWRzTkVUUmFuZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMudWRzTkVUUmFuZ2VbaV0udGV4dCA9PSB0ZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0bXAgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnVkc05FVFJhbmdlLmxlbmd0aCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRtcClcbiAgICAgICAgICAgIHRoaXMudWRzTkVUUmFuZ2UucHVzaCh0bXApXG4gICAgICAgICAgfSxcbiAgICAgICAgICAocmV0KSA9PiB7XG4gICAgICAgICAgICBpc0VudW1lcmF0aW5nTkVUID0gZmFsc2VcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZEVudW1lcmF0aW5nTkVUJylcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcbiAgICBvcGVuUG9ydCgpIHtcbiAgICAgIGlmIChoUHJpbnRlciA9PSAwKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZFBvcnRUeXBlID09ICdyYkJUMicpIHtcbiAgICAgICAgICB2YXIgdGV4dCA9IHRoaXMudWRzQlQyUmFuZ2VbdGhpcy51ZHNCVDJWYWx1ZV0udGV4dFxuICAgICAgICAgIHZhciBidEFkZHJlc3MgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0LmluZGV4T2YoJygnKSlcbiAgICAgICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnQ29ubmVjdGluZzogJyArIGJ0QWRkcmVzcyArICcgLi4uLi4uJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ29ubmVjdGluZzogJyArIGJ0QWRkcmVzcyArICcgLi4uLi4uJylcbiAgICAgICAgICBoUHJpbnRlciA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1BvcnRfT3BlbkJ0U3BwKGJ0QWRkcmVzcywgMSlcbiAgICAgICAgICBjb25zb2xlLmxvZygnaFByaW50ZXI6ICcgKyBoUHJpbnRlcilcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFBvcnRUeXBlID09ICdyYk5FVCcpIHtcbiAgICAgICAgICBsZXQgdGV4dCA9IHRoaXMudWRzTkVUUmFuZ2VbdGhpcy51ZHNORVRWYWx1ZV0udGV4dFxuICAgICAgICAgIHZhciBpcEFkZHJlc3MgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0LmluZGV4T2YoJygnKSlcbiAgICAgICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnQ29ubmVjdGluZzogJyArIGlwQWRkcmVzcyArICcgLi4uLi4uJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ29ubmVjdGluZzogJyArIGlwQWRkcmVzcyArICcgLi4uLi4uJylcbiAgICAgICAgICBoUHJpbnRlciA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1BvcnRfT3BlblRjcChudWxsLCBpcEFkZHJlc3MsIDkxMDAsIDUwMDAsIDEpXG4gICAgICAgICAgY29uc29sZS5sb2coJ2hQcmludGVyOiAnICsgaFByaW50ZXIpXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRQb3J0VHlwZSA9PSAncmJVU0InKSB7XG4gICAgICAgICAgdmFyIHVzYk5hbWUgPSB0aGlzLnVkc1VTQlJhbmdlW3RoaXMudWRzVVNCVmFsdWVdLnRleHRcbiAgICAgICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnQ29ubmVjdGluZzogJyArIHVzYk5hbWUgKyAnIC4uLi4uLicsXG4gICAgICAgICAgICBkdXJhdGlvbjogMS41LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nvbm5lY3Rpbmc6ICcgKyB1c2JOYW1lICsgJyAuLi4uLi4nKVxuICAgICAgICAgIGhQcmludGVyID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9ydF9PcGVuVXNiKHVzYk5hbWUsIDEpXG4gICAgICAgICAgY29uc29sZS5sb2coJ2hQcmludGVyOiAnICsgaFByaW50ZXIpXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRQb3J0VHlwZSA9PSAncmJDT00nKSB7XG4gICAgICAgICAgdmFyIGNvbU5hbWUgPSB0aGlzLnVkc0NPTVJhbmdlW3RoaXMudWRzQ09NVmFsdWVdLnRleHRcbiAgICAgICAgICB2YXIgY29tQmF1ZHJhdGUgPSB0aGlzLnVkc0NPTUJhdWRyYXRlVmFsdWVcbiAgICAgICAgICB2YXIgY29tRmxvd0NvbnRyb2wgPSB0aGlzLnVkc0NPTUZsb3dDb250cm9sVmFsdWVcbiAgICAgICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAnQ29ubmVjdGluZzogJyArIGNvbU5hbWUgKyAnLCcgKyBjb21CYXVkcmF0ZSArICcsJyArIGNvbUZsb3dDb250cm9sICsgJyAuLi4uLi4nLFxuICAgICAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgJ0Nvbm5lY3Rpbmc6ICcgKyBjb21OYW1lICsgJywnICsgY29tQmF1ZHJhdGUgKyAnLCcgKyBjb21GbG93Q29udHJvbCArICcuLi4uLi4nLFxuICAgICAgICAgIClcbiAgICAgICAgICBoUHJpbnRlciA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1BvcnRfT3BlbkNvbShcbiAgICAgICAgICAgIGNvbU5hbWUsXG4gICAgICAgICAgICBjb21CYXVkcmF0ZSxcbiAgICAgICAgICAgIDgsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGNvbUZsb3dDb250cm9sLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc29sZS5sb2coJ2hQcmludGVyOiAnICsgaFByaW50ZXIpXG4gICAgICAgIH1cbiAgICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICAgIG1lc3NhZ2U6IGhQcmludGVyICE9IDAgPyAnQ29ubmVjdGVkJyA6ICdGYWlsZWQnLFxuICAgICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLmJ0bk9wZW5Qb3J0RGlzYWJsZWQgPSBoUHJpbnRlciAhPSAwXG4gICAgICB0aGlzLmJ0bkNsb3NlUG9ydERpc2FibGVkID0gaFByaW50ZXIgPT0gMFxuICAgIH0sXG4gICAgY2xvc2VQb3J0KCkge1xuICAgICAgaWYgKGhQcmludGVyICE9IDApIHtcbiAgICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9ydF9DbG9zZShoUHJpbnRlcilcbiAgICAgICAgaFByaW50ZXIgPSAwXG4gICAgICB9XG4gICAgICB0aGlzLmJ0bk9wZW5Qb3J0RGlzYWJsZWQgPSBoUHJpbnRlciAhPSAwXG4gICAgICB0aGlzLmJ0bkNsb3NlUG9ydERpc2FibGVkID0gaFByaW50ZXIgPT0gMFxuICAgIH0sXG5cbiAgICBUZXN0X0xhYmVsX1NhbXBsZVRpY2tldF81OE1NXzEoKSB7XG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3NfU2V0TXVsdGlCeXRlTW9kZShoUHJpbnRlcilcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19TZXRNdWx0aUJ5dGVFbmNvZGluZyhoUHJpbnRlciwgMSlcblxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZUJlZ2luKGhQcmludGVyLCAwLCAwLCAzODQsIDI0MCwgMClcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX0RyYXdUZXh0KGhQcmludGVyLCAxMCwgMTAsIDI0LCAwLCAn5Z6L5Y+377yaUDU4QSsnKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd1RleHQoaFByaW50ZXIsIDEwLCA0MCwgMjQsIDAsICdNRkcg77yaMDAnKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd0JhcmNvZGUoaFByaW50ZXIsIDEwLCA3MCwgOCwgMiwgNjAsIDIsIDAsICdOby4xMjM0NTYnKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZVByaW50KGhQcmludGVyLCAxKVxuICAgICAgLy9BdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3NfSGFsZkN1dFBhcGVyKGhQcmludGVyKTtcbiAgICAgIC8vQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX0Z1bGxDdXRQYXBlcihoUHJpbnRlcik7XG5cbiAgICAgIHZhciBwcmludFJlc3VsdCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19RdWVyeVByaW50UmVzdWx0KGhQcmludGVyLCAxMDAwMClcbiAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogcHJpbnRSZXN1bHQgPyAnUHJpbnQgU3VjY2VzcycgOiAnUHJpbnQgRmFpbGVkJyxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBUZXN0X0xhYmVsX1NhbXBsZVRpY2tldF84ME1NXzEoKSB7XG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3NfU2V0TXVsdGlCeXRlTW9kZShoUHJpbnRlcilcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19TZXRNdWx0aUJ5dGVFbmNvZGluZyhoUHJpbnRlciwgMSlcblxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZUJlZ2luKGhQcmludGVyLCAwLCAwLCA1NzYsIDI0MCwgMClcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX0RyYXdUZXh0KGhQcmludGVyLCAxMCwgMTAsIDI0LCAwLCAn5Z6L5Y+377yaUDgwQSsnKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd1RleHQoaFByaW50ZXIsIDEwLCA0MCwgMjQsIDAsICdNRkcg77yaMDAnKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd0JhcmNvZGUoaFByaW50ZXIsIDEwLCA3MCwgOCwgMiwgNjAsIDQsIDAsICdOby4xMjM0NTYnKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZVByaW50KGhQcmludGVyLCAxKVxuICAgICAgLy9BdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3NfSGFsZkN1dFBhcGVyKGhQcmludGVyKTtcbiAgICAgIC8vQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX0Z1bGxDdXRQYXBlcihoUHJpbnRlcik7XG5cbiAgICAgIHZhciBwcmludFJlc3VsdCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19RdWVyeVByaW50UmVzdWx0KGhQcmludGVyLCAxMDAwMClcbiAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogcHJpbnRSZXN1bHQgPyAnUHJpbnQgU3VjY2VzcycgOiAnUHJpbnQgRmFpbGVkJyxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIEdldFByaW50ZXJSZXNvbHV0aW9uSW5mbygpIHtcbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9QcmludGVyX0dldFByaW50ZXJSZXNvbHV0aW9uSW5mbyhoUHJpbnRlcilcbiAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogcmV0LFxuICAgICAgICBkdXJhdGlvbjogMS41LFxuICAgICAgfSlcbiAgICB9LFxuICAgIEdldFByaW50ZXJGaXJtd2FyZVZlcnNpb24oKSB7XG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUHJpbnRlcl9HZXRQcmludGVyRmlybXdhcmVWZXJzaW9uKGhQcmludGVyKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG4gICAgR2V0UHJpbnRlclN0YXR1c0luZm8oKSB7XG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUHJpbnRlcl9HZXRQcmludGVyU3RhdHVzSW5mbyhoUHJpbnRlcilcbiAgICAgIHZhciBzdGF0dXNfdGltZSA9IG5ldyBEYXRlKHJldC50aW1lc3RhbXBfbXMpXG4gICAgICB2YXIgcHJpbnRlcl9lcnJvcl9zdGF0dXMgPSByZXQucHJpbnRlcl9lcnJvcl9zdGF0dXNcblxuICAgICAgdmFyIHN0YXR1c19zdHIgPSAnJ1xuICAgICAgaWYgKHByaW50ZXJfZXJyb3Jfc3RhdHVzICE9IDApIHtcbiAgICAgICAgc3RhdHVzX3N0ciArPSAnRVJST1JfT0NDVVJFRFxcbicgLy/plJnor6/nirbmgIHpnZ7pm7booajnpLrlh7rplJnkuoZcblxuICAgICAgICBpZiAoKHByaW50ZXJfZXJyb3Jfc3RhdHVzICYgMHgwMSkgIT0gMCkge1xuICAgICAgICAgIHN0YXR1c19zdHIgKz0gJ0VSUk9SX0NVVFRFUlxcbicgLy/vvIjliIfliIDlh7rplJnvvIlcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHByaW50ZXJfZXJyb3Jfc3RhdHVzICYgMHgwMikgIT0gMCkge1xuICAgICAgICAgIHN0YXR1c19zdHIgKz0gJ0VSUk9SX0ZMQVNIXFxuJyAvL++8iEZMQVNIIOW8guW4uO+8iVxuICAgICAgICB9XG4gICAgICAgIGlmICgocHJpbnRlcl9lcnJvcl9zdGF0dXMgJiAweDA0KSAhPSAwKSB7XG4gICAgICAgICAgc3RhdHVzX3N0ciArPSAnRVJST1JfTk9QQVBFUlxcbicgLy/vvIjnvLrnurjvvIlcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHByaW50ZXJfZXJyb3Jfc3RhdHVzICYgMHgwOCkgIT0gMCkge1xuICAgICAgICAgIHN0YXR1c19zdHIgKz0gJ0VSUk9SX1ZPTFRBR0VcXG4nIC8v77yI55S15Y6L5byC5bi477yJXG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwcmludGVyX2Vycm9yX3N0YXR1cyAmIDB4MTApICE9IDApIHtcbiAgICAgICAgICBzdGF0dXNfc3RyICs9ICdFUlJPUl9NQVJLRVJcXG4nIC8v77yI57yd5qCH5oiW6buR5qCH5a6a5L2N5byC5bi477yJXG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwcmludGVyX2Vycm9yX3N0YXR1cyAmIDB4MjApICE9IDApIHtcbiAgICAgICAgICBzdGF0dXNfc3RyICs9ICdFUlJPUl9FTkdJTkVcXG4nIC8v77yI5py66Iqv5byC5bi477yJXG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwcmludGVyX2Vycm9yX3N0YXR1cyAmIDB4NDApICE9IDApIHtcbiAgICAgICAgICBzdGF0dXNfc3RyICs9ICdFUlJPUl9PVkVSSEVBVFxcbicgLy/vvIjov4fng63vvIlcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHByaW50ZXJfZXJyb3Jfc3RhdHVzICYgMHg4MCkgIT0gMCkge1xuICAgICAgICAgIHN0YXR1c19zdHIgKz0gJ0VSUk9SX0NPVkVSVVBcXG4nIC8v77yI57q45LuT55uW6KKr5omT5byA5LqG77yJXG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwcmludGVyX2Vycm9yX3N0YXR1cyAmIDB4MTAwKSAhPSAwKSB7XG4gICAgICAgICAgc3RhdHVzX3N0ciArPSAnRVJST1JfTU9UT1JcXG4nIC8v77yI6ams6L6+5byC5bi477yJXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1c19zdHIgKz0gJ1N0YXR1cyBPS1xcbidcbiAgICAgIH1cblxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAnJyArIHN0YXR1c190aW1lICsgJ1xcbicgKyBzdGF0dXNfc3RyLFxuICAgICAgICBkdXJhdGlvbjogMS41LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgQ1BfUG9zX0tpY2tPdXREcmF3ZXIoKSB7XG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX0tpY2tPdXREcmF3ZXIoaFByaW50ZXIsIDAsIDEwMCwgMTAwKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG4gICAgQ1BfUG9zX0JlZXAoKSB7XG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX0JlZXAoaFByaW50ZXIsIDMsIDUwMClcbiAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogcmV0LFxuICAgICAgICBkdXJhdGlvbjogMS41LFxuICAgICAgfSlcbiAgICB9LFxuICAgIENQX1Bvc19QcmludFNlbGZUZXN0UGFnZSgpIHtcbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3NfUHJpbnRTZWxmVGVzdFBhZ2UoaFByaW50ZXIpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9Qb3NfUmVzZXRQcmludGVyKCkge1xuICAgICAgdmFyIHJldCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19SZXNldFByaW50ZXIoaFByaW50ZXIpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9Qb3NfU2V0UHJpbnRTcGVlZF8xMDAoKSB7XG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX1NldFByaW50U3BlZWQoaFByaW50ZXIsIDEwMClcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19QcmludFNlbGZUZXN0UGFnZShoUHJpbnRlcilcbiAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogcmV0LFxuICAgICAgICBkdXJhdGlvbjogMS41LFxuICAgICAgfSlcbiAgICB9LFxuICAgIENQX1Bvc19TZXRQcmludFNwZWVkXzE1MCgpIHtcbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3NfU2V0UHJpbnRTcGVlZChoUHJpbnRlciwgMTUwKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX1ByaW50U2VsZlRlc3RQYWdlKGhQcmludGVyKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG4gICAgQ1BfUG9zX1NldFByaW50RGVuc2l0eV83KCkge1xuICAgICAgdmFyIHJldCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19TZXRQcmludERlbnNpdHkoaFByaW50ZXIsIDcpXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3NfUHJpbnRTZWxmVGVzdFBhZ2UoaFByaW50ZXIpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9Qb3NfU2V0UHJpbnREZW5zaXR5XzE1KCkge1xuICAgICAgdmFyIHJldCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19TZXRQcmludERlbnNpdHkoaFByaW50ZXIsIDE1KVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX1ByaW50U2VsZlRlc3RQYWdlKGhQcmludGVyKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBDUF9MYWJlbF9FbmFibGVMYWJlbE1vZGUoKSB7XG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRW5hYmxlTGFiZWxNb2RlKGhQcmludGVyKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG4gICAgQ1BfTGFiZWxfRGlzYWJsZUxhYmVsTW9kZSgpIHtcbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EaXNhYmxlTGFiZWxNb2RlKGhQcmludGVyKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG4gICAgQ1BfTGFiZWxfQ2FsaWJyYXRlTGFiZWwoKSB7XG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfQ2FsaWJyYXRlTGFiZWwoaFByaW50ZXIpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9MYWJlbF9GZWVkTGFiZWwoKSB7XG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRmVlZExhYmVsKGhQcmludGVyKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG4gICAgQ1BfTGFiZWxfUGFnZUJlZ2luKCkge1xuICAgICAgdmFyIHJldCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VCZWdpbihoUHJpbnRlciwgMCwgMCwgMzg0LCA0MDAsIDApXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3Qm94KGhQcmludGVyLCAwLCAwLCAzODMsIDM5OSwgMSwgMSlcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VQcmludChoUHJpbnRlciwgMSlcbiAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogcmV0LFxuICAgICAgICBkdXJhdGlvbjogMS41LFxuICAgICAgfSlcbiAgICB9LFxuICAgIENQX0xhYmVsX1BhZ2VQcmludCgpIHtcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VCZWdpbihoUHJpbnRlciwgMCwgMCwgMzg0LCA0MDAsIDApXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3Qm94KGhQcmludGVyLCAwLCAwLCAzODMsIDM5OSwgMSwgMSlcbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlUHJpbnQoaFByaW50ZXIsIDEpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9MYWJlbF9EcmF3VGV4dCgpIHtcbiAgICAgIHZhciBzdHIgPSAnJCQkMTIz5ZOI5ZOI5ZOIJ1xuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX1NldE11bHRpQnl0ZU1vZGUoaFByaW50ZXIpXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9Qb3NfU2V0TXVsdGlCeXRlRW5jb2RpbmcoaFByaW50ZXIsIDEpXG5cbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VCZWdpbihoUHJpbnRlciwgMCwgMCwgMzg0LCA0MDAsIDApXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3Qm94KGhQcmludGVyLCAwLCAwLCAzODMsIDM5OSwgMSwgMSlcbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3VGV4dChoUHJpbnRlciwgMTAsIDEwLCAyNCwgMCwgc3RyKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZVByaW50KGhQcmludGVyLCAxKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG4gICAgQ1BfTGFiZWxfRHJhd1RleHRJblVURjgoKSB7XG4gICAgICB2YXIgc3RyID0gJyQkJDEyM+WTiOWTiOWTiCdcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19TZXRNdWx0aUJ5dGVNb2RlKGhQcmludGVyKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX1NldE11bHRpQnl0ZUVuY29kaW5nKGhQcmludGVyLCAxKVxuXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlQmVnaW4oaFByaW50ZXIsIDAsIDAsIDM4NCwgNDAwLCAwKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd0JveChoUHJpbnRlciwgMCwgMCwgMzgzLCAzOTksIDEsIDEpXG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd1RleHRJblVURjgoaFByaW50ZXIsIDEwLCAxMCwgMjQsIDAsIHN0cilcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VQcmludChoUHJpbnRlciwgMSlcbiAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogcmV0LFxuICAgICAgICBkdXJhdGlvbjogMS41LFxuICAgICAgfSlcbiAgICB9LFxuICAgIENQX0xhYmVsX0RyYXdUZXh0SW5HQksoKSB7XG4gICAgICB2YXIgc3RyID0gJyQkJDEyM+WTiOWTiOWTiCdcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX1Bvc19TZXRNdWx0aUJ5dGVNb2RlKGhQcmludGVyKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfUG9zX1NldE11bHRpQnl0ZUVuY29kaW5nKGhQcmludGVyLCAwKVxuXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlQmVnaW4oaFByaW50ZXIsIDAsIDAsIDM4NCwgNDAwLCAwKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd0JveChoUHJpbnRlciwgMCwgMCwgMzgzLCAzOTksIDEsIDEpXG4gICAgICB2YXIgcmV0ID0gQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd1RleHRJbkdCSyhoUHJpbnRlciwgMTAsIDEwLCAyNCwgMCwgc3RyKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZVByaW50KGhQcmludGVyLCAxKVxuICAgICAgbW9kYWwudG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiByZXQsXG4gICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICB9KVxuICAgIH0sXG4gICAgQ1BfTGFiZWxfRHJhd0JhcmNvZGUoKSB7XG4gICAgICB2YXIgc3RyID0gJzAxMjM0NTY3ODkwJ1xuXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlQmVnaW4oaFByaW50ZXIsIDAsIDAsIDM4NCwgNDAwLCAwKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd0JveChoUHJpbnRlciwgMCwgMCwgMzgzLCAzOTksIDEsIDEpXG5cbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3QmFyY29kZShoUHJpbnRlciwgMTAsIDEwLCAwLCAyLCA2MCwgMiwgMCwgc3RyKVxuXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlUHJpbnQoaFByaW50ZXIsIDEpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9MYWJlbF9EcmF3UVJDb2RlKCkge1xuICAgICAgdmFyIHN0ciA9ICdIZWxsbyDkvaDlpb0nXG5cbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VCZWdpbihoUHJpbnRlciwgMCwgMCwgMzg0LCA0MDAsIDApXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3Qm94KGhQcmludGVyLCAwLCAwLCAzODMsIDM5OSwgMSwgMSlcblxuICAgICAgdmFyIHJldCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX0RyYXdRUkNvZGUoaFByaW50ZXIsIDEwLCAxMCwgMCwgMSwgOCwgMCwgc3RyKVxuXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlUHJpbnQoaFByaW50ZXIsIDEpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9MYWJlbF9EcmF3UERGNDE3Q29kZSgpIHtcbiAgICAgIHZhciBzdHIgPSAnSGVsbG8g5L2g5aW9J1xuXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlQmVnaW4oaFByaW50ZXIsIDAsIDAsIDM4NCwgNDAwLCAwKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfRHJhd0JveChoUHJpbnRlciwgMCwgMCwgMzgzLCAzOTksIDEsIDEpXG5cbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3UERGNDE3Q29kZShcbiAgICAgICAgaFByaW50ZXIsXG4gICAgICAgIDEwLFxuICAgICAgICAxMCxcbiAgICAgICAgMyxcbiAgICAgICAgMyxcbiAgICAgICAgMCxcbiAgICAgICAgMyxcbiAgICAgICAgMCxcbiAgICAgICAgc3RyLFxuICAgICAgKVxuXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlUHJpbnQoaFByaW50ZXIsIDEpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9MYWJlbF9EcmF3SW1hZ2VGcm9tRmlsZSgpIHtcbiAgICAgIHVuaS5jaG9vc2VJbWFnZSh7XG4gICAgICAgIGNvdW50OiAxLCAvL+m7mOiupDlcbiAgICAgICAgc2l6ZVR5cGU6IFsnb3JpZ2luYWwnLCAnY29tcHJlc3NlZCddLCAvL+WPr+S7peaMh+WumuaYr+WOn+Wbvui/mOaYr+WOi+e8qeWbvu+8jOm7mOiupOS6jOiAhemDveaciVxuICAgICAgICBzb3VyY2VUeXBlOiBbJ2FsYnVtJ10sIC8v5LuO55u45YaM6YCJ5oupXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlQmVnaW4oaFByaW50ZXIsIDAsIDAsIDM4NCwgNDAwLCAwKVxuICAgICAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX0RyYXdCb3goaFByaW50ZXIsIDAsIDAsIDM4MywgMzk5LCAxLCAxKVxuICAgICAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3SW1hZ2VGcm9tRmlsZShcbiAgICAgICAgICAgIGhQcmludGVyLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAzODQsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgcmVzLnRlbXBGaWxlUGF0aHNbMF0sXG4gICAgICAgICAgICAyLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICApXG4gICAgICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZVByaW50KGhQcmludGVyLCAxKVxuICAgICAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxLjUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9MYWJlbF9EcmF3SW1hZ2VGcm9tUGl4ZWxzKCkge1xuICAgICAgdmFyIGltYWdlX3dpZHRoID0gMTAwXG4gICAgICB2YXIgaW1hZ2VfaGVpZ2h0ID0gMTAwXG4gICAgICB2YXIgaW1hZ2VfcGl4ZWxzX2FycmF5ID0gbmV3IFVpbnQ4QXJyYXkoaW1hZ2Vfd2lkdGggKiBpbWFnZV9oZWlnaHQgKiA0KVxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBpbWFnZV9oZWlnaHQ7ICsreSkge1xuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IGltYWdlX3dpZHRoOyArK3gpIHtcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0geSAqIGltYWdlX3dpZHRoICogNCArIHggKiA0XG4gICAgICAgICAgaWYgKHggPT0geSkge1xuICAgICAgICAgICAgaW1hZ2VfcGl4ZWxzX2FycmF5W29mZnNldF0gPSAweDAwXG4gICAgICAgICAgICBpbWFnZV9waXhlbHNfYXJyYXlbb2Zmc2V0ICsgMV0gPSAweDAwXG4gICAgICAgICAgICBpbWFnZV9waXhlbHNfYXJyYXlbb2Zmc2V0ICsgMl0gPSAweDAwXG4gICAgICAgICAgICBpbWFnZV9waXhlbHNfYXJyYXlbb2Zmc2V0ICsgM10gPSAweGZmXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltYWdlX3BpeGVsc19hcnJheVtvZmZzZXRdID0gMHhmZlxuICAgICAgICAgICAgaW1hZ2VfcGl4ZWxzX2FycmF5W29mZnNldCArIDFdID0gMHhmZlxuICAgICAgICAgICAgaW1hZ2VfcGl4ZWxzX2FycmF5W29mZnNldCArIDJdID0gMHhmZlxuICAgICAgICAgICAgaW1hZ2VfcGl4ZWxzX2FycmF5W29mZnNldCArIDNdID0gMHhmZlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGltYWdlX3BpeGVsc19iYXNlNjQgPSB1bmkuYXJyYXlCdWZmZXJUb0Jhc2U2NChpbWFnZV9waXhlbHNfYXJyYXkpXG5cbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VCZWdpbihoUHJpbnRlciwgMCwgMCwgMzg0LCA0MDAsIDApXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3Qm94KGhQcmludGVyLCAwLCAwLCAzODMsIDM5OSwgMSwgMSlcbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3SW1hZ2VGcm9tUGl4ZWxzKFxuICAgICAgICBoUHJpbnRlcixcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgaW1hZ2VfcGl4ZWxzX2Jhc2U2NCxcbiAgICAgICAgaW1hZ2Vfd2lkdGgsXG4gICAgICAgIGltYWdlX2hlaWdodCxcbiAgICAgICAgaW1hZ2Vfd2lkdGggKiA0LFxuICAgICAgICA3LFxuICAgICAgICAyLFxuICAgICAgICAwLFxuICAgICAgKVxuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZVByaW50KGhQcmludGVyLCAxKVxuXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9MYWJlbF9EcmF3TGluZSgpIHtcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VCZWdpbihoUHJpbnRlciwgMCwgMCwgMzg0LCA0MDAsIDApXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3Qm94KGhQcmludGVyLCAwLCAwLCAzODMsIDM5OSwgMSwgMSlcbiAgICAgIHZhciByZXQgPSBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9EcmF3TGluZShoUHJpbnRlciwgMjAsIDIwLCAxMDAsIDMwMCwgMSwgMSlcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX1BhZ2VQcmludChoUHJpbnRlciwgMSlcbiAgICAgIG1vZGFsLnRvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogcmV0LFxuICAgICAgICBkdXJhdGlvbjogMS41LFxuICAgICAgfSlcbiAgICB9LFxuICAgIENQX0xhYmVsX0RyYXdSZWN0KCkge1xuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZUJlZ2luKGhQcmludGVyLCAwLCAwLCAzODQsIDQwMCwgMClcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX0RyYXdCb3goaFByaW50ZXIsIDAsIDAsIDM4MywgMzk5LCAxLCAxKVxuICAgICAgdmFyIHJldCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX0RyYXdSZWN0KGhQcmludGVyLCAyMCwgMjAsIDIwMCwgMTAsIDEpXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlUHJpbnQoaFByaW50ZXIsIDEpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBDUF9MYWJlbF9EcmF3Qm94KCkge1xuICAgICAgQXV0b1JlcGx5UHJpbnRVbmlNb2R1bGUuQ1BfTGFiZWxfUGFnZUJlZ2luKGhQcmludGVyLCAwLCAwLCAzODQsIDQwMCwgMClcbiAgICAgIEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX0RyYXdCb3goaFByaW50ZXIsIDAsIDAsIDM4MywgMzk5LCAxLCAxKVxuICAgICAgdmFyIHJldCA9IEF1dG9SZXBseVByaW50VW5pTW9kdWxlLkNQX0xhYmVsX0RyYXdCb3goaFByaW50ZXIsIDMwLCAzMCwgMzAwLCAyMDAsIDEsIDEpXG4gICAgICBBdXRvUmVwbHlQcmludFVuaU1vZHVsZS5DUF9MYWJlbF9QYWdlUHJpbnQoaFByaW50ZXIsIDEpXG4gICAgICBtb2RhbC50b2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IHJldCxcbiAgICAgICAgZHVyYXRpb246IDEuNSxcbiAgICAgIH0pXG4gICAgfSxcbiAgfSxcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+PC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIHByaW50TG9nSGlzdG9yeVwiIDprZXk9XCJpXCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwiY29kZVwiIDpzdHlsZT1cInsgY29sb3I6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2JyB9XCJcclxuICAgICAgICA+e3sgaXRlbS50eXBlIH19IHt7IGl0ZW0ub3JkZXJfY29kZSB9fTwvdGV4dFxyXG4gICAgICA+XHJcbiAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxyXG4gICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgIHNpemU9XCIxNlwiXHJcbiAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxyXG4gICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJwcmludExvZ0hpc3RvcnkubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJpcy1lbXB0eVwiPuaaguaXoOWOhuWPsjwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnXHJcbmltcG9ydCB7IG9uTG9hZCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5jb25zdCBwcmludExvZ0hpc3RvcnkgPSByZWYoW10gYXMgYW55KVxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIHByaW50TG9nSGlzdG9yeS52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygncHJpbnRMb2dIaXN0b3J5JylcclxufVxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIGdldEhpc3RvcnkoKVxyXG59KVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLmhpc3Rvcnkge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBqdXN0aWZ5LWl0ZW1zOiBzdGFydDtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgfVxyXG4gIC50eXBlIHtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICB9XHJcbiAgLmNvZGUge1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG5cclxuICAgIC5zdGF0dXMge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mYWlsIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6ICNmMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuaXMtZW1wdHkge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4IDA7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gcHJpbnRMb2dIaXN0b3J5XCIgOmtleT1cImlcIj5cclxuICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIlxyXG4gICAgICAgID57eyBpdGVtLnR5cGUgfX0ge3sgaXRlbS5vcmRlcl9jb2RlIH19PC90ZXh0XHJcbiAgICAgID5cclxuICAgICAgPHVuaS1pY29uc1xyXG4gICAgICAgIHYtaWY9XCJpdGVtLnN0YXR1c1wiXHJcbiAgICAgICAgdHlwZT1cImNoZWNrbWFya2VtcHR5XCJcclxuICAgICAgICBjbGFzcz1cInN0YXR1c1wiXHJcbiAgICAgICAgc2l6ZT1cIjE2XCJcclxuICAgICAgICBjb2xvcj1cImdyZWVuXCJcclxuICAgICAgPjwvdW5pLWljb25zPlxyXG4gICAgICA8dGV4dCBjbGFzcz1cInN0YXR1cyBmYWlsXCIgdi1lbHNlPkY8L3RleHQ+XHJcbiAgICAgIDx0ZXh0IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcnB4OyBmb250LXdlaWdodDogMzAwXCI+XHJcbiAgICAgICAge3sgJ1xcclxcbicgKyBpdGVtLmNyZWF0ZVRpbWUgfX1cclxuICAgICAgPC90ZXh0PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgdi1pZj1cInByaW50TG9nSGlzdG9yeS5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IHByaW50TG9nSGlzdG9yeSA9IHJlZihbXSBhcyBhbnkpXHJcbmNvbnN0IGdldEhpc3RvcnkgPSAoKSA9PiB7XHJcbiAgcHJpbnRMb2dIaXN0b3J5LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdwcmludExvZ0hpc3RvcnknKVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uaGlzdG9yeSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICB3aWR0aDogMTAwJTtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgZW4gZnJvbSAnLi9lbi5qc29uJ1xyXG5pbXBvcnQgemhIYW5zIGZyb20gJy4vemgtSGFucy5qc29uJ1xyXG5pbXBvcnQgemhIYW50IGZyb20gJy4vemgtSGFudC5qc29uJ1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblx0ZW4sXHJcblx0J3poLUhhbnMnOiB6aEhhbnMsXHJcblx0J3poLUhhbnQnOiB6aEhhbnRcclxufVxuIiwiPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwidW5pLWxvYWQtbW9yZVwiIEBjbGljaz1cIm9uQ2xpY2tcIj5cclxuXHRcdDwhLS0gI2lmZGVmIEFQUC1OVlVFIC0tPlxyXG5cdFx0PGxvYWRpbmctaW5kaWNhdG9yIHYtaWY9XCIhd2Vidmlld0hpZGUgJiYgc3RhdHVzID09PSAnbG9hZGluZycgJiYgc2hvd0ljb25cIlxyXG5cdFx0XHQ6c3R5bGU9XCJ7Y29sb3I6IGNvbG9yLHdpZHRoOmljb25TaXplKydweCcsaGVpZ2h0Omljb25TaXplKydweCd9XCIgOmFuaW1hdGluZz1cInRydWVcIlxyXG5cdFx0XHRjbGFzcz1cInVuaS1sb2FkLW1vcmVfX2ltZyB1bmktbG9hZC1tb3JlX19pbWctLW52dWVcIj48L2xvYWRpbmctaW5kaWNhdG9yPlxyXG5cdFx0PCEtLSAjZW5kaWYgLS0+XHJcblx0XHQ8IS0tICNpZmRlZiBINSAtLT5cclxuXHRcdDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjI1IDI1IDUwIDUwXCJcclxuXHRcdFx0di1pZj1cIiF3ZWJ2aWV3SGlkZSAmJiAoaWNvblR5cGU9PT0nY2lyY2xlJyB8fCBpY29uVHlwZT09PSdhdXRvJyAmJiBwbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKSAmJiBzdGF0dXMgPT09ICdsb2FkaW5nJyAmJiBzaG93SWNvblwiXHJcblx0XHRcdDpzdHlsZT1cInt3aWR0aDppY29uU2l6ZSsncHgnLGhlaWdodDppY29uU2l6ZSsncHgnfVwiXHJcblx0XHRcdGNsYXNzPVwidW5pLWxvYWQtbW9yZV9faW1nIHVuaS1sb2FkLW1vcmVfX2ltZy0tYW5kcm9pZC1INVwiPlxyXG5cdFx0XHQ8Y2lyY2xlIGN4PVwiNTBcIiBjeT1cIjUwXCIgcj1cIjIwXCIgZmlsbD1cIm5vbmVcIiA6c3R5bGU9XCJ7Y29sb3I6Y29sb3J9XCIgOnN0cm9rZS13aWR0aD1cIjNcIj48L2NpcmNsZT5cclxuXHRcdDwvc3ZnPlxyXG5cdFx0PCEtLSAjZW5kaWYgLS0+XHJcblx0XHQ8IS0tICNpZm5kZWYgQVBQLU5WVUUgfHwgSDUgLS0+XHJcblx0XHQ8dmlld1xyXG5cdFx0XHR2LWlmPVwiIXdlYnZpZXdIaWRlICYmIChpY29uVHlwZT09PSdjaXJjbGUnIHx8IGljb25UeXBlPT09J2F1dG8nICYmIHBsYXRmb3JtID09PSAnYW5kcm9pZCcpICYmIHN0YXR1cyA9PT0gJ2xvYWRpbmcnICYmIHNob3dJY29uXCJcclxuXHRcdFx0OnN0eWxlPVwie3dpZHRoOmljb25TaXplKydweCcsaGVpZ2h0Omljb25TaXplKydweCd9XCJcclxuXHRcdFx0Y2xhc3M9XCJ1bmktbG9hZC1tb3JlX19pbWcgdW5pLWxvYWQtbW9yZV9faW1nLS1hbmRyb2lkLU1QXCI+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwidW5pLWxvYWQtbW9yZV9faW1nLWljb25cIiA6c3R5bGU9XCJ7Ym9yZGVyVG9wQ29sb3I6Y29sb3IsYm9yZGVyVG9wV2lkdGg6aWNvblNpemUvMTJ9XCI+PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInVuaS1sb2FkLW1vcmVfX2ltZy1pY29uXCIgOnN0eWxlPVwie2JvcmRlclRvcENvbG9yOmNvbG9yLGJvcmRlclRvcFdpZHRoOmljb25TaXplLzEyfVwiPjwvdmlldz5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktbG9hZC1tb3JlX19pbWctaWNvblwiIDpzdHlsZT1cIntib3JkZXJUb3BDb2xvcjpjb2xvcixib3JkZXJUb3BXaWR0aDppY29uU2l6ZS8xMn1cIj48L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8IS0tICNlbmRpZiAtLT5cclxuXHRcdDwhLS0gI2lmbmRlZiBBUFAtTlZVRSAtLT5cclxuXHRcdDx2aWV3IHYtZWxzZS1pZj1cIiF3ZWJ2aWV3SGlkZSAmJiBzdGF0dXMgPT09ICdsb2FkaW5nJyAmJiBzaG93SWNvblwiXHJcblx0XHRcdDpzdHlsZT1cInt3aWR0aDppY29uU2l6ZSsncHgnLGhlaWdodDppY29uU2l6ZSsncHgnfVwiIGNsYXNzPVwidW5pLWxvYWQtbW9yZV9faW1nIHVuaS1sb2FkLW1vcmVfX2ltZy0taW9zLUg1XCI+XHJcblx0XHRcdDxpbWFnZSA6c3JjPVwiaW1nQmFzZTY0XCIgbW9kZT1cIndpZHRoRml4XCI+PC9pbWFnZT5cclxuXHRcdDwvdmlldz5cclxuXHRcdDwhLS0gI2VuZGlmIC0tPlxyXG5cdFx0PHRleHQgdi1pZj1cInNob3dUZXh0XCIgY2xhc3M9XCJ1bmktbG9hZC1tb3JlX190ZXh0XCJcclxuXHRcdFx0OnN0eWxlPVwie2NvbG9yOiBjb2xvcn1cIj57eyBzdGF0dXMgPT09ICdtb3JlJyA/IGNvbnRlbnRkb3duVGV4dCA6IHN0YXR1cyA9PT0gJ2xvYWRpbmcnID8gY29udGVudHJlZnJlc2hUZXh0IDogY29udGVudG5vbW9yZVRleHQgfX08L3RleHQ+XHJcblx0PC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuXHRsZXQgcGxhdGZvcm1cclxuXHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdHBsYXRmb3JtID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKCkucGxhdGZvcm1cclxuXHR9LCAxNilcclxuXHJcblx0aW1wb3J0IHtcclxuXHRcdGluaXRWdWVJMThuXHJcblx0fSBmcm9tICdAZGNsb3VkaW8vdW5pLWkxOG4nXHJcblx0aW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4vaTE4bi9pbmRleC5qcydcclxuXHRjb25zdCB7XHJcblx0XHR0XHJcblx0fSA9IGluaXRWdWVJMThuKG1lc3NhZ2VzKVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkTW9yZSDliqDovb3mm7TlpJpcclxuXHQgKiBAZGVzY3JpcHRpb24g55So5LqO5YiX6KGo5Lit77yM5YGa5rua5Yqo5Yqg6L295L2/55So77yM5bGV56S6IGxvYWRpbmcg55qE5ZCE56eN54q25oCBXHJcblx0ICogQHR1dG9yaWFsIGh0dHBzOi8vZXh0LmRjbG91ZC5uZXQuY24vcGx1Z2luP2lkPTI5XHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHN0YXR1cyA9IFttb3JlfGxvYWRpbmd8bm9Nb3JlXSBsb2FkaW5nIOeahOeKtuaAgVxyXG5cdCAqIFx0QHZhbHVlIG1vcmUgbG9hZGluZ+WJjVxyXG5cdCAqIFx0QHZhbHVlIGxvYWRpbmcgbG9hZGluZ+S4rVxyXG5cdCAqIFx0QHZhbHVlIG5vTW9yZSDmsqHmnInmm7TlpJrkuoZcclxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gaWNvblNpemUg5oyH5a6a5Zu+5qCH5aSn5bCPXHJcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBpY29uU2l6ZSA9IFt0cnVlfGZhbHNlXSDmmK/lkKbmmL7npLogbG9hZGluZyDlm77moIdcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gaWNvblR5cGUgPSBbc25vd3xjaXJjbGV8YXV0b10g5oyH5a6a5Zu+5qCH5qC35byPXHJcblx0ICogXHRAdmFsdWUgc25vdyBpb3Ppm6roirHliqDovb3moLflvI9cclxuXHQgKiBcdEB2YWx1ZSBjaXJjbGUg5a6J5Y2T5ZSk6YaS5Yqg6L295qC35byPXHJcblx0ICogXHRAdmFsdWUgYXV0byDmoLnmja7lubPlj7Doh6rliqjpgInmi6nliqDovb3moLflvI9cclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gY29sb3Ig5Zu+5qCH5ZKM5paH5a2X6aKc6ImyXHJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNvbnRlbnRUZXh0IOWQhOeKtuaAgeaWh+Wtl+ivtOaYju+8jOWAvOS4uu+8mntjb250ZW50ZG93bjogXCLkuIrmi4nmmL7npLrmm7TlpJpcIixjb250ZW50cmVmcmVzaDogXCLmraPlnKjliqDovb0uLi5cIixjb250ZW50bm9tb3JlOiBcIuayoeacieabtOWkmuaVsOaNruS6hlwifVxyXG5cdCAqIEBldmVudCB7RnVuY3Rpb259IGNsaWNrTG9hZE1vcmUg54K55Ye75Yqg6L295pu05aSa5pe26Kem5Y+RXHJcblx0ICovXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0bmFtZTogJ1VuaUxvYWRNb3JlJyxcclxuXHRcdGVtaXRzOiBbJ2NsaWNrTG9hZE1vcmUnXSxcclxuXHRcdHByb3BzOiB7XHJcblx0XHRcdHN0YXR1czoge1xyXG5cdFx0XHRcdC8vIOS4iuaLieeahOeKtuaAge+8mm1vcmUtbG9hZGluZ+WJje+8m2xvYWRpbmctbG9hZGluZ+S4re+8m25vTW9yZS3msqHmnInmm7TlpJrkuoZcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJ21vcmUnXHJcblx0XHRcdH0sXHJcblx0XHRcdHNob3dJY29uOiB7XHJcblx0XHRcdFx0dHlwZTogQm9vbGVhbixcclxuXHRcdFx0XHRkZWZhdWx0OiB0cnVlXHJcblx0XHRcdH0sXHJcblx0XHRcdGljb25UeXBlOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICdhdXRvJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpY29uU2l6ZToge1xyXG5cdFx0XHRcdHR5cGU6IE51bWJlcixcclxuXHRcdFx0XHRkZWZhdWx0OiAyNFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2xvcjoge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAnIzc3Nzc3NydcclxuXHRcdFx0fSxcclxuXHRcdFx0Y29udGVudFRleHQ6IHtcclxuXHRcdFx0XHR0eXBlOiBPYmplY3QsXHJcblx0XHRcdFx0ZGVmYXVsdCAoKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRjb250ZW50ZG93bjogJycsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnRyZWZyZXNoOiAnJyxcclxuXHRcdFx0XHRcdFx0Y29udGVudG5vbW9yZTogJydcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXG5cdFx0XHRzaG93VGV4dDoge1xuXHRcdFx0XHR0eXBlOiBCb29sZWFuLFxuXHRcdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0ZGF0YSgpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR3ZWJ2aWV3SGlkZTogZmFsc2UsXHJcblx0XHRcdFx0cGxhdGZvcm06IHBsYXRmb3JtLFxyXG5cdFx0XHRcdGltZ0Jhc2U2NDogJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRUFBQUFCQUNBWUFBQUNxYVhIZUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNeTFqTURFeElEWTJMakUwTlRZMk1Td2dNakF4TWk4d01pOHdOaTB4TkRvMU5qb3lOeUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTmlBb1YybHVaRzkzY3lraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlF6bEJNelUzT1RsRU9VTTBNVEZGT1VJME5UWkRORVJCUVVSQlF6STRSa1VpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UXpsQk16VTNPVUZFT1VNME1URkZPVUkwTlRaRE5FUkJRVVJCUXpJNFJrVWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBET1VFek5UYzVOMFE1UXpReE1VVTVRalExTmtNMFJFRkJSRUZETWpoR1JTSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERPVUV6TlRjNU9FUTVRelF4TVVVNVFqUTFOa00wUkVGQlJFRkRNamhHUlNJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1B0K0FMU3dBQUE2Q1NVUkJWSGphMUZzTGtGWlZIYjk4TE0rRjViSEw4a2hBMWlTZWl5UUJDUk0rWUdxS1VubkpURExHSTBCR1psS0RJVTJNTWdsVWlEQXBFWnZTc1puUXRCUkp0S3dRTktRTUZZZVJEUjEwV09MZDhsallYZGgrdjh2NWZSM09kKzc5N3QxZG5Pbk8vT2ZjZTc3eitKLy8rYi9QK1pxdFhiczJzSjlNSmhOVVYxY0hKMDZjQ0pvM2J4N0VQYzJhTmN2cHk3cFdyVm9GKy9mdkR5b3FLb0kyYmRvRTlmWDFGN1RqTjhhK0VYQm4vZmtmdnc5NDJUZit3WU1IZzltelp3Zmp4bzBMRGh3NEVQYTF4Mk1iRncvZk9HZlBuZzFxYTJ0emNDa0lMc0xEeWRxMmJSc3VucE9UTU03VEQvVy90WkRaaFBkZUtEK3lHeEhoZHUzYUJWMjdkZzNPbkRsek1WQU5NaGVMQU8zYnR3OEtDd3VEbXBvYVg1T3hiZ1VJTUVxN0s4SWNQbnc0S0NzckMvcjM3eDhjUDM3OC80Y0FYQUIzdnFTa0pNdWlEaFRrdytYY3VYTmhPV2JNbUtCbHk1WWhVVDh4QXJoeUZ2UDBCZndSc0F1d3hKWkpzbS9uenAyRFRwMDZoZS9PVStjWjY0SzZvMGVQQmtPSERnMkdEeDhlNmdFYko1US9OSE51QUpRMWhnQmVIVURsUjduVlRrWThyUUF2QWk0ejM0dlIvbVBzMUZvUnNhQ2dJSlRoSTBlT0JDMWF0RWlGR0dWKzVNaVJvUzQ1ZWZKa3FGakpGWFYxZFF1QTAxMm0yV2N3VHc5OGZ5NkNxQmRzYWlJTzRDU2NyR1BIanZrNG9kaGF2UHF1UnRGV1hFQzI1VmdrUkVLT0NoL3FEU3Erdm4zN2h0ekQvbVpUT21PYzVVN3pLekJQRWVkeWdXc2hjRHlXdnMzMGlnQWJVKzZveU1nSkJDRmh3UUUwZmNjeE42MEF5OWllYmJqb0RoMDZoTW93alF4VDRmWHExU3NrQXJtSFpwa0Fydml4cC9rV3pIZE1lQXJFeFNKRWFpWElqalJqUko0RGFBR1dwaWJMelhOM0ZtMXZBNXRlQmdoM2oxUnYzYnAxWWdLd1BkbWYycDl6Y3lOWVlnUEtNZlkwVDVmNW5OWWR3MTU4bko4UWF3VzRDTEt3aU9CU0VnTy9ob2syZUJ5ZFIrM2RZSCtQTHhBNUo4VnYwS0JCd2VuVHAwUDJKV0F4Nit5RkVCZnM4bE1ZK3kwU1dNQk5JOUU0VGhLaTU4VktUZzNGUVpTMVJRRjFjejI3ZUMwUUhNdSszRTBTa1Vvd2poVnQ1VmRhV2hwMDc5NDlaSHYyUWQxRWpEWE0yY2xhMU0wbmwzR3hBczNKOXlSRXp5VGRGVktWRk9hRTlxUkE4R00wV2ViUnVvOUpHWktBN012MlNlUy9aOCtlb1E5QkFyTWZGckxHbzZqdnhiaEhiSlpuS1gyUnp6MU83UWhKSjlDczJaTWFXSXlxL3poZGVxUE5mSW9IZDU4Y2xJUUQrSlNYbDRkS2x5SUF1QmRWWFp3RlZXS3NwU1NveEUrK2g4eDRrM3VDbkVoRTRJNUt3UmlGV0dPVTBRV0tpQ1lMYmRvUk1SS0F1MmtROXZrZkxVNmRPaFgwNk5FamxIK3lNUlpTaW5udXlXbllvc1Zjamk4Q0VBLzZDZzJKRitJSVVCcW5HS1VUQ053dHdCTjRmODlSaUsxUjk2REVnTzJvME5EbXRFZHZWRmRWVllWK1AzVUFQVUVzNkdGd1YzUEhtWGtENHZoNzRpREZKeXNWSS9NbGFRaHdLZUJOVExZWDVWdUE4VDQvZ1p4QTRNUkdGeERCNlI3T21ZUGZ5eWtHUkpieWllK1huR1luUUlDL2NvSDkrdlVMaVlyeHJrTDlaQTkrMHlrYUhJZkVwTTdnZThUaUoyQ3NIWXd5TWZhZkFGMXlDR0JIWUliQ1ZEakRqS3Q3QmVCNTFEK0xnUWE2T2tHN0lEWUVFdHZRN2xuWExLTHRMZEx1SkJwRTRnUFVYY1cyK1BrWndPZXgrNGNHRGh3WURCa3lSTDcvSEZjRXdVR1BvLzh1V1JVcFluZnhHSGNvOEhrZXdMSEx5WW1BYXdBUHVJRlp4aE9wRGZKUThnYlV2NDF5T1JBcHRNV0JOcjZvcU1oV2lyZDUrdStpSG1CYjJuaGpEVjdIV0JOUVRnSzh5MTFsNU5ldFd6YzVVTHNjQXRTajduYk5JMHNraFdlVVpDYzBXNG55SC9qTzRWejB1MUllWWhiazRBaXdNNnRqeElXQnlIc29aOXFjSUJQSmQveStEd1BmQkVTT21DYS9RRjNXaVpIdWNMbEVEcE54Y05obWhlRU9QZ2RRTng2L1ZaRlF6Rlo1VE4wOEFIWFF0MklpM0VkeUZ1VXNQdFRjR1BoVzVpTWlDTkVMdnorR2RuOWh1RzRIVUphVy93M2cwd3hWMFhhRzdhckcyV2VLaVVXWU00WTdHTzVlenNoVEFSYmJXR3cvRHZYa3BwL2l2VnZFMEpWb014TjRycEd6Sk1oRTVQbCt4bEFUc0RJcWlrUDlGOUQyejNoOW5Pa3NFVUZoSytxTzRyY1Brb2FsTVEvSHFKTEl5YjNGM0pkanJDY3cxeVo4am95SkxSNWdDbzU0ZXRsYWc3cUlvZU5oMU4xQlJZajNEVEZKMGVsb3R4UGxWemtHdVlBbUwwVlNKVkdBSkE0MWM0WjZBM0J6VExmbjBIWXdZS0VJNkNVQU16WkVXdkxzSWNRT28xQW1teXlNNzJuSEpDZllzb2dmbEdWNmpFazl2eVFaWFN1cTZ3NGMxNk5zR2NHWmJ3T1ByK0gxUmtPazJMRXpqTmVweFFraWhIU0NRNHluQVlOUngyek1LVjkyQ1FNV3FqOEowQlJFOEVTaHhSRk42WXJmQ1JoQzB4M3IvWm00SWJRQ2NtSm9WMGtNYW1sbGNjUjZGakhxVUM1RjJSL3dTMmRjeW1PbGZBS09TNEttelFiNWNwTkMyTUM3SmhWbjV3alhvSjQ0clloTGg4bjBlWE9Db3JKeGE3UE9qYlNsQ0dWY3pyMzQvUnNBbXJjdm85cyt3R3AzdHpWaG50eGlYaUo0bnZFWWI0RkprZjBPOEhvY0FlUG1MdkN4bkwwQU9ScmFWZWtKazZUWWpEYWJSVlhmUkUybENOMWg2WlFSTjErSW5VYnNDcEt3b0JaSGgwZE9ETjlKQkNVZmZJdFh4RWF2VFFrVXRuZlRWQXBsQ1dMM0pJU3oyOWg0TmpvdG51U3NRS0pDazhkRitrSlI2UkFSanJxRlZtZlBuajNaYks4Y0lKMG1zZDZqZ0hQR3RmVlRROFZMbWx2aDRtY3Q5c29iUm1QaWMwRHlEUVFueC9ObGZZVWd5ejU5K29TY3NIMzc5cEF3WEFCRDMyblRwb1VISVRvRVNlSTVtbmJFL1VxRGR5TGNhZkVCZjJNQ3FnQzdOd3hJYk1SRUpRMGc0RDRzZkp3bkQrQW1ScklJMDVjZk1XSkUrTDExNjliUXIrZmlwMDZkR3A0b0o4M2xtWWQ1d2ovRW1NYTRUYUhpdm80RWVDZ3VZWkJua0I1ZzJhV0E2OU9JRW5VSE9hR3lzaklZTUdCQU1HblNwT0RZc1dQWndDcEZtbTRsTnErNGdTTFFBN2pjWDhEd3RqRXlSQzh3amFiblhFeDlrZlduVEprU0prQW85MHhwSlZWK0ZtY1ZOZVlBRjV6V25nUzRDNE85MU1CeG1BdjhibExFcGJqSTVzejlNVGRBaGNna0NUMVJPOG1aa0FqZmlZcFRFdlN0QVM1M1V3MXZBaVVHZ1ozR3B1UUVZdm9pQnFsSWFuN2tTREhuVHdKUUZOaVB1MCs1VnhDVlloY1pJak5yZFhVRGRwK0VxNUFaM0drZzhRQXlWWlJaSWs0VGw0UUFiRjljWEp4TllaTUF0QW9rZ3M0QnJOeEVwQ3R0ZVhnN0REVE1ES1lOU3VRZEtzbkpCZWs3SHhld3Z4YW9zV3hMWVh0dytjSnAxODIxN3dxbDRhS0NmQk5vRXUwTzVWVStQaGN0SjBZZVhENEM2SlFweXJscFNMVG9qcEdHR041WXdOemlDaGRJWkxrNGx2TGNGSjlqTVgzUWRpSW1ZOWJtR1FVK1RSVUw1Q0hJVFRSbGdGOEQ5b3VEMU1mbUxvRVBsNXhva0l1bVoyY2ZnTXBIdDQ3SVc5TjY0SHNoN3dRWVlqeUl1Z1d1RjVmQ3FZbmNYUmQ1dlBNV3lpenp2aGkvMzIrbnZHMGRaYzl2UjZmWk91MG1kNWUrdUM0MDhGdktTSU9ad1hsR3Z4UHY5NWl6QTJWdHZnMXhLRldBUkkrdk1YNjZIVWhwUVFiNjQzdVcxYlNqdVRXeXcyU0J2RHJCdmpGaWMxZUdHbHo1ZXNxM2tvOXVTSWxCUnFQdUZjQ3Y4RjRXSWNOMTJuVmFCZDBTYVl3STZQRERJbVIxMUprcWdIY1BtUXNzanhJbjZiVXNoeWdERkpVVHhQTXBIaytqZmpQZ3VwZ2RuWVYyUi9nN3hTanRwYWg4UkpCZXdod2YwZ0dLNlhJOTJ1NHdYRkVVNDBhZko0RE40aDVMY0FkKzQwSEkzSmdKZWN1VDBjMDYyVzBpMmhRSlVUY3hhbjMvQ01XMVBGMks2YmJBK0RhejR4UnMxRDNCcjFDbTBPaWhLQ3Fpelc3OC9uWEFGL0c1VFhyRWNWemFOTUg2Q3lNc3dxc0FIcUR5RExFeW91OGx3T1huS0Y4RGpJNktqVjNLek1CaVhrREg4aWovSDIxNEo1QTU5NmVrclozRjB6WGxXZUw3K1A1ZVVyTm8zL1F3QzE1dXh0aHV6aWR5N0R6S1J3RURhQVZpaURnS2JUYno3Q0puem8wYk43cElmSWlpZDhTdVB3bjI1bzNRQ21wbnlqbFpreXhQUDhFb21DSnpyR2I3R0pNeDd0TnNxNE1UMnhNVVlhaUVyWk9sdVR6S3NuejNnd0NlQ1p5VlJaSmZZcGxORW9rRWp3clB0eGx4amVZQWsrRjFGNzRWQXpQeFFSTllZZHRwT1V2V3M4SjFzR2hCSk1Oc2I3aWdOOHBsSnMxZVNtTEloTEtFNHJ2YUNYMjdnT2hMcExPc0l6Sjdxbi9pK3daemN2U09aMjMvZHU4VFpqd1Y4ekhJWG9QNFIzaWZCeGlGejFkY1ZwYTNhUG50UEUrYzZUbUlXRTlFdGNNbUFjUGRXQWhZaEFYeGNMT1FpOUwxV2hEMVNjOHAxZDJvTDdYR2lSS3A4RjRBMmk4Sy9uZkkreS9nc1RESi9ZQy84K0FENVVoMDRLSGlHbCtjSUZQbkJERHJQTWp3UkdrTFh5eE80VkdiZlFXbkRIMnYwYlZXRTNDOVFPWGxlcGJnakVmSUpRSTZYREczejVhaEQ5Y3cycFM3OGlwQjg1d3lTY05UdnNWemx6emhMOC9qUnJubVZqZkZKSy9tM200bmo5dmJnUVRndVQ4WFpUanNtNjcyUjV1SktFYVFtQkkvYzU4Z3l1czhaRGFnTHBFVlNKQkl5SHA0am4rK3hxUFY3MU9nUWdKWUVXT3RaL2hheFJ0S21XT0J1OHhkQkxmdFdsdHNZODR6RTZXSUV5L2VJT1dMK0JhYXlNeCtLSHRMN0VBa3FkTkRMaUVYbUVNVUhuaWVkdEpxZzlIbVp0ZnZ0MjZ2TmkwQmRHM0Z0M2c4Wk9mN1BBdTU5VHh0eml2TE5JZWt5aSt3RDFpOEN1VWlEOUZYQWE4QysveFMzSlBtWm5vbXljN0grZmI0L1NlMGJrNDFGZWw2MjFyNGNnVnhicTkxVjRqVnF3QjdIVGUyTTdqZ0IrUVdIYXZaa0RSUG1aY0FTb1pFbUJ4Nmk3NWJHalBjTWRMNC9WS0dGQUdXWmtHelBHMFhBYmRMOUE4MUc1TE9tVW5DOWhIS0plTzdkY1VNamJsU2wxMjg2N0VsRlR0YUdsMjB4dnZMR1BkVnovOFRWdVU3eTB4MVBHN3Z0TmcyNG96OVVvL1o0MTIrK1ZGV0k3RmNvZzl0dTlMbTZndlJtSVB2OXgxeG1RQXU2UkRrWHRiT3RsR0VtcGdENU52bnljMGRjdjBFRTZjZmRpMUhtaE1mOXdERjNrM2d0UnZFZWRoeGpwZ2ZxUGI5UFU5aUVKSG55T1VBN2JRVVhoNmtxL0Q3bDJpVGpXdjdYT0Q1MzBCRHI4aklydXMrc3JYanQ0TXp1bUpNSHVUc0JhNjNZS0UxK1JSNWxCakVpa0NDbldLV2lIZHpPZ0tPK25SSUJBRjg4emEvSUZtSjNlTVpvdjRDWXhHQmFiY3BHTDhFWXgrU2VNWEplUndITnNWL2grdmR4ZXVoRXBOM1p5Tlk3OEdtMmZrbkp4VkdoeWppeFBpUXZWa056VDFlbEQ5UHkvYVRBTDY0SGI5dmNZbUM5emZkWGRUL0MxTGVHYmc0cm5CYUFpaERGSkgxMlc1dWxmTkNOZS94VHNQM2JwOGlrekpzNUJGKzVQTmZBUVlBUGFzZVRkc0VjYVlBQUFBQVNVVk9SSzVDWUlJPSdcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGNvbXB1dGVkOiB7XG5cdFx0XHRpY29uU25vd1dpZHRoKCkge1xyXG5cdFx0XHRcdHJldHVybiAoTWF0aC5mbG9vcih0aGlzLmljb25TaXplIC8gMjQpIHx8IDEpICogMlxyXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudGRvd25UZXh0KCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnRUZXh0LmNvbnRlbnRkb3duIHx8IHQoXCJ1bmktbG9hZC1tb3JlLmNvbnRlbnRkb3duXCIpXHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbnRlbnRyZWZyZXNoVGV4dCgpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50VGV4dC5jb250ZW50cmVmcmVzaCB8fCB0KFwidW5pLWxvYWQtbW9yZS5jb250ZW50cmVmcmVzaFwiKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb250ZW50bm9tb3JlVGV4dCgpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50VGV4dC5jb250ZW50bm9tb3JlIHx8IHQoXCJ1bmktbG9hZC1tb3JlLmNvbnRlbnRub21vcmVcIilcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdG1vdW50ZWQoKSB7XHJcblx0XHRcdC8vICNpZmRlZiBBUFAtUExVU1xyXG5cdFx0XHR2YXIgcGFnZXMgPSBnZXRDdXJyZW50UGFnZXMoKTtcclxuXHRcdFx0dmFyIHBhZ2UgPSBwYWdlc1twYWdlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0dmFyIGN1cnJlbnRXZWJ2aWV3ID0gcGFnZS4kZ2V0QXBwV2VidmlldygpO1xyXG5cdFx0XHRjdXJyZW50V2Vidmlldy5hZGRFdmVudExpc3RlbmVyKCdoaWRlJywgKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMud2Vidmlld0hpZGUgPSB0cnVlXHJcblx0XHRcdH0pXHJcblx0XHRcdGN1cnJlbnRXZWJ2aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3Nob3cnLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy53ZWJ2aWV3SGlkZSA9IGZhbHNlXHJcblx0XHRcdH0pXHJcblx0XHRcdC8vICNlbmRpZlxyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0b25DbGljaygpIHtcclxuXHRcdFx0XHR0aGlzLiRlbWl0KCdjbGlja0xvYWRNb3JlJywge1xyXG5cdFx0XHRcdFx0ZGV0YWlsOiB7XHJcblx0XHRcdFx0XHRcdHN0YXR1czogdGhpcy5zdGF0dXMsXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiA+XHJcblx0LnVuaS1sb2FkLW1vcmUge1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0ZmxleC1kaXJlY3Rpb246IHJvdztcclxuXHRcdGhlaWdodDogNDBweDtcclxuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHR9XHJcblxyXG5cdC51bmktbG9hZC1tb3JlX190ZXh0IHtcclxuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRtYXJnaW4tbGVmdDogOHB4O1xyXG5cdH1cclxuXHJcblx0LnVuaS1sb2FkLW1vcmVfX2ltZyB7XHJcblx0XHR3aWR0aDogMjRweDtcclxuXHRcdGhlaWdodDogMjRweDtcclxuXHRcdC8vIG1hcmdpbi1yaWdodDogOHB4O1xyXG5cdH1cclxuXHJcblx0LnVuaS1sb2FkLW1vcmVfX2ltZy0tbnZ1ZSB7XHJcblx0XHRjb2xvcjogIzY2NjY2NjtcclxuXHR9XHJcblxyXG5cdC51bmktbG9hZC1tb3JlX19pbWctLWFuZHJvaWQsXHJcblx0LnVuaS1sb2FkLW1vcmVfX2ltZy0taW9zIHtcclxuXHRcdHdpZHRoOiAyNHB4O1xyXG5cdFx0aGVpZ2h0OiAyNHB4O1xyXG5cdFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcblx0fVxyXG5cclxuXHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0LnVuaS1sb2FkLW1vcmVfX2ltZy0tYW5kcm9pZCB7XHJcblx0XHRhbmltYXRpb246IGxvYWRpbmctaW9zIDFzIDBzIGxpbmVhciBpbmZpbml0ZTtcclxuXHR9XHJcblxyXG5cdEBrZXlmcmFtZXMgbG9hZGluZy1hbmRyb2lkIHtcclxuXHRcdDAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0MTAwJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQudW5pLWxvYWQtbW9yZV9faW1nLS1pb3MtSDUge1xyXG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdFx0YW5pbWF0aW9uOiBsb2FkaW5nLWlvcy1INSAxcyAwcyBzdGVwLWVuZCBpbmZpbml0ZTtcclxuXHR9XHJcblxyXG5cdC51bmktbG9hZC1tb3JlX19pbWctLWlvcy1INSBpbWFnZSB7XHJcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdGhlaWdodDogMTAwJTtcclxuXHRcdGxlZnQ6IDA7XHJcblx0XHR0b3A6IDA7XHJcblx0fVxyXG5cclxuXHRAa2V5ZnJhbWVzIGxvYWRpbmctaW9zLUg1IHtcclxuXHRcdDAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0OCUge1xyXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgzMGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0MTYlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoNjBkZWcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdDI0JSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcclxuXHRcdH1cclxuXHJcblx0XHQzMiUge1xyXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgxMjBkZWcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdDQwJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDE1MGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0NDglIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcclxuXHRcdH1cclxuXHJcblx0XHQ1NiUge1xyXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgyMTBkZWcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdDY0JSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDI0MGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0NzMlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcclxuXHRcdH1cclxuXHJcblx0XHQ4MiUge1xyXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgzMDBkZWcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdDkxJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDMzMGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0MTAwJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiAjZW5kaWYgKi9cclxuXHJcblx0LyogI2lmZGVmIEg1ICovXHJcblx0LnVuaS1sb2FkLW1vcmVfX2ltZy0tYW5kcm9pZC1INSB7XHJcblx0XHRhbmltYXRpb246IGxvYWRpbmctYW5kcm9pZC1INS1yb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO1xyXG5cdFx0dHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcclxuXHR9XHJcblxyXG5cdC51bmktbG9hZC1tb3JlX19pbWctLWFuZHJvaWQtSDUgY2lyY2xlIHtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdGFuaW1hdGlvbjogbG9hZGluZy1hbmRyb2lkLUg1LWRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcclxuXHRcdHN0cm9rZTogY3VycmVudENvbG9yO1xyXG5cdFx0c3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xyXG5cdH1cclxuXHJcblx0QGtleWZyYW1lcyBsb2FkaW5nLWFuZHJvaWQtSDUtcm90YXRlIHtcclxuXHRcdDAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0MTAwJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRAa2V5ZnJhbWVzIGxvYWRpbmctYW5kcm9pZC1INS1kYXNoIHtcclxuXHRcdDAlIHtcclxuXHRcdFx0c3Ryb2tlLWRhc2hhcnJheTogMSwgMjAwO1xyXG5cdFx0XHRzdHJva2UtZGFzaG9mZnNldDogMDtcclxuXHRcdH1cclxuXHJcblx0XHQ1MCUge1xyXG5cdFx0XHRzdHJva2UtZGFzaGFycmF5OiA5MCwgMTUwO1xyXG5cdFx0XHRzdHJva2UtZGFzaG9mZnNldDogLTQwO1xyXG5cdFx0fVxyXG5cclxuXHRcdDEwMCUge1xyXG5cdFx0XHRzdHJva2UtZGFzaGFycmF5OiA5MCwgMTUwO1xyXG5cdFx0XHRzdHJva2UtZGFzaG9mZnNldDogLTEyMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qICNlbmRpZiAqL1xyXG5cclxuXHQvKiAjaWZuZGVmIEFQUC1OVlVFIHx8IEg1ICovXHJcblx0LnVuaS1sb2FkLW1vcmVfX2ltZy0tYW5kcm9pZC1NUCB7XHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHR3aWR0aDogMjRweDtcclxuXHRcdGhlaWdodDogMjRweDtcclxuXHRcdHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG5cdFx0YW5pbWF0aW9uOiBsb2FkaW5nLWlvcyAxcyAwcyBlYXNlIGluZmluaXRlO1xyXG5cdH1cclxuXHJcblx0LnVuaS1sb2FkLW1vcmVfX2ltZy0tYW5kcm9pZC1NUCAudW5pLWxvYWQtbW9yZV9faW1nLWljb24ge1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0aGVpZ2h0OiAxMDAlO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNTAlO1xyXG5cdFx0Ym9yZGVyOiBzb2xpZCAycHggdHJhbnNwYXJlbnQ7XHJcblx0XHRib3JkZXItdG9wOiBzb2xpZCAycHggIzc3Nzc3NztcclxuXHRcdHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcclxuXHR9XHJcblxyXG5cdC51bmktbG9hZC1tb3JlX19pbWctLWFuZHJvaWQtTVAgLnVuaS1sb2FkLW1vcmVfX2ltZy1pY29uOm50aC1jaGlsZCgxKSB7XHJcblx0XHRhbmltYXRpb246IGxvYWRpbmctYW5kcm9pZC1NUC0xIDFzIDBzIGxpbmVhciBpbmZpbml0ZTtcclxuXHR9XHJcblxyXG5cdC51bmktbG9hZC1tb3JlX19pbWctLWFuZHJvaWQtTVAgLnVuaS1sb2FkLW1vcmVfX2ltZy1pY29uOm50aC1jaGlsZCgyKSB7XHJcblx0XHRhbmltYXRpb246IGxvYWRpbmctYW5kcm9pZC1NUC0yIDFzIDBzIGxpbmVhciBpbmZpbml0ZTtcclxuXHR9XHJcblxyXG5cdC51bmktbG9hZC1tb3JlX19pbWctLWFuZHJvaWQtTVAgLnVuaS1sb2FkLW1vcmVfX2ltZy1pY29uOm50aC1jaGlsZCgzKSB7XHJcblx0XHRhbmltYXRpb246IGxvYWRpbmctYW5kcm9pZC1NUC0zIDFzIDBzIGxpbmVhciBpbmZpbml0ZTtcclxuXHR9XHJcblxyXG5cdEBrZXlmcmFtZXMgbG9hZGluZy1hbmRyb2lkIHtcclxuXHRcdDAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0MTAwJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRAa2V5ZnJhbWVzIGxvYWRpbmctYW5kcm9pZC1NUC0xIHtcclxuXHRcdDAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0NTAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdDEwMCUge1xyXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0QGtleWZyYW1lcyBsb2FkaW5nLWFuZHJvaWQtTVAtMiB7XHJcblx0XHQwJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdDUwJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0MTAwJSB7XHJcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRAa2V5ZnJhbWVzIGxvYWRpbmctYW5kcm9pZC1NUC0zIHtcclxuXHRcdDAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0NTAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcclxuXHRcdH1cclxuXHJcblx0XHQxMDAlIHtcclxuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qICNlbmRpZiAqL1xyXG48L3N0eWxlPlxyXG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbG9jYWxkYXRhOiB7XG4gICAgICB0eXBlOiBbQXJyYXksIE9iamVjdF0sXG4gICAgICBkZWZhdWx0ICgpIHtcbiAgICAgICAgcmV0dXJuIFtdXG4gICAgICB9XG4gICAgfSxcbiAgICBzcGFjZUluZm86IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQgKCkge1xuICAgICAgICByZXR1cm4ge31cbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbGxlY3Rpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBhY3Rpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBmaWVsZDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIG9yZGVyYnk6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICB3aGVyZToge1xuICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBwYWdlRGF0YToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2FkZCdcbiAgICB9LFxuICAgIHBhZ2VDdXJyZW50OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfSxcbiAgICBwYWdlU2l6ZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNTAwXG4gICAgfSxcbiAgICBnZXRjb3VudDoge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgZ2V0b25lOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBnZXR0cmVlOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBtYW51YWw6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgdmFsdWU6IHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCAoKSB7XG4gICAgICAgIHJldHVybiBbXVxuICAgICAgfVxuICAgIH0sXG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0ICgpIHtcbiAgICAgICAgcmV0dXJuIFtdXG4gICAgICB9XG4gICAgfSxcbiAgICBwcmVsb2FkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHN0ZXBTZWFyaDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHNlbGZGaWVsZDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIHBhcmVudEZpZWxkOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgbXVsdGlwbGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgbWFwOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0ICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZXh0OiBcInRleHRcIixcbiAgICAgICAgICB2YWx1ZTogXCJ2YWx1ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3JNZXNzYWdlOiAnJyxcbiAgICAgIGxvYWRNb3JlOiB7XG4gICAgICAgIGNvbnRlbnRkb3duOiAnJyxcbiAgICAgICAgY29udGVudHJlZnJlc2g6ICcnLFxuICAgICAgICBjb250ZW50bm9tb3JlOiAnJ1xuICAgICAgfSxcbiAgICAgIGRhdGFMaXN0OiBbXSxcbiAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgIHNlbGVjdGVkSW5kZXg6IDAsXG4gICAgICBwYWdlOiB7XG4gICAgICAgIGN1cnJlbnQ6IHRoaXMucGFnZUN1cnJlbnQsXG4gICAgICAgIHNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICAgIGNvdW50OiAwXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGlzTG9jYWxEYXRhKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgIH0sXG4gICAgaXNDbG91ZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLmxlbmd0aCA+IDA7XG4gICAgfSxcbiAgICBpc0Nsb3VkRGF0YUxpc3QoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuaXNDbG91ZERhdGEgJiYgKCF0aGlzLnBhcmVudEZpZWxkICYmICF0aGlzLnNlbGZGaWVsZCkpO1xuICAgIH0sXG4gICAgaXNDbG91ZERhdGFUcmVlKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmlzQ2xvdWREYXRhICYmIHRoaXMucGFyZW50RmllbGQgJiYgdGhpcy5zZWxmRmllbGQpO1xuICAgIH0sXG4gICAgZGF0YVZhbHVlKCkge1xuICAgICAgbGV0IGlzTW9kZWxWYWx1ZSA9IEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbFZhbHVlKSA/ICh0aGlzLm1vZGVsVmFsdWUubGVuZ3RoID4gMCkgOiAodGhpcy5tb2RlbFZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiBpc01vZGVsVmFsdWUgPyB0aGlzLm1vZGVsVmFsdWUgOiB0aGlzLnZhbHVlO1xuICAgIH0sXG4gICAgaGFzVmFsdWUoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuICh0aGlzLmRhdGFWYWx1ZSAhPSBudWxsKSAmJiAodGhpcy5kYXRhVmFsdWUubGVuZ3RoID4gMClcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy4kd2F0Y2goKCkgPT4ge1xuICAgICAgdmFyIGFsID0gW107XG4gICAgICBbJ3BhZ2VDdXJyZW50JyxcbiAgICAgICAgJ3BhZ2VTaXplJyxcbiAgICAgICAgJ3NwYWNlSW5mbycsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICdtb2RlbFZhbHVlJyxcbiAgICAgICAgJ2xvY2FsZGF0YScsXG4gICAgICAgICdjb2xsZWN0aW9uJyxcbiAgICAgICAgJ2FjdGlvbicsXG4gICAgICAgICdmaWVsZCcsXG4gICAgICAgICdvcmRlcmJ5JyxcbiAgICAgICAgJ3doZXJlJyxcbiAgICAgICAgJ2dldG9udCcsXG4gICAgICAgICdnZXRjb3VudCcsXG4gICAgICAgICdnZXR0cmVlJ1xuICAgICAgXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGFsLnB1c2godGhpc1trZXldKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWxcbiAgICB9LCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG4gICAgICBsZXQgbmVlZFJlc2V0ID0gZmFsc2VcbiAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG5ld1ZhbHVlW2ldICE9IG9sZFZhbHVlW2ldKSB7XG4gICAgICAgICAgbmVlZFJlc2V0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXdWYWx1ZVswXSAhPSBvbGRWYWx1ZVswXSkge1xuICAgICAgICB0aGlzLnBhZ2UuY3VycmVudCA9IHRoaXMucGFnZUN1cnJlbnRcbiAgICAgIH1cbiAgICAgIHRoaXMucGFnZS5zaXplID0gdGhpcy5wYWdlU2l6ZVxuXG4gICAgICB0aGlzLm9uUHJvcHNDaGFuZ2UoKVxuICAgIH0pXG4gICAgdGhpcy5fdHJlZURhdGEgPSBbXVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb25Qcm9wc0NoYW5nZSgpIHtcbiAgICAgIHRoaXMuX3RyZWVEYXRhID0gW107XG4gICAgfSxcblxuICAgIC8vIOWhq+WFhSBwaWNrdmlldyDmlbDmja5cbiAgICBhc3luYyBsb2FkRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzTG9jYWxEYXRhKSB7XG4gICAgICAgIHRoaXMubG9hZExvY2FsRGF0YSgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ2xvdWREYXRhTGlzdCkge1xuICAgICAgICB0aGlzLmxvYWRDbG91ZERhdGFMaXN0KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDbG91ZERhdGFUcmVlKSB7XG4gICAgICAgIHRoaXMubG9hZENsb3VkRGF0YVRyZWUoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5Yqg6L295pys5Zyw5pWw5o2uXG4gICAgYXN5bmMgbG9hZExvY2FsRGF0YSgpIHtcbiAgICAgIHRoaXMuX3RyZWVEYXRhID0gW107XG4gICAgICB0aGlzLl9leHRyYWN0VHJlZSh0aGlzLmxvY2FsZGF0YSwgdGhpcy5fdHJlZURhdGEpO1xuXG4gICAgICBsZXQgaW5wdXRWYWx1ZSA9IHRoaXMuZGF0YVZhbHVlO1xuICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7XG4gICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlW2lucHV0VmFsdWUubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgaW5wdXRWYWx1ZVt0aGlzLm1hcC52YWx1ZV0pIHtcbiAgICAgICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZVt0aGlzLm1hcC52YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuX2ZpbmROb2RlUGF0aChpbnB1dFZhbHVlLCB0aGlzLmxvY2FsZGF0YSk7XG4gICAgfSxcblxuICAgIC8vIOWKoOi9vSBDbG91ZCDmlbDmja4gKOWNleWIlylcbiAgICBhc3luYyBsb2FkQ2xvdWREYXRhTGlzdCgpIHtcbiAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDb21tYW5kKCk7XG4gICAgICAgIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZS5yZXN1bHQuZGF0YTtcblxuICAgICAgICB0aGlzLl90cmVlRGF0YSA9IHJlc3BvbnNlRGF0YTtcblxuICAgICAgICB0aGlzLl91cGRhdGVCaW5kRGF0YSgpO1xuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZCgpO1xuXG4gICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDliqDovb0gQ2xvdWQg5pWw5o2uICjmoJHlvaIpXG4gICAgYXN5bmMgbG9hZENsb3VkRGF0YVRyZWUoKSB7XG4gICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBjb21tYW5kT3B0aW9ucyA9IHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5fY2xvdWREYXRhUG9zdEZpZWxkKCksXG4gICAgICAgICAgd2hlcmU6IHRoaXMuX2Nsb3VkRGF0YVRyZWVXaGVyZSgpXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmdldHRyZWUpIHtcbiAgICAgICAgICBjb21tYW5kT3B0aW9ucy5zdGFydHdpdGggPSBgJHt0aGlzLnNlbGZGaWVsZH09PScke3RoaXMuZGF0YVZhbHVlfSdgO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDb21tYW5kKGNvbW1hbmRPcHRpb25zKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLnJlc3VsdC5kYXRhO1xuXG4gICAgICAgIHRoaXMuX3RyZWVEYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICB0aGlzLl91cGRhdGVCaW5kRGF0YSgpO1xuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZCgpO1xuXG4gICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDliqDovb0gQ2xvdWQg5pWw5o2uICjoioLngrkpXG4gICAgYXN5bmMgbG9hZENsb3VkRGF0YU5vZGUoY2FsbGJhY2spIHtcbiAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGNvbW1hbmRPcHRpb25zID0ge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLl9jbG91ZERhdGFQb3N0RmllbGQoKSxcbiAgICAgICAgICB3aGVyZTogdGhpcy5fY2xvdWREYXRhTm9kZVdoZXJlKClcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENvbW1hbmQoY29tbWFuZE9wdGlvbnMpO1xuICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UucmVzdWx0LmRhdGE7XG5cbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2VEYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWbnuaYviBDbG91ZCDmlbDmja5cbiAgICBnZXRDbG91ZERhdGFWYWx1ZSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ2xvdWREYXRhTGlzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDbG91ZERhdGFMaXN0VmFsdWUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaXNDbG91ZERhdGFUcmVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsb3VkRGF0YVRyZWVWYWx1ZSgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDlm57mmL4gQ2xvdWQg5pWw5o2uICjljZXliJcpXG4gICAgZ2V0Q2xvdWREYXRhTGlzdFZhbHVlKCkge1xuICAgICAgLy8g5qC55o2uIGZpZWxkJ3MgYXMgdmFsdWXmoIfor4bljLnphY0gd2hlcmUg5p2h5Lu2XG4gICAgICBsZXQgd2hlcmUgPSBbXTtcbiAgICAgIGxldCB3aGVyZUZpZWxkID0gdGhpcy5fZ2V0Rm9yZWlnbktleUJ5RmllbGQoKTtcbiAgICAgIGlmICh3aGVyZUZpZWxkKSB7XG4gICAgICAgIHdoZXJlLnB1c2goYCR7d2hlcmVGaWVsZH0gPT0gJyR7dGhpcy5kYXRhVmFsdWV9J2ApXG4gICAgICB9XG5cbiAgICAgIHdoZXJlID0gd2hlcmUuam9pbignIHx8ICcpO1xuXG4gICAgICBpZiAodGhpcy53aGVyZSkge1xuICAgICAgICB3aGVyZSA9IGAoJHt0aGlzLndoZXJlfSkgJiYgKCR7d2hlcmV9KWBcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWFuZCh7XG4gICAgICAgIGZpZWxkOiB0aGlzLl9jbG91ZERhdGFQb3N0RmllbGQoKSxcbiAgICAgICAgd2hlcmVcbiAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gcmVzLnJlc3VsdC5kYXRhO1xuICAgICAgICByZXR1cm4gcmVzLnJlc3VsdC5kYXRhO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIOWbnuaYviBDbG91ZCDmlbDmja4gKOagkeW9oilcbiAgICBnZXRDbG91ZERhdGFUcmVlVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21tYW5kKHtcbiAgICAgICAgZmllbGQ6IHRoaXMuX2Nsb3VkRGF0YVBvc3RGaWVsZCgpLFxuICAgICAgICBnZXRUcmVlUGF0aDoge1xuICAgICAgICAgIHN0YXJ0V2l0aDogYCR7dGhpcy5zZWxmRmllbGR9PT0nJHt0aGlzLmRhdGFWYWx1ZX0nYFxuICAgICAgICB9XG4gICAgICB9KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgbGV0IHRyZWVQYXRoID0gW107XG4gICAgICAgIHRoaXMuX2V4dHJhY3RUcmVlUGF0aChyZXMucmVzdWx0LmRhdGEsIHRyZWVQYXRoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRyZWVQYXRoO1xuICAgICAgICByZXR1cm4gdHJlZVBhdGg7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZ2V0Q29tbWFuZChvcHRpb25zID0ge30pIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgICBsZXQgZGIgPSB1bmlDbG91ZC5kYXRhYmFzZSh0aGlzLnNwYWNlSW5mbylcblxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5hY3Rpb24gfHwgdGhpcy5hY3Rpb25cbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgZGIgPSBkYi5hY3Rpb24oYWN0aW9uKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xsZWN0aW9uID0gb3B0aW9ucy5jb2xsZWN0aW9uIHx8IHRoaXMuY29sbGVjdGlvblxuICAgICAgZGIgPSBkYi5jb2xsZWN0aW9uKGNvbGxlY3Rpb24pXG5cbiAgICAgIGNvbnN0IHdoZXJlID0gb3B0aW9ucy53aGVyZSB8fCB0aGlzLndoZXJlXG4gICAgICBpZiAoISghd2hlcmUgfHwgIU9iamVjdC5rZXlzKHdoZXJlKS5sZW5ndGgpKSB7XG4gICAgICAgIGRiID0gZGIud2hlcmUod2hlcmUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpZWxkID0gb3B0aW9ucy5maWVsZCB8fCB0aGlzLmZpZWxkXG4gICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgZGIgPSBkYi5maWVsZChmaWVsZClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3JkZXJieSA9IG9wdGlvbnMub3JkZXJieSB8fCB0aGlzLm9yZGVyYnlcbiAgICAgIGlmIChvcmRlcmJ5KSB7XG4gICAgICAgIGRiID0gZGIub3JkZXJCeShvcmRlcmJ5KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50ID0gb3B0aW9ucy5wYWdlQ3VycmVudCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5wYWdlQ3VycmVudCA6IHRoaXMucGFnZS5jdXJyZW50XG4gICAgICBjb25zdCBzaXplID0gb3B0aW9ucy5wYWdlU2l6ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5wYWdlU2l6ZSA6IHRoaXMucGFnZS5zaXplXG4gICAgICBjb25zdCBnZXRDb3VudCA9IG9wdGlvbnMuZ2V0Y291bnQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZ2V0Y291bnQgOiB0aGlzLmdldGNvdW50XG4gICAgICBjb25zdCBnZXRUcmVlID0gb3B0aW9ucy5nZXR0cmVlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmdldHRyZWUgOiB0aGlzLmdldHRyZWVcblxuICAgICAgY29uc3QgZ2V0T3B0aW9ucyA9IHtcbiAgICAgICAgZ2V0Q291bnQsXG4gICAgICAgIGdldFRyZWVcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmdldFRyZWVQYXRoKSB7XG4gICAgICAgIGdldE9wdGlvbnMuZ2V0VHJlZVBhdGggPSBvcHRpb25zLmdldFRyZWVQYXRoXG4gICAgICB9XG5cbiAgICAgIGRiID0gZGIuc2tpcChzaXplICogKGN1cnJlbnQgLSAxKSkubGltaXQoc2l6ZSkuZ2V0KGdldE9wdGlvbnMpXG5cbiAgICAgIHJldHVybiBkYlxuICAgIH0sXG5cbiAgICBfY2xvdWREYXRhUG9zdEZpZWxkKCkge1xuICAgICAgbGV0IGZpZWxkcyA9IFt0aGlzLmZpZWxkXTtcbiAgICAgIGlmICh0aGlzLnBhcmVudEZpZWxkKSB7XG4gICAgICAgIGZpZWxkcy5wdXNoKGAke3RoaXMucGFyZW50RmllbGR9IGFzIHBhcmVudF92YWx1ZWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpZWxkcy5qb2luKCcsJyk7XG4gICAgfSxcblxuICAgIF9jbG91ZERhdGFUcmVlV2hlcmUoKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRcbiAgICAgIGxldCBwYXJlbnRGaWVsZCA9IHRoaXMucGFyZW50RmllbGRcbiAgICAgIGlmIChwYXJlbnRGaWVsZCkge1xuICAgICAgICByZXN1bHQucHVzaChgJHtwYXJlbnRGaWVsZH0gPT0gbnVsbCB8fCAke3BhcmVudEZpZWxkfSA9PSBcIlwiYClcbiAgICAgIH1cbiAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICByZXN1bHQucHVzaChgJHtwYXJlbnRGaWVsZH0gPT0gJyR7c2VsZWN0ZWRbaV0udmFsdWV9J2ApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHdoZXJlID0gW11cbiAgICAgIGlmICh0aGlzLndoZXJlKSB7XG4gICAgICAgIHdoZXJlLnB1c2goYCgke3RoaXMud2hlcmV9KWApXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgIHdoZXJlLnB1c2goYCgke3Jlc3VsdC5qb2luKCcgfHwgJyl9KWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aGVyZS5qb2luKCcgJiYgJylcbiAgICB9LFxuXG4gICAgX2Nsb3VkRGF0YU5vZGVXaGVyZSgpIHtcbiAgICAgIGxldCB3aGVyZSA9IFtdXG4gICAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkO1xuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB3aGVyZS5wdXNoKGAke3RoaXMucGFyZW50RmllbGR9ID09ICcke3NlbGVjdGVkW3NlbGVjdGVkLmxlbmd0aCAtIDFdLnZhbHVlfSdgKTtcbiAgICAgIH1cblxuICAgICAgd2hlcmUgPSB3aGVyZS5qb2luKCcgfHwgJyk7XG5cbiAgICAgIGlmICh0aGlzLndoZXJlKSB7XG4gICAgICAgIHJldHVybiBgKCR7dGhpcy53aGVyZX0pICYmICgke3doZXJlfSlgXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aGVyZVxuICAgIH0sXG5cbiAgICBfZ2V0V2hlcmVCeUZvcmVpZ25LZXkoKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgIGxldCB3aGVyZUZpZWxkID0gdGhpcy5fZ2V0Rm9yZWlnbktleUJ5RmllbGQoKTtcbiAgICAgIGlmICh3aGVyZUZpZWxkKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGAke3doZXJlRmllbGR9ID09ICcke3RoaXMuZGF0YVZhbHVlfSdgKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy53aGVyZSkge1xuICAgICAgICByZXR1cm4gYCgke3RoaXMud2hlcmV9KSAmJiAoJHtyZXN1bHQuam9pbignIHx8ICcpfSlgXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQuam9pbignIHx8ICcpXG4gICAgfSxcblxuICAgIF9nZXRGb3JlaWduS2V5QnlGaWVsZCgpIHtcbiAgICAgIGxldCBmaWVsZHMgPSB0aGlzLmZpZWxkLnNwbGl0KCcsJyk7XG4gICAgICBsZXQgd2hlcmVGaWVsZCA9IG51bGw7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGZpZWxkc1tpXS5zcGxpdCgnYXMnKTtcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbXNbMV0udHJpbSgpID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgd2hlcmVGaWVsZCA9IGl0ZW1zWzBdLnRyaW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHdoZXJlRmllbGQ7XG4gICAgfSxcblxuICAgIF91cGRhdGVCaW5kRGF0YShub2RlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGFMaXN0LFxuICAgICAgICBoYXNOb2Rlc1xuICAgICAgfSA9IHRoaXMuX2ZpbHRlckRhdGEodGhpcy5fdHJlZURhdGEsIHRoaXMuc2VsZWN0ZWQpXG5cbiAgICAgIGxldCBpc2xlYWYgPSB0aGlzLl9zdGVwU2VhcmggPT09IGZhbHNlICYmICFoYXNOb2Rlc1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBub2RlLmlzbGVhZiA9IGlzbGVhZlxuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGFMaXN0ID0gZGF0YUxpc3RcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGRhdGFMaXN0Lmxlbmd0aCAtIDFcblxuICAgICAgaWYgKCFpc2xlYWYgJiYgdGhpcy5zZWxlY3RlZC5sZW5ndGggPCBkYXRhTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICB0ZXh0OiBcIuivt+mAieaLqVwiXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzbGVhZixcbiAgICAgICAgaGFzTm9kZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX3VwZGF0ZVNlbGVjdGVkKCkge1xuICAgICAgbGV0IGRsID0gdGhpcy5kYXRhTGlzdFxuICAgICAgbGV0IHNsID0gdGhpcy5zZWxlY3RlZFxuICAgICAgbGV0IHRleHRGaWVsZCA9IHRoaXMubWFwLnRleHRcbiAgICAgIGxldCB2YWx1ZUZpZWxkID0gdGhpcy5tYXAudmFsdWVcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gc2xbaV0udmFsdWVcbiAgICAgICAgbGV0IGRsMiA9IGRsW2ldXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGwyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgbGV0IGl0ZW0yID0gZGwyW2pdXG4gICAgICAgICAgaWYgKGl0ZW0yW3ZhbHVlRmllbGRdID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgc2xbaV0udGV4dCA9IGl0ZW0yW3RleHRGaWVsZF1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9maWx0ZXJEYXRhKGRhdGEsIHBhdGhzKSB7XG4gICAgICBsZXQgZGF0YUxpc3QgPSBbXVxuICAgICAgbGV0IGhhc05vZGVzID0gdHJ1ZVxuXG4gICAgICBkYXRhTGlzdC5wdXNoKGRhdGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiAoaXRlbS5wYXJlbnRfdmFsdWUgPT09IG51bGwgfHwgaXRlbS5wYXJlbnRfdmFsdWUgPT09IHVuZGVmaW5lZCB8fCBpdGVtLnBhcmVudF92YWx1ZSA9PT0gJycpXG4gICAgICB9KSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gcGF0aHNbaV0udmFsdWVcbiAgICAgICAgbGV0IG5vZGVzID0gZGF0YS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wYXJlbnRfdmFsdWUgPT09IHZhbHVlXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIGRhdGFMaXN0LnB1c2gobm9kZXMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFzTm9kZXMgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGFMaXN0LFxuICAgICAgICBoYXNOb2Rlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfZXh0cmFjdFRyZWUobm9kZXMsIHJlc3VsdCwgcGFyZW50X3ZhbHVlKSB7XG4gICAgICBsZXQgbGlzdCA9IHJlc3VsdCB8fCBbXVxuICAgICAgbGV0IHZhbHVlRmllbGQgPSB0aGlzLm1hcC52YWx1ZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbm9kZSA9IG5vZGVzW2ldXG5cbiAgICAgICAgbGV0IGNoaWxkID0ge31cbiAgICAgICAgZm9yIChsZXQga2V5IGluIG5vZGUpIHtcbiAgICAgICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICAgICAgICBjaGlsZFtrZXldID0gbm9kZVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnRfdmFsdWUgIT09IG51bGwgJiYgcGFyZW50X3ZhbHVlICE9PSB1bmRlZmluZWQgJiYgcGFyZW50X3ZhbHVlICE9PSAnJykge1xuICAgICAgICAgIGNoaWxkLnBhcmVudF92YWx1ZSA9IHBhcmVudF92YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKVxuXG4gICAgICAgIGxldCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW5cbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgdGhpcy5fZXh0cmFjdFRyZWUoY2hpbGRyZW4sIHJlc3VsdCwgbm9kZVt2YWx1ZUZpZWxkXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfZXh0cmFjdFRyZWVQYXRoKG5vZGVzLCByZXN1bHQpIHtcbiAgICAgIGxldCBsaXN0ID0gcmVzdWx0IHx8IFtdXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBub2RlID0gbm9kZXNbaV1cblxuICAgICAgICBsZXQgY2hpbGQgPSB7fVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gbm9kZSkge1xuICAgICAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicpIHtcbiAgICAgICAgICAgIGNoaWxkW2tleV0gPSBub2RlW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQpXG5cbiAgICAgICAgbGV0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlblxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICB0aGlzLl9leHRyYWN0VHJlZVBhdGgoY2hpbGRyZW4sIHJlc3VsdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfZmluZE5vZGVQYXRoKGtleSwgbm9kZXMsIHBhdGggPSBbXSkge1xuICAgICAgbGV0IHRleHRGaWVsZCA9IHRoaXMubWFwLnRleHRcbiAgICAgIGxldCB2YWx1ZUZpZWxkID0gdGhpcy5tYXAudmFsdWVcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG5vZGUgPSBub2Rlc1tpXVxuICAgICAgICBsZXQgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuXG4gICAgICAgIGxldCB0ZXh0ID0gbm9kZVt0ZXh0RmllbGRdXG4gICAgICAgIGxldCB2YWx1ZSA9IG5vZGVbdmFsdWVGaWVsZF1cblxuICAgICAgICBwYXRoLnB1c2goe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodmFsdWUgPT09IGtleSkge1xuICAgICAgICAgIHJldHVybiBwYXRoXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBwID0gdGhpcy5fZmluZE5vZGVQYXRoKGtleSwgY2hpbGRyZW4sIHBhdGgpXG4gICAgICAgICAgaWYgKHAubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBhdGgucG9wKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwidW5pLWRhdGEtcGlja2Vydmlld1wiPlxyXG4gICAgPHNjcm9sbC12aWV3IHYtaWY9XCIhaXNDbG91ZERhdGFMaXN0XCIgY2xhc3M9XCJzZWxlY3RlZC1hcmVhXCIgc2Nyb2xsLXg9XCJ0cnVlXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwic2VsZWN0ZWQtbGlzdFwiPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBzZWxlY3RlZFwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJzZWxlY3RlZC1pdGVtXCJcclxuICAgICAgICAgICAgOmNsYXNzPVwieydzZWxlY3RlZC1pdGVtLWFjdGl2ZSc6aW5kZXg9PXNlbGVjdGVkSW5kZXh9XCJcclxuICAgICAgICAgICAgdi1pZj1cIml0ZW0udGV4dFwiIEBjbGljaz1cImhhbmRsZVNlbGVjdChpbmRleClcIj5cclxuICAgICAgICAgICAgPHRleHQ+e3tpdGVtLnRleHR9fTwvdGV4dD5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3Njcm9sbC12aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0YWItY1wiPlxyXG4gICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoY2hpbGQsIGkpIGluIGRhdGFMaXN0XCI+XHJcbiAgICAgICAgPHNjcm9sbC12aWV3IGNsYXNzPVwibGlzdFwiIDprZXk9XCJpXCIgdi1pZj1cImk9PXNlbGVjdGVkSW5kZXhcIiA6c2Nyb2xsLXk9XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiA6Y2xhc3M9XCJ7J2lzLWRpc2FibGVkJzogISFpdGVtLmRpc2FibGV9XCIgdi1mb3I9XCIoaXRlbSwgaikgaW4gY2hpbGRcIlxyXG4gICAgICAgICAgICBAY2xpY2s9XCJoYW5kbGVOb2RlQ2xpY2soaXRlbSwgaSwgailcIj5cclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJpdGVtLXRleHRcIj57e2l0ZW1bbWFwLnRleHRdfX08L3RleHQ+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiY2hlY2tcIiB2LWlmPVwic2VsZWN0ZWQubGVuZ3RoID4gaSAmJiBpdGVtW21hcC52YWx1ZV0gPT0gc2VsZWN0ZWRbaV0udmFsdWVcIj48L3ZpZXc+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC9zY3JvbGwtdmlldz5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDx2aWV3IGNsYXNzPVwibG9hZGluZy1jb3ZlclwiIHYtaWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgPHVuaS1sb2FkLW1vcmUgY2xhc3M9XCJsb2FkLW1vcmVcIiA6Y29udGVudFRleHQ9XCJsb2FkTW9yZVwiIHN0YXR1cz1cImxvYWRpbmdcIj48L3VuaS1sb2FkLW1vcmU+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgdi1pZj1cImVycm9yTWVzc2FnZVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwiZXJyb3ItdGV4dFwiPnt7ZXJyb3JNZXNzYWdlfX08L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG4gIGltcG9ydCBkYXRhUGlja2VyIGZyb20gXCIuL3VuaS1kYXRhLXBpY2tlci5qc1wiXHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGFQaWNrZXJ2aWV3XHJcbiAgICogQGRlc2NyaXB0aW9uIHVuaS1kYXRhLXBpY2tlcnZpZXdcclxuICAgKiBAdHV0b3JpYWwgaHR0cHM6Ly9leHQuZGNsb3VkLm5ldC5jbi9wbHVnaW4/aWQ9Mzc5NlxyXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXl9IGxvY2FsZGF0YSDmnKzlnLDmlbDmja7vvIzlj4LogINcclxuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IHN0ZXAtc2VhcmggPSBbdHJ1ZXxmYWxzZV0g5piv5ZCm5YiG5biD5p+l6K+iXHJcbiAgICogQHZhbHVlIHRydWUg5ZCv55So5YiG5biD5p+l6K+i77yM5LuF5p+l6K+i5b2T5YmN6YCJ5Lit6IqC54K5XHJcbiAgICogQHZhbHVlIGZhbHNlIOWFs+mXreWIhuW4g+afpeivou+8jOS4gOasoeafpeivouWHuuaJgOacieaVsOaNrlxyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfERCRmllbGRTdHJpbmd9IHNlbGYtZmllbGQg5YiG5biD5p+l6K+i5b2T5YmN5a2X5q615ZCN56ewXHJcbiAgICogQHByb3BlcnR5IHtTdHJpbmd8REJGaWVsZFN0cmluZ30gcGFyZW50LWZpZWxkIOWIhuW4g+afpeivoueItuWtl+auteWQjeensFxyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfERCQ29sbGVjdGlvblN0cmluZ30gY29sbGVjdGlvbiDooajlkI1cclxuICAgKiBAcHJvcGVydHkge1N0cmluZ3xEQkZpZWxkU3RyaW5nfSBmaWVsZCDmn6Xor6LlrZfmrrXvvIzlpJrkuKrlrZfmrrXnlKggYCxgIOWIhuWJslxyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBvcmRlcmJ5IOaOkuW6j+Wtl+auteWPiuato+W6j+WAkuWPmeiuvue9rlxyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfEpRTFN0cmluZ30gd2hlcmUg5p+l6K+i5p2h5Lu2XHJcbiAgICovXHJcbiAgZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ1VuaURhdGFQaWNrZXJWaWV3JyxcclxuICAgIGVtaXRzOiBbJ25vZGVjbGljaycsICdjaGFuZ2UnLCAnZGF0YWNoYW5nZScsICd1cGRhdGU6bW9kZWxWYWx1ZSddLFxyXG4gICAgbWl4aW5zOiBbZGF0YVBpY2tlcl0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICBtYW5hZ2VkTW9kZToge1xyXG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgZWxsaXBzaXM6IHtcclxuICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQoKSB7XHJcbiAgICAgIGlmICghdGhpcy5tYW5hZ2VkTW9kZSkge1xyXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICBvblByb3BzQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuX3RyZWVEYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgaGFuZGxlU2VsZWN0KGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XHJcbiAgICAgIH0sXHJcbiAgICAgIGhhbmRsZU5vZGVDbGljayhpdGVtLCBpLCBqKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZGF0YUxpc3RbaV1bal07XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IG5vZGVbdGhpcy5tYXAudGV4dF07XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlW3RoaXMubWFwLnZhbHVlXTtcclxuXHJcbiAgICAgICAgaWYgKGkgPCB0aGlzLnNlbGVjdGVkLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGksIHRoaXMuc2VsZWN0ZWQubGVuZ3RoIC0gaSlcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaCh7XHJcbiAgICAgICAgICAgIHRleHQsXHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gdGhpcy5zZWxlY3RlZC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShpLCAxLCB7XHJcbiAgICAgICAgICAgIHRleHQsXHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5vZGUuaXNsZWFmKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRDaGFuZ2Uobm9kZSwgbm9kZS5pc2xlYWYpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgIGlzbGVhZixcclxuICAgICAgICAgIGhhc05vZGVzXHJcbiAgICAgICAgfSA9IHRoaXMuX3VwZGF0ZUJpbmREYXRhKClcclxuXHJcbiAgICAgICAgLy8g5pys5Zyw5pWw5o2uXHJcbiAgICAgICAgaWYgKHRoaXMuaXNMb2NhbERhdGEpIHtcclxuICAgICAgICAgIHRoaXMub25TZWxlY3RlZENoYW5nZShub2RlLCAoIWhhc05vZGVzIHx8IGlzbGVhZikpXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ2xvdWREYXRhTGlzdCkgeyAvLyBDbG91ZCDmlbDmja4gKOWNleWIlylcclxuICAgICAgICAgIHRoaXMub25TZWxlY3RlZENoYW5nZShub2RlLCB0cnVlKVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0Nsb3VkRGF0YVRyZWUpIHsgLy8gQ2xvdWQg5pWw5o2uICjmoJHlvaIpXHJcbiAgICAgICAgICBpZiAoaXNsZWFmKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZENoYW5nZShub2RlLCBub2RlLmlzbGVhZilcclxuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc05vZGVzKSB7IC8vIOivt+axguS4gOasoeacjeWKoeWZqOS7peehruWumuaYr+WQpuS4uuWPtuWtkOiKgueCuVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRDbG91ZERhdGFOb2RlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5pc2xlYWYgPSB0cnVlXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyZWVEYXRhLnB1c2goLi4uZGF0YSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJpbmREYXRhKG5vZGUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZENoYW5nZShub2RlLCBub2RlLmlzbGVhZilcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHVwZGF0ZURhdGEoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuX3RyZWVEYXRhID0gZGF0YS50cmVlRGF0YVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBkYXRhLnNlbGVjdGVkXHJcbiAgICAgICAgaWYgKCF0aGlzLl90cmVlRGF0YS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMubG9hZERhdGEoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL3RoaXMuc2VsZWN0ZWQgPSBkYXRhLnNlbGVjdGVkXHJcbiAgICAgICAgICB0aGlzLl91cGRhdGVCaW5kRGF0YSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBvbkRhdGFDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy4kZW1pdCgnZGF0YWNoYW5nZScpO1xyXG4gICAgICB9LFxyXG4gICAgICBvblNlbGVjdGVkQ2hhbmdlKG5vZGUsIGlzbGVhZikge1xyXG4gICAgICAgIGlmIChpc2xlYWYpIHtcclxuICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgIHRoaXMuJGVtaXQoJ25vZGVjbGljaycsIG5vZGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBfZGlzcGF0Y2hFdmVudCgpIHtcclxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLnNlbGVjdGVkLnNsaWNlKDApKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuXHQkdW5pLXByaW1hcnk6ICMwMDdhZmYgIWRlZmF1bHQ7XG5cclxuXHQudW5pLWRhdGEtcGlja2VydmlldyB7XHJcblx0XHRmbGV4OiAxO1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuXHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0XHRoZWlnaHQ6IDEwMCU7XHJcblx0fVxyXG5cclxuICAuZXJyb3ItdGV4dCB7XHJcbiAgICBjb2xvcjogI0RENTI0RDtcclxuICB9XHJcblxyXG4gIC5sb2FkaW5nLWNvdmVyIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB0b3A6IDA7XHJcbiAgICByaWdodDogMDtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjUpO1xyXG4gICAgLyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB6LWluZGV4OiAxMDAxO1xyXG4gIH1cclxuXHJcbiAgLmxvYWQtbW9yZSB7XHJcbiAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICBtYXJnaW46IGF1dG87XHJcbiAgICAvKiAjZW5kaWYgKi9cclxuICB9XHJcblxyXG4gIC5lcnJvci1tZXNzYWdlIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBwYWRkaW5nOiAxNXB4O1xyXG4gICAgb3BhY2l0eTogLjk7XHJcbiAgICB6LWluZGV4OiAxMDI7XHJcbiAgfVxyXG5cclxuICAvKiAjaWZkZWYgQVBQLU5WVUUgKi9cclxuICAuc2VsZWN0ZWQtYXJlYSB7XHJcbiAgICB3aWR0aDogNzUwcnB4O1xyXG4gIH1cclxuICAvKiAjZW5kaWYgKi9cclxuXHJcbiAgLnNlbGVjdGVkLWxpc3Qge1xyXG4gICAgLyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtd3JhcDogbm93cmFwO1xyXG4gICAgLyogI2VuZGlmICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgcGFkZGluZzogMCA1cHg7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Y4ZjhmODtcclxuICB9XHJcblxyXG4gIC5zZWxlY3RlZC1pdGVtIHtcclxuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG4gICAgcGFkZGluZzogMTJweCAwO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgLyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gIH1cclxuXHJcbiAgLnNlbGVjdGVkLWl0ZW0tdGV4dC1vdmVyZmxvdyB7XHJcbiAgICB3aWR0aDogMTY4cHg7XHJcbiAgICAvKiBmaXggbnZ1ZSAqL1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAgIHdpZHRoOiA2ZW07XHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAtby10ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gIH1cclxuXHJcblx0LnNlbGVjdGVkLWl0ZW0tYWN0aXZlIHtcclxuXHRcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkdW5pLXByaW1hcnk7XHJcblx0fVxyXG5cclxuXHQuc2VsZWN0ZWQtaXRlbS10ZXh0IHtcclxuXHRcdGNvbG9yOiAkdW5pLXByaW1hcnk7XHJcblx0fVxyXG5cclxuICAudGFiLWMge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZmxleDogMTtcclxuICAgIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAvKiAjZW5kaWYgKi9cclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgLmxpc3Qge1xyXG4gICAgZmxleDogMTtcclxuICB9XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDEycHggMTVweDtcclxuICAgIC8qIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwOyAqL1xyXG4gICAgLyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICB9XHJcblxyXG4gIC5pcy1kaXNhYmxlZCB7XHJcbiAgICBvcGFjaXR5OiAuNTtcclxuICB9XHJcblxyXG4gIC5pdGVtLXRleHQge1xyXG4gICAgLyogZmxleDogMTsgKi9cclxuICAgIGNvbG9yOiAjMzMzMzMzO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0tdGV4dC1vdmVyZmxvdyB7XHJcbiAgICB3aWR0aDogMjgwcHg7XHJcbiAgICAvKiBmaXggbnZ1ZSAqL1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAgIHdpZHRoOiAyMGVtO1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgLW8tdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAvKiAjZW5kaWYgKi9cclxuICB9XHJcblxyXG5cdC5jaGVjayB7XHJcblx0XHRtYXJnaW4tcmlnaHQ6IDVweDtcclxuXHRcdGJvcmRlcjogMnB4IHNvbGlkICR1bmktcHJpbWFyeTtcclxuXHRcdGJvcmRlci1sZWZ0OiAwO1xyXG5cdFx0Ym9yZGVyLXRvcDogMDtcclxuXHRcdGhlaWdodDogMTJweDtcclxuXHRcdHdpZHRoOiA2cHg7XHJcblx0XHR0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XHJcblx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHR0cmFuc2l0aW9uOiBhbGwgMC4zcztcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0dHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG5cdH1cclxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cInVuaS1kYXRhLXRyZWVcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwidW5pLWRhdGEtdHJlZS1pbnB1dFwiIEBjbGljaz1cImhhbmRsZUlucHV0XCI+XHJcbiAgICAgIDxzbG90IDpvcHRpb25zPVwib3B0aW9uc1wiIDpkYXRhPVwiaW5wdXRTZWxlY3RlZFwiIDplcnJvcj1cImVycm9yTWVzc2FnZVwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiaW5wdXQtdmFsdWVcIiA6Y2xhc3M9XCJ7J2lucHV0LXZhbHVlLWJvcmRlcic6IGJvcmRlcn1cIj5cclxuICAgICAgICAgIDx0ZXh0IHYtaWY9XCJlcnJvck1lc3NhZ2VcIiBjbGFzcz1cInNlbGVjdGVkLWFyZWEgZXJyb3ItdGV4dFwiPnt7ZXJyb3JNZXNzYWdlfX08L3RleHQ+XHJcbiAgICAgICAgICA8dmlldyB2LWVsc2UtaWY9XCJsb2FkaW5nICYmICFpc09wZW5lZFwiIGNsYXNzPVwic2VsZWN0ZWQtYXJlYVwiPlxyXG4gICAgICAgICAgICA8dW5pLWxvYWQtbW9yZSBjbGFzcz1cImxvYWQtbW9yZVwiIDpjb250ZW50VGV4dD1cImxvYWRNb3JlXCIgc3RhdHVzPVwibG9hZGluZ1wiPjwvdW5pLWxvYWQtbW9yZT5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDxzY3JvbGwtdmlldyB2LWVsc2UtaWY9XCJpbnB1dFNlbGVjdGVkLmxlbmd0aFwiIGNsYXNzPVwic2VsZWN0ZWQtYXJlYVwiIHNjcm9sbC14PVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInNlbGVjdGVkLWxpc3RcIj5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInNlbGVjdGVkLWl0ZW1cIiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBpbnB1dFNlbGVjdGVkXCIgOmtleT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cInRleHQtY29sb3JcIj57e2l0ZW0udGV4dH19PC90ZXh0Pjx0ZXh0IHYtaWY9XCJpbmRleDxpbnB1dFNlbGVjdGVkLmxlbmd0aC0xXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1zcGxpdC1saW5lXCI+e3tzcGxpdH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC9zY3JvbGwtdmlldz5cclxuICAgICAgICAgIDx0ZXh0IHYtZWxzZSBjbGFzcz1cInNlbGVjdGVkLWFyZWEgcGxhY2Vob2xkZXJcIj57e3BsYWNlaG9sZGVyfX08L3RleHQ+XHJcbiAgICAgICAgICA8dmlldyB2LWlmPVwiY2xlYXJJY29uICYmICFyZWFkb25seSAmJiBpbnB1dFNlbGVjdGVkLmxlbmd0aFwiIGNsYXNzPVwiaWNvbi1jbGVhclwiIEBjbGljay5zdG9wPVwiY2xlYXJcIj5cclxuICAgICAgICAgICAgPHVuaS1pY29ucyB0eXBlPVwiY2xlYXJcIiBjb2xvcj1cIiNjMGM0Y2NcIiBzaXplPVwiMjRcIj48L3VuaS1pY29ucz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYXJyb3ctYXJlYVwiIHYtaWY9XCIoIWNsZWFySWNvbiB8fCAhaW5wdXRTZWxlY3RlZC5sZW5ndGgpICYmICFyZWFkb25seSBcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpbnB1dC1hcnJvd1wiPjwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvc2xvdD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IGNsYXNzPVwidW5pLWRhdGEtdHJlZS1jb3ZlclwiIHYtaWY9XCJpc09wZW5lZFwiIEBjbGljaz1cImhhbmRsZUNsb3NlXCI+PC92aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ1bmktZGF0YS10cmVlLWRpYWxvZ1wiIHYtaWY9XCJpc09wZW5lZFwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInVuaS1wb3BwZXJfX2Fycm93XCI+PC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImRpYWxvZy1jYXB0aW9uXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZS1hcmVhXCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImRpYWxvZy10aXRsZVwiPnt7cG9wdXBUaXRsZX19PC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImRpYWxvZy1jbG9zZVwiIEBjbGljaz1cImhhbmRsZUNsb3NlXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImRpYWxvZy1jbG9zZS1wbHVzXCIgZGF0YS1pZD1cImNsb3NlXCI+PC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJkaWFsb2ctY2xvc2UtcGx1cyBkaWFsb2ctY2xvc2Utcm90YXRlXCIgZGF0YS1pZD1cImNsb3NlXCI+PC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8ZGF0YS1waWNrZXItdmlldyBjbGFzcz1cInBpY2tlci12aWV3XCIgcmVmPVwicGlja2VyVmlld1wiIHYtbW9kZWw9XCJkYXRhVmFsdWVcIiA6bG9jYWxkYXRhPVwibG9jYWxkYXRhXCJcclxuICAgICAgICA6cHJlbG9hZD1cInByZWxvYWRcIiA6Y29sbGVjdGlvbj1cImNvbGxlY3Rpb25cIiA6ZmllbGQ9XCJmaWVsZFwiIDpvcmRlcmJ5PVwib3JkZXJieVwiIDp3aGVyZT1cIndoZXJlXCJcclxuICAgICAgICA6c3RlcC1zZWFyaD1cInN0ZXBTZWFyaFwiIDpzZWxmLWZpZWxkPVwic2VsZkZpZWxkXCIgOnBhcmVudC1maWVsZD1cInBhcmVudEZpZWxkXCIgOm1hbmFnZWQtbW9kZT1cInRydWVcIiA6bWFwPVwibWFwXCJcclxuICAgICAgICA6ZWxsaXBzaXM9XCJlbGxpcHNpc1wiIEBjaGFuZ2U9XCJvbmNoYW5nZVwiIEBkYXRhY2hhbmdlPVwib25kYXRhY2hhbmdlXCIgQG5vZGVjbGljaz1cIm9ubm9kZWNsaWNrXCI+XHJcbiAgICAgIDwvZGF0YS1waWNrZXItdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG4gIGltcG9ydCBkYXRhUGlja2VyIGZyb20gXCIuLi91bmktZGF0YS1waWNrZXJ2aWV3L3VuaS1kYXRhLXBpY2tlci5qc1wiXHJcbiAgaW1wb3J0IERhdGFQaWNrZXJWaWV3IGZyb20gXCIuLi91bmktZGF0YS1waWNrZXJ2aWV3L3VuaS1kYXRhLXBpY2tlcnZpZXcudnVlXCJcclxuXHJcbiAgLyoqXHJcbiAgICogRGF0YVBpY2tlciDnuqfogZTpgInmi6lcclxuICAgKiBAZGVzY3JpcHRpb24g5pSv5oyB5Y2V5YiX44CB5ZKM5aSa5YiX57qn6IGU6YCJ5oup44CC5YiX5pWw5rKh5pyJ6ZmQ5Yi277yM5aaC5p6c5bGP5bmV5pi+56S65LiN5YWo77yM6aG26YOodGFi5Yy65Z+f5Lya5bem5Y+z5rua5Yqo44CCXHJcbiAgICogQHR1dG9yaWFsIGh0dHBzOi8vZXh0LmRjbG91ZC5uZXQuY24vcGx1Z2luP2lkPTM3OTZcclxuICAgKiBAcHJvcGVydHkge1N0cmluZ30gcG9wdXAtdGl0bGUg5by55Ye656qX5Y+j5qCH6aKYXHJcbiAgICogQHByb3BlcnR5IHtBcnJheX0gbG9jYWxkYXRhIOacrOWcsOaVsOaNru+8jOWPguiAg1xyXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gYm9yZGVyID0gW3RydWV8ZmFsc2VdIOaYr+WQpuaciei+ueahhlxyXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gcmVhZG9ubHkgPSBbdHJ1ZXxmYWxzZV0g5piv5ZCm5LuF6K+7XHJcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBwcmVsb2FkID0gW3RydWV8ZmFsc2VdIOaYr+WQpumihOWKoOi9veaVsOaNrlxyXG4gICAqIEB2YWx1ZSB0cnVlIOW8gOWQr+mihOWKoOi9veaVsOaNru+8jOeCueWHu+W8ueWHuueql+WPo+WQjuaYvuekuuW3suWKoOi9veaVsOaNrlxyXG4gICAqIEB2YWx1ZSBmYWxzZSDlhbPpl63pooTliqDovb3mlbDmja7vvIzngrnlh7vlvLnlh7rnqpflj6PlkI7lvIDlp4vliqDovb3mlbDmja5cclxuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IHN0ZXAtc2VhcmggPSBbdHJ1ZXxmYWxzZV0g5piv5ZCm5YiG5biD5p+l6K+iXHJcbiAgICogQHZhbHVlIHRydWUg5ZCv55So5YiG5biD5p+l6K+i77yM5LuF5p+l6K+i5b2T5YmN6YCJ5Lit6IqC54K5XHJcbiAgICogQHZhbHVlIGZhbHNlIOWFs+mXreWIhuW4g+afpeivou+8jOS4gOasoeafpeivouWHuuaJgOacieaVsOaNrlxyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfERCRmllbGRTdHJpbmd9IHNlbGYtZmllbGQg5YiG5biD5p+l6K+i5b2T5YmN5a2X5q615ZCN56ewXHJcbiAgICogQHByb3BlcnR5IHtTdHJpbmd8REJGaWVsZFN0cmluZ30gcGFyZW50LWZpZWxkIOWIhuW4g+afpeivoueItuWtl+auteWQjeensFxyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfERCQ29sbGVjdGlvblN0cmluZ30gY29sbGVjdGlvbiDooajlkI1cclxuICAgKiBAcHJvcGVydHkge1N0cmluZ3xEQkZpZWxkU3RyaW5nfSBmaWVsZCDmn6Xor6LlrZfmrrXvvIzlpJrkuKrlrZfmrrXnlKggYCxgIOWIhuWJslxyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBvcmRlcmJ5IOaOkuW6j+Wtl+auteWPiuato+W6j+WAkuWPmeiuvue9rlxyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfEpRTFN0cmluZ30gd2hlcmUg5p+l6K+i5p2h5Lu2XHJcbiAgICogQGV2ZW50IHtGdW5jdGlvbn0gcG9wdXBzaG93IOW8ueWHuueahOmAieaLqeeql+WPo+aJk+W8gOaXtuinpuWPkeatpOS6i+S7tlxyXG4gICAqIEBldmVudCB7RnVuY3Rpb259IHBvcHVwaGlkZSDlvLnlh7rnmoTpgInmi6nnqpflj6PlhbPpl63ml7bop6blj5HmraTkuovku7ZcclxuICAgKi9cclxuICBleHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnVW5pRGF0YVBpY2tlcicsXHJcbiAgICBlbWl0czogWydwb3B1cG9wZW5lZCcsICdwb3B1cGNsb3NlZCcsICdub2RlY2xpY2snLCAnaW5wdXQnLCAnY2hhbmdlJywgJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXHJcbiAgICBtaXhpbnM6IFtkYXRhUGlja2VyXSxcclxuICAgIGNvbXBvbmVudHM6IHtcclxuICAgICAgRGF0YVBpY2tlclZpZXdcclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgdHlwZTogW09iamVjdCwgQXJyYXldLFxyXG4gICAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgICAgcmV0dXJuIHt9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBwb3B1cFRpdGxlOiB7XHJcbiAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHQ6ICfor7fpgInmi6knXHJcbiAgICAgIH0sXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB7XHJcbiAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHQ6ICfor7fpgInmi6knXHJcbiAgICAgIH0sXHJcbiAgICAgIGhlaWdodE1vYmlsZToge1xyXG4gICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICByZWFkb25seToge1xyXG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgY2xlYXJJY29uOiB7XHJcbiAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvcmRlcjoge1xyXG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBzcGxpdDoge1xyXG4gICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICBkZWZhdWx0OiAnLydcclxuICAgICAgfSxcclxuICAgICAgZWxsaXBzaXM6IHtcclxuICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRhdGEoKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNPcGVuZWQ6IGZhbHNlLFxyXG4gICAgICAgIGlucHV0U2VsZWN0ZWQ6IFtdXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjcmVhdGVkKCkge1xyXG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkKCk7XHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQoW10pO1xyXG4gICAgICB9LFxyXG4gICAgICBvblByb3BzQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuX3RyZWVEYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGxvYWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NSZWFkb25seSh0aGlzLmxvY2FsZGF0YSwgdGhpcy5kYXRhVmFsdWUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDlm57mmL7mnKzlnLDmlbDmja5cclxuICAgICAgICBpZiAodGhpcy5pc0xvY2FsRGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgICAgICAgdGhpcy5pbnB1dFNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZC5zbGljZSgwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDbG91ZERhdGFMaXN0IHx8IHRoaXMuaXNDbG91ZERhdGFUcmVlKSB7IC8vIOWbnuaYviBDbG91ZCDmlbDmja5cclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmdldENsb3VkRGF0YVZhbHVlKCkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0U2VsZWN0ZWQgPSByZXM7XHJcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBzaG93KCkge1xyXG4gICAgICAgIHRoaXMuaXNPcGVuZWQgPSB0cnVlXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLiRyZWZzLnBpY2tlclZpZXcudXBkYXRlRGF0YSh7XHJcbiAgICAgICAgICAgIHRyZWVEYXRhOiB0aGlzLl90cmVlRGF0YSxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXg6IHRoaXMuc2VsZWN0ZWRJbmRleFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9LCAyMDApXHJcbiAgICAgICAgdGhpcy4kZW1pdCgncG9wdXBvcGVuZWQnKVxyXG4gICAgICB9LFxyXG4gICAgICBoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuJGVtaXQoJ3BvcHVwY2xvc2VkJylcclxuICAgICAgfSxcclxuICAgICAgaGFuZGxlSW5wdXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3coKVxyXG4gICAgICB9LFxyXG4gICAgICBoYW5kbGVDbG9zZShlKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlKClcclxuICAgICAgfSxcclxuICAgICAgb25ub2RlY2xpY2soZSkge1xyXG4gICAgICAgIHRoaXMuJGVtaXQoJ25vZGVjbGljaycsIGUpXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uZGF0YWNoYW5nZShlKSB7XHJcbiAgICAgICAgdGhpcy5fdHJlZURhdGEgPSB0aGlzLiRyZWZzLnBpY2tlclZpZXcuX3RyZWVEYXRhXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uY2hhbmdlKGUpIHtcclxuICAgICAgICB0aGlzLmhpZGUoKVxyXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW5wdXRTZWxlY3RlZCA9IGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KGUpXHJcbiAgICAgIH0sXHJcbiAgICAgIF9wcm9jZXNzUmVhZG9ubHkoZGF0YUxpc3QsIHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGlzVHJlZSA9IGRhdGFMaXN0LmZpbmRJbmRleCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW5cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmIChpc1RyZWUgPiAtMSkge1xyXG4gICAgICAgICAgbGV0IGlucHV0VmFsdWVcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBpbnB1dFZhbHVlID0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFZhbHVlID09PSAnb2JqZWN0JyAmJiBpbnB1dFZhbHVlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWUudmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlucHV0U2VsZWN0ZWQgPSB0aGlzLl9maW5kTm9kZVBhdGgoaW5wdXRWYWx1ZSwgdGhpcy5sb2NhbGRhdGEpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbnB1dFNlbGVjdGVkID0gW11cclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFyIHZhbCA9IHZhbHVlW2ldXHJcbiAgICAgICAgICB2YXIgaXRlbSA9IGRhdGFMaXN0LmZpbmQoKHYpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHYudmFsdWUgPT0gdmFsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuaW5wdXRTZWxlY3RlZCA9IHJlc3VsdFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgX2ZpbHRlckZvckFycmF5KGRhdGEsIHZhbHVlQXJyYXkpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlQXJyYXlbaV1cclxuICAgICAgICAgIHZhciBmb3VuZCA9IGRhdGEuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChmb3VuZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICB9LFxyXG4gICAgICBfZGlzcGF0Y2hFdmVudChzZWxlY3RlZCkge1xyXG4gICAgICAgIGxldCBpdGVtID0ge31cclxuICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICB2YXIgdmFsdWUgPSBuZXcgQXJyYXkoc2VsZWN0ZWQubGVuZ3RoKVxyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZVtpXSA9IHNlbGVjdGVkW2ldLnZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpdGVtID0gc2VsZWN0ZWRbc2VsZWN0ZWQubGVuZ3RoIC0gMV1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbS52YWx1ZSA9ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1JdGVtKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1JdGVtLnNldFZhbHVlKGl0ZW0udmFsdWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGl0ZW0udmFsdWUpXHJcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBpdGVtLnZhbHVlKVxyXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHtcclxuICAgICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgICB2YWx1ZTogc2VsZWN0ZWRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZT5cclxuICAudW5pLWRhdGEtdHJlZSB7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZm9udC1zaXplOiAxNHB4O1xyXG4gIH1cclxuXHJcbiAgLmVycm9yLXRleHQge1xyXG4gICAgY29sb3I6ICNERDUyNEQ7XHJcbiAgfVxyXG5cclxuICAuaW5wdXQtdmFsdWUge1xyXG4gICAgLyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgIC8qIGxpbmUtaGVpZ2h0OiAzNXB4OyAqL1xyXG4gICAgcGFkZGluZzogMCAxMHB4O1xyXG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGhlaWdodDogMzVweDtcclxuICAgIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAvKiAjZW5kaWYgKi9cclxuICB9XHJcblxyXG4gIC5pbnB1dC12YWx1ZS1ib3JkZXIge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTVlNTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcclxuICB9XHJcblxyXG4gIC5zZWxlY3RlZC1hcmVhIHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgLyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICB9XHJcblxyXG4gIC5sb2FkLW1vcmUge1xyXG4gICAgLyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xyXG4gICAgLyogI2VuZGlmICovXHJcbiAgICAvKiAjaWZkZWYgQVBQLU5WVUUgKi9cclxuICAgIHdpZHRoOiA0MHB4O1xyXG4gICAgLyogI2VuZGlmICovXHJcbiAgfVxyXG5cclxuICAuc2VsZWN0ZWQtbGlzdCB7XHJcbiAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgLyogI2VuZGlmICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICAvKiBwYWRkaW5nOiAwIDVweDsgKi9cclxuICB9XHJcblxyXG4gIC5zZWxlY3RlZC1pdGVtIHtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAvKiBwYWRkaW5nOiAwIDFweDsgKi9cclxuICAgIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAvKiAjZW5kaWYgKi9cclxuICB9XHJcblxyXG4gIC50ZXh0LWNvbG9yIHtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG4gIH1cclxuXHJcbiAgLnBsYWNlaG9sZGVyIHtcclxuICAgIGNvbG9yOiBncmV5O1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG4gIH1cclxuXHJcbiAgLmlucHV0LXNwbGl0LWxpbmUge1xyXG4gICAgb3BhY2l0eTogLjU7XHJcbiAgfVxyXG5cclxuICAuYXJyb3ctYXJlYSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB3aWR0aDogMjBweDtcclxuICAgIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAgIG1hcmdpbi1ib3R0b206IDVweDtcclxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xyXG4gICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xyXG4gIH1cclxuXHJcbiAgLmlucHV0LWFycm93IHtcclxuICAgIHdpZHRoOiA3cHg7XHJcbiAgICBoZWlnaHQ6IDdweDtcclxuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzk5OTtcclxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOTk5O1xyXG4gIH1cclxuXHJcbiAgLnVuaS1kYXRhLXRyZWUtY292ZXIge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHRvcDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuNCk7XHJcbiAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgLyogI2VuZGlmICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgei1pbmRleDogMTAwO1xyXG4gIH1cclxuXHJcbiAgLnVuaS1kYXRhLXRyZWUtZGlhbG9nIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICB0b3A6IDIwJTtcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gICAgLyogI2lmZGVmIEFQUC1OVlVFICovXHJcbiAgICB0b3A6IDIwMHB4O1xyXG4gICAgLyogI2VuZGlmICovXHJcbiAgICByaWdodDogMDtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XHJcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMHB4O1xyXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDEwcHg7XHJcbiAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgLyogI2VuZGlmICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgei1pbmRleDogMTAyO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIC8qICNpZmRlZiBBUFAtTlZVRSAqL1xyXG4gICAgd2lkdGg6IDc1MHJweDtcclxuICAgIC8qICNlbmRpZiAqL1xyXG4gIH1cclxuXHJcbiAgLmRpYWxvZy1jYXB0aW9uIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAvKiAjZW5kaWYgKi9cclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAvKiBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDsgKi9cclxuICB9XHJcblxyXG4gIC50aXRsZS1hcmVhIHtcclxuICAgIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAvKiAjZW5kaWYgKi9cclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICBtYXJnaW46IGF1dG87XHJcbiAgICAvKiAjZW5kaWYgKi9cclxuICAgIHBhZGRpbmc6IDAgMTBweDtcclxuICB9XHJcblxyXG4gIC5kaWFsb2ctdGl0bGUge1xyXG4gICAgLyogZm9udC13ZWlnaHQ6IGJvbGQ7ICovXHJcbiAgICBsaW5lLWhlaWdodDogNDRweDtcclxuICB9XHJcblxyXG4gIC5kaWFsb2ctY2xvc2Uge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgLyogI2VuZGlmICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIHBhZGRpbmc6IDAgMTVweDtcclxuICB9XHJcblxyXG4gIC5kaWFsb2ctY2xvc2UtcGx1cyB7XHJcbiAgICB3aWR0aDogMTZweDtcclxuICAgIGhlaWdodDogMnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzY2NjtcclxuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICB9XHJcblxyXG4gIC5kaWFsb2ctY2xvc2Utcm90YXRlIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XHJcbiAgfVxyXG5cclxuICAucGlja2VyLXZpZXcge1xyXG4gICAgZmxleDogMTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAuaWNvbi1jbGVhciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC8qICNpZmRlZiBINSAqL1xyXG4gIEBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XHJcbiAgICAudW5pLWRhdGEtdHJlZS1jb3ZlciB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC51bmktZGF0YS10cmVlLWRpYWxvZyB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiA1NXB4O1xyXG4gICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xyXG4gICAgICBtYXgtaGVpZ2h0OiA1MHZoO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjRUJFRUY1O1xyXG4gICAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgIG92ZXJmbG93OiB1bnNldDtcclxuICAgIH1cclxuXHJcbiAgICAuZGlhbG9nLWNhcHRpb24ge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIC5pY29uLWNsZWFyIHtcclxuICAgICAgLyogbWFyZ2luLXJpZ2h0OiA1cHg7ICovXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiAjZW5kaWYgKi9cclxuXHJcbiAgLyogcGlja2VyIOW8ueWHuuWxgumAmueUqOeahOaMh+ekuuWwj+S4ieinkiwgdG9kb++8muaJqeWxleiHs+S4iuS4i+W3puWPs+aWueWQkeWumuS9jSAqL1xyXG4gIC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuICAudW5pLXBvcHBlcl9fYXJyb3csXHJcbiAgLnVuaS1wb3BwZXJfX2Fycm93OjphZnRlciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHdpZHRoOiAwO1xyXG4gICAgaGVpZ2h0OiAwO1xyXG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcbiAgICBib3JkZXItd2lkdGg6IDZweDtcclxuICB9XHJcblxyXG4gIC51bmktcG9wcGVyX19hcnJvdyB7XHJcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjAzKSk7XHJcbiAgICB0b3A6IC02cHg7XHJcbiAgICBsZWZ0OiAxMCU7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDNweDtcclxuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XHJcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjRUJFRUY1O1xyXG4gIH1cclxuXHJcbiAgLnVuaS1wb3BwZXJfX2Fycm93OjphZnRlciB7XHJcbiAgICBjb250ZW50OiBcIiBcIjtcclxuICAgIHRvcDogMXB4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IC02cHg7XHJcbiAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xyXG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcclxuICB9XHJcblxyXG4gIC8qICNlbmRpZiAqL1xyXG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaHR0cCB9IGZyb20gJ0AvdXRpbHMvaHR0cCdcblxuLyoqXG4gKiDojrflj5Yg5omr5o+PIOaJmOebmOWPt+OAgeaJueasoeWPt1xuICovXG5leHBvcnQgY29uc3QgZ2V0QmluZFBhcmFtcyA9ICgpID0+IHtcbiAgcmV0dXJuIGh0dHA8YW55Pih7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICB1cmw6ICcvYWRtaW4vb3JkZXIuc2Nhbk9yZGVyL2dldEJpbmRQYXJhbXMnLFxuICB9KVxufVxuXG4vKipcbiAqIOaJq+aPj+aJmOebmFxuICovXG5leHBvcnQgY29uc3QgYmluZFNoaXBwaW5nID0gKGRhdGE6IHtcbiAgb3JkZXJfbm86IHN0cmluZ1xuICByZXdlaWdodGluZzogc3RyaW5nXG4gIGJhdGNoX251bWJlcjogc3RyaW5nXG4gIHBhbGxldF9udW1iZXI6IHN0cmluZ1xufSkgPT4ge1xuICByZXR1cm4gaHR0cDxhbnk+KHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICcvYWRtaW4vb3JkZXIuc2Nhbk9yZGVyL2JpbmRTaGlwcGluZycsXG4gICAgZGF0YSxcbiAgfSlcbn1cbi8qKlxuICog5omr5o+P5omY55uYXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRXYXliaWxscyA9IChkYXRhOiB7XG4gIG9yZGVyX25vOiBzdHJpbmdcbiAgYmF0Y2hfbnVtYmVyOiBzdHJpbmdcbiAgcGFsbGV0X251bWJlcjogc3RyaW5nXG59KSA9PiB7XG4gIHJldHVybiBodHRwPGFueT4oe1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogJy9hZG1pbi9vcmRlci5zY2FuT3JkZXIvZ2V0V2F5YmlsbHMnLFxuICAgIGRhdGEsXG4gIH0pXG59XG4iLCI8dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJjb250YWluZXJcIj5cclxuICAgIDx1bmktZm9ybXNcclxuICAgICAgcmVmPVwidmFsaUZvcm1SZWZcIlxyXG4gICAgICBsYWJlbC1hbGlnbj1cInJpZ2h0XCJcclxuICAgICAgOmxhYmVsLXdpZHRoPVwiODBcIlxyXG4gICAgICA6cnVsZXM9XCJydWxlc1wiXHJcbiAgICAgIDptb2RlbFZhbHVlPVwidmFsaUZvcm1EYXRhXCJcclxuICAgID5cclxuICAgICAgPHVuaS1mb3Jtcy1pdGVtIGxhYmVsPVwi6L+Q5Y2V5Y+356CBXCIgcmVxdWlyZWQgbmFtZT1cIm9yZGVyTnVtXCI+XHJcbiAgICAgICAgPHVuaS1lYXN5aW5wdXRcclxuICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEub3JkZXJOdW1cIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXljZXlj7dcIlxyXG4gICAgICAgICAgc3VmZml4SWNvbj1cInNjYW5cIlxyXG4gICAgICAgICAgOmZvY3VzPVwiZm9jdXNUeXBlXCJcclxuICAgICAgICAgIEBpY29uQ2xpY2s9XCJzY2FuSW5wdXRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XHJcbiAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIuWkjeensOmHjemHj1wiIG5hbWU9XCJ3ZWlnaHRcIj5cclxuICAgICAgICA8dW5pLWVhc3lpbnB1dFxyXG4gICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS53ZWlnaHRcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXlpI3np7Dph43ph49cIlxyXG4gICAgICAgICAgb25pbnB1dD1cInZhbHVlPXZhbHVlLnJlcGxhY2UoL1teXFxkLl0vZywnJykucmVwbGFjZSgvXlxcLi9nLCAnJykucmVwbGFjZSgvXFwuezIsfS9nLCAnJykucmVwbGFjZSgnLicsICckIyQnKS5yZXBsYWNlKC9cXC4vZywgJycpLnJlcGxhY2UoJyQjJCcsICcuJykubWF0Y2goL15cXGQqKFxcLj9cXGR7MCwyfSkvZylbMF0gfHwgbnVsbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRlbXBsYXRlICNyaWdodD5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ3ZWlnaHQtcmlnaHRcIj5LRzwvdmlldz5cclxuICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPC91bmktZWFzeWlucHV0PlxyXG4gICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxyXG4gICAgICA8IS0tIDx0ZXh0IGNsYXNzPSd3ZWlnaHQtdGlwJz7lpI3np7Dph43ph4/kvZznlKjmmK/noa7kv53lj6Xmg6DlrozmlbTvvIzpmLLmraLlt6XkvZzkurrlkZjorqHotLnnp7Dou4rlkI7ov5vooYznmoTlhbbku5bmk43kvZzlvJXotbfnmoTnianlk4HkuKLlpLHpl67popg8L3RleHQ+IC0tPlxyXG4gICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLnu5HlrprmibnmrKHlj7dcIiBuYW1lPVwiYmF0Y2hOdW1cIiBjbGFzcz1cInNlbGVjdC1pdGVtXCI+XHJcbiAgICAgICAgPHVuaS1kYXRhLXNlbGVjdFxyXG4gICAgICAgICAgdi1pZj1cIiFlZGl0QmF0Y2hOdW1cIlxyXG4gICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS5iYXRjaE51bVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+mAieaLqeaJueasoeWPt1wiXHJcbiAgICAgICAgICA6bG9jYWxkYXRhPVwib3B0aW9ucy5iYXRjaFwiXHJcbiAgICAgICAgICA6Y2xlYXI9XCJmYWxzZVwiXHJcbiAgICAgICAgPjwvdW5pLWRhdGEtc2VsZWN0PlxyXG4gICAgICAgIDx1bmktZWFzeWlucHV0IHYtaWY9XCJlZGl0QmF0Y2hOdW1cIiA6dmFsdWU9XCJiYXRjaE51bVwiIDpkaXNhYmxlZD1cImVkaXRCYXRjaE51bVwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiB2LWlmPVwiIWVkaXRCYXRjaE51bVwiIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwic3VibWl0QmF0Y2hOdW1cIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHYtaWY9XCJlZGl0QmF0Y2hOdW1cIiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cImVkaXRCYXRjaE51bSA9IGZhbHNlXCI+5L+u5pS5PC9idXR0b24+XHJcbiAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XHJcbiAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIue7keWumuaJmOebmOWPt1wiIG5hbWU9XCJwYWxsZXROdW1cIiBjbGFzcz1cInNlbGVjdC1pdGVtXCI+XHJcbiAgICAgICAgPHVuaS1kYXRhLXBpY2tlclxyXG4gICAgICAgICAgdi1pZj1cIiFlZGl0UGFsbGV0TnVtXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oup5omY55uY5Y+3XCJcclxuICAgICAgICAgIHBvcHVwLXRpdGxlPVwi57uR5a6a5omY55uY5Y+3XCJcclxuICAgICAgICAgIDpsb2NhbGRhdGE9XCJvcHRpb25zLnBhbGxldFwiXHJcbiAgICAgICAgICB2LW1vZGVsPVwidmFsaUZvcm1EYXRhLnBhbGxldE51bVwiXHJcbiAgICAgICAgICA6Y2xlYXItaWNvbj1cImZhbHNlXCJcclxuICAgICAgICA+PC91bmktZGF0YS1waWNrZXI+XHJcblxyXG4gICAgICAgIDx1bmktZWFzeWlucHV0IHYtaWY9XCJlZGl0UGFsbGV0TnVtXCIgOnZhbHVlPVwicGFsbGV0TnVtXCIgOmRpc2FibGVkPVwiZWRpdFBhbGxldE51bVwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiB2LWlmPVwiIWVkaXRQYWxsZXROdW1cIiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cInN1Ym1pdFBhbGxldE51bVwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdi1pZj1cImVkaXRQYWxsZXROdW1cIiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cImVkaXRQYWxsZXROdW0gPSBmYWxzZVwiPuS/ruaUuTwvYnV0dG9uPlxyXG4gICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxyXG4gICAgPC91bmktZm9ybXM+XHJcbiAgICA8dmlldyBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQGNsaWNrPVwicmVzZXRcIj7ph43nva48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEBjbGljaz1cImNoZWNrT3JkZXJcIiA6bG9hZGluZz1cImxvYWRpbmdcIj5cclxuICAgICAgICA8dW5pLWljb25zIHYtaWY9XCIhbG9hZGluZ1wiIHR5cGU9XCJzZWFyY2hcIiBzaXplPVwiMThcIj48L3VuaS1pY29ucz5cclxuICAgICAgICDmn6XnnIvov5DljZVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJvbnN1Ym1pdFwiIDpsb2FkaW5nPVwibG9hZGluZ1wiPlxyXG4gICAgICAgIDx1bmktaWNvbnMgdi1pZj1cIiFsb2FkaW5nXCIgdHlwZT1cImNoZWNrbWFya2VtcHR5XCIgc2l6ZT1cIjE4XCIgY29sb3I9XCJ3aGl0ZVwiPjwvdW5pLWljb25zPlxyXG4gICAgICAgIOaPkOS6pFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJzY2FuTG90bm9IaXN0b3J5Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgICAgPHRleHQgY2xhc3M9XCJ0aXRsZVwiPuiusOW9lSjmnIDov5E15p2hKTwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiBzY2FuTG90bm9IaXN0b3J5LnNsaWNlKDAsIDUpXCIgOmtleT1cImlcIj5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj57eyBpdGVtLnR5cGUgfX08L3RleHQ+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj57e1xyXG4gICAgICAgICAgaXRlbS5vcmRlck51bVxyXG4gICAgICAgIH19PC90ZXh0PlxyXG4gICAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICAgIHYtaWY9XCJpdGVtLnN0YXR1c1wiXHJcbiAgICAgICAgICB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgICAgc2l6ZT1cIjE2XCJcclxuICAgICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxyXG4gICAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cInN0YXR1cyBmYWlsXCIgdi1lbHNlPkY8L3RleHQ+XHJcbiAgICAgICAgPHRleHQgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBycHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj5cclxuICAgICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgICAgPC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcblxyXG4gICAgPHVuaS1wb3B1cCByZWY9XCJtZXNzYWdlUmVmXCIgdHlwZT1cIm1lc3NhZ2VcIj5cclxuICAgICAgPHVuaS1wb3B1cC1tZXNzYWdlXHJcbiAgICAgICAgOnR5cGU9XCJtZXNzYWdlVHlwZVwiXHJcbiAgICAgICAgOm1lc3NhZ2U9XCJtZXNzYWdlVGV4dFwiXHJcbiAgICAgICAgOmR1cmF0aW9uPVwiMjAwMFwiXHJcbiAgICAgID48L3VuaS1wb3B1cC1tZXNzYWdlPlxyXG4gICAgPC91bmktcG9wdXA+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVhY3RpdmUsIHJlZiwgbmV4dFRpY2ssIGNvbXB1dGVkIH0gZnJvbSAndnVlJ1xyXG5pbXBvcnQge1xyXG4gIG9uU2hvdyxcclxuICBvbkxvYWQsXHJcbiAgb25VbmxvYWQsXHJcbiAgb25IaWRlLFxyXG4gIG9uQmFja1ByZXNzLFxyXG4gIG9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCxcclxufSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgY2hlY2tQZXJtaXNzaW9uIH0gZnJvbSAnQC91dGlscydcclxuaW1wb3J0IHsgYmluZFNoaXBwaW5nLCBnZXRCaW5kUGFyYW1zLCBnZXRXYXliaWxscyB9IGZyb20gJ0Avc2VydmljZXMvc2NhbkxvdG5vJ1xyXG5cclxuY29uc3QgdmFsaUZvcm1SZWYgPSByZWYoKVxyXG5jb25zdCBsb2FkaW5nID0gcmVmKGZhbHNlKVxyXG5jb25zdCBoaWRlUGFnZSA9IHJlZihmYWxzZSlcclxuY29uc3QgZm9jdXNUeXBlID0gcmVmKHRydWUpXHJcbmNvbnN0IGVkaXRCYXRjaE51bSA9IHJlZihmYWxzZSlcclxuY29uc3QgZWRpdFBhbGxldE51bSA9IHJlZihmYWxzZSlcclxuY29uc3Qgc2NhbkxvdG5vSGlzdG9yeSA9IHJlZihbXSBhcyBhbnkpXHJcbmNvbnN0IG1lc3NhZ2VSZWYgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZigpXHJcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKClcclxubGV0IHN0OiBhbnlcclxuXHJcbmNvbnN0IHZhbGlGb3JtRGF0YSA9IHJlZih7XHJcbiAgb3JkZXJOdW06ICcnLFxyXG4gIHdlaWdodDogJycsXHJcbiAgYmF0Y2hOdW06ICcnLFxyXG4gIHBhbGxldE51bTogJzAnLFxyXG59KVxyXG5cclxuY29uc3QgcnVsZXMgPSByZWFjdGl2ZSh7XHJcbiAgb3JkZXJOdW06IHtcclxuICAgIHJ1bGVzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICBlcnJvck1lc3NhZ2U6ICfljZXlj7fkuI3og73kuLrnqbonLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG59KVxyXG5cclxuY29uc3Qgb3B0aW9ucyA9IHJlYWN0aXZlKHtcclxuICBiYXRjaDogW10gYXMgYW55LFxyXG4gIHBhbGxldDogW10gYXMgYW55LFxyXG59KVxyXG5cclxuY29uc3Qgc2NhbklucHV0ID0gYXN5bmMgKCkgPT4ge1xyXG5cclxuICBsZXQgc3RhdHVzID0gYXdhaXQgY2hlY2tQZXJtaXNzaW9uKClcclxuICBpZiAoc3RhdHVzICE9PSAxKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIHVuaS5zY2FuQ29kZSh7XHJcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgdmFsaUZvcm1EYXRhLnZhbHVlLm9yZGVyTnVtID0gcmVzLnJlc3VsdFxyXG4gICAgICBvbnN1Ym1pdCgpXHJcbiAgICB9LFxyXG4gICAgZmFpbDogKGVycikgPT4ge1xyXG4gICAgICAvLyDpnIDopoHms6jmhI/nmoTmmK/lsI/nqIvluo/miavnoIHkuI3pnIDopoHnlLPor7fnm7jmnLrmnYPpmZBcclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5jb25zdCByZXNldCA9ICgpID0+IHtcclxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcclxuICB2YWxpRm9ybURhdGEudmFsdWUub3JkZXJOdW0gPSAnJ1xyXG4gIHZhbGlGb3JtRGF0YS52YWx1ZS53ZWlnaHQgPSAnJ1xyXG4gIC8vIHZhbGlGb3JtRGF0YS52YWx1ZS5iYXRjaE51bSA9ICcnO1xyXG4gIC8vIHZhbGlGb3JtRGF0YS52YWx1ZS5wYWxsZXROdW0gPSAnJztcclxufVxyXG5cclxuY29uc3Qgc3VibWl0QmF0Y2hOdW0gPSAoKSA9PiB7XHJcbiAgaWYgKHZhbGlGb3JtRGF0YS52YWx1ZS5iYXRjaE51bSkge1xyXG4gICAgZWRpdEJhdGNoTnVtLnZhbHVlID0gdHJ1ZVxyXG4gICAgLy8gc2V0Rm9jdXMoKTtcclxuICB9IGVsc2Uge1xyXG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXHJcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfor7fpgInmi6nmibnmrKHlj7cnXHJcbiAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgYmF0Y2hOdW0gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gb3B0aW9ucy5iYXRjaC5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUgPT09IHZhbGlGb3JtRGF0YS52YWx1ZS5iYXRjaE51bSlcclxuICByZXR1cm4gcmVzPy50ZXh0XHJcbn0pXHJcbmNvbnN0IHN1Ym1pdFBhbGxldE51bSA9ICgpID0+IHtcclxuICBpZiAodmFsaUZvcm1EYXRhLnZhbHVlLnBhbGxldE51bSkge1xyXG4gICAgZWRpdFBhbGxldE51bS52YWx1ZSA9IHRydWVcclxuICAgIC8vIHNldEZvY3VzKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSAn6K+36YCJ5oup5omY55uY5Y+3J1xyXG4gICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBhbGxldE51bSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBmdW5jdGlvbiBmaW5kVGV4dEJ5VmFsdWUoYXJyOiBhbnksIHRhcmdldFZhbHVlOiBhbnkpIHtcclxuICAgIGZvciAobGV0IGl0ZW0gb2YgYXJyKSB7XHJcbiAgICAgIC8vIOajgOafpeW9k+WJjemhueeahCB2YWx1ZSDmmK/lkKbljLnphY1cclxuICAgICAgaWYgKGl0ZW0udmFsdWUgPT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udGV4dCAvLyDmib7liLDljLnphY3vvIzov5Tlm57lr7nlupTnmoQgdGV4dFxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDlpoLmnpzmnInlrZDpobnvvIzpgJLlvZLmn6Xmib5cclxuICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmluZFRleHRCeVZhbHVlKGl0ZW0uY2hpbGRyZW4sIHRhcmdldFZhbHVlKSBhcyBhbnlcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICByZXR1cm4gYCR7aXRlbS50ZXh0fS8ke3Jlc3VsdH1gIC8vIOi/lOWbnui3r+W+hFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGwgLy8g5aaC5p6c5rKh5pyJ5om+5Yiw77yM6L+U5ZueIG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IHRleHRQYXRoID0gZmluZFRleHRCeVZhbHVlKG9wdGlvbnMucGFsbGV0LCB2YWxpRm9ybURhdGEudmFsdWUucGFsbGV0TnVtKVxyXG4gIHJldHVybiB0ZXh0UGF0aFxyXG59KVxyXG5cclxuY29uc3QgY2hlY2tPcmRlciA9IGFzeW5jICgpID0+IHtcclxuICBsb2FkaW5nLnZhbHVlID0gdHJ1ZVxyXG4gIHVuaS5zZXRTdG9yYWdlU3luYygnd2F5YmlsbHMnLCBbXSlcclxuXHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0V2F5YmlsbHMoe1xyXG4gICAgb3JkZXJfbm86IHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlck51bSxcclxuICAgIGJhdGNoX251bWJlcjogdmFsaUZvcm1EYXRhLnZhbHVlLmJhdGNoTnVtLFxyXG4gICAgcGFsbGV0X251bWJlcjogdmFsaUZvcm1EYXRhLnZhbHVlLnBhbGxldE51bVxyXG4gICAgICA/IGZpbmRQYWxsZXROdW1JZEJ5VmFsdWUob3B0aW9ucy5wYWxsZXQsIHZhbGlGb3JtRGF0YS52YWx1ZS5wYWxsZXROdW0pXHJcbiAgICAgIDogJycsXHJcbiAgfSlcclxuXHJcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXHJcbiAgaWYgKHJlcy5jb2RlID09IDEpIHtcclxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ3N1Y2Nlc3MnXHJcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3dheWJpbGxzJywgcmVzLmRhdGEud2F5YmlsbHMpXHJcbiAgICB1bmkubmF2aWdhdGVUbyh7XHJcbiAgICAgIHVybDogJy9wYWdlcy9zY2FuTG90bm8vd2F5YmlsbHNMaXN0JyxcclxuICAgIH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXHJcbiAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgZmluZFBhbGxldE51bUlkQnlWYWx1ZSA9IChkYXRhOiBhbnksIHRhcmdldFZhbHVlOiBhbnkpID0+IHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGl0ZW0gPSBkYXRhW2ldXHJcbiAgICAvLyDmo4Dmn6XlvZPliY3pobnnmoQgbGFiZWxcclxuICAgIGlmIChpdGVtLmlkID09PSB0YXJnZXRWYWx1ZSB8fCBpdGVtLnZhbHVlID09PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gW2l0ZW0uaWRdXHJcbiAgICB9IGVsc2UgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkSWQgPSBmaW5kUGFsbGV0TnVtSWRCeVZhbHVlKGl0ZW0uY2hpbGRyZW4sIHRhcmdldFZhbHVlKSBhcyBhbnlcclxuICAgICAgaWYgKGNoaWxkSWQgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gY2hpbGRJZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmNvbnN0IG9uc3VibWl0ID0gYXN5bmMgKCkgPT4ge1xyXG4gIHN0ICYmIGNsZWFyVGltZW91dChzdClcclxuICBsb2FkaW5nLnZhbHVlID0gdHJ1ZVxyXG5cclxuICBjb25zdCByZXMgPSBhd2FpdCBiaW5kU2hpcHBpbmcoe1xyXG4gICAgb3JkZXJfbm86IHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlck51bSxcclxuICAgIHJld2VpZ2h0aW5nOiB2YWxpRm9ybURhdGEudmFsdWUud2VpZ2h0LFxyXG4gICAgYmF0Y2hfbnVtYmVyOiB2YWxpRm9ybURhdGEudmFsdWUuYmF0Y2hOdW0sXHJcbiAgICBwYWxsZXRfbnVtYmVyOiB2YWxpRm9ybURhdGEudmFsdWUucGFsbGV0TnVtXHJcbiAgICAgID8gZmluZFBhbGxldE51bUlkQnlWYWx1ZShvcHRpb25zLnBhbGxldCwgdmFsaUZvcm1EYXRhLnZhbHVlLnBhbGxldE51bSlcclxuICAgICAgOiAnJyxcclxuICB9KVxyXG5cclxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcclxuICBpZiAocmVzLmNvZGUgPT0gMSkge1xyXG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnc3VjY2VzcydcclxuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xyXG4gICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuXHJcbiAgICBpZiAocmVzLmRhdGEubGFiZWxzICYmIHJlcy5kYXRhLmxhYmVscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIF9fZl9fKCdsb2cnLCdhdCBwYWdlcy9zY2FuTG90bm8vc2NhbkxvdG5vLnZ1ZToyODgnLCfmnInmiZPljbDpnaLljZUnKVxyXG4gICAgICAvLyByZXMuZGF0YS5kYXRhLmxhYmVscy5tYXAoKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIC8vIFx0bGV0IHBhdGggPSBmdWxsVXJsKHVybCk7XHJcbiAgICAgIC8vIFx0d2luZG93Lm9wZW4ocGF0aCwgJ19ibGFuaycpO1xyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xyXG4gICAgICBvcmRlck51bTogdmFsaUZvcm1EYXRhLnZhbHVlLm9yZGVyTnVtLFxyXG4gICAgICBjcmVhdGVUaW1lOiBuZXcgRGF0ZSgpLFxyXG4gICAgICB0eXBlOiB2YWxpRm9ybURhdGEudmFsdWUuYmF0Y2hOdW0gPyAn57uR5a6a5om55qyhJyA6ICfnu5HlrprmiZjnm5gnLFxyXG4gICAgICBzdGF0dXM6IHRydWUsXHJcbiAgICB9XHJcbiAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvc2NhbkxvdG5vL3NjYW5Mb3Ruby52dWU6MzAwJywnc2NhbkxvdG5vSGlzdG9yeS0tJywgc2NhbkxvdG5vSGlzdG9yeSlcclxuICAgIHNjYW5Mb3Rub0hpc3RvcnkudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcclxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnc2NhbkxvdG5vSGlzdG9yeScsIHNjYW5Mb3Rub0hpc3RvcnkudmFsdWUpXHJcbiAgICBnZXRIaXN0b3J5KClcclxuICB9IGVsc2Uge1xyXG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXHJcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICBjb25zdCBoaXN0b3J5SXRlbSA9IHtcclxuICAgICAgb3JkZXJOdW06IHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlck51bSxcclxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcclxuICAgICAgdHlwZTogdmFsaUZvcm1EYXRhLnZhbHVlLmJhdGNoTnVtID8gJ+e7keWumuaJueasoScgOiAn57uR5a6a5omY55uYJyxcclxuICAgICAgc3RhdHVzOiBmYWxzZSxcclxuICAgIH1cclxuICAgIHNjYW5Mb3Rub0hpc3RvcnkudmFsdWUudW5zaGlmdChoaXN0b3J5SXRlbSlcclxuICAgIHVuaS5zZXRTdG9yYWdlU3luYygnc2NhbkxvdG5vSGlzdG9yeScsIHNjYW5Mb3Rub0hpc3RvcnkudmFsdWUpXHJcbiAgICBnZXRIaXN0b3J5KClcclxuICB9XHJcbiAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIHJlc2V0KClcclxuICAgIHNldEZvY3VzKClcclxuICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcclxuICB9LCAxMDAwKVxyXG59XHJcblxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIHNjYW5Mb3Rub0hpc3RvcnkudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NjYW5Mb3Rub0hpc3RvcnknKSB8fCBbXVxyXG59XHJcbmNvbnN0IGtleXByZXNzID0gKGU6IGFueSkgPT4ge1xyXG4gIC8vIDEwMiAg5bem5L6nICAgIDEwMyAg5Y+z5L6nICAgMTA0ICDkuK3pl7TmjInplK5cclxuICBpZiAoZS5rZXlDb2RlID09PSAxMDIgfHwgZS5rZXlDb2RlID09PSAxMDMgfHwgZS5rZXlDb2RlID09PSAxMDQpIHtcclxuICAgIC8v6L+Z6YeM5oyJ6ZSu5oiQ5YqfXHJcbiAgfVxyXG5cclxuICBpZiAoZS5rZXlDb2RlID09IDY2KSB7XHJcbiAgICAvL2VudGVy5oyJ6ZSuXHJcbiAgICAvL+i/memHjGlucHV05bey57uP5ou/5Yiw5pWw5o2u5LqG77yM5Zyo6L+Z6YeM5oqK5ou/5Yiw55qE5pWw5o2u77yM6YCa6L+H5o6l5Y+j5pWw5o2u6IGU6LCD6LW35p2lXHJcbiAgICBvbnN1Ym1pdCgpXHJcbiAgfVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcblxyXG5cclxuXHJcblxyXG59KVxyXG5vblVubG9hZCgoKSA9PiB7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcblxyXG5cclxuXHJcblxyXG59KVxyXG5vbkhpZGUoKCkgPT4ge1xyXG4gIGhpZGVQYWdlLnZhbHVlID0gdHJ1ZVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICBwbHVzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG5cclxuXHJcblxyXG5cclxufSlcclxub25CYWNrUHJlc3MoKCkgPT4ge1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICBwbHVzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG5cclxuXHJcblxyXG5cclxufSlcclxub25TaG93KCgpID0+IHtcclxuICBoaWRlUGFnZS52YWx1ZSA9IGZhbHNlXHJcbiAgX2dldEJpbmRQYXJhbXMoKVxyXG4gIGdldEhpc3RvcnkoKVxyXG59KVxyXG5jb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcclxuICBpZiAoaGlkZVBhZ2UudmFsdWUpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBmb2N1c1R5cGUudmFsdWUgPSBmYWxzZVxyXG4gIG5leHRUaWNrKCgpID0+IHtcclxuICAgIGZvY3VzVHlwZS52YWx1ZSA9IHRydWVcclxuICB9KVxyXG59XHJcbmNvbnN0IF9nZXRCaW5kUGFyYW1zID0gYXN5bmMgKCkgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldEJpbmRQYXJhbXMoKVxyXG5cclxuICBpZiAocmVzLmNvZGUgPT09IDEpIHtcclxuICAgIG9wdGlvbnMuYmF0Y2ggPSByZXMuZGF0YS5iYXRjaF9udW1iZXIubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHsgdGV4dDogaXRlbS5uYW1lLCB2YWx1ZTogaXRlbS5pZCB9XHJcbiAgICB9KVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWlubmVyLWRlY2xhcmF0aW9uc1xyXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIGRhdGEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IGlkLCB2YWx1ZSwgbGFiZWwsIC4uLnJlc3QgfSA9IGl0ZW1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaWQ6IGlkIHx8IHZhbHVlLFxyXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgICAgdGV4dDogbGFiZWwsXHJcbiAgICAgICAgICAuLi5yZXN0LFxyXG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4gPyB0cmFuc2Zvcm1EYXRhKGl0ZW0uY2hpbGRyZW4pIDogW10sXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc2hpcHBpbmcgPSB0cmFuc2Zvcm1EYXRhKHJlcy5kYXRhLnNoaXBwaW5nKVxyXG4gICAgX19mX18oJ2xvZycsJ2F0IHBhZ2VzL3NjYW5Mb3Ruby9zY2FuTG90bm8udnVlOjQxMicsJ3NoaXBwaW5nJywgc2hpcHBpbmcpXHJcblxyXG4gICAgb3B0aW9ucy5wYWxsZXQgPSBzaGlwcGluZ1xyXG4gIH1cclxufVxyXG5cclxub25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwKChldmVudCkgPT4ge1xyXG4gIGlmIChldmVudC5pbmRleCA9PT0gMCkge1xyXG4gICAgdW5pLm5hdmlnYXRlVG8oe1xyXG4gICAgICB1cmw6ICcvcGFnZXMvc2NhbkxvdG5vL2xvZ0xpc3QnLFxyXG4gICAgfSlcclxuICB9XHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbi5jb250YWluZXIge1xyXG4gIHBhZGRpbmc6IDE1cHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxufVxyXG5cclxuLndlaWdodC1yaWdodCB7XHJcbiAgcGFkZGluZy1yaWdodDogMTBycHg7XHJcbn1cclxuXHJcbi53ZWlnaHQtdGlwIHtcclxuICBjb2xvcjogZ3JheTtcclxuICBmb250LXNpemU6IDEycnB4O1xyXG59XHJcbjpkZWVwKC5zZWxlY3RlZC1hcmVhKSB7XHJcbiAgZmxleDogMCAxIGF1dG87XHJcbiAgaGVpZ2h0OiBhdXRvO1xyXG59XHJcbi5zZWxlY3QtaXRlbSB7XHJcbiAgOmRlZXAoLnVuaS1mb3Jtcy1pdGVtX19jb250ZW50KSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5cclxuICA6ZGVlcCgudW5pLWZvcm1zLWl0ZW1fX2xhYmVsKSB7XHJcbiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xyXG4gIH1cclxuXHJcbiAgYnV0dG9uIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBoZWlnaHQ6IDM1cHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDIwcnB4O1xyXG4gIH1cclxufVxyXG5cclxuLmJ1dHRvbi1ncm91cCB7XHJcbiAgbWFyZ2luLXRvcDogMTVweDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiAzNXB4O1xyXG4gICAgd2lkdGg6IDUwJTtcclxuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICB9XHJcblxyXG4gIC51bmktaWNvbnMge1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG4gIH1cclxufVxyXG5cclxuLmhpc3Rvcnkge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBqdXN0aWZ5LWl0ZW1zOiBzdGFydDtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgfVxyXG5cclxuICAudHlwZSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG5cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJjb250YWluZXJcIj5cclxuICAgIDx1bmktZm9ybXNcclxuICAgICAgcmVmPVwidmFsaUZvcm1SZWZcIlxyXG4gICAgICBsYWJlbC1hbGlnbj1cInJpZ2h0XCJcclxuICAgICAgOmxhYmVsLXdpZHRoPVwiODBcIlxyXG4gICAgICA6cnVsZXM9XCJydWxlc1wiXHJcbiAgICAgIDptb2RlbFZhbHVlPVwidmFsaUZvcm1EYXRhXCJcclxuICAgID5cclxuICAgICAgPHVuaS1mb3Jtcy1pdGVtIGxhYmVsPVwi6L+Q5Y2V5Y+356CBXCIgcmVxdWlyZWQgbmFtZT1cIm9yZGVyTnVtXCI+XHJcbiAgICAgICAgPHVuaS1lYXN5aW5wdXRcclxuICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEub3JkZXJOdW1cIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXljZXlj7dcIlxyXG4gICAgICAgICAgc3VmZml4SWNvbj1cInNjYW5cIlxyXG4gICAgICAgICAgOmZvY3VzPVwiZm9jdXNUeXBlXCJcclxuICAgICAgICAgIEBpY29uQ2xpY2s9XCJzY2FuSW5wdXRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XHJcbiAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIuWkjeensOmHjemHj1wiIG5hbWU9XCJ3ZWlnaHRcIj5cclxuICAgICAgICA8dW5pLWVhc3lpbnB1dFxyXG4gICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS53ZWlnaHRcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXlpI3np7Dph43ph49cIlxyXG4gICAgICAgICAgb25pbnB1dD1cInZhbHVlPXZhbHVlLnJlcGxhY2UoL1teXFxkLl0vZywnJykucmVwbGFjZSgvXlxcLi9nLCAnJykucmVwbGFjZSgvXFwuezIsfS9nLCAnJykucmVwbGFjZSgnLicsICckIyQnKS5yZXBsYWNlKC9cXC4vZywgJycpLnJlcGxhY2UoJyQjJCcsICcuJykubWF0Y2goL15cXGQqKFxcLj9cXGR7MCwyfSkvZylbMF0gfHwgbnVsbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRlbXBsYXRlICNyaWdodD5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ3ZWlnaHQtcmlnaHRcIj5LRzwvdmlldz5cclxuICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPC91bmktZWFzeWlucHV0PlxyXG4gICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxyXG4gICAgICA8IS0tIDx0ZXh0IGNsYXNzPSd3ZWlnaHQtdGlwJz7lpI3np7Dph43ph4/kvZznlKjmmK/noa7kv53lj6Xmg6DlrozmlbTvvIzpmLLmraLlt6XkvZzkurrlkZjorqHotLnnp7Dou4rlkI7ov5vooYznmoTlhbbku5bmk43kvZzlvJXotbfnmoTnianlk4HkuKLlpLHpl67popg8L3RleHQ+IC0tPlxyXG4gICAgICA8dW5pLWZvcm1zLWl0ZW0gbGFiZWw9XCLnu5HlrprmibnmrKHlj7dcIiBuYW1lPVwiYmF0Y2hOdW1cIiBjbGFzcz1cInNlbGVjdC1pdGVtXCI+XHJcbiAgICAgICAgPHVuaS1kYXRhLXNlbGVjdFxyXG4gICAgICAgICAgdi1pZj1cIiFlZGl0QmF0Y2hOdW1cIlxyXG4gICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS5iYXRjaE51bVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+mAieaLqeaJueasoeWPt1wiXHJcbiAgICAgICAgICA6bG9jYWxkYXRhPVwib3B0aW9ucy5iYXRjaFwiXHJcbiAgICAgICAgICA6Y2xlYXI9XCJmYWxzZVwiXHJcbiAgICAgICAgPjwvdW5pLWRhdGEtc2VsZWN0PlxyXG4gICAgICAgIDx1bmktZWFzeWlucHV0IHYtaWY9XCJlZGl0QmF0Y2hOdW1cIiA6dmFsdWU9XCJiYXRjaE51bVwiIDpkaXNhYmxlZD1cImVkaXRCYXRjaE51bVwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiB2LWlmPVwiIWVkaXRCYXRjaE51bVwiIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwic3VibWl0QmF0Y2hOdW1cIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHYtaWY9XCJlZGl0QmF0Y2hOdW1cIiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cImVkaXRCYXRjaE51bSA9IGZhbHNlXCI+5L+u5pS5PC9idXR0b24+XHJcbiAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XHJcbiAgICAgIDx1bmktZm9ybXMtaXRlbSBsYWJlbD1cIue7keWumuaJmOebmOWPt1wiIG5hbWU9XCJwYWxsZXROdW1cIiBjbGFzcz1cInNlbGVjdC1pdGVtXCI+XHJcbiAgICAgICAgPHVuaS1kYXRhLXBpY2tlclxyXG4gICAgICAgICAgdi1pZj1cIiFlZGl0UGFsbGV0TnVtXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oup5omY55uY5Y+3XCJcclxuICAgICAgICAgIHBvcHVwLXRpdGxlPVwi57uR5a6a5omY55uY5Y+3XCJcclxuICAgICAgICAgIDpsb2NhbGRhdGE9XCJvcHRpb25zLnBhbGxldFwiXHJcbiAgICAgICAgICB2LW1vZGVsPVwidmFsaUZvcm1EYXRhLnBhbGxldE51bVwiXHJcbiAgICAgICAgICA6Y2xlYXItaWNvbj1cImZhbHNlXCJcclxuICAgICAgICA+PC91bmktZGF0YS1waWNrZXI+XHJcblxyXG4gICAgICAgIDx1bmktZWFzeWlucHV0IHYtaWY9XCJlZGl0UGFsbGV0TnVtXCIgOnZhbHVlPVwicGFsbGV0TnVtXCIgOmRpc2FibGVkPVwiZWRpdFBhbGxldE51bVwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiB2LWlmPVwiIWVkaXRQYWxsZXROdW1cIiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cInN1Ym1pdFBhbGxldE51bVwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdi1pZj1cImVkaXRQYWxsZXROdW1cIiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cImVkaXRQYWxsZXROdW0gPSBmYWxzZVwiPuS/ruaUuTwvYnV0dG9uPlxyXG4gICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxyXG4gICAgPC91bmktZm9ybXM+XHJcbiAgICA8dmlldyBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQGNsaWNrPVwicmVzZXRcIj7ph43nva48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEBjbGljaz1cImNoZWNrT3JkZXJcIiA6bG9hZGluZz1cImxvYWRpbmdcIj5cclxuICAgICAgICA8dW5pLWljb25zIHYtaWY9XCIhbG9hZGluZ1wiIHR5cGU9XCJzZWFyY2hcIiBzaXplPVwiMThcIj48L3VuaS1pY29ucz5cclxuICAgICAgICDmn6XnnIvov5DljZVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJvbnN1Ym1pdFwiIDpsb2FkaW5nPVwibG9hZGluZ1wiPlxyXG4gICAgICAgIDx1bmktaWNvbnMgdi1pZj1cIiFsb2FkaW5nXCIgdHlwZT1cImNoZWNrbWFya2VtcHR5XCIgc2l6ZT1cIjE4XCIgY29sb3I9XCJ3aGl0ZVwiPjwvdW5pLWljb25zPlxyXG4gICAgICAgIOaPkOS6pFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJzY2FuTG90bm9IaXN0b3J5Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgICAgPHRleHQgY2xhc3M9XCJ0aXRsZVwiPuiusOW9lSjmnIDov5E15p2hKTwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiBzY2FuTG90bm9IaXN0b3J5LnNsaWNlKDAsIDUpXCIgOmtleT1cImlcIj5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj57eyBpdGVtLnR5cGUgfX08L3RleHQ+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj57e1xyXG4gICAgICAgICAgaXRlbS5vcmRlck51bVxyXG4gICAgICAgIH19PC90ZXh0PlxyXG4gICAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICAgIHYtaWY9XCJpdGVtLnN0YXR1c1wiXHJcbiAgICAgICAgICB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgICAgc2l6ZT1cIjE2XCJcclxuICAgICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxyXG4gICAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cInN0YXR1cyBmYWlsXCIgdi1lbHNlPkY8L3RleHQ+XHJcbiAgICAgICAgPHRleHQgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBycHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj5cclxuICAgICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgICAgPC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcblxyXG4gICAgPHVuaS1wb3B1cCByZWY9XCJtZXNzYWdlUmVmXCIgdHlwZT1cIm1lc3NhZ2VcIj5cclxuICAgICAgPHVuaS1wb3B1cC1tZXNzYWdlXHJcbiAgICAgICAgOnR5cGU9XCJtZXNzYWdlVHlwZVwiXHJcbiAgICAgICAgOm1lc3NhZ2U9XCJtZXNzYWdlVGV4dFwiXHJcbiAgICAgICAgOmR1cmF0aW9uPVwiMjAwMFwiXHJcbiAgICAgID48L3VuaS1wb3B1cC1tZXNzYWdlPlxyXG4gICAgPC91bmktcG9wdXA+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVhY3RpdmUsIHJlZiwgbmV4dFRpY2ssIGNvbXB1dGVkIH0gZnJvbSAndnVlJ1xyXG5pbXBvcnQge1xyXG4gIG9uU2hvdyxcclxuICBvbkxvYWQsXHJcbiAgb25VbmxvYWQsXHJcbiAgb25IaWRlLFxyXG4gIG9uQmFja1ByZXNzLFxyXG4gIG9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCxcclxufSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgY2hlY2tQZXJtaXNzaW9uIH0gZnJvbSAnQC91dGlscydcclxuaW1wb3J0IHsgYmluZFNoaXBwaW5nLCBnZXRCaW5kUGFyYW1zLCBnZXRXYXliaWxscyB9IGZyb20gJ0Avc2VydmljZXMvc2NhbkxvdG5vJ1xyXG5cclxuY29uc3QgdmFsaUZvcm1SZWYgPSByZWYoKVxyXG5jb25zdCBsb2FkaW5nID0gcmVmKGZhbHNlKVxyXG5jb25zdCBoaWRlUGFnZSA9IHJlZihmYWxzZSlcclxuY29uc3QgZm9jdXNUeXBlID0gcmVmKHRydWUpXHJcbmNvbnN0IGVkaXRCYXRjaE51bSA9IHJlZihmYWxzZSlcclxuY29uc3QgZWRpdFBhbGxldE51bSA9IHJlZihmYWxzZSlcclxuY29uc3Qgc2NhbkxvdG5vSGlzdG9yeSA9IHJlZihbXSBhcyBhbnkpXHJcbmNvbnN0IG1lc3NhZ2VSZWYgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZigpXHJcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKClcclxubGV0IHN0OiBhbnlcclxuXHJcbmNvbnN0IHZhbGlGb3JtRGF0YSA9IHJlZih7XHJcbiAgb3JkZXJOdW06ICcnLFxyXG4gIHdlaWdodDogJycsXHJcbiAgYmF0Y2hOdW06ICcnLFxyXG4gIHBhbGxldE51bTogJzAnLFxyXG59KVxyXG5cclxuY29uc3QgcnVsZXMgPSByZWFjdGl2ZSh7XHJcbiAgb3JkZXJOdW06IHtcclxuICAgIHJ1bGVzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICBlcnJvck1lc3NhZ2U6ICfljZXlj7fkuI3og73kuLrnqbonLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG59KVxyXG5cclxuY29uc3Qgb3B0aW9ucyA9IHJlYWN0aXZlKHtcclxuICBiYXRjaDogW10gYXMgYW55LFxyXG4gIHBhbGxldDogW10gYXMgYW55LFxyXG59KVxyXG5cclxuY29uc3Qgc2NhbklucHV0ID0gYXN5bmMgKCkgPT4ge1xyXG4gIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gIGxldCBzdGF0dXMgPSBhd2FpdCBjaGVja1Blcm1pc3Npb24oKVxyXG4gIGlmIChzdGF0dXMgIT09IDEpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICAvLyAjZW5kaWZcclxuICB1bmkuc2NhbkNvZGUoe1xyXG4gICAgc3VjY2VzczogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlck51bSA9IHJlcy5yZXN1bHRcclxuICAgICAgb25zdWJtaXQoKVxyXG4gICAgfSxcclxuICAgIGZhaWw6IChlcnIpID0+IHtcclxuICAgICAgLy8g6ZyA6KaB5rOo5oSP55qE5piv5bCP56iL5bqP5omr56CB5LiN6ZyA6KaB55Sz6K+355u45py65p2D6ZmQXHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuY29uc3QgcmVzZXQgPSAoKSA9PiB7XHJcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXHJcbiAgdmFsaUZvcm1EYXRhLnZhbHVlLm9yZGVyTnVtID0gJydcclxuICB2YWxpRm9ybURhdGEudmFsdWUud2VpZ2h0ID0gJydcclxuICAvLyB2YWxpRm9ybURhdGEudmFsdWUuYmF0Y2hOdW0gPSAnJztcclxuICAvLyB2YWxpRm9ybURhdGEudmFsdWUucGFsbGV0TnVtID0gJyc7XHJcbn1cclxuXHJcbmNvbnN0IHN1Ym1pdEJhdGNoTnVtID0gKCkgPT4ge1xyXG4gIGlmICh2YWxpRm9ybURhdGEudmFsdWUuYmF0Y2hOdW0pIHtcclxuICAgIGVkaXRCYXRjaE51bS52YWx1ZSA9IHRydWVcclxuICAgIC8vIHNldEZvY3VzKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSAn6K+36YCJ5oup5om55qyh5Y+3J1xyXG4gICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGJhdGNoTnVtID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IG9wdGlvbnMuYmF0Y2guZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlID09PSB2YWxpRm9ybURhdGEudmFsdWUuYmF0Y2hOdW0pXHJcbiAgcmV0dXJuIHJlcz8udGV4dFxyXG59KVxyXG5jb25zdCBzdWJtaXRQYWxsZXROdW0gPSAoKSA9PiB7XHJcbiAgaWYgKHZhbGlGb3JtRGF0YS52YWx1ZS5wYWxsZXROdW0pIHtcclxuICAgIGVkaXRQYWxsZXROdW0udmFsdWUgPSB0cnVlXHJcbiAgICAvLyBzZXRGb2N1cygpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcclxuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+ivt+mAieaLqeaJmOebmOWPtydcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwYWxsZXROdW0gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgZnVuY3Rpb24gZmluZFRleHRCeVZhbHVlKGFycjogYW55LCB0YXJnZXRWYWx1ZTogYW55KSB7XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIGFycikge1xyXG4gICAgICAvLyDmo4Dmn6XlvZPliY3pobnnmoQgdmFsdWUg5piv5ZCm5Yy56YWNXHJcbiAgICAgIGlmIChpdGVtLnZhbHVlID09PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnRleHQgLy8g5om+5Yiw5Yy56YWN77yM6L+U5Zue5a+55bqU55qEIHRleHRcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5aaC5p6c5pyJ5a2Q6aG577yM6YCS5b2S5p+l5om+XHJcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRUZXh0QnlWYWx1ZShpdGVtLmNoaWxkcmVuLCB0YXJnZXRWYWx1ZSkgYXMgYW55XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgcmV0dXJuIGAke2l0ZW0udGV4dH0vJHtyZXN1bHR9YCAvLyDov5Tlm57ot6/lvoRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsIC8vIOWmguaenOayoeacieaJvuWIsO+8jOi/lOWbniBudWxsXHJcbiAgfVxyXG5cclxuICBjb25zdCB0ZXh0UGF0aCA9IGZpbmRUZXh0QnlWYWx1ZShvcHRpb25zLnBhbGxldCwgdmFsaUZvcm1EYXRhLnZhbHVlLnBhbGxldE51bSlcclxuICByZXR1cm4gdGV4dFBhdGhcclxufSlcclxuXHJcbmNvbnN0IGNoZWNrT3JkZXIgPSBhc3luYyAoKSA9PiB7XHJcbiAgbG9hZGluZy52YWx1ZSA9IHRydWVcclxuICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3dheWJpbGxzJywgW10pXHJcblxyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldFdheWJpbGxzKHtcclxuICAgIG9yZGVyX25vOiB2YWxpRm9ybURhdGEudmFsdWUub3JkZXJOdW0sXHJcbiAgICBiYXRjaF9udW1iZXI6IHZhbGlGb3JtRGF0YS52YWx1ZS5iYXRjaE51bSxcclxuICAgIHBhbGxldF9udW1iZXI6IHZhbGlGb3JtRGF0YS52YWx1ZS5wYWxsZXROdW1cclxuICAgICAgPyBmaW5kUGFsbGV0TnVtSWRCeVZhbHVlKG9wdGlvbnMucGFsbGV0LCB2YWxpRm9ybURhdGEudmFsdWUucGFsbGV0TnVtKVxyXG4gICAgICA6ICcnLFxyXG4gIH0pXHJcblxyXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIGlmIChyZXMuY29kZSA9PSAxKSB7XHJcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xyXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXHJcbiAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgdW5pLnNldFN0b3JhZ2VTeW5jKCd3YXliaWxscycsIHJlcy5kYXRhLndheWJpbGxzKVxyXG4gICAgdW5pLm5hdmlnYXRlVG8oe1xyXG4gICAgICB1cmw6ICcvcGFnZXMvc2NhbkxvdG5vL3dheWJpbGxzTGlzdCcsXHJcbiAgICB9KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcclxuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gcmVzLm1zZ1xyXG4gICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGZpbmRQYWxsZXROdW1JZEJ5VmFsdWUgPSAoZGF0YTogYW55LCB0YXJnZXRWYWx1ZTogYW55KSA9PiB7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBpdGVtID0gZGF0YVtpXVxyXG4gICAgLy8g5qOA5p+l5b2T5YmN6aG555qEIGxhYmVsXHJcbiAgICBpZiAoaXRlbS5pZCA9PT0gdGFyZ2V0VmFsdWUgfHwgaXRlbS52YWx1ZSA9PT0gdGFyZ2V0VmFsdWUpIHtcclxuICAgICAgcmV0dXJuIFtpdGVtLmlkXVxyXG4gICAgfSBlbHNlIGlmIChpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBjaGlsZElkID0gZmluZFBhbGxldE51bUlkQnlWYWx1ZShpdGVtLmNoaWxkcmVuLCB0YXJnZXRWYWx1ZSkgYXMgYW55XHJcbiAgICAgIGlmIChjaGlsZElkICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkSWRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbnVsbFxyXG59XHJcblxyXG5jb25zdCBvbnN1Ym1pdCA9IGFzeW5jICgpID0+IHtcclxuICBzdCAmJiBjbGVhclRpbWVvdXQoc3QpXHJcbiAgbG9hZGluZy52YWx1ZSA9IHRydWVcclxuXHJcbiAgY29uc3QgcmVzID0gYXdhaXQgYmluZFNoaXBwaW5nKHtcclxuICAgIG9yZGVyX25vOiB2YWxpRm9ybURhdGEudmFsdWUub3JkZXJOdW0sXHJcbiAgICByZXdlaWdodGluZzogdmFsaUZvcm1EYXRhLnZhbHVlLndlaWdodCxcclxuICAgIGJhdGNoX251bWJlcjogdmFsaUZvcm1EYXRhLnZhbHVlLmJhdGNoTnVtLFxyXG4gICAgcGFsbGV0X251bWJlcjogdmFsaUZvcm1EYXRhLnZhbHVlLnBhbGxldE51bVxyXG4gICAgICA/IGZpbmRQYWxsZXROdW1JZEJ5VmFsdWUob3B0aW9ucy5wYWxsZXQsIHZhbGlGb3JtRGF0YS52YWx1ZS5wYWxsZXROdW0pXHJcbiAgICAgIDogJycsXHJcbiAgfSlcclxuXHJcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXHJcbiAgaWYgKHJlcy5jb2RlID09IDEpIHtcclxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ3N1Y2Nlc3MnXHJcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcblxyXG4gICAgaWYgKHJlcy5kYXRhLmxhYmVscyAmJiByZXMuZGF0YS5sYWJlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZygn5pyJ5omT5Y2w6Z2i5Y2VJylcclxuICAgICAgLy8gcmVzLmRhdGEuZGF0YS5sYWJlbHMubWFwKCh1cmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAvLyBcdGxldCBwYXRoID0gZnVsbFVybCh1cmwpO1xyXG4gICAgICAvLyBcdHdpbmRvdy5vcGVuKHBhdGgsICdfYmxhbmsnKTtcclxuICAgICAgLy8gfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBoaXN0b3J5SXRlbSA9IHtcclxuICAgICAgb3JkZXJOdW06IHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlck51bSxcclxuICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcclxuICAgICAgdHlwZTogdmFsaUZvcm1EYXRhLnZhbHVlLmJhdGNoTnVtID8gJ+e7keWumuaJueasoScgOiAn57uR5a6a5omY55uYJyxcclxuICAgICAgc3RhdHVzOiB0cnVlLFxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ3NjYW5Mb3Rub0hpc3RvcnktLScsIHNjYW5Mb3Rub0hpc3RvcnkpXHJcbiAgICBzY2FuTG90bm9IaXN0b3J5LnZhbHVlLnVuc2hpZnQoaGlzdG9yeUl0ZW0pXHJcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3NjYW5Mb3Rub0hpc3RvcnknLCBzY2FuTG90bm9IaXN0b3J5LnZhbHVlKVxyXG4gICAgZ2V0SGlzdG9yeSgpXHJcbiAgfSBlbHNlIHtcclxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXHJcbiAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XHJcbiAgICAgIG9yZGVyTnVtOiB2YWxpRm9ybURhdGEudmFsdWUub3JkZXJOdW0sXHJcbiAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXHJcbiAgICAgIHR5cGU6IHZhbGlGb3JtRGF0YS52YWx1ZS5iYXRjaE51bSA/ICfnu5HlrprmibnmrKEnIDogJ+e7keWumuaJmOebmCcsXHJcbiAgICAgIHN0YXR1czogZmFsc2UsXHJcbiAgICB9XHJcbiAgICBzY2FuTG90bm9IaXN0b3J5LnZhbHVlLnVuc2hpZnQoaGlzdG9yeUl0ZW0pXHJcbiAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3NjYW5Mb3Rub0hpc3RvcnknLCBzY2FuTG90bm9IaXN0b3J5LnZhbHVlKVxyXG4gICAgZ2V0SGlzdG9yeSgpXHJcbiAgfVxyXG4gIHN0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICByZXNldCgpXHJcbiAgICBzZXRGb2N1cygpXHJcbiAgICBzdCAmJiBjbGVhclRpbWVvdXQoc3QpXHJcbiAgfSwgMTAwMClcclxufVxyXG5cclxuY29uc3QgZ2V0SGlzdG9yeSA9ICgpID0+IHtcclxuICBzY2FuTG90bm9IaXN0b3J5LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdzY2FuTG90bm9IaXN0b3J5JykgfHwgW11cclxufVxyXG5jb25zdCBrZXlwcmVzcyA9IChlOiBhbnkpID0+IHtcclxuICAvLyAxMDIgIOW3puS+pyAgICAxMDMgIOWPs+S+pyAgIDEwNCAg5Lit6Ze05oyJ6ZSuXHJcbiAgaWYgKGUua2V5Q29kZSA9PT0gMTAyIHx8IGUua2V5Q29kZSA9PT0gMTAzIHx8IGUua2V5Q29kZSA9PT0gMTA0KSB7XHJcbiAgICAvL+i/memHjOaMiemUruaIkOWKn1xyXG4gIH1cclxuXHJcbiAgaWYgKGUua2V5Q29kZSA9PSA2Nikge1xyXG4gICAgLy9lbnRlcuaMiemUrlxyXG4gICAgLy/ov5nph4xpbnB1dOW3sue7j+aLv+WIsOaVsOaNruS6hu+8jOWcqOi/memHjOaKiuaLv+WIsOeahOaVsOaNru+8jOmAmui/h+aOpeWPo+aVsOaNruiBlOiwg+i1t+adpVxyXG4gICAgb25zdWJtaXQoKVxyXG4gIH1cclxufVxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbiAgLy8gI2lmZGVmIEg1XHJcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuICAvLyAjZW5kaWZcclxufSlcclxub25VbmxvYWQoKCkgPT4ge1xyXG4gIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbiAgLy8gI2lmZGVmIEg1XHJcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuICAvLyAjZW5kaWZcclxufSlcclxub25IaWRlKCgpID0+IHtcclxuICBoaWRlUGFnZS52YWx1ZSA9IHRydWVcclxuICAvLyAjaWZkZWYgQVBQLVBMVVNcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICBwbHVzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG4gIC8vICNlbmRpZlxyXG4gIC8vICNpZmRlZiBINVxyXG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbn0pXHJcbm9uQmFja1ByZXNzKCgpID0+IHtcclxuICAvLyAjaWZkZWYgQVBQLVBMVVNcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICBwbHVzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG4gIC8vICNlbmRpZlxyXG4gIC8vICNpZmRlZiBINVxyXG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbn0pXHJcbm9uU2hvdygoKSA9PiB7XHJcbiAgaGlkZVBhZ2UudmFsdWUgPSBmYWxzZVxyXG4gIF9nZXRCaW5kUGFyYW1zKClcclxuICBnZXRIaXN0b3J5KClcclxufSlcclxuY29uc3Qgc2V0Rm9jdXMgPSAoKSA9PiB7XHJcbiAgaWYgKGhpZGVQYWdlLnZhbHVlKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgZm9jdXNUeXBlLnZhbHVlID0gZmFsc2VcclxuICBuZXh0VGljaygoKSA9PiB7XHJcbiAgICBmb2N1c1R5cGUudmFsdWUgPSB0cnVlXHJcbiAgfSlcclxufVxyXG5jb25zdCBfZ2V0QmluZFBhcmFtcyA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRCaW5kUGFyYW1zKClcclxuXHJcbiAgaWYgKHJlcy5jb2RlID09PSAxKSB7XHJcbiAgICBvcHRpb25zLmJhdGNoID0gcmVzLmRhdGEuYmF0Y2hfbnVtYmVyLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiB7IHRleHQ6IGl0ZW0ubmFtZSwgdmFsdWU6IGl0ZW0uaWQgfVxyXG4gICAgfSlcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbm5lci1kZWNsYXJhdGlvbnNcclxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YTogYW55KSB7XHJcbiAgICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBpZCwgdmFsdWUsIGxhYmVsLCAuLi5yZXN0IH0gPSBpdGVtXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGlkOiBpZCB8fCB2YWx1ZSxcclxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgIHRleHQ6IGxhYmVsLFxyXG4gICAgICAgICAgLi4ucmVzdCxcclxuICAgICAgICAgIGNoaWxkcmVuOiBpdGVtLmNoaWxkcmVuID8gdHJhbnNmb3JtRGF0YShpdGVtLmNoaWxkcmVuKSA6IFtdLFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IHNoaXBwaW5nID0gdHJhbnNmb3JtRGF0YShyZXMuZGF0YS5zaGlwcGluZylcclxuICAgIGNvbnNvbGUubG9nKCdzaGlwcGluZycsIHNoaXBwaW5nKVxyXG5cclxuICAgIG9wdGlvbnMucGFsbGV0ID0gc2hpcHBpbmdcclxuICB9XHJcbn1cclxuXHJcbm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCgoZXZlbnQpID0+IHtcclxuICBpZiAoZXZlbnQuaW5kZXggPT09IDApIHtcclxuICAgIHVuaS5uYXZpZ2F0ZVRvKHtcclxuICAgICAgdXJsOiAnL3BhZ2VzL3NjYW5Mb3Ruby9sb2dMaXN0JyxcclxuICAgIH0pXHJcbiAgfVxyXG59KVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG4uY29udGFpbmVyIHtcclxuICBwYWRkaW5nOiAxNXB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbi53ZWlnaHQtcmlnaHQge1xyXG4gIHBhZGRpbmctcmlnaHQ6IDEwcnB4O1xyXG59XHJcblxyXG4ud2VpZ2h0LXRpcCB7XHJcbiAgY29sb3I6IGdyYXk7XHJcbiAgZm9udC1zaXplOiAxMnJweDtcclxufVxyXG46ZGVlcCguc2VsZWN0ZWQtYXJlYSkge1xyXG4gIGZsZXg6IDAgMSBhdXRvO1xyXG4gIGhlaWdodDogYXV0bztcclxufVxyXG4uc2VsZWN0LWl0ZW0ge1xyXG4gIDpkZWVwKC51bmktZm9ybXMtaXRlbV9fY29udGVudCkge1xyXG4gICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG4gIH1cclxuXHJcbiAgOmRlZXAoLnVuaS1mb3Jtcy1pdGVtX19sYWJlbCkge1xyXG4gICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiAzNXB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgIG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuICB9XHJcbn1cclxuXHJcbi5idXR0b24tZ3JvdXAge1xyXG4gIG1hcmdpbi10b3A6IDE1cHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG5cclxuICBidXR0b24ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGhlaWdodDogMzVweDtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG5cclxuICAudW5pLWljb25zIHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxuICB9XHJcbn1cclxuXHJcbi5oaXN0b3J5IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuXHJcbiAgLmNvZGUge1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG5cclxuICAgIC5zdGF0dXMge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mYWlsIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6ICNmMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuaXMtZW1wdHkge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4IDA7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gc2NhbkxvdG5vSGlzdG9yeVwiIDprZXk9XCJpXCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwidHlwZVwiPnt7IGl0ZW0udHlwZSB9fTwvdGV4dD5cclxuICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj57e1xyXG4gICAgICAgIGl0ZW0ub3JkZXJOdW1cclxuICAgICAgfX08L3RleHQ+XHJcbiAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxyXG4gICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgIHNpemU9XCIxNlwiXHJcbiAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxyXG4gICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJzY2FuTG90bm9IaXN0b3J5Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiaXMtZW1wdHlcIj7mmoLml6Dljoblj7I8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuY29uc3Qgc2NhbkxvdG5vSGlzdG9yeSA9IHJlZihbXSBhcyBhbnkpXHJcbmNvbnN0IGdldEhpc3RvcnkgPSAoKSA9PiB7XHJcbiAgc2NhbkxvdG5vSGlzdG9yeS52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygnc2NhbkxvdG5vSGlzdG9yeScpXHJcbn1cclxub25Mb2FkKCgpID0+IHtcclxuICBnZXRIaXN0b3J5KClcclxufSlcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5oaXN0b3J5IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuICAudHlwZSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG4gIC5jb2RlIHtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgfVxyXG5cclxuICAuaXRlbSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjBycHg7XHJcbiAgICBjb2xvcjogIzY2NjtcclxuXHJcbiAgICAuc3RhdHVzIHtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAyMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAuZmFpbCB7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgIGNvbG9yOiAjZjAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmlzLWVtcHR5IHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbjogNDBweCAwO1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIHNjYW5Mb3Rub0hpc3RvcnlcIiA6a2V5PVwiaVwiPlxyXG4gICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj57eyBpdGVtLnR5cGUgfX08L3RleHQ+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwiY29kZVwiIDpzdHlsZT1cInsgY29sb3I6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2JyB9XCI+e3tcclxuICAgICAgICBpdGVtLm9yZGVyTnVtXHJcbiAgICAgIH19PC90ZXh0PlxyXG4gICAgICA8dW5pLWljb25zXHJcbiAgICAgICAgdi1pZj1cIml0ZW0uc3RhdHVzXCJcclxuICAgICAgICB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIlxyXG4gICAgICAgIGNsYXNzPVwic3RhdHVzXCJcclxuICAgICAgICBzaXplPVwiMTZcIlxyXG4gICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxyXG4gICAgICA+PC91bmktaWNvbnM+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwic3RhdHVzIGZhaWxcIiB2LWVsc2U+RjwvdGV4dD5cclxuICAgICAgPHRleHQgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBycHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj5cclxuICAgICAgICB7eyAnXFxyXFxuJyArIGl0ZW0uY3JlYXRlVGltZSB9fVxyXG4gICAgICA8L3RleHQ+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8dmlldyB2LWlmPVwic2NhbkxvdG5vSGlzdG9yeS5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IHNjYW5Mb3Rub0hpc3RvcnkgPSByZWYoW10gYXMgYW55KVxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIHNjYW5Mb3Rub0hpc3RvcnkudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NjYW5Mb3Rub0hpc3RvcnknKVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uaGlzdG9yeSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICB3aWR0aDogMTAwJTtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcblx0PHZpZXcgY2xhc3M9XCJ1bmktc2VjdGlvblwiPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ1bmktc2VjdGlvbi1oZWFkZXJcIiBAY2xpY2s9XCJvbkNsaWNrXCI+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ1bmktc2VjdGlvbi1oZWFkZXJfX2RlY29yYXRpb25cIiB2LWlmPVwidHlwZVwiIDpjbGFzcz1cInR5cGVcIiAvPlxyXG4gICAgICAgIDxzbG90IHYtZWxzZSBuYW1lPVwiZGVjb3JhdGlvblwiPjwvc2xvdD5cclxuXHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ1bmktc2VjdGlvbi1oZWFkZXJfX2NvbnRlbnRcIj5cclxuICAgICAgICAgIDx0ZXh0IDpzdHlsZT1cInsnZm9udC1zaXplJzp0aXRsZUZvbnRTaXplLCdjb2xvcic6dGl0bGVDb2xvcn1cIiBjbGFzcz1cInVuaS1zZWN0aW9uX19jb250ZW50LXRpdGxlXCIgOmNsYXNzPVwieydkaXN0cmFjdGlvbic6IXN1YlRpdGxlfVwiPnt7IHRpdGxlIH19PC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgdi1pZj1cInN1YlRpdGxlXCIgOnN0eWxlPVwieydmb250LXNpemUnOnN1YlRpdGxlRm9udFNpemUsJ2NvbG9yJzpzdWJUaXRsZUNvbG9yfVwiIGNsYXNzPVwidW5pLXNlY3Rpb24taGVhZGVyX19jb250ZW50LXN1YlwiPnt7IHN1YlRpdGxlIH19PC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ1bmktc2VjdGlvbi1oZWFkZXJfX3Nsb3QtcmlnaHRcIj5cclxuICAgICAgICAgIDxzbG90IG5hbWU9XCJyaWdodFwiPjwvc2xvdD5cclxuICAgICAgICA8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ1bmktc2VjdGlvbi1jb250ZW50XCIgOnN0eWxlPVwie3BhZGRpbmc6IF9wYWRkaW5nfVwiPlxyXG5cdFx0XHQ8c2xvdCAvPlxyXG5cdFx0PC92aWV3PlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlY3Rpb24g5qCH6aKY5qCPXHJcblx0ICogQGRlc2NyaXB0aW9uIOagh+mimOagj1xyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0eXBlID0gW2xpbmV8Y2lyY2xlfHNxdWFyZV0g5qCH6aKY6KOF6aWw57G75Z6LXHJcblx0ICogXHRAdmFsdWUgbGluZSDnq5bnur9cclxuXHQgKiBcdEB2YWx1ZSBjaXJjbGUg5ZyG5b2iXHJcblx0ICogXHRAdmFsdWUgc3F1YXJlIOato+aWueW9olxyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0aXRsZSDkuLvmoIfpophcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gdGl0bGVGb250U2l6ZSDkuLvmoIfpopjlrZfkvZPlpKflsI9cclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gdGl0bGVDb2xvciDkuLvmoIfpopjlrZfkvZPpopzoibJcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gc3ViVGl0bGUg5Ymv5qCH6aKYXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHN1YlRpdGxlRm9udFNpemUg5Ymv5qCH6aKY5a2X5L2T5aSn5bCPXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHN1YlRpdGxlQ29sb3Ig5Ymv5qCH6aKY5a2X5L2T6aKc6ImyXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHBhZGRpbmcg6buY6K6k5o+S5qe9IHBhZGRpbmdcclxuXHQgKi9cclxuXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0bmFtZTogJ1VuaVNlY3Rpb24nLFxyXG4gICAgZW1pdHM6WydjbGljayddLFxyXG5cdFx0cHJvcHM6IHtcclxuXHRcdFx0dHlwZToge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRkZWZhdWx0OiAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdHR5cGU6IFN0cmluZyxcclxuXHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcclxuXHRcdFx0XHRkZWZhdWx0OiAnJ1xyXG5cdFx0XHR9LFxyXG4gICAgICB0aXRsZUZvbnRTaXplOiB7XHJcbiAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHQ6ICcxNHB4J1xyXG4gICAgICB9LFxyXG5cdFx0XHR0aXRsZUNvbG9yOntcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJyMzMzMnXHJcblx0XHRcdH0sXHJcblx0XHRcdHN1YlRpdGxlOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcbiAgICAgIHN1YlRpdGxlRm9udFNpemU6IHtcclxuICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgZGVmYXVsdDogJzEycHgnXHJcbiAgICAgIH0sXHJcbiAgICAgIHN1YlRpdGxlQ29sb3I6IHtcclxuICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgZGVmYXVsdDogJyM5OTknXHJcbiAgICAgIH0sXHJcblx0XHRcdHBhZGRpbmc6IHtcclxuXHRcdFx0XHR0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcclxuXHRcdFx0XHRkZWZhdWx0OiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG4gICAgY29tcHV0ZWQ6e1xyXG4gICAgICBfcGFkZGluZygpe1xyXG4gICAgICAgIGlmKHR5cGVvZiB0aGlzLnBhZGRpbmcgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnBhZGRpbmdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhZGRpbmc/JzEwcHgnOicnXHJcbiAgICAgIH1cclxuICAgIH0sXHJcblx0XHR3YXRjaDoge1xyXG5cdFx0XHR0aXRsZShuZXdWYWwpIHtcclxuXHRcdFx0XHRpZiAodW5pLnJlcG9ydCAmJiBuZXdWYWwgIT09ICcnKSB7XHJcblx0XHRcdFx0XHR1bmkucmVwb3J0KCd0aXRsZScsIG5ld1ZhbClcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcbiAgICBtZXRob2RzOiB7XHJcblx0XHRcdG9uQ2xpY2soKSB7XHJcblx0XHRcdFx0dGhpcy4kZW1pdCgnY2xpY2snKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgPlxyXG5cdCR1bmktcHJpbWFyeTogIzI5NzlmZiAhZGVmYXVsdDtcclxuXHJcblx0LnVuaS1zZWN0aW9uIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAudW5pLXNlY3Rpb24taGVhZGVyIHtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIC8qICNlbmRpZiAqL1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBwYWRkaW5nOiAxMnB4IDEwcHg7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcblxyXG4gICAgICAmX19kZWNvcmF0aW9ue1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogNnB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmktcHJpbWFyeTtcclxuICAgICAgICAmLmxpbmUge1xyXG4gICAgICAgICAgd2lkdGg6IDRweDtcclxuICAgICAgICAgIGhlaWdodDogMTJweDtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmNpcmNsZSB7XHJcbiAgICAgICAgICB3aWR0aDogOHB4O1xyXG4gICAgICAgICAgaGVpZ2h0OiA4cHg7XHJcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNTBweDtcclxuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDUwcHg7XHJcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1MHB4O1xyXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDUwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLnNxdWFyZSB7XHJcbiAgICAgICAgICB3aWR0aDogOHB4O1xyXG4gICAgICAgICAgaGVpZ2h0OiA4cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX19jb250ZW50IHtcclxuICAgICAgICAvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAvKiAjZW5kaWYgKi9cclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgY29sb3I6ICMzMzM7XHJcblxyXG4gICAgICAgIC5kaXN0cmFjdGlvbiB7XHJcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgJi1zdWIge1xyXG4gICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9fc2xvdC1yaWdodHtcclxuICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAudW5pLXNlY3Rpb24tY29udGVudHtcclxuICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgfVxyXG5cdH1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxuICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cbiAgICA8dW5pLXNlY3Rpb24gOnRpdGxlPVwiJ+aVsOmHjzogJyArIHdheWJpbGxzLmxlbmd0aFwiPjwvdW5pLXNlY3Rpb24+XG4gICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gd2F5YmlsbHNcIiA6a2V5PVwiaVwiPlxuICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogJyM2NjYnIH1cIj57eyBpdGVtLm9yZGVyX2JveF9ubyB9fTwvdGV4dD5cbiAgICAgIDx0ZXh0IGNsYXNzPVwidHlwZVwiPumHjemHjzoge3sgaXRlbS53ZWlnaHQgfX1LRzwvdGV4dD5cbiAgICAgIDx2aWV3IGNsYXNzPVwic3ViLWl0ZW1zXCI+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwic3ViLWl0ZW1cIj5cbiAgICAgICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj7mibnmrKEv6Ii56IiqL+aJmOebmDwvdGV4dD5cbiAgICAgICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj57eyBpdGVtLmJhdGNoX3NoaXBwaW5nX3BhbGxldCB9fTwvdGV4dD5cbiAgICAgICAgPC92aWV3PlxuICAgICAgICA8dmlldyBjbGFzcz1cInN1Yi1pdGVtXCI+XG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0eXBlXCI+5pyr5YWs6YeM6L+Q5Y2V5Y+3PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidHlwZVwiPnt7IGl0ZW0udHJhY2tpbmdfbnVtYmVyIHx8ICfml6AnIH19PC90ZXh0PlxuICAgICAgICA8L3ZpZXc+XG4gICAgICA8L3ZpZXc+XG4gICAgPC92aWV3PlxuICAgIDx2aWV3IHYtaWY9XCJ3YXliaWxscy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg6L+Q5Y2VPC92aWV3PlxuICA8L3ZpZXc+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxuaW1wb3J0IHsgcmVhY3RpdmUsIHJlZiB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IG9uTG9hZCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xuXG5jb25zdCB3YXliaWxscyA9IHJlZihbXSBhcyBhbnkpXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xuICB3YXliaWxscy52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2F5YmlsbHMnKVxufVxub25Mb2FkKCgpID0+IHtcbiAgZ2V0SGlzdG9yeSgpXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbi5oaXN0b3J5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xuXG4gIC50eXBlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcbiAgICBmb250LXNpemU6IDI0cnB4O1xuICAgIG1hcmdpbi10b3A6IDEwcnB4O1xuICB9XG4gIC5jb2RlIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLml0ZW0ge1xuICAgIHBhZGRpbmc6IDIwcnB4O1xuICAgIGZvbnQtc2l6ZTogMjRycHg7XG4gICAgY29sb3I6ICM2NjY7XG4gICAgYm9yZGVyLXJhZGl1czogMTBycHg7XG4gICAgYm9yZGVyOiAjNjY2IDFycHggc29saWQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBycHg7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcnB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBycHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC5zdWItaXRlbXMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAuc3ViLWl0ZW0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pcy1lbXB0eSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogNDBweCAwO1xuICAgIGNvbG9yOiAjOTk5O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cbiAgICA8dW5pLXNlY3Rpb24gOnRpdGxlPVwiJ+aVsOmHjzogJyArIHdheWJpbGxzLmxlbmd0aFwiPjwvdW5pLXNlY3Rpb24+XG4gICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gd2F5YmlsbHNcIiA6a2V5PVwiaVwiPlxuICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogJyM2NjYnIH1cIj57eyBpdGVtLm9yZGVyX2JveF9ubyB9fTwvdGV4dD5cbiAgICAgIDx0ZXh0IGNsYXNzPVwidHlwZVwiPumHjemHjzoge3sgaXRlbS53ZWlnaHQgfX1LRzwvdGV4dD5cbiAgICAgIDx2aWV3IGNsYXNzPVwic3ViLWl0ZW1zXCI+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwic3ViLWl0ZW1cIj5cbiAgICAgICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj7mibnmrKEv6Ii56IiqL+aJmOebmDwvdGV4dD5cbiAgICAgICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj57eyBpdGVtLmJhdGNoX3NoaXBwaW5nX3BhbGxldCB9fTwvdGV4dD5cbiAgICAgICAgPC92aWV3PlxuICAgICAgICA8dmlldyBjbGFzcz1cInN1Yi1pdGVtXCI+XG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0eXBlXCI+5pyr5YWs6YeM6L+Q5Y2V5Y+3PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidHlwZVwiPnt7IGl0ZW0udHJhY2tpbmdfbnVtYmVyIHx8ICfml6AnIH19PC90ZXh0PlxuICAgICAgICA8L3ZpZXc+XG4gICAgICA8L3ZpZXc+XG4gICAgPC92aWV3PlxuICAgIDx2aWV3IHYtaWY9XCJ3YXliaWxscy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg6L+Q5Y2VPC92aWV3PlxuICA8L3ZpZXc+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxuaW1wb3J0IHsgcmVhY3RpdmUsIHJlZiB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IG9uTG9hZCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xuXG5jb25zdCB3YXliaWxscyA9IHJlZihbXSBhcyBhbnkpXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xuICB3YXliaWxscy52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2F5YmlsbHMnKVxufVxub25Mb2FkKCgpID0+IHtcbiAgZ2V0SGlzdG9yeSgpXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbi5oaXN0b3J5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktaXRlbXM6IHN0YXJ0O1xuXG4gIC50eXBlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcbiAgICBmb250LXNpemU6IDI0cnB4O1xuICAgIG1hcmdpbi10b3A6IDEwcnB4O1xuICB9XG4gIC5jb2RlIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLml0ZW0ge1xuICAgIHBhZGRpbmc6IDIwcnB4O1xuICAgIGZvbnQtc2l6ZTogMjRycHg7XG4gICAgY29sb3I6ICM2NjY7XG4gICAgYm9yZGVyLXJhZGl1czogMTBycHg7XG4gICAgYm9yZGVyOiAjNjY2IDFycHggc29saWQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBycHg7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcnB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBycHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC5zdWItaXRlbXMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAuc3ViLWl0ZW0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pcy1lbXB0eSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogNDBweCAwO1xuICAgIGNvbG9yOiAjOTk5O1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaHR0cCB9IGZyb20gJ0AvdXRpbHMvaHR0cCdcclxuXHJcbi8qKlxyXG4gKiDojrflj5bpgInpobnliJfooahcclxuICovXHJcbmV4cG9ydCBjb25zdCB3YXliaWxsTm9PcHRpb25zID0gKCkgPT4ge1xyXG4gIHJldHVybiBodHRwPGFueT4oe1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogJy9hZG1pbi93YXJlaG91c2Uud2F5YmlsbE5vL2dldE9wdGlvbnMnLFxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDmt7vliqDlupPkvY3nu5HlrppcclxuICovXHJcbmV4cG9ydCBjb25zdCBhZGRXYXliaWxsTm8gPSAoZGF0YTogeyBjb2RlOiBzdHJpbmc7IHNwYWNlX2lkOiBzdHJpbmcgfSkgPT4ge1xyXG4gIHJldHVybiBodHRwPGFueT4oe1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICcvYWRtaW4vd2FyZWhvdXNlLndheWJpbGxOby9hZGQnLFxyXG4gICAgZGF0YSxcclxuICB9KVxyXG59XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPHVuaS1mb3Jtc1xyXG4gICAgICByZWY9XCJ2YWxpRm9ybVwiXHJcbiAgICAgIGxhYmVsLWFsaWduPVwicmlnaHRcIlxyXG4gICAgICA6bGFiZWwtd2lkdGg9XCI4MFwiXHJcbiAgICAgIDpydWxlcz1cInJ1bGVzXCJcclxuICAgICAgOm1vZGVsVmFsdWU9XCJ2YWxpRm9ybURhdGFcIlxyXG4gICAgPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInNwYWNlLXNlbGVjdFwiPlxyXG4gICAgICAgIDx1bmktZGF0YS1zZWxlY3RcclxuICAgICAgICAgIHYtaWY9XCIhZWRpdFNwYWNlTm9cIlxyXG4gICAgICAgICAgdi1tb2RlbD1cInZhbGlGb3JtRGF0YS5zcGFjZV9pZFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+mAieaLqeW6k+S9jVwiXHJcbiAgICAgICAgICA6bG9jYWxkYXRhPVwib3B0aW9ucy5zcGFjZVwiXHJcbiAgICAgICAgICA6Y2xlYXI9XCJmYWxzZVwiXHJcbiAgICAgICAgPjwvdW5pLWRhdGEtc2VsZWN0PlxyXG4gICAgICAgIDx1bmktZWFzeWlucHV0IHYtaWY9XCJlZGl0U3BhY2VOb1wiIDp2YWx1ZT1cInNwYWNlXCIgOmRpc2FibGVkPVwiZWRpdFNwYWNlTm9cIiAvPlxyXG4gICAgICAgIDxidXR0b24gdi1pZj1cIiFlZGl0U3BhY2VOb1wiIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwic3VibWl0U3BhY2VcIj7noa7orqQ8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHYtaWY9XCJlZGl0U3BhY2VOb1wiIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwiZWRpdFNwYWNlTm8gPSBmYWxzZVwiPuS/ruaUuTwvYnV0dG9uPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3PlxyXG4gICAgICAgIDx1bmktZWFzeWlucHV0XHJcbiAgICAgICAgICB2LW1vZGVsPVwidmFsaUZvcm1EYXRhLmNvZGVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXov5DljZXlj7dcIlxyXG4gICAgICAgICAgc3VmZml4SWNvbj1cInNjYW5cIlxyXG4gICAgICAgICAgOmZvY3VzPVwiZm9jdXNUeXBlXCJcclxuICAgICAgICAgIEBpY29uQ2xpY2s9XCJzY2FuSW5wdXRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdW5pLWZvcm1zPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEBjbGljaz1cInJlc2V0XCI+6YeN572uPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJvbnN1Ym1pdFwiIDpsb2FkaW5nPVwibG9hZGluZ1wiPlxyXG4gICAgICAgIDx1bmktaWNvbnMgdi1pZj1cIiFsb2FkaW5nXCIgdHlwZT1cImNoZWNrbWFya2VtcHR5XCIgc2l6ZT1cIjE4XCIgY29sb3I9XCJ3aGl0ZVwiPjwvdW5pLWljb25zPlxyXG4gICAgICAgIOaPkOS6pFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJ3YXliaWxsTm9IaXN0b3J5Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgICAgPHRleHQgY2xhc3M9XCJ0aXRsZVwiPuiusOW9lSjmnIDov5E15p2hKTwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiB3YXliaWxsTm9IaXN0b3J5LnNsaWNlKDAsIDUpXCIgOmtleT1cImlcIj5cclxuICAgICAgICA8dmlldz5cclxuICAgICAgICAgIDx2aWV3PlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj7lupPkvY08L3RleHQ+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiY29kZVwiIDpzdHlsZT1cInsgY29sb3I6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2JyB9XCI+e3tcclxuICAgICAgICAgICAgICBpdGVtLnNwYWNlXHJcbiAgICAgICAgICAgIH19PC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidHlwZVwiPuWNleWPtzwvdGV4dD5cclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj57e1xyXG4gICAgICAgICAgICAgIGl0ZW0uY29kZVxyXG4gICAgICAgICAgICB9fTwvdGV4dD5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwic3BhY2UtdGltZVwiPlxyXG4gICAgICAgICAgICA8dGV4dD5cclxuICAgICAgICAgICAgICB7eyBpdGVtLmNyZWF0ZVRpbWUgfX1cclxuICAgICAgICAgICAgPC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8dmlldz5cclxuICAgICAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICAgICAgdi1pZj1cIml0ZW0uc3RhdHVzXCJcclxuICAgICAgICAgICAgdHlwZT1cImNoZWNrbWFya2VtcHR5XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgICAgICBzaXplPVwiMTZcIlxyXG4gICAgICAgICAgICBjb2xvcj1cImdyZWVuXCJcclxuICAgICAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3RhdHVzIGZhaWxcIiB2LWVsc2U+RjwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuXHJcbiAgICA8dW5pLXBvcHVwIHJlZj1cIm1lc3NhZ2VSZWZcIiB0eXBlPVwibWVzc2FnZVwiPlxyXG4gICAgICA8dW5pLXBvcHVwLW1lc3NhZ2VcclxuICAgICAgICA6dHlwZT1cIm1lc3NhZ2VUeXBlXCJcclxuICAgICAgICA6bWVzc2FnZT1cIm1lc3NhZ2VUZXh0XCJcclxuICAgICAgICA6ZHVyYXRpb249XCIyMDAwXCJcclxuICAgICAgPjwvdW5pLXBvcHVwLW1lc3NhZ2U+XHJcbiAgICA8L3VuaS1wb3B1cD5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyByZWFjdGl2ZSwgcmVmLCBjb21wdXRlZCwgbmV4dFRpY2sgfSBmcm9tICd2dWUnXHJcbmltcG9ydCB7XHJcbiAgb25TaG93LFxyXG4gIG9uTG9hZCxcclxuICBvblVubG9hZCxcclxuICBvbkhpZGUsXHJcbiAgb25CYWNrUHJlc3MsXHJcbiAgb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwLFxyXG59IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyBjaGVja1Blcm1pc3Npb24gfSBmcm9tICdAL3V0aWxzJ1xyXG5pbXBvcnQgeyBhZGRXYXliaWxsTm8sIHdheWJpbGxOb09wdGlvbnMgfSBmcm9tICdAL3NlcnZpY2VzL3dheWJpbGxObydcclxuXHJcbmNvbnN0IGVkaXRTcGFjZU5vID0gcmVmKGZhbHNlKVxyXG5jb25zdCBsb2FkaW5nID0gcmVmKGZhbHNlKVxyXG5jb25zdCBoaWRlUGFnZSA9IHJlZihmYWxzZSlcclxuY29uc3QgZm9jdXNUeXBlID0gcmVmKHRydWUpXHJcbmNvbnN0IHdheWJpbGxOb0hpc3RvcnkgPSByZWYoW10gYXMgYW55KVxyXG5jb25zdCBtZXNzYWdlUmVmID0gcmVmKClcclxuY29uc3QgbWVzc2FnZVR5cGUgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlVGV4dCA9IHJlZigpXHJcbmxldCBzdDogYW55XHJcblxyXG5jb25zdCB2YWxpRm9ybURhdGEgPSByZWYoe1xyXG4gIGNvZGU6ICcnLFxyXG4gIHNwYWNlX2lkOiAnJyxcclxufSlcclxuXHJcbmNvbnN0IHJ1bGVzID0gcmVhY3RpdmUoe1xyXG4gIGNvZGU6IHtcclxuICAgIHJ1bGVzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICBlcnJvck1lc3NhZ2U6ICfljZXlj7fkuI3og73kuLrnqbonLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG59KVxyXG5cclxuY29uc3Qgb3B0aW9ucyA9IHJlYWN0aXZlKHtcclxuICBzcGFjZTogW10gYXMgYW55LFxyXG59KVxyXG5cclxuY29uc3Qgc2NhbklucHV0ID0gYXN5bmMgKCkgPT4ge1xyXG5cclxuICBsZXQgc3RhdHVzID0gYXdhaXQgY2hlY2tQZXJtaXNzaW9uKClcclxuICBpZiAoc3RhdHVzICE9PSAxKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIHVuaS5zY2FuQ29kZSh7XHJcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgdmFsaUZvcm1EYXRhLnZhbHVlLmNvZGUgPSByZXMucmVzdWx0XHJcbiAgICAgIC8vIG9uc3VibWl0KCk7XHJcbiAgICB9LFxyXG4gICAgZmFpbDogKGVycikgPT4ge1xyXG4gICAgICAvLyDpnIDopoHms6jmhI/nmoTmmK/lsI/nqIvluo/miavnoIHkuI3pnIDopoHnlLPor7fnm7jmnLrmnYPpmZBcclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5jb25zdCByZXNldCA9ICgpID0+IHtcclxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcclxuICB2YWxpRm9ybURhdGEudmFsdWUuY29kZSA9ICcnXHJcbn1cclxuXHJcbmNvbnN0IHN1Ym1pdFNwYWNlID0gKCkgPT4ge1xyXG4gIGlmICh2YWxpRm9ybURhdGEudmFsdWUuc3BhY2VfaWQpIHtcclxuICAgIGVkaXRTcGFjZU5vLnZhbHVlID0gdHJ1ZVxyXG4gICAgc2V0Rm9jdXMoKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcclxuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+ivt+mAieaLqeW6k+S9jSdcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgfVxyXG59XHJcbmNvbnN0IHNwYWNlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IG9wdGlvbnMuc3BhY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlID09PSB2YWxpRm9ybURhdGEudmFsdWUuc3BhY2VfaWQpXHJcbiAgcmV0dXJuIHJlcz8udGV4dFxyXG59KVxyXG5cclxuY29uc3QgZmluZFBhbGxldE51bUlkQnlWYWx1ZSA9IChkYXRhOiBhbnksIHRhcmdldFZhbHVlOiBhbnkpID0+IHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGl0ZW0gPSBkYXRhW2ldXHJcbiAgICAvLyDmo4Dmn6XlvZPliY3pobnnmoQgbGFiZWxcclxuICAgIGlmIChpdGVtLmlkID09PSB0YXJnZXRWYWx1ZSB8fCBpdGVtLnZhbHVlID09PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gW2l0ZW0uaWRdXHJcbiAgICB9IGVsc2UgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkSWQgPSBmaW5kUGFsbGV0TnVtSWRCeVZhbHVlKGl0ZW0uY2hpbGRyZW4sIHRhcmdldFZhbHVlKSBhcyBhbnlcclxuICAgICAgaWYgKGNoaWxkSWQgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gY2hpbGRJZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmNvbnN0IG9uc3VibWl0ID0gYXN5bmMgKCkgPT4ge1xyXG4gIGlmICh2YWxpRm9ybURhdGEudmFsdWUuc3BhY2VfaWQgJiYgdmFsaUZvcm1EYXRhLnZhbHVlLmNvZGUpIHtcclxuICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcclxuICAgIGxvYWRpbmcudmFsdWUgPSB0cnVlXHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCBhZGRXYXliaWxsTm8oe1xyXG4gICAgICBjb2RlOiB2YWxpRm9ybURhdGEudmFsdWUuY29kZSxcclxuICAgICAgc3BhY2VfaWQ6IHZhbGlGb3JtRGF0YS52YWx1ZS5zcGFjZV9pZCxcclxuICAgIH0pXHJcbiAgICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcclxuICAgIGNvbnN0IHNwYWNlID0gb3B0aW9ucy5zcGFjZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUgPT09IHZhbGlGb3JtRGF0YS52YWx1ZS5zcGFjZV9pZClcclxuXHJcbiAgICBpZiAocmVzLmNvZGUgPT0gMSkge1xyXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuICAgICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XHJcbiAgICAgICAgY29kZTogdmFsaUZvcm1EYXRhLnZhbHVlLmNvZGUsXHJcbiAgICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcclxuICAgICAgICB0eXBlOiAn6L+Q5Y2V5Y+3JyxcclxuICAgICAgICBzcGFjZTogc3BhY2UudGV4dCxcclxuICAgICAgICBzdGF0dXM6IHRydWUsXHJcbiAgICAgIH1cclxuICAgICAgd2F5YmlsbE5vSGlzdG9yeS52YWx1ZS51bnNoaWZ0KGhpc3RvcnlJdGVtKVxyXG4gICAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3dheWJpbGxOb0hpc3RvcnknLCB3YXliaWxsTm9IaXN0b3J5LnZhbHVlKVxyXG4gICAgICBnZXRIaXN0b3J5KClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuXHJcbiAgICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xyXG4gICAgICAgIGNvZGU6IHZhbGlGb3JtRGF0YS52YWx1ZS5jb2RlLFxyXG4gICAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgdHlwZTogJ+i/kOWNleWPtycsXHJcbiAgICAgICAgc3BhY2U6IHNwYWNlLnRleHQsXHJcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcclxuICAgICAgfVxyXG4gICAgICB3YXliaWxsTm9IaXN0b3J5LnZhbHVlLnVuc2hpZnQoaGlzdG9yeUl0ZW0pXHJcbiAgICAgIHVuaS5zZXRTdG9yYWdlU3luYygnd2F5YmlsbE5vSGlzdG9yeScsIHdheWJpbGxOb0hpc3RvcnkudmFsdWUpXHJcbiAgICAgIGdldEhpc3RvcnkoKVxyXG4gICAgfVxyXG4gICAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgcmVzZXQoKVxyXG4gICAgICBzZXRGb2N1cygpXHJcbiAgICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcclxuICAgIH0sIDEwMDApXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICghdmFsaUZvcm1EYXRhLnZhbHVlLnNwYWNlX2lkKSB7XHJcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfor7fpgInmi6nlupPkvY0nXHJcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlGb3JtRGF0YS52YWx1ZS5jb2RlKSB7XHJcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfor7floavlhpnov5DljZXlj7cnXHJcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIHdheWJpbGxOb0hpc3RvcnkudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dheWJpbGxOb0hpc3RvcnknKSB8fCBbXVxyXG59XHJcbmNvbnN0IGtleXByZXNzID0gKGU6IGFueSkgPT4ge1xyXG4gIC8vIDEwMiAg5bem5L6nICAgIDEwMyAg5Y+z5L6nICAgMTA0ICDkuK3pl7TmjInplK5cclxuICBpZiAoZS5rZXlDb2RlID09PSAxMDIgfHwgZS5rZXlDb2RlID09PSAxMDMgfHwgZS5rZXlDb2RlID09PSAxMDQpIHtcclxuICAgIC8v6L+Z6YeM5oyJ6ZSu5oiQ5YqfXHJcbiAgfVxyXG5cclxuICBpZiAoZS5rZXlDb2RlID09IDY2KSB7XHJcbiAgICAvL2VudGVy5oyJ6ZSuXHJcbiAgICBvbnN1Ym1pdCgpXHJcbiAgfVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcblxyXG5cclxuXHJcblxyXG59KVxyXG5vblVubG9hZCgoKSA9PiB7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcblxyXG5cclxuXHJcblxyXG59KVxyXG5vbkhpZGUoKCkgPT4ge1xyXG4gIGhpZGVQYWdlLnZhbHVlID0gdHJ1ZVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICBwbHVzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG5cclxuXHJcblxyXG5cclxufSlcclxub25CYWNrUHJlc3MoKCkgPT4ge1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICBwbHVzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG5cclxuXHJcblxyXG5cclxufSlcclxub25TaG93KCgpID0+IHtcclxuICBoaWRlUGFnZS52YWx1ZSA9IGZhbHNlXHJcbiAgZ2V0T3B0aW9ucygpXHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcblxyXG4vLyDojrflj5bpgInpoblcclxuY29uc3QgZ2V0T3B0aW9ucyA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCB3YXliaWxsTm9PcHRpb25zKClcclxuICBpZiAocmVzLmNvZGUgPT09IDEpIHtcclxuICAgIGZvciAobGV0IGtleSBpbiByZXMuZGF0YS5zcGFjZV9pZCkge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXHJcbiAgICAgIGlmIChyZXMuZGF0YS5zcGFjZV9pZC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgb3B0aW9ucy5zcGFjZS5wdXNoKHsgdGV4dDogcmVzLmRhdGEuc3BhY2VfaWRba2V5XSwgdmFsdWU6IGtleSB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcclxuICBpZiAoaGlkZVBhZ2UudmFsdWUpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBmb2N1c1R5cGUudmFsdWUgPSBmYWxzZVxyXG4gIG5leHRUaWNrKCgpID0+IHtcclxuICAgIGZvY3VzVHlwZS52YWx1ZSA9IHRydWVcclxuICB9KVxyXG59XHJcblxyXG5vbk5hdmlnYXRpb25CYXJCdXR0b25UYXAoKGV2ZW50KSA9PiB7XHJcbiAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XHJcbiAgICB1bmkubmF2aWdhdGVUbyh7XHJcbiAgICAgIHVybDogJy9wYWdlcy93YXliaWxsTm8vbG9nTGlzdCcsXHJcbiAgICB9KVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLmNvbnRhaW5lciB7XHJcbiAgcGFkZGluZzogMTVweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG59XHJcblxyXG4uc3BhY2Utc2VsZWN0IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgbWFyZ2luLWJvdHRvbTogMjBycHg7XHJcbn1cclxuXHJcbmJ1dHRvbiB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGhlaWdodDogMzVweDtcclxuICBtYXJnaW4tbGVmdDogMjBycHg7XHJcbiAgZm9udC1zaXplOiAyNHJweDtcclxufVxyXG5cclxuLndlaWdodC10aXAge1xyXG4gIGNvbG9yOiBncmF5O1xyXG4gIGZvbnQtc2l6ZTogMTJycHg7XHJcbn1cclxuXHJcbi5idXR0b24tZ3JvdXAge1xyXG4gIG1hcmdpbi10b3A6IDE1cHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG5cclxuICBidXR0b24ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGhlaWdodDogMzVweDtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG5cclxuICAudW5pLWljb25zIHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxuICB9XHJcbn1cclxuXHJcbi5oaXN0b3J5IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLmNvZGUge1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cclxuICAgIC5zdGF0dXMge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mYWlsIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6ICNmMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuaXMtZW1wdHkge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4IDA7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICA8dW5pLWZvcm1zXHJcbiAgICAgIHJlZj1cInZhbGlGb3JtXCJcclxuICAgICAgbGFiZWwtYWxpZ249XCJyaWdodFwiXHJcbiAgICAgIDpsYWJlbC13aWR0aD1cIjgwXCJcclxuICAgICAgOnJ1bGVzPVwicnVsZXNcIlxyXG4gICAgICA6bW9kZWxWYWx1ZT1cInZhbGlGb3JtRGF0YVwiXHJcbiAgICA+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwic3BhY2Utc2VsZWN0XCI+XHJcbiAgICAgICAgPHVuaS1kYXRhLXNlbGVjdFxyXG4gICAgICAgICAgdi1pZj1cIiFlZGl0U3BhY2VOb1wiXHJcbiAgICAgICAgICB2LW1vZGVsPVwidmFsaUZvcm1EYXRhLnNwYWNlX2lkXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oup5bqT5L2NXCJcclxuICAgICAgICAgIDpsb2NhbGRhdGE9XCJvcHRpb25zLnNwYWNlXCJcclxuICAgICAgICAgIDpjbGVhcj1cImZhbHNlXCJcclxuICAgICAgICA+PC91bmktZGF0YS1zZWxlY3Q+XHJcbiAgICAgICAgPHVuaS1lYXN5aW5wdXQgdi1pZj1cImVkaXRTcGFjZU5vXCIgOnZhbHVlPVwic3BhY2VcIiA6ZGlzYWJsZWQ9XCJlZGl0U3BhY2VOb1wiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiB2LWlmPVwiIWVkaXRTcGFjZU5vXCIgdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJzdWJtaXRTcGFjZVwiPuehruiupDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdi1pZj1cImVkaXRTcGFjZU5vXCIgdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJlZGl0U3BhY2VObyA9IGZhbHNlXCI+5L+u5pS5PC9idXR0b24+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXc+XHJcbiAgICAgICAgPHVuaS1lYXN5aW5wdXRcclxuICAgICAgICAgIHYtbW9kZWw9XCJ2YWxpRm9ybURhdGEuY29kZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpei/kOWNleWPt1wiXHJcbiAgICAgICAgICBzdWZmaXhJY29uPVwic2NhblwiXHJcbiAgICAgICAgICA6Zm9jdXM9XCJmb2N1c1R5cGVcIlxyXG4gICAgICAgICAgQGljb25DbGljaz1cInNjYW5JbnB1dFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC91bmktZm9ybXM+XHJcbiAgICA8dmlldyBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQGNsaWNrPVwicmVzZXRcIj7ph43nva48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cIm9uc3VibWl0XCIgOmxvYWRpbmc9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgPHVuaS1pY29ucyB2LWlmPVwiIWxvYWRpbmdcIiB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIiBzaXplPVwiMThcIiBjb2xvcj1cIndoaXRlXCI+PC91bmktaWNvbnM+XHJcbiAgICAgICAg5o+Q5LqkXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgdi1pZj1cIndheWJpbGxOb0hpc3RvcnkubGVuZ3RoID4gMFwiIGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgICA8dGV4dCBjbGFzcz1cInRpdGxlXCI+6K6w5b2VKOacgOi/kTXmnaEpPC90ZXh0PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIHdheWJpbGxOb0hpc3Rvcnkuc2xpY2UoMCwgNSlcIiA6a2V5PVwiaVwiPlxyXG4gICAgICAgIDx2aWV3PlxyXG4gICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidHlwZVwiPuW6k+S9jTwvdGV4dD5cclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj57e1xyXG4gICAgICAgICAgICAgIGl0ZW0uc3BhY2VcclxuICAgICAgICAgICAgfX08L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJ0eXBlXCI+5Y2V5Y+3PC90ZXh0PlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cImNvZGVcIiA6c3R5bGU9XCJ7IGNvbG9yOiBpdGVtLnN0YXR1cyA/ICdncmVlbicgOiAnIzY2NicgfVwiPnt7XHJcbiAgICAgICAgICAgICAgaXRlbS5jb2RlXHJcbiAgICAgICAgICAgIH19PC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJzcGFjZS10aW1lXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0PlxyXG4gICAgICAgICAgICAgIHt7IGl0ZW0uY3JlYXRlVGltZSB9fVxyXG4gICAgICAgICAgICA8L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDx2aWV3PlxyXG4gICAgICAgICAgPHVuaS1pY29uc1xyXG4gICAgICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxyXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2ttYXJrZW1wdHlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInN0YXR1c1wiXHJcbiAgICAgICAgICAgIHNpemU9XCIxNlwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxyXG4gICAgICAgICAgPjwvdW5pLWljb25zPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG5cclxuICAgIDx1bmktcG9wdXAgcmVmPVwibWVzc2FnZVJlZlwiIHR5cGU9XCJtZXNzYWdlXCI+XHJcbiAgICAgIDx1bmktcG9wdXAtbWVzc2FnZVxyXG4gICAgICAgIDp0eXBlPVwibWVzc2FnZVR5cGVcIlxyXG4gICAgICAgIDptZXNzYWdlPVwibWVzc2FnZVRleHRcIlxyXG4gICAgICAgIDpkdXJhdGlvbj1cIjIwMDBcIlxyXG4gICAgICA+PC91bmktcG9wdXAtbWVzc2FnZT5cclxuICAgIDwvdW5pLXBvcHVwPlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlYWN0aXZlLCByZWYsIGNvbXB1dGVkLCBuZXh0VGljayB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHtcclxuICBvblNob3csXHJcbiAgb25Mb2FkLFxyXG4gIG9uVW5sb2FkLFxyXG4gIG9uSGlkZSxcclxuICBvbkJhY2tQcmVzcyxcclxuICBvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAsXHJcbn0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IGNoZWNrUGVybWlzc2lvbiB9IGZyb20gJ0AvdXRpbHMnXHJcbmltcG9ydCB7IGFkZFdheWJpbGxObywgd2F5YmlsbE5vT3B0aW9ucyB9IGZyb20gJ0Avc2VydmljZXMvd2F5YmlsbE5vJ1xyXG5cclxuY29uc3QgZWRpdFNwYWNlTm8gPSByZWYoZmFsc2UpXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGhpZGVQYWdlID0gcmVmKGZhbHNlKVxyXG5jb25zdCBmb2N1c1R5cGUgPSByZWYodHJ1ZSlcclxuY29uc3Qgd2F5YmlsbE5vSGlzdG9yeSA9IHJlZihbXSBhcyBhbnkpXHJcbmNvbnN0IG1lc3NhZ2VSZWYgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZigpXHJcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKClcclxubGV0IHN0OiBhbnlcclxuXHJcbmNvbnN0IHZhbGlGb3JtRGF0YSA9IHJlZih7XHJcbiAgY29kZTogJycsXHJcbiAgc3BhY2VfaWQ6ICcnLFxyXG59KVxyXG5cclxuY29uc3QgcnVsZXMgPSByZWFjdGl2ZSh7XHJcbiAgY29kZToge1xyXG4gICAgcnVsZXM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIGVycm9yTWVzc2FnZTogJ+WNleWPt+S4jeiDveS4uuepuicsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0sXHJcbn0pXHJcblxyXG5jb25zdCBvcHRpb25zID0gcmVhY3RpdmUoe1xyXG4gIHNwYWNlOiBbXSBhcyBhbnksXHJcbn0pXHJcblxyXG5jb25zdCBzY2FuSW5wdXQgPSBhc3luYyAoKSA9PiB7XHJcbiAgLy8gI2lmZGVmIEFQUC1QTFVTXHJcbiAgbGV0IHN0YXR1cyA9IGF3YWl0IGNoZWNrUGVybWlzc2lvbigpXHJcbiAgaWYgKHN0YXR1cyAhPT0gMSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIC8vICNlbmRpZlxyXG4gIHVuaS5zY2FuQ29kZSh7XHJcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgdmFsaUZvcm1EYXRhLnZhbHVlLmNvZGUgPSByZXMucmVzdWx0XHJcbiAgICAgIC8vIG9uc3VibWl0KCk7XHJcbiAgICB9LFxyXG4gICAgZmFpbDogKGVycikgPT4ge1xyXG4gICAgICAvLyDpnIDopoHms6jmhI/nmoTmmK/lsI/nqIvluo/miavnoIHkuI3pnIDopoHnlLPor7fnm7jmnLrmnYPpmZBcclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5jb25zdCByZXNldCA9ICgpID0+IHtcclxuICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcclxuICB2YWxpRm9ybURhdGEudmFsdWUuY29kZSA9ICcnXHJcbn1cclxuXHJcbmNvbnN0IHN1Ym1pdFNwYWNlID0gKCkgPT4ge1xyXG4gIGlmICh2YWxpRm9ybURhdGEudmFsdWUuc3BhY2VfaWQpIHtcclxuICAgIGVkaXRTcGFjZU5vLnZhbHVlID0gdHJ1ZVxyXG4gICAgc2V0Rm9jdXMoKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcclxuICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+ivt+mAieaLqeW6k+S9jSdcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgfVxyXG59XHJcbmNvbnN0IHNwYWNlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IG9wdGlvbnMuc3BhY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlID09PSB2YWxpRm9ybURhdGEudmFsdWUuc3BhY2VfaWQpXHJcbiAgcmV0dXJuIHJlcz8udGV4dFxyXG59KVxyXG5cclxuY29uc3QgZmluZFBhbGxldE51bUlkQnlWYWx1ZSA9IChkYXRhOiBhbnksIHRhcmdldFZhbHVlOiBhbnkpID0+IHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGl0ZW0gPSBkYXRhW2ldXHJcbiAgICAvLyDmo4Dmn6XlvZPliY3pobnnmoQgbGFiZWxcclxuICAgIGlmIChpdGVtLmlkID09PSB0YXJnZXRWYWx1ZSB8fCBpdGVtLnZhbHVlID09PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gW2l0ZW0uaWRdXHJcbiAgICB9IGVsc2UgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkSWQgPSBmaW5kUGFsbGV0TnVtSWRCeVZhbHVlKGl0ZW0uY2hpbGRyZW4sIHRhcmdldFZhbHVlKSBhcyBhbnlcclxuICAgICAgaWYgKGNoaWxkSWQgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gY2hpbGRJZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmNvbnN0IG9uc3VibWl0ID0gYXN5bmMgKCkgPT4ge1xyXG4gIGlmICh2YWxpRm9ybURhdGEudmFsdWUuc3BhY2VfaWQgJiYgdmFsaUZvcm1EYXRhLnZhbHVlLmNvZGUpIHtcclxuICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcclxuICAgIGxvYWRpbmcudmFsdWUgPSB0cnVlXHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCBhZGRXYXliaWxsTm8oe1xyXG4gICAgICBjb2RlOiB2YWxpRm9ybURhdGEudmFsdWUuY29kZSxcclxuICAgICAgc3BhY2VfaWQ6IHZhbGlGb3JtRGF0YS52YWx1ZS5zcGFjZV9pZCxcclxuICAgIH0pXHJcbiAgICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcclxuICAgIGNvbnN0IHNwYWNlID0gb3B0aW9ucy5zcGFjZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUgPT09IHZhbGlGb3JtRGF0YS52YWx1ZS5zcGFjZV9pZClcclxuXHJcbiAgICBpZiAocmVzLmNvZGUgPT0gMSkge1xyXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuICAgICAgY29uc3QgaGlzdG9yeUl0ZW0gPSB7XHJcbiAgICAgICAgY29kZTogdmFsaUZvcm1EYXRhLnZhbHVlLmNvZGUsXHJcbiAgICAgICAgY3JlYXRlVGltZTogbmV3IERhdGUoKSxcclxuICAgICAgICB0eXBlOiAn6L+Q5Y2V5Y+3JyxcclxuICAgICAgICBzcGFjZTogc3BhY2UudGV4dCxcclxuICAgICAgICBzdGF0dXM6IHRydWUsXHJcbiAgICAgIH1cclxuICAgICAgd2F5YmlsbE5vSGlzdG9yeS52YWx1ZS51bnNoaWZ0KGhpc3RvcnlJdGVtKVxyXG4gICAgICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3dheWJpbGxOb0hpc3RvcnknLCB3YXliaWxsTm9IaXN0b3J5LnZhbHVlKVxyXG4gICAgICBnZXRIaXN0b3J5KClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcclxuXHJcbiAgICAgIGNvbnN0IGhpc3RvcnlJdGVtID0ge1xyXG4gICAgICAgIGNvZGU6IHZhbGlGb3JtRGF0YS52YWx1ZS5jb2RlLFxyXG4gICAgICAgIGNyZWF0ZVRpbWU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgdHlwZTogJ+i/kOWNleWPtycsXHJcbiAgICAgICAgc3BhY2U6IHNwYWNlLnRleHQsXHJcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcclxuICAgICAgfVxyXG4gICAgICB3YXliaWxsTm9IaXN0b3J5LnZhbHVlLnVuc2hpZnQoaGlzdG9yeUl0ZW0pXHJcbiAgICAgIHVuaS5zZXRTdG9yYWdlU3luYygnd2F5YmlsbE5vSGlzdG9yeScsIHdheWJpbGxOb0hpc3RvcnkudmFsdWUpXHJcbiAgICAgIGdldEhpc3RvcnkoKVxyXG4gICAgfVxyXG4gICAgc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgcmVzZXQoKVxyXG4gICAgICBzZXRGb2N1cygpXHJcbiAgICAgIHN0ICYmIGNsZWFyVGltZW91dChzdClcclxuICAgIH0sIDEwMDApXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICghdmFsaUZvcm1EYXRhLnZhbHVlLnNwYWNlX2lkKSB7XHJcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfor7fpgInmi6nlupPkvY0nXHJcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlGb3JtRGF0YS52YWx1ZS5jb2RlKSB7XHJcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfor7floavlhpnov5DljZXlj7cnXHJcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBnZXRIaXN0b3J5ID0gKCkgPT4ge1xyXG4gIHdheWJpbGxOb0hpc3RvcnkudmFsdWUgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dheWJpbGxOb0hpc3RvcnknKSB8fCBbXVxyXG59XHJcbmNvbnN0IGtleXByZXNzID0gKGU6IGFueSkgPT4ge1xyXG4gIC8vIDEwMiAg5bem5L6nICAgIDEwMyAg5Y+z5L6nICAgMTA0ICDkuK3pl7TmjInplK5cclxuICBpZiAoZS5rZXlDb2RlID09PSAxMDIgfHwgZS5rZXlDb2RlID09PSAxMDMgfHwgZS5rZXlDb2RlID09PSAxMDQpIHtcclxuICAgIC8v6L+Z6YeM5oyJ6ZSu5oiQ5YqfXHJcbiAgfVxyXG5cclxuICBpZiAoZS5rZXlDb2RlID09IDY2KSB7XHJcbiAgICAvL2VudGVy5oyJ6ZSuXHJcbiAgICBvbnN1Ym1pdCgpXHJcbiAgfVxyXG59XHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgLy8gI2lmZGVmIEFQUC1QTFVTXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgcGx1cy5rZXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuICAvLyAjZW5kaWZcclxuICAvLyAjaWZkZWYgSDVcclxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG4gIC8vICNlbmRpZlxyXG59KVxyXG5vblVubG9hZCgoKSA9PiB7XHJcbiAgLy8gI2lmZGVmIEFQUC1QTFVTXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgcGx1cy5rZXkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuICAvLyAjZW5kaWZcclxuICAvLyAjaWZkZWYgSDVcclxuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXByZXNzKVxyXG4gIC8vICNlbmRpZlxyXG59KVxyXG5vbkhpZGUoKCkgPT4ge1xyXG4gIGhpZGVQYWdlLnZhbHVlID0gdHJ1ZVxyXG4gIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbiAgLy8gI2lmZGVmIEg1XHJcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuICAvLyAjZW5kaWZcclxufSlcclxub25CYWNrUHJlc3MoKCkgPT4ge1xyXG4gIC8vICNpZmRlZiBBUFAtUExVU1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gIHBsdXMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5cHJlc3MpXHJcbiAgLy8gI2VuZGlmXHJcbiAgLy8gI2lmZGVmIEg1XHJcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXlwcmVzcylcclxuICAvLyAjZW5kaWZcclxufSlcclxub25TaG93KCgpID0+IHtcclxuICBoaWRlUGFnZS52YWx1ZSA9IGZhbHNlXHJcbiAgZ2V0T3B0aW9ucygpXHJcbiAgZ2V0SGlzdG9yeSgpXHJcbn0pXHJcblxyXG4vLyDojrflj5bpgInpoblcclxuY29uc3QgZ2V0T3B0aW9ucyA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCB3YXliaWxsTm9PcHRpb25zKClcclxuICBpZiAocmVzLmNvZGUgPT09IDEpIHtcclxuICAgIGZvciAobGV0IGtleSBpbiByZXMuZGF0YS5zcGFjZV9pZCkge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXHJcbiAgICAgIGlmIChyZXMuZGF0YS5zcGFjZV9pZC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgb3B0aW9ucy5zcGFjZS5wdXNoKHsgdGV4dDogcmVzLmRhdGEuc3BhY2VfaWRba2V5XSwgdmFsdWU6IGtleSB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcclxuICBpZiAoaGlkZVBhZ2UudmFsdWUpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBmb2N1c1R5cGUudmFsdWUgPSBmYWxzZVxyXG4gIG5leHRUaWNrKCgpID0+IHtcclxuICAgIGZvY3VzVHlwZS52YWx1ZSA9IHRydWVcclxuICB9KVxyXG59XHJcblxyXG5vbk5hdmlnYXRpb25CYXJCdXR0b25UYXAoKGV2ZW50KSA9PiB7XHJcbiAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XHJcbiAgICB1bmkubmF2aWdhdGVUbyh7XHJcbiAgICAgIHVybDogJy9wYWdlcy93YXliaWxsTm8vbG9nTGlzdCcsXHJcbiAgICB9KVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLmNvbnRhaW5lciB7XHJcbiAgcGFkZGluZzogMTVweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG59XHJcblxyXG4uc3BhY2Utc2VsZWN0IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgbWFyZ2luLWJvdHRvbTogMjBycHg7XHJcbn1cclxuXHJcbmJ1dHRvbiB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGhlaWdodDogMzVweDtcclxuICBtYXJnaW4tbGVmdDogMjBycHg7XHJcbiAgZm9udC1zaXplOiAyNHJweDtcclxufVxyXG5cclxuLndlaWdodC10aXAge1xyXG4gIGNvbG9yOiBncmF5O1xyXG4gIGZvbnQtc2l6ZTogMTJycHg7XHJcbn1cclxuXHJcbi5idXR0b24tZ3JvdXAge1xyXG4gIG1hcmdpbi10b3A6IDE1cHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG5cclxuICBidXR0b24ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGhlaWdodDogMzVweDtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG5cclxuICAudW5pLWljb25zIHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxuICB9XHJcbn1cclxuXHJcbi5oaXN0b3J5IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLmNvZGUge1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cclxuICAgIC5zdGF0dXMge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mYWlsIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6ICNmMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuaXMtZW1wdHkge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4IDA7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gd2F5YmlsbE5vSGlzdG9yeVwiIDprZXk9XCJpXCI+XHJcbiAgICAgIDwhLS0gPHRleHQgY2xhc3M9XCJ0eXBlXCI+5bqT5L2NPC90ZXh0PlxyXG4gICAgICA8dGV4dCBjbHNhYT1cImNvZGVcIiA6c3R5bGU9XCJ7IGNvbG9yOiBpdGVtLnN0YXR1cyA/ICdncmVlbicgOiAnIzY2NicgfVwiPnt7IGl0ZW0uc3BhY2UgfX08L3RleHQ+XHJcbiAgICAgIDx2aWV3PlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwidHlwZVwiPuWNleWPtzwvdGV4dD5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImNvZGVcIiDvvJtzdHlsZT1cIntjb2xvciA6IGl0ZW0uc3RhdHVzID8gJ2dyZWVuJyA6ICcjNjY2J31cIj57eyBpdGVtLmNvZGUgfX08L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJzcGFjZS10aW1lXCI+XHJcbiAgICAgICAgPHRleHQ+XHJcbiAgICAgICAgICB7eyBpdGVtLmNyZWF0ZVRpbWUgfX1cclxuICAgICAgICA8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcblxyXG4gIDx2aWV3IHYtaWY9XCJ3YXliaWxsTm9IaXN0b3J5Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiaXMtZW1wdHlcIj7mmoLml6Dljoblj7I8L3ZpZXc+XHJcbiAgPHZpZXcgY2xhc3M9XCJoaXN0b3J5XCI+XHJcbiAgICA8dmlldyBjbGFzcz1cInRpdGxlXCI+5Y6G5Y+y6L+Q5Y2V5Y+3PC92aWV3PlxyXG4gICAgPHZpZXcgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIHdheWJpbGxOb0hpc3RvcnlcIiA6a2V5PVwiaW5kZXhcIiBjbGFzcz1cIml0ZW1cIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0eXBlXCI+6L+Q5Y2V5Y+377yaPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImNvZGVcIj57eyBpdGVtIH19PC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cInN0YXR1c1wiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwiZmFpbFwiPuW3suWkseaViDwvdGV4dD5cclxuICAgICAgPC92aWV3Pi0tLT48dGV4dCBjbGFzcz1cImNvZGVcIiA6c3R5bGU9XCJ7IGNvbG9yOiBpdGVtLnN0YXR1cyA/ICdncmVlbicgOiAnIzY2NicgfVwiPlxyXG4gICAgICAgIHt7IGl0ZW0ub3JkZXJOdW0gfX1cclxuICAgICAgICA8dGV4dCB2LWlmPVwiaXRlbS5iYXRjaF90ZXh0XCI+IOWNleWPtyB7eyBpdGVtLmJhdGNoX3RleHQgfX08L3RleHQ+XHJcbiAgICAgICAgPHRleHQgdi1pZj1cIml0ZW0uc3BhY2VcIj4g5bqT5L2NIHt7IGl0ZW0uc3BhY2UgfX08L3RleHQ+XHJcbiAgICAgICAge3sgaXRlbS50eXBlIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgICAgPHVuaS1pY29uc1xyXG4gICAgICAgIHYtaWY9XCJpdGVtLnN0YXR1c1wiXHJcbiAgICAgICAgdHlwZT1cImNoZWNrbWFya2VtcHR5XCJcclxuICAgICAgICBjbGFzcz1cInN0YXR1c1wiXHJcbiAgICAgICAgc2l6ZT1cIjE2XCJcclxuICAgICAgICBjb2xvcj1cImdyZWVuXCJcclxuICAgICAgPjwvdW5pLWljb25zPlxyXG4gICAgICA8dGV4dCBjbGFzcz1cInN0YXR1cyBmYWlsXCIgdi1lbHNlPkY8L3RleHQ+XHJcbiAgICAgIDx0ZXh0IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcnB4OyBmb250LXdlaWdodDogMzAwXCI+XHJcbiAgICAgICAge3sgJ1xcclxcbicgKyBpdGVtLmNyZWF0ZVRpbWUgfX1cclxuICAgICAgPC90ZXh0PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgdi1pZj1cIndheWJpbGxOb0hpc3RvcnkubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJpcy1lbXB0eVwiPuaaguaXoOWOhuWPsjwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyByZWFjdGl2ZSwgcmVmIH0gZnJvbSAndnVlJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuY29uc3Qgd2F5YmlsbE5vSGlzdG9yeSA9IHJlZihbXSBhcyBhbnlbXSlcclxuY29uc3QgZ2V0SGlzdG9yeSA9IGFzeW5jICgpID0+IHtcclxuICB3YXliaWxsTm9IaXN0b3J5LnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3YXliaWxsTm9IaXN0b3J5JylcclxufVxyXG5vbkxvYWQoYXN5bmMgKCkgPT4ge1xyXG4gIGF3YWl0IGdldEhpc3RvcnkoKVxyXG59KVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLmhpc3Rvcnkge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBqdXN0aWZ5LWl0ZW1zOiBzdGFydDtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgfVxyXG5cclxuICAudHlwZSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG5cclxuICAuY29kZSB7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcbiAgICAvLyBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuXHJcbiAgICAuc3RhdHVzIHtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAyMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAuZmFpbCB7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgIGNvbG9yOiAjZjAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmlzLWVtcHR5IHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbjogNDBweCAwO1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cImhpc3RvcnlcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiKGl0ZW0sIGkpIGluIHdheWJpbGxOb0hpc3RvcnlcIiA6a2V5PVwiaVwiPlxyXG4gICAgICA8IS0tIDx0ZXh0IGNsYXNzPVwidHlwZVwiPuW6k+S9jTwvdGV4dD5cclxuICAgICAgPHRleHQgY2xzYWE9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj57eyBpdGVtLnNwYWNlIH19PC90ZXh0PlxyXG4gICAgICA8dmlldz5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cInR5cGVcIj7ljZXlj7c8L3RleHQ+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJjb2RlXCIg77ybc3R5bGU9XCJ7Y29sb3IgOiBpdGVtLnN0YXR1cyA/ICdncmVlbicgOiAnIzY2Nid9XCI+e3sgaXRlbS5jb2RlIH19PC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwic3BhY2UtdGltZVwiPlxyXG4gICAgICAgIDx0ZXh0PlxyXG4gICAgICAgICAge3sgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgICAgPC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG5cclxuICA8dmlldyB2LWlmPVwid2F5YmlsbE5vSGlzdG9yeS5sZW5ndGggPT09IDBcIiBjbGFzcz1cImlzLWVtcHR5XCI+5pqC5peg5Y6G5Y+yPC92aWV3PlxyXG4gIDx2aWV3IGNsYXNzPVwiaGlzdG9yeVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPuWOhuWPsui/kOWNleWPtzwvdmlldz5cclxuICAgIDx2aWV3IHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiB3YXliaWxsTm9IaXN0b3J5XCIgOmtleT1cImluZGV4XCIgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwidHlwZVwiPui/kOWNleWPt++8mjwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjb2RlXCI+e3sgaXRlbSB9fTwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJzdGF0dXNcIj5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImZhaWxcIj7lt7LlpLHmlYg8L3RleHQ+XHJcbiAgICAgIDwvdmlldz4tLS0+PHRleHQgY2xhc3M9XCJjb2RlXCIgOnN0eWxlPVwieyBjb2xvcjogaXRlbS5zdGF0dXMgPyAnZ3JlZW4nIDogJyM2NjYnIH1cIj5cclxuICAgICAgICB7eyBpdGVtLm9yZGVyTnVtIH19XHJcbiAgICAgICAgPHRleHQgdi1pZj1cIml0ZW0uYmF0Y2hfdGV4dFwiPiDljZXlj7cge3sgaXRlbS5iYXRjaF90ZXh0IH19PC90ZXh0PlxyXG4gICAgICAgIDx0ZXh0IHYtaWY9XCJpdGVtLnNwYWNlXCI+IOW6k+S9jSB7eyBpdGVtLnNwYWNlIH19PC90ZXh0PlxyXG4gICAgICAgIHt7IGl0ZW0udHlwZSB9fVxyXG4gICAgICA8L3RleHQ+XHJcbiAgICAgIDx1bmktaWNvbnNcclxuICAgICAgICB2LWlmPVwiaXRlbS5zdGF0dXNcIlxyXG4gICAgICAgIHR5cGU9XCJjaGVja21hcmtlbXB0eVwiXHJcbiAgICAgICAgY2xhc3M9XCJzdGF0dXNcIlxyXG4gICAgICAgIHNpemU9XCIxNlwiXHJcbiAgICAgICAgY29sb3I9XCJncmVlblwiXHJcbiAgICAgID48L3VuaS1pY29ucz5cclxuICAgICAgPHRleHQgY2xhc3M9XCJzdGF0dXMgZmFpbFwiIHYtZWxzZT5GPC90ZXh0PlxyXG4gICAgICA8dGV4dCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHJweDsgZm9udC13ZWlnaHQ6IDMwMFwiPlxyXG4gICAgICAgIHt7ICdcXHJcXG4nICsgaXRlbS5jcmVhdGVUaW1lIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgIDwvdmlldz5cclxuICAgIDx2aWV3IHYtaWY9XCJ3YXliaWxsTm9IaXN0b3J5Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiaXMtZW1wdHlcIj7mmoLml6Dljoblj7I8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVhY3RpdmUsIHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmNvbnN0IHdheWJpbGxOb0hpc3RvcnkgPSByZWYoW10gYXMgYW55W10pXHJcbmNvbnN0IGdldEhpc3RvcnkgPSBhc3luYyAoKSA9PiB7XHJcbiAgd2F5YmlsbE5vSGlzdG9yeS52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2F5YmlsbE5vSGlzdG9yeScpXHJcbn1cclxub25Mb2FkKGFzeW5jICgpID0+IHtcclxuICBhd2FpdCBnZXRIaXN0b3J5KClcclxufSlcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5oaXN0b3J5IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1pdGVtczogc3RhcnQ7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICBmb250LXdlaWdodDogNjAwO1xyXG4gIH1cclxuXHJcbiAgLnR5cGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gIH1cclxuXHJcbiAgLmNvZGUge1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICB9XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgLy8gZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcblxyXG4gICAgLnN0YXR1cyB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmZhaWwge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogI2YwMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pcy1lbXB0eSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHggMDtcclxuICAgIGNvbG9yOiAjOTk5O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgdHlwZSB7IFBpY2tVcERldGFpbEl0ZW0gfSBmcm9tICdAL3R5cGVzL3dheWJpbGxQaWNrVXAnXHJcbmltcG9ydCB7IGh0dHAgfSBmcm9tICdAL3V0aWxzL2h0dHAnXHJcblxyXG4vKipcclxuICog6I635Y+W5Y+W5Lu25Y2V5YiX6KGoXHJcbiAqL1xyXG5leHBvcnQgY29uc3Qgd2F5YmlsbFBpY2tVcE9yZGVycyA9IChwYXJhbXM6IHsgcGFnZTogbnVtYmVyOyBsaW1pdDogbnVtYmVyIH0pID0+IHtcclxuICByZXR1cm4gaHR0cDxhbnk+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6ICcvYWRtaW4vcGlja3VwLndheWJpbGxQaWNrVXBPcmRlci9pbmRleCcsXHJcbiAgICBkYXRhOiBwYXJhbXMsXHJcbiAgfSlcclxufVxyXG4vKipcclxuICog6I635Y+W5Y+W5Lu25Y2V6K+m5oOFXHJcbiAqIEBwYXJhbSBpZCDlj5bku7bljZVpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldFBpY2tVcEJ5SWQgPSAocGlja191cF9vcmRlcl9pZDogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8eyBkZXRhaWxzOiBQaWNrVXBEZXRhaWxJdGVtW10gfT4oe1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogJy9hZG1pbi9waWNrdXAud2F5YmlsbFBpY2tVcE9yZGVyL2RldGFpbCcsXHJcbiAgICBkYXRhOiB7IHBpY2tfdXBfb3JkZXJfaWQgfSxcclxuICB9KVxyXG59XHJcbi8qKlxyXG4gKiDpgJrov4fov5DljZXlj7fojrflj5blj5bku7bljZXmmI7nu4ZcclxuICogQHBhcmFtIHdheWJpbGxfbm8g6L+Q5Y2V5Y+3XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UGlja1VwQnlXYXliaWxsTm8gPSAod2F5YmlsbF9ubzogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8UGlja1VwRGV0YWlsSXRlbT4oe1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogJy9hZG1pbi9waWNrdXAud2F5YmlsbFBpY2tVcE9yZGVyL2dldEJ5V2F5YmlsbE5vJyxcclxuICAgIGRhdGE6IHsgd2F5YmlsbF9ubyB9LFxyXG4gIH0pXHJcbn1cclxuLyoqXHJcbiAqIOWPkeWHulxyXG4gKiBAcGFyYW0gZGF0YVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHN0YXJ0T2ZmID0gKGRhdGE6IHsgaWQ6IG51bWJlciB9KSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8UGlja1VwRGV0YWlsSXRlbT4oe1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICcvYWRtaW4vcGlja3VwLndheWJpbGxQaWNrVXBPcmRlci9zdGFydE9mZicsXHJcbiAgICBkYXRhOiBkYXRhLFxyXG4gIH0pXHJcbn1cclxuLyrmj73mlLYqL1xyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdChkYXRhOiB7IGlkOiBudW1iZXIgfSkge1xyXG4gIHJldHVybiBodHRwPFBpY2tVcERldGFpbEl0ZW0+KHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnL2FkbWluL3BpY2t1cC53YXliaWxsUGlja1VwT3JkZXIvY29sbGVjdCcsXHJcbiAgICBkYXRhOiBkYXRhLFxyXG4gIH0pXHJcbn1cclxuLyrnoa7orqTpgIHovr4qL1xyXG5leHBvcnQgZnVuY3Rpb24gcGlja3VwRGVsaXZlcmVkKGRhdGE6IHsgaWQ6IG51bWJlciB9KSB7XHJcbiAgcmV0dXJuIGh0dHA8UGlja1VwRGV0YWlsSXRlbT4oe1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICcvYWRtaW4vcGlja3VwLndheWJpbGxQaWNrVXBPcmRlci9kZWxpdmVyZWQnLFxyXG4gICAgZGF0YTogZGF0YSxcclxuICB9KVxyXG59XHJcbi8q5Y+W5Lu25Y2VLS3mipXpgJLliLDlv6vpgJLnvZHngrkqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVsaXZlcnlUb1RoZUNvdXJpZXJQb2ludChkYXRhOiB7XHJcbiAgaWQ6IG51bWJlclxyXG4gIGNvdXJpZXJfcG9pbnQ6IHN0cmluZ1xyXG4gIGltYWdlczogc3RyaW5nW11cclxufSkge1xyXG4gIHJldHVybiBodHRwPFBpY2tVcERldGFpbEl0ZW0+KHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnL2FkbWluL3BpY2t1cC53YXliaWxsUGlja1VwT3JkZXIvZGVsaXZlcnlUb1RoZUNvdXJpZXJQb2ludCcsXHJcbiAgICBkYXRhOiBkYXRhLFxyXG4gIH0pXHJcbn1cclxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDwhLS0g6L6T5YWl5qGG5ZKM562b6YCJ5oyJ6ZKuIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJpbnB1dGZpbHRlclwiPlxyXG4gICAgICA8dW5pLWVhc3lpbnB1dCB2LW1vZGVsPVwic2VhcmNoVmFsdWVcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWNleWPt1wiIDppbnB1dEJvcmRlcj1cImZhbHNlXCIgLz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJmaWx0ZXJcIj5cclxuICAgICAgICA8dGV4dD7nrZvpgIk8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g54q25oCB6YCJ6aG5IC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJjZW50ZXItY3V0LW1lbnVcIj5cclxuICAgICAgPHNjcm9sbC12aWV3XHJcbiAgICAgICAgOnNjcm9sbC14PVwidHJ1ZVwiXHJcbiAgICAgICAgOnNjcm9sbC13aXRoLWFuaW1hdGlvbj1cInRydWVcIlxyXG4gICAgICAgIDpzaG93LXNjcm9sbGJhcj1cImZhbHNlXCJcclxuICAgICAgICBjbGFzcz1cInNjcm9sbC12aWV3XCJcclxuICAgICAgICA6c2Nyb2xsLWxlZnQ9XCJzY3JvbGxMZWZ0XCJcclxuICAgICAgPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwic2Nyb2xsLWl0ZW1cIj5cclxuICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgIGNsYXNzPVwic2Nyb2xsLWl0ZW1cIlxyXG4gICAgICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gc3RhdHVzSXRlbXNcIlxyXG4gICAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXHJcbiAgICAgICAgICAgIEB0YXA9XCJjaGFuZ2VNZW51KGluZGV4KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiaXRlbS10ZXh0XCIgOmNsYXNzPVwiYWN0aXZlSW5kZXggPT0gaW5kZXggPyAnYWN0aXZlJyA6ICcnXCI+e3tcclxuICAgICAgICAgICAgICBpdGVtLnRpdGxlXHJcbiAgICAgICAgICAgIH19PC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC9zY3JvbGwtdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g5YiX6KGoIC0tPlxyXG4gICAgPHNjcm9sbC12aWV3IGVuYWJsZS1iYWNrLXRvLXRvcCBzY3JvbGwteSBjbGFzcz1cInNjcm9sbC12aWV3XCIgQHNjcm9sbHRvbG93ZXI9XCJvblNjcm9sbHRvbG93ZXJcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlcnNcIj5cclxuICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0b3JcIlxyXG4gICAgICAgICAgdi1mb3I9XCIoaXRlbSwgaSkgaW4gd2F5YmlsbERlbGl2ZXJ5XCJcclxuICAgICAgICAgIDprZXk9XCJpXCJcclxuICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwRGV0YWlscz9pZD0ke2l0ZW0uaWR9YFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlcl9ub19zdGF0ZVwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm9yZGVyX25vXCI+XHJcbiAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aXRsZVwiPuiuouWNleWPtzwvdGV4dD5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImNvbnRlbnRcIj57eyBpdGVtLm9yZGVyX25vIH19PC90ZXh0PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm9yZGVyX3N0YXRlXCI+XHJcbiAgICAgICAgICAgICAgPHRleHQgOmNsYXNzPVwiYHN0YXRlLSR7aXRlbS5zdGF0dXN9YFwiPnt7IGl0ZW0uc3RhdHVzX3RleHQgfX08L3RleHQ+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwicGlja191cF9kYXRlXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0ucGlja191cF9kYXRlIH19PC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJzZWdtZW50YXRpb24tbGluZVwiPjwvdmlldz5cclxuXHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImFkZHJlc3NcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyLWluZm9cIj5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cInVzZXJcIj57e1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRyZXNzPy5maXJzdF9uYW1lICsgJyAnICsgaXRlbS5hZGRyZXNzPy5sYXN0X25hbWVcclxuICAgICAgICAgICAgICB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICA+K3t7IGl0ZW0uYWRkcmVzcz8ubW9iaWxlX2NvZGUgKyAnICcgKyBpdGVtLmFkZHJlc3M/Lm1vYmlsZSB9fTwvdGV4dFxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cImFkZHJlc3MtaW5mb1wiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0uYWRkcmVzcz8uY2l0eSB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8dGV4dD57eyBpdGVtLmFkZHJlc3M/LnppcF9jb2RlIH19PC90ZXh0PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgPHZpZXcgdi1mb3I9XCJnb29kIGluIGl0ZW0uZ29vZHNcIiA6a2V5PVwiZ29vZC5pZFwiIGNsYXNzPVwiZ29vZHNcIj5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgPnt7IGdvb2QubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJxdHlcIj4geHt7IGdvb2QucXR5IH19IDwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3RleHQ+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImxvYWRpbmctdGV4dFwiPlxyXG4gICAgICAgIHt7IHRvdGFsID09PSB3YXliaWxsRGVsaXZlcnkubGVuZ3RoID8gJ+ayoeacieabtOWkmuaVsOaNruS6hn4nIDogJ+ato+WcqOWKoOi9vS4uLicgfX1cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC9zY3JvbGwtdmlldz5cclxuICAgIDx1bmktcG9wdXAgcmVmPVwibWVzc2FnZVJlZlwiIHR5cGU9XCJtZXNzYWdlXCI+XHJcbiAgICAgIDx1bmktcG9wdXAtbWVzc2FnZVxyXG4gICAgICAgIDp0eXBlPVwibWVzc2FnZVR5cGVcIlxyXG4gICAgICAgIDptZXNzYWdlPVwibWVzc2FnZVRleHRcIlxyXG4gICAgICAgIDpkdXJhdGlvbj1cIjIwMDBcIlxyXG4gICAgICA+PC91bmktcG9wdXAtbWVzc2FnZT5cclxuICAgIDwvdW5pLXBvcHVwPlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlYWN0aXZlLCByZWYsIG9uTW91bnRlZCB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25TaG93LCBvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgY2hlY2tQZXJtaXNzaW9uIH0gZnJvbSAnQC91dGlscydcclxuaW1wb3J0IHsgd2F5YmlsbFBpY2tVcE9yZGVycywgZ2V0UGlja1VwQnlXYXliaWxsTm8gfSBmcm9tICdAL3NlcnZpY2VzL3dheWJpbGxQaWNrVXBPcmRlcidcclxuaW1wb3J0IHR5cGUgeyBTdGF0dXNJdGVtIH0gZnJvbSAnQC90eXBlcy93YXliaWxsUGlja1VwJ1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50SW5zdGFuY2UgfSBmcm9tICd2dWUnXHJcblxyXG5sZXQgc2VuZE91dFVSTCA9ICcnXHJcbmxldCBkZWxpdmVyZWRVUkwgPSAnJ1xyXG5sZXQgcmVmdXNlVVJMID0gJydcclxubGV0IGNyZWF0ZVRyYWNrUG9kVVJMID0gJydcclxubGV0IGNhbmNlbEZlZEV4UGlja1VwVVJMID0gJydcclxuXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGxvYWRpbmdCdG4gPSByZWYoZmFsc2UpXHJcbmNvbnN0IHNlYXJjaFZhbHVlID0gcmVmKClcclxuY29uc3Qgd2F5YmlsbERlbGl2ZXJ5ID0gcmVmKFtdIGFzIGFueSlcclxuY29uc3QgdG90YWwgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZigpXHJcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKClcclxuY29uc3QgbWVzc2FnZVJlZiA9IHJlZigpXHJcbmNvbnN0IHNob3dSaWdodFJlZiA9IHJlZigpXHJcbmNvbnN0IHBhcmFtcyA9IHJlYWN0aXZlKHtcclxuICBwYWdlOiAxLFxyXG4gIGxpbWl0OiAxMCxcclxufSlcclxuXHJcbmNvbnN0IHNjcm9sbExlZnQgPSByZWYoMClcclxuY29uc3QgY29udGVudFNjcm9sbFcgPSByZWYoMClcclxuY29uc3QgYWN0aXZlSW5kZXggPSByZWYoMClcclxuY29uc3Qgc3RhdHVzSXRlbXMgPSByZWY8U3RhdHVzSXRlbVtdPihbXHJcbiAge1xyXG4gICAgaWQ6IDEsXHJcbiAgICB0aXRsZTogJ+WFqOmDqCcsXHJcbiAgICB2YWx1ZTogMCxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAyLFxyXG4gICAgdGl0bGU6ICflvoXlj5bku7YnLFxyXG4gICAgdmFsdWU6IDIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogMyxcclxuICAgIHRpdGxlOiAn5Y+W5Lu25LitJyxcclxuICAgIHZhbHVlOiAzLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgaWQ6IDQsXHJcbiAgICB0aXRsZTogJ+mDqOWIhuWPluS7ticsXHJcbiAgICB2YWx1ZTogNCxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiA1LFxyXG4gICAgdGl0bGU6ICflhajpg6jlj5bku7YnLFxyXG4gICAgdmFsdWU6IDUsXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogNixcclxuICAgIHRpdGxlOiAn6YOo5YiG5oqV6YCSJyxcclxuICAgIHZhbHVlOiA2LFxyXG4gIH0sXHJcbiAge1xyXG4gICAgaWQ6IDcsXHJcbiAgICB0aXRsZTogJ+WFqOmDqOaKlemAkicsXHJcbiAgICB2YWx1ZTogNyxcclxuICB9LFxyXG5dKVxyXG4vLyDpgInmi6nmoIfpophcclxuY29uc3QgY2hhbmdlTWVudSA9IChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgYWN0aXZlSW5kZXgudmFsdWUgPSBpbmRleFxyXG4gIC8vKOW9k+WJjeeCueWHu+WtkOWFg+e0oOWxheS4reWxleekuikgIOS4jeWPl+WtkOWFg+e0oOWuveW6puW9seWTjVxyXG4gIHNjcm9sbExlZnQudmFsdWUgPVxyXG4gICAgc3RhdHVzSXRlbXMudmFsdWVbaW5kZXhdLmxlZnQhIC0gY29udGVudFNjcm9sbFcudmFsdWUgLyAyICsgc3RhdHVzSXRlbXMudmFsdWVbaW5kZXhdLndpZHRoISAvIDJcclxufVxyXG5cclxuY29uc3QgcmVzZXRGb3JtID0gKCkgPT4ge31cclxuY29uc3QgY29uZmlybUZvcm0gPSAoKSA9PiB7XHJcbiAgc2hvd1JpZ2h0UmVmLnZhbHVlLmNsb3NlKClcclxufVxyXG5cclxuY29uc3QgY29weU9yZGVyTm8gPSAob3JkZXJfbm86IHN0cmluZykgPT4ge1xyXG4gIHVuaS5zZXRDbGlwYm9hcmREYXRhKHtcclxuICAgIGRhdGE6IG9yZGVyX25vLFxyXG4gICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xyXG4gICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICB0aXRsZTogJ+WkjeWItuaIkOWKnycsXHJcbiAgICAgICAgaWNvbjogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgIGR1cmF0aW9uOiAyMDAwLFxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgX19mX18oJ2xvZycsJ2F0IHBhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwT3JkZXIudnVlOjE4OCcsJ+WkjeWItuWksei0pScpXHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGNhbGxQaG9uZSA9IChwaG9uZU51bWJlcjogc3RyaW5nKSA9PiB7XHJcbiAgX19mX18oJ2xvZycsJ2F0IHBhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwT3JkZXIudnVlOjE5NCcscGhvbmVOdW1iZXIpXHJcblxyXG4gIHVuaS5tYWtlUGhvbmVDYWxsKHtcclxuICAgIHBob25lTnVtYmVyOiBwaG9uZU51bWJlcixcclxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgX19mX18oJ2xvZycsJ2F0IHBhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwT3JkZXIudnVlOjE5OScsJ+aLqOaJk+eUteivneaIkOWKn++8gScpXHJcbiAgICB9LFxyXG4gICAgZmFpbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvcGlja3VwL3dheWJpbGxQaWNrVXBPcmRlci52dWU6MjAyJywn5ouo5omT55S16K+d5aSx6LSl77yBJylcclxuICAgIH0sXHJcbiAgfSlcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbn1cclxuXHJcbmNvbnN0IHNjYW5JbnB1dCA9IGFzeW5jICgpID0+IHtcclxuXHJcbiAgbGV0IHN0YXR1cyA9IGF3YWl0IGNoZWNrUGVybWlzc2lvbigpXHJcbiAgaWYgKHN0YXR1cyAhPT0gMSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICB1bmkuc2NhbkNvZGUoe1xyXG4gICAgc3VjY2VzczogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIF9fZl9fKCdsb2cnLCdhdCBwYWdlcy9waWNrdXAvd2F5YmlsbFBpY2tVcE9yZGVyLnZ1ZToyMjknLCdyZXMtLS0nLCByZXMucmVzdWx0KVxyXG5cclxuICAgICAgLy8gdmFsaUZvcm1EYXRhLnZhbHVlLm9yZGVyX2NvZGUgPSByZXMucmVzdWx0O1xyXG4gICAgICAvLyBvbnN1Ym1pdCgpO1xyXG4gICAgfSxcclxuICAgIGZhaWw6IChlcnIpID0+IHtcclxuICAgICAgLy8g6ZyA6KaB5rOo5oSP55qE5piv5bCP56iL5bqP5omr56CB5LiN6ZyA6KaB55Sz6K+355u45py65p2D6ZmQXHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGdldExpc3QgPSBhc3luYyAoKSA9PiB7XHJcbiAgbG9hZGluZy52YWx1ZSA9IHRydWVcclxuICBwYXJhbXMucGFnZSA9IDFcclxuICBjb25zdCByZXMgPSBhd2FpdCB3YXliaWxsUGlja1VwT3JkZXJzKHBhcmFtcylcclxuXHJcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXHJcbiAgaWYgKHJlcy5jb2RlID09IDEpIHtcclxuICAgIHdheWJpbGxEZWxpdmVyeS52YWx1ZSA9IHJlcy5kYXRhLmxpc3RcclxuICAgIHRvdGFsLnZhbHVlID0gcmVzLmRhdGEudG90YWxcclxuICB9IGVsc2Uge1xyXG4gICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXHJcbiAgICBtZXNzYWdlVGV4dC52YWx1ZSA9IHJlcy5tc2dcclxuICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgfVxyXG59XHJcbm9uU2hvdygoKSA9PiB7XHJcbiAgZ2V0TGlzdCgpXHJcbn0pXHJcbm9uTW91bnRlZCgoKSA9PiB7XHJcbiAgZ2V0U2Nyb2xsVygpXHJcbn0pXHJcbm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcChhc3luYyAoZXZlbnQpID0+IHtcclxuICBpZiAoZXZlbnQuaW5kZXggPT09IDApIHtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGdldFBpY2tVcEJ5V2F5YmlsbE5vKCdZVFNFQTI0MTIwODAwMDFHQjAxJylcclxuICAgIGlmIChyZXMuY29kZSA9PSAxICYmIHJlcy5kYXRhLmlkKSB7XHJcbiAgICAgIHVuaS5uYXZpZ2F0ZVRvKHtcclxuICAgICAgICB1cmw6IGAvcGFnZXMvcGlja3VwL3dheWJpbGxQaWNrVXBEZXRhaWw/d2F5YmlsbF9ubz0ke3Jlcy5kYXRhLndheWJpbGxfbm99YCxcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfpnaLljZXkuI3lrZjlnKgnXHJcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2NhbklucHV0KClcclxuICAgIC8vIHNob3dSaWdodFJlZi52YWx1ZS5vcGVuKClcclxuICB9XHJcbn0pXHJcblxyXG4vLyDojrflj5bmoIfpopjljLrln5/lrr3luqbvvIzlkozmr4/kuKrlrZDlhYPntKDoioLngrnnmoTlrr3luqbku6Xlj4rlhYPntKDot53nprvlt6bovrnmoI/nmoTot53nprtcclxuY29uc3QgZ2V0U2Nyb2xsVyA9ICgpID0+IHtcclxuICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpXHJcbiAgY29uc3QgcXVlcnkgPSB1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpLmluKGluc3RhbmNlIS5wcm94eSlcclxuICBxdWVyeVxyXG4gICAgLnNlbGVjdCgnLnNjcm9sbC12aWV3JylcclxuICAgIC5ib3VuZGluZ0NsaWVudFJlY3QoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAvLyDmi7/liLAgc2Nyb2xsLXZpZXcg57uE5Lu25a695bqmXHJcbiAgICAgIGNvbnRlbnRTY3JvbGxXLnZhbHVlID0gZGF0YS53aWR0aFxyXG4gICAgfSlcclxuICAgIC5leGVjKClcclxuXHJcbiAgcXVlcnlcclxuICAgIC5zZWxlY3RBbGwoJy5zY3JvbGwtaXRlbScpXHJcbiAgICAuYm91bmRpbmdDbGllbnRSZWN0KChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGRhdGFMZW4gPSBkYXRhLmxlbmd0aCAtIDFcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuOyBpKyspIHtcclxuICAgICAgICAvLyAgc2Nyb2xsLXZpZXcg5a2Q5YWD57Sg57uE5Lu26Led56a75bem6L655qCP55qE6Led56a7XHJcbiAgICAgICAgc3RhdHVzSXRlbXMudmFsdWVbaV0ubGVmdCA9IGRhdGFbaV0ubGVmdCB8fCAwXHJcbiAgICAgICAgLy8gIHNjcm9sbC12aWV3IOWtkOWFg+e0oOe7hOS7tuWuveW6plxyXG4gICAgICAgIHN0YXR1c0l0ZW1zLnZhbHVlW2ldLndpZHRoID0gZGF0YVtpXS53aWR0aFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLmV4ZWMoKVxyXG59XHJcblxyXG4vLyDmu5rliqjop6blupVcclxuY29uc3Qgb25TY3JvbGx0b2xvd2VyID0gYXN5bmMgKCkgPT4ge1xyXG4gIC8vIOWIhumhteadoeS7tlxyXG4gIGlmICh3YXliaWxsRGVsaXZlcnkudmFsdWUubGVuZ3RoIDwgdG90YWwudmFsdWUpIHtcclxuICAgIC8vIOW9k+WJjemhteeggee0r+WKoFxyXG4gICAgcGFyYW1zLnBhZ2UrK1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyDpgIDlh7rlubbovbvmj5DnpLpcclxuICAgIHJldHVybiB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ25vbmUnLCB0aXRsZTogJ+ayoeacieabtOWkmuaVsOaNruS6hn4nIH0pXHJcbiAgfVxyXG4gIC8vIOiwg+eUqEFQSeS8oOWPglxyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IHdheWJpbGxQaWNrVXBPcmRlcnMocGFyYW1zKVxyXG4gIGlmIChyZXMuY29kZSA9PSAxKSB7XHJcbiAgICAvLyDmlbDnu4Tov73liqBcclxuICAgIHdheWJpbGxEZWxpdmVyeS52YWx1ZS5wdXNoKC4uLnJlcy5kYXRhLmxpc3QpXHJcbiAgICB0b3RhbC52YWx1ZSA9IHJlcy5kYXRhLnRvdGFsXHJcbiAgfVxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG5wYWdlIHtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcclxufVxyXG4udmlld3BvcnQge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgcGFkZGluZzogODBycHggMCAwO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4uaW5wdXRmaWx0ZXIge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIHdpZHRoOiA3NTBycHg7XHJcbiAgaGVpZ2h0OiA4MHJweDtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogMDtcclxuICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gIDpkZWVwKC51bmktZWFzeWlucHV0X19jb250ZW50LWlucHV0KSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1xyXG4gICAgaGVpZ2h0OiA2MHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIH1cclxuICAuZmlsdGVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgbWFyZ2luLWxlZnQ6IDIwcnB4O1xyXG4gICAgaGVpZ2h0OiA4MHJweDtcclxuICAgIGZvbnQtc2l6ZTogMzBycHg7XHJcbiAgICBjb2xvcjogIzMzMzMzMztcclxuICAgIGxpbmUtaGVpZ2h0OiAzMCU7XHJcbiAgICB0ZXh0OjphZnRlciB7XHJcbiAgICAgIGNvbnRlbnQ6ICdcXGU4YjcnO1xyXG4gICAgICBmb250LWZhbWlseTogJ2ljb25mb250JyAhaW1wb3J0YW50O1xyXG4gICAgICBtYXJnaW4tbGVmdDogMTBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgICAgIGNvbG9yOiAjOTk5OTk5O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4uc2Nyb2xsLXZpZXcge1xyXG4gIGZsZXg6IDE7XHJcbn1cclxuLmNlbnRlci1jdXQtbWVudSB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDBycHg7XHJcbiAgbGluZS1oZWlnaHQ6IDkwcnB4O1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBjb2xvcjogIzMzMztcclxuICBib3gtc2hhZG93OiAwIDRycHggNXJweCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuMyk7XHJcbiAgLnNjcm9sbC12aWV3IHtcclxuICAgIGhlaWdodDogMTAwcnB4O1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuXHJcbiAgICAuc2Nyb2xsLWl0ZW0ge1xyXG4gICAgICBoZWlnaHQ6IDEwMHJweDtcclxuICAgICAgcGFkZGluZzogMCAyMHJweDtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblxyXG4gICAgICAuaXRlbS10ZXh0IHtcclxuICAgICAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMDBycHg7XHJcbiAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgY29sb3I6ICMxNDY4ZmY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi5vcmRlcnMge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBwYWRkaW5nOiAwIDIwcnB4IDIwcnB4O1xyXG4gIC5uYXZpZ2F0b3Ige1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDIwcnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgIGJveC1zaGFkb3c6IDAgMHJweCAxMHJweCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuOCk7XHJcbiAgfVxyXG4gIC5vcmRlcl9ub19zdGF0ZSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAub3JkZXJfbm8ge1xyXG4gICAgICBmb250LXNpemU6IDMwcnB4O1xyXG4gICAgICBjb2xvcjogIzMzMzMzMztcclxuICAgICAgLnRpdGxlIHtcclxuICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBycHg7XHJcbiAgICAgIH1cclxuICAgICAgLmNvbnRlbnQge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5vcmRlcl9zdGF0ZSB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIC5zdGF0ZS0yIHtcclxuICAgICAgICBjb2xvcjogIzI5NzlmZjtcclxuICAgICAgfVxyXG4gICAgICAuc3RhdGUtMyB7XHJcbiAgICAgICAgY29sb3I6ICMxYzY3ZGE7XHJcbiAgICAgIH1cclxuICAgICAgLnN0YXRlLTQge1xyXG4gICAgICAgIGNvbG9yOiAjZjNhNzNmO1xyXG4gICAgICB9XHJcbiAgICAgIC5zdGF0ZS01IHtcclxuICAgICAgICBjb2xvcjogIzE4YmMzNztcclxuICAgICAgfVxyXG4gICAgICAuc3RhdGUtNiB7XHJcbiAgICAgICAgY29sb3I6ICNmM2E3M2Y7XHJcbiAgICAgIH1cclxuICAgICAgLnN0YXRlLTcge1xyXG4gICAgICAgIGNvbG9yOiAjMDFiMDc1O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5waWNrX3VwX2RhdGUge1xyXG4gICAgZm9udC1zaXplOiAyNHJweDtcclxuICB9XHJcbiAgLnNlZ21lbnRhdGlvbi1saW5lIHtcclxuICAgIHdpZHRoOiA5OCU7XHJcbiAgICBoZWlnaHQ6IDFweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNlYWVhZWE7XHJcbiAgICBtYXJnaW46IDEwcHggMDtcclxuICB9XHJcbiAgLmFkZHJlc3Mge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAudXNlci1pbmZvIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHJweDtcclxuICAgICAgLnVzZXI6OmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogJ1xcZTYwNSc7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6ICdpY29uZm9udCcgIWltcG9ydGFudDtcclxuICAgICAgICBmb250LXNpemU6IDM0cnB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBycHg7XHJcbiAgICAgICAgY29sb3I6ICNlMDYyMGQ7XHJcbiAgICAgIH1cclxuICAgICAgLnVzZXIge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMzJycHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHJweDtcclxuICAgICAgfVxyXG4gICAgICAubW9iaWxlIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuYWRkcmVzcy1pbmZvIHtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMTBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICB9XHJcbiAgICAuYWRkcmVzcy1pbmZvOjpiZWZvcmUge1xyXG4gICAgICBjb250ZW50OiAnXFxlN2I3JztcclxuICAgICAgZm9udC1mYW1pbHk6ICdpY29uZm9udCcgIWltcG9ydGFudDtcclxuICAgICAgZm9udC1zaXplOiAzNHJweDtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAxMHJweDtcclxuICAgICAgY29sb3I6ICMwMDdhZmY7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5nb29kcyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICMzMzMzMzM7XHJcbiAgICAuaXRlbSB7XHJcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHJweDtcclxuICAgICAgLnF0eSB7XHJcbiAgICAgICAgY29sb3I6ICM5OTk5OTk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5pdGVtOjpiZWZvcmUge1xyXG4gICAgICBjb250ZW50OiAnXFxlN2JhJztcclxuICAgICAgZm9udC1mYW1pbHk6ICdpY29uZm9udCcgIWltcG9ydGFudDtcclxuICAgICAgZm9udC1zaXplOiAzNHJweDtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAxMHJweDtcclxuICAgICAgY29sb3I6ICM5OTk5OTk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi5sb2FkaW5nLXRleHQge1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBmb250LXNpemU6IDI4cnB4O1xyXG4gIGNvbG9yOiAjNjY2O1xyXG4gIHBhZGRpbmc6IDIwcnB4IDAgNTBycHg7XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDwhLS0g6L6T5YWl5qGG5ZKM562b6YCJ5oyJ6ZKuIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJpbnB1dGZpbHRlclwiPlxyXG4gICAgICA8dW5pLWVhc3lpbnB1dCB2LW1vZGVsPVwic2VhcmNoVmFsdWVcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWNleWPt1wiIDppbnB1dEJvcmRlcj1cImZhbHNlXCIgLz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJmaWx0ZXJcIj5cclxuICAgICAgICA8dGV4dD7nrZvpgIk8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g54q25oCB6YCJ6aG5IC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJjZW50ZXItY3V0LW1lbnVcIj5cclxuICAgICAgPHNjcm9sbC12aWV3XHJcbiAgICAgICAgOnNjcm9sbC14PVwidHJ1ZVwiXHJcbiAgICAgICAgOnNjcm9sbC13aXRoLWFuaW1hdGlvbj1cInRydWVcIlxyXG4gICAgICAgIDpzaG93LXNjcm9sbGJhcj1cImZhbHNlXCJcclxuICAgICAgICBjbGFzcz1cInNjcm9sbC12aWV3XCJcclxuICAgICAgICA6c2Nyb2xsLWxlZnQ9XCJzY3JvbGxMZWZ0XCJcclxuICAgICAgPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwic2Nyb2xsLWl0ZW1cIj5cclxuICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgIGNsYXNzPVwic2Nyb2xsLWl0ZW1cIlxyXG4gICAgICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gc3RhdHVzSXRlbXNcIlxyXG4gICAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXHJcbiAgICAgICAgICAgIEB0YXA9XCJjaGFuZ2VNZW51KGluZGV4KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiaXRlbS10ZXh0XCIgOmNsYXNzPVwiYWN0aXZlSW5kZXggPT0gaW5kZXggPyAnYWN0aXZlJyA6ICcnXCI+e3tcclxuICAgICAgICAgICAgICBpdGVtLnRpdGxlXHJcbiAgICAgICAgICAgIH19PC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC9zY3JvbGwtdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g5YiX6KGoIC0tPlxyXG4gICAgPHNjcm9sbC12aWV3IGVuYWJsZS1iYWNrLXRvLXRvcCBzY3JvbGwteSBjbGFzcz1cInNjcm9sbC12aWV3XCIgQHNjcm9sbHRvbG93ZXI9XCJvblNjcm9sbHRvbG93ZXJcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlcnNcIj5cclxuICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0b3JcIlxyXG4gICAgICAgICAgdi1mb3I9XCIoaXRlbSwgaSkgaW4gd2F5YmlsbERlbGl2ZXJ5XCJcclxuICAgICAgICAgIDprZXk9XCJpXCJcclxuICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwRGV0YWlscz9pZD0ke2l0ZW0uaWR9YFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlcl9ub19zdGF0ZVwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm9yZGVyX25vXCI+XHJcbiAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJ0aXRsZVwiPuiuouWNleWPtzwvdGV4dD5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImNvbnRlbnRcIj57eyBpdGVtLm9yZGVyX25vIH19PC90ZXh0PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm9yZGVyX3N0YXRlXCI+XHJcbiAgICAgICAgICAgICAgPHRleHQgOmNsYXNzPVwiYHN0YXRlLSR7aXRlbS5zdGF0dXN9YFwiPnt7IGl0ZW0uc3RhdHVzX3RleHQgfX08L3RleHQ+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwicGlja191cF9kYXRlXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0ucGlja191cF9kYXRlIH19PC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJzZWdtZW50YXRpb24tbGluZVwiPjwvdmlldz5cclxuXHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImFkZHJlc3NcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyLWluZm9cIj5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cInVzZXJcIj57e1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRyZXNzPy5maXJzdF9uYW1lICsgJyAnICsgaXRlbS5hZGRyZXNzPy5sYXN0X25hbWVcclxuICAgICAgICAgICAgICB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICA+K3t7IGl0ZW0uYWRkcmVzcz8ubW9iaWxlX2NvZGUgKyAnICcgKyBpdGVtLmFkZHJlc3M/Lm1vYmlsZSB9fTwvdGV4dFxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cImFkZHJlc3MtaW5mb1wiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0uYWRkcmVzcz8uY2l0eSB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8dGV4dD57eyBpdGVtLmFkZHJlc3M/LnppcF9jb2RlIH19PC90ZXh0PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgPHZpZXcgdi1mb3I9XCJnb29kIGluIGl0ZW0uZ29vZHNcIiA6a2V5PVwiZ29vZC5pZFwiIGNsYXNzPVwiZ29vZHNcIj5cclxuICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgPnt7IGdvb2QubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJxdHlcIj4geHt7IGdvb2QucXR5IH19IDwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3RleHQ+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImxvYWRpbmctdGV4dFwiPlxyXG4gICAgICAgIHt7IHRvdGFsID09PSB3YXliaWxsRGVsaXZlcnkubGVuZ3RoID8gJ+ayoeacieabtOWkmuaVsOaNruS6hn4nIDogJ+ato+WcqOWKoOi9vS4uLicgfX1cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC9zY3JvbGwtdmlldz5cclxuICAgIDx1bmktcG9wdXAgcmVmPVwibWVzc2FnZVJlZlwiIHR5cGU9XCJtZXNzYWdlXCI+XHJcbiAgICAgIDx1bmktcG9wdXAtbWVzc2FnZVxyXG4gICAgICAgIDp0eXBlPVwibWVzc2FnZVR5cGVcIlxyXG4gICAgICAgIDptZXNzYWdlPVwibWVzc2FnZVRleHRcIlxyXG4gICAgICAgIDpkdXJhdGlvbj1cIjIwMDBcIlxyXG4gICAgICA+PC91bmktcG9wdXAtbWVzc2FnZT5cclxuICAgIDwvdW5pLXBvcHVwPlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlYWN0aXZlLCByZWYsIG9uTW91bnRlZCB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IHsgb25TaG93LCBvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgY2hlY2tQZXJtaXNzaW9uIH0gZnJvbSAnQC91dGlscydcclxuaW1wb3J0IHsgd2F5YmlsbFBpY2tVcE9yZGVycywgZ2V0UGlja1VwQnlXYXliaWxsTm8gfSBmcm9tICdAL3NlcnZpY2VzL3dheWJpbGxQaWNrVXBPcmRlcidcclxuaW1wb3J0IHR5cGUgeyBTdGF0dXNJdGVtIH0gZnJvbSAnQC90eXBlcy93YXliaWxsUGlja1VwJ1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50SW5zdGFuY2UgfSBmcm9tICd2dWUnXHJcblxyXG5sZXQgc2VuZE91dFVSTCA9ICcnXHJcbmxldCBkZWxpdmVyZWRVUkwgPSAnJ1xyXG5sZXQgcmVmdXNlVVJMID0gJydcclxubGV0IGNyZWF0ZVRyYWNrUG9kVVJMID0gJydcclxubGV0IGNhbmNlbEZlZEV4UGlja1VwVVJMID0gJydcclxuXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGxvYWRpbmdCdG4gPSByZWYoZmFsc2UpXHJcbmNvbnN0IHNlYXJjaFZhbHVlID0gcmVmKClcclxuY29uc3Qgd2F5YmlsbERlbGl2ZXJ5ID0gcmVmKFtdIGFzIGFueSlcclxuY29uc3QgdG90YWwgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlVHlwZSA9IHJlZigpXHJcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKClcclxuY29uc3QgbWVzc2FnZVJlZiA9IHJlZigpXHJcbmNvbnN0IHNob3dSaWdodFJlZiA9IHJlZigpXHJcbmNvbnN0IHBhcmFtcyA9IHJlYWN0aXZlKHtcclxuICBwYWdlOiAxLFxyXG4gIGxpbWl0OiAxMCxcclxufSlcclxuXHJcbmNvbnN0IHNjcm9sbExlZnQgPSByZWYoMClcclxuY29uc3QgY29udGVudFNjcm9sbFcgPSByZWYoMClcclxuY29uc3QgYWN0aXZlSW5kZXggPSByZWYoMClcclxuY29uc3Qgc3RhdHVzSXRlbXMgPSByZWY8U3RhdHVzSXRlbVtdPihbXHJcbiAge1xyXG4gICAgaWQ6IDEsXHJcbiAgICB0aXRsZTogJ+WFqOmDqCcsXHJcbiAgICB2YWx1ZTogMCxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAyLFxyXG4gICAgdGl0bGU6ICflvoXlj5bku7YnLFxyXG4gICAgdmFsdWU6IDIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogMyxcclxuICAgIHRpdGxlOiAn5Y+W5Lu25LitJyxcclxuICAgIHZhbHVlOiAzLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgaWQ6IDQsXHJcbiAgICB0aXRsZTogJ+mDqOWIhuWPluS7ticsXHJcbiAgICB2YWx1ZTogNCxcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiA1LFxyXG4gICAgdGl0bGU6ICflhajpg6jlj5bku7YnLFxyXG4gICAgdmFsdWU6IDUsXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogNixcclxuICAgIHRpdGxlOiAn6YOo5YiG5oqV6YCSJyxcclxuICAgIHZhbHVlOiA2LFxyXG4gIH0sXHJcbiAge1xyXG4gICAgaWQ6IDcsXHJcbiAgICB0aXRsZTogJ+WFqOmDqOaKlemAkicsXHJcbiAgICB2YWx1ZTogNyxcclxuICB9LFxyXG5dKVxyXG4vLyDpgInmi6nmoIfpophcclxuY29uc3QgY2hhbmdlTWVudSA9IChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgYWN0aXZlSW5kZXgudmFsdWUgPSBpbmRleFxyXG4gIC8vKOW9k+WJjeeCueWHu+WtkOWFg+e0oOWxheS4reWxleekuikgIOS4jeWPl+WtkOWFg+e0oOWuveW6puW9seWTjVxyXG4gIHNjcm9sbExlZnQudmFsdWUgPVxyXG4gICAgc3RhdHVzSXRlbXMudmFsdWVbaW5kZXhdLmxlZnQhIC0gY29udGVudFNjcm9sbFcudmFsdWUgLyAyICsgc3RhdHVzSXRlbXMudmFsdWVbaW5kZXhdLndpZHRoISAvIDJcclxufVxyXG5cclxuY29uc3QgcmVzZXRGb3JtID0gKCkgPT4ge31cclxuY29uc3QgY29uZmlybUZvcm0gPSAoKSA9PiB7XHJcbiAgc2hvd1JpZ2h0UmVmLnZhbHVlLmNsb3NlKClcclxufVxyXG5cclxuY29uc3QgY29weU9yZGVyTm8gPSAob3JkZXJfbm86IHN0cmluZykgPT4ge1xyXG4gIHVuaS5zZXRDbGlwYm9hcmREYXRhKHtcclxuICAgIGRhdGE6IG9yZGVyX25vLFxyXG4gICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xyXG4gICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgICAgICB0aXRsZTogJ+WkjeWItuaIkOWKnycsXHJcbiAgICAgICAgaWNvbjogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgIGR1cmF0aW9uOiAyMDAwLFxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc29sZS5sb2coJ+WkjeWItuWksei0pScpXHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGNhbGxQaG9uZSA9IChwaG9uZU51bWJlcjogc3RyaW5nKSA9PiB7XHJcbiAgY29uc29sZS5sb2cocGhvbmVOdW1iZXIpXHJcbiAgLy8gI2lmZGVmIEFQUC1QTFVTXHJcbiAgdW5pLm1ha2VQaG9uZUNhbGwoe1xyXG4gICAgcGhvbmVOdW1iZXI6IHBob25lTnVtYmVyLFxyXG4gICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zb2xlLmxvZygn5ouo5omT55S16K+d5oiQ5Yqf77yBJylcclxuICAgIH0sXHJcbiAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCfmi6jmiZPnlLXor53lpLHotKXvvIEnKVxyXG4gICAgfSxcclxuICB9KVxyXG4gIC8vICNlbmRpZlxyXG5cclxuICAvLyAjaWZkZWYgTVAtV0VJWElOXHJcbiAgd3gubWFrZVBob25lQ2FsbCh7XHJcbiAgICBwaG9uZU51bWJlcjogcGhvbmVOdW1iZXIsXHJcbiAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCfmi6jmiZPnlLXor53miJDlip/vvIEnKVxyXG4gICAgfSxcclxuICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc29sZS5sb2coJ+aLqOaJk+eUteivneWksei0pe+8gScpXHJcbiAgICB9LFxyXG4gIH0pXHJcbiAgLy8gI2VuZGlmXHJcbn1cclxuXHJcbmNvbnN0IHNjYW5JbnB1dCA9IGFzeW5jICgpID0+IHtcclxuICAvLyAjaWZkZWYgQVBQLVBMVVNcclxuICBsZXQgc3RhdHVzID0gYXdhaXQgY2hlY2tQZXJtaXNzaW9uKClcclxuICBpZiAoc3RhdHVzICE9PSAxKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgLy8gI2VuZGlmXHJcbiAgdW5pLnNjYW5Db2RlKHtcclxuICAgIHN1Y2Nlc3M6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygncmVzLS0tJywgcmVzLnJlc3VsdClcclxuXHJcbiAgICAgIC8vIHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlcl9jb2RlID0gcmVzLnJlc3VsdDtcclxuICAgICAgLy8gb25zdWJtaXQoKTtcclxuICAgIH0sXHJcbiAgICBmYWlsOiAoZXJyKSA9PiB7XHJcbiAgICAgIC8vIOmcgOimgeazqOaEj+eahOaYr+Wwj+eoi+W6j+aJq+eggeS4jemcgOimgeeUs+ivt+ebuOacuuadg+mZkFxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBnZXRMaXN0ID0gYXN5bmMgKCkgPT4ge1xyXG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlXHJcbiAgcGFyYW1zLnBhZ2UgPSAxXHJcbiAgY29uc3QgcmVzID0gYXdhaXQgd2F5YmlsbFBpY2tVcE9yZGVycyhwYXJhbXMpXHJcblxyXG4gIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIGlmIChyZXMuY29kZSA9PSAxKSB7XHJcbiAgICB3YXliaWxsRGVsaXZlcnkudmFsdWUgPSByZXMuZGF0YS5saXN0XHJcbiAgICB0b3RhbC52YWx1ZSA9IHJlcy5kYXRhLnRvdGFsXHJcbiAgfSBlbHNlIHtcclxuICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xyXG4gICAgbWVzc2FnZVRleHQudmFsdWUgPSByZXMubXNnXHJcbiAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gIH1cclxufVxyXG5vblNob3coKCkgPT4ge1xyXG4gIGdldExpc3QoKVxyXG59KVxyXG5vbk1vdW50ZWQoKCkgPT4ge1xyXG4gIGdldFNjcm9sbFcoKVxyXG59KVxyXG5vbk5hdmlnYXRpb25CYXJCdXR0b25UYXAoYXN5bmMgKGV2ZW50KSA9PiB7XHJcbiAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCBnZXRQaWNrVXBCeVdheWJpbGxObygnWVRTRUEyNDEyMDgwMDAxR0IwMScpXHJcbiAgICBpZiAocmVzLmNvZGUgPT0gMSAmJiByZXMuZGF0YS5pZCkge1xyXG4gICAgICB1bmkubmF2aWdhdGVUbyh7XHJcbiAgICAgICAgdXJsOiBgL3BhZ2VzL3BpY2t1cC93YXliaWxsUGlja1VwRGV0YWlsP3dheWJpbGxfbm89JHtyZXMuZGF0YS53YXliaWxsX25vfWAsXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcclxuICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSAn6Z2i5Y2V5LiN5a2Y5ZyoJ1xyXG4gICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNjYW5JbnB1dCgpXHJcbiAgICAvLyBzaG93UmlnaHRSZWYudmFsdWUub3BlbigpXHJcbiAgfVxyXG59KVxyXG5cclxuLy8g6I635Y+W5qCH6aKY5Yy65Z+f5a695bqm77yM5ZKM5q+P5Liq5a2Q5YWD57Sg6IqC54K555qE5a695bqm5Lul5Y+K5YWD57Sg6Led56a75bem6L655qCP55qE6Led56a7XHJcbmNvbnN0IGdldFNjcm9sbFcgPSAoKSA9PiB7XHJcbiAgY29uc3QgaW5zdGFuY2UgPSBnZXRDdXJyZW50SW5zdGFuY2UoKVxyXG4gIGNvbnN0IHF1ZXJ5ID0gdW5pLmNyZWF0ZVNlbGVjdG9yUXVlcnkoKS5pbihpbnN0YW5jZSEucHJveHkpXHJcbiAgcXVlcnlcclxuICAgIC5zZWxlY3QoJy5zY3JvbGwtdmlldycpXHJcbiAgICAuYm91bmRpbmdDbGllbnRSZWN0KChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgLy8g5ou/5YiwIHNjcm9sbC12aWV3IOe7hOS7tuWuveW6plxyXG4gICAgICBjb250ZW50U2Nyb2xsVy52YWx1ZSA9IGRhdGEud2lkdGhcclxuICAgIH0pXHJcbiAgICAuZXhlYygpXHJcblxyXG4gIHF1ZXJ5XHJcbiAgICAuc2VsZWN0QWxsKCcuc2Nyb2xsLWl0ZW0nKVxyXG4gICAgLmJvdW5kaW5nQ2xpZW50UmVjdCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGxldCBkYXRhTGVuID0gZGF0YS5sZW5ndGggLSAxXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUxlbjsgaSsrKSB7XHJcbiAgICAgICAgLy8gIHNjcm9sbC12aWV3IOWtkOWFg+e0oOe7hOS7tui3neemu+W3pui+ueagj+eahOi3neemu1xyXG4gICAgICAgIHN0YXR1c0l0ZW1zLnZhbHVlW2ldLmxlZnQgPSBkYXRhW2ldLmxlZnQgfHwgMFxyXG4gICAgICAgIC8vICBzY3JvbGwtdmlldyDlrZDlhYPntKDnu4Tku7blrr3luqZcclxuICAgICAgICBzdGF0dXNJdGVtcy52YWx1ZVtpXS53aWR0aCA9IGRhdGFbaV0ud2lkdGhcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC5leGVjKClcclxufVxyXG5cclxuLy8g5rua5Yqo6Kem5bqVXHJcbmNvbnN0IG9uU2Nyb2xsdG9sb3dlciA9IGFzeW5jICgpID0+IHtcclxuICAvLyDliIbpobXmnaHku7ZcclxuICBpZiAod2F5YmlsbERlbGl2ZXJ5LnZhbHVlLmxlbmd0aCA8IHRvdGFsLnZhbHVlKSB7XHJcbiAgICAvLyDlvZPliY3pobXnoIHntK/liqBcclxuICAgIHBhcmFtcy5wYWdlKytcclxuICB9IGVsc2Uge1xyXG4gICAgLy8g6YCA5Ye65bm26L275o+Q56S6XHJcbiAgICByZXR1cm4gdW5pLnNob3dUb2FzdCh7IGljb246ICdub25lJywgdGl0bGU6ICfmsqHmnInmm7TlpJrmlbDmja7kuoZ+JyB9KVxyXG4gIH1cclxuICAvLyDosIPnlKhBUEnkvKDlj4JcclxuICBjb25zdCByZXMgPSBhd2FpdCB3YXliaWxsUGlja1VwT3JkZXJzKHBhcmFtcylcclxuICBpZiAocmVzLmNvZGUgPT0gMSkge1xyXG4gICAgLy8g5pWw57uE6L+95YqgXHJcbiAgICB3YXliaWxsRGVsaXZlcnkudmFsdWUucHVzaCguLi5yZXMuZGF0YS5saXN0KVxyXG4gICAgdG90YWwudmFsdWUgPSByZXMuZGF0YS50b3RhbFxyXG4gIH1cclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxucGFnZSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XHJcbn1cclxuLnZpZXdwb3J0IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIHBhZGRpbmc6IDgwcnB4IDAgMDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuLmlucHV0ZmlsdGVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB3aWR0aDogNzUwcnB4O1xyXG4gIGhlaWdodDogODBycHg7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgbGVmdDogMDtcclxuICB0b3A6IDA7XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICA6ZGVlcCgudW5pLWVhc3lpbnB1dF9fY29udGVudC1pbnB1dCkge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcclxuICAgIGhlaWdodDogNjBycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICB9XHJcbiAgLmZpbHRlciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuICAgIGhlaWdodDogODBycHg7XHJcbiAgICBmb250LXNpemU6IDMwcnB4O1xyXG4gICAgY29sb3I6ICMzMzMzMzM7XHJcbiAgICBsaW5lLWhlaWdodDogMzAlO1xyXG4gICAgdGV4dDo6YWZ0ZXIge1xyXG4gICAgICBjb250ZW50OiAnXFxlOGI3JztcclxuICAgICAgZm9udC1mYW1pbHk6ICdpY29uZm9udCcgIWltcG9ydGFudDtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDEwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDM0cnB4O1xyXG4gICAgICBjb2xvcjogIzk5OTk5OTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuLnNjcm9sbC12aWV3IHtcclxuICBmbGV4OiAxO1xyXG59XHJcbi5jZW50ZXItY3V0LW1lbnUge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwcnB4O1xyXG4gIGxpbmUtaGVpZ2h0OiA5MHJweDtcclxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgY29sb3I6ICMzMzM7XHJcbiAgYm94LXNoYWRvdzogMCA0cnB4IDVycHggcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjMpO1xyXG4gIC5zY3JvbGwtdmlldyB7XHJcbiAgICBoZWlnaHQ6IDEwMHJweDtcclxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcblxyXG4gICAgLnNjcm9sbC1pdGVtIHtcclxuICAgICAgaGVpZ2h0OiAxMDBycHg7XHJcbiAgICAgIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG5cclxuICAgICAgLml0ZW0tdGV4dCB7XHJcbiAgICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgICAgICBsaW5lLWhlaWdodDogMTAwcnB4O1xyXG4gICAgICAgICYuYWN0aXZlIHtcclxuICAgICAgICAgIGNvbG9yOiAjMTQ2OGZmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4ub3JkZXJzIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgcGFkZGluZzogMCAyMHJweCAyMHJweDtcclxuICAubmF2aWdhdG9yIHtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgbWFyZ2luLXRvcDogMjBycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAyMHJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICBib3gtc2hhZG93OiAwIDBycHggMTBycHggcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjgpO1xyXG4gIH1cclxuICAub3JkZXJfbm9fc3RhdGUge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgLm9yZGVyX25vIHtcclxuICAgICAgZm9udC1zaXplOiAzMHJweDtcclxuICAgICAgY29sb3I6ICMzMzMzMzM7XHJcbiAgICAgIC50aXRsZSB7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcnB4O1xyXG4gICAgICB9XHJcbiAgICAgIC5jb250ZW50IHtcclxuICAgICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAub3JkZXJfc3RhdGUge1xyXG4gICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICAuc3RhdGUtMiB7XHJcbiAgICAgICAgY29sb3I6ICMyOTc5ZmY7XHJcbiAgICAgIH1cclxuICAgICAgLnN0YXRlLTMge1xyXG4gICAgICAgIGNvbG9yOiAjMWM2N2RhO1xyXG4gICAgICB9XHJcbiAgICAgIC5zdGF0ZS00IHtcclxuICAgICAgICBjb2xvcjogI2YzYTczZjtcclxuICAgICAgfVxyXG4gICAgICAuc3RhdGUtNSB7XHJcbiAgICAgICAgY29sb3I6ICMxOGJjMzc7XHJcbiAgICAgIH1cclxuICAgICAgLnN0YXRlLTYge1xyXG4gICAgICAgIGNvbG9yOiAjZjNhNzNmO1xyXG4gICAgICB9XHJcbiAgICAgIC5zdGF0ZS03IHtcclxuICAgICAgICBjb2xvcjogIzAxYjA3NTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAucGlja191cF9kYXRlIHtcclxuICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgfVxyXG4gIC5zZWdtZW50YXRpb24tbGluZSB7XHJcbiAgICB3aWR0aDogOTglO1xyXG4gICAgaGVpZ2h0OiAxcHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFlYWVhO1xyXG4gICAgbWFyZ2luOiAxMHB4IDA7XHJcbiAgfVxyXG4gIC5hZGRyZXNzIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgLnVzZXItaW5mbyB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMTBycHg7XHJcbiAgICAgIC51c2VyOjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6ICdcXGU2MDUnO1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgZm9udC1zaXplOiAzNHJweDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcnB4O1xyXG4gICAgICAgIGNvbG9yOiAjZTA2MjBkO1xyXG4gICAgICB9XHJcbiAgICAgIC51c2VyIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgICBmb250LXNpemU6IDMycnB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBycHg7XHJcbiAgICAgIH1cclxuICAgICAgLm1vYmlsZSB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLmFkZHJlc3MtaW5mbyB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgfVxyXG4gICAgLmFkZHJlc3MtaW5mbzo6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJ1xcZTdiNyc7XHJcbiAgICAgIGZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnICFpbXBvcnRhbnQ7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMTBycHg7XHJcbiAgICAgIGNvbG9yOiAjMDA3YWZmO1xyXG4gICAgfVxyXG4gIH1cclxuICAuZ29vZHMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGNvbG9yOiAjMzMzMzMzO1xyXG4gICAgLml0ZW0ge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMTBycHg7XHJcbiAgICAgIC5xdHkge1xyXG4gICAgICAgIGNvbG9yOiAjOTk5OTk5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuaXRlbTo6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJ1xcZTdiYSc7XHJcbiAgICAgIGZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnICFpbXBvcnRhbnQ7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMTBycHg7XHJcbiAgICAgIGNvbG9yOiAjOTk5OTk5O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4ubG9hZGluZy10ZXh0IHtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgZm9udC1zaXplOiAyOHJweDtcclxuICBjb2xvcjogIzY2NjtcclxuICBwYWRkaW5nOiAyMHJweCAwIDUwcnB4O1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7XHJcbiAgY29sbGVjdCxcclxuICBkZWxpdmVyeVRvVGhlQ291cmllclBvaW50LFxyXG4gIGdldFBpY2tVcEJ5SWQsXHJcbiAgcGlja3VwRGVsaXZlcmVkLFxyXG4gIHN0YXJ0T2ZmLFxyXG59IGZyb20gJ0Avc2VydmljZXMvd2F5YmlsbFBpY2tVcE9yZGVyJ1xyXG5pbXBvcnQgdHlwZSB7IFBpY2tVcERldGFpbEl0ZW0gfSBmcm9tICdAL3R5cGVzL3dheWJpbGxQaWNrVXAnXHJcbmltcG9ydCB7IG9uU2hvdyB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnXHJcblxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuXHJcbi8vIOaOpeaUtumhtemdouWPguaVsFxyXG5jb25zdCBxdWVyeSA9IGRlZmluZVByb3BzPHtcclxuICBpZDogc3RyaW5nXHJcbn0+KClcclxuXHJcbmNvbnN0IG1lc3NhZ2VSZWYgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlID0gcmVmKHtcclxuICB0eXBlOiAnc3VjY2VzcycsXHJcbiAgdGV4dDogJycsXHJcbn0pXHJcblxyXG4vLyDojrflj5bllYblk4Hor6bmg4Xkv6Hmga9cclxuY29uc3QgZGV0YWlscyA9IHJlZjxQaWNrVXBEZXRhaWxJdGVtW10+KClcclxuY29uc3QgZ2V0T3JkZXJCeUlkRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRQaWNrVXBCeUlkKHF1ZXJ5LmlkKVxyXG4gIGRldGFpbHMudmFsdWUgPSByZXMuZGF0YS5kZXRhaWxzXHJcbn1cclxuXHJcbi8vIOmhtemdouWKoOi9vVxyXG5vblNob3coKCkgPT4ge1xyXG4gIGdldE9yZGVyQnlJZERhdGEoKVxyXG59KVxyXG5cclxuLy8g54K55Ye75Zu+54mH5pe2XHJcbmNvbnN0IG9uVGFwSW1hZ2UgPSAodXJsOiBzdHJpbmcpID0+IHtcclxuICAvLyDlpKflm77pooTop4hcclxuICB1bmkucHJldmlld0ltYWdlKHtcclxuICAgIGN1cnJlbnQ6IHVybCxcclxuICAgIHVybHM6IGdvb2RzLnZhbHVlIS5tYWluUGljdHVyZXMsXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3Qgb25CdXR0b25DbGljayA9IGFzeW5jIChpZDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgY2FzZSAnc3RhcnRfb2ZmJzpcclxuICAgICAgLy/lj5Hlh7pcclxuICAgICAgc3RhcnRPZmYoeyBpZCB9KVxyXG4gICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZ2V0T3JkZXJCeUlkRGF0YSgpXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnRleHQgPSAn5Y+R5Ye65oiQ5YqfJ1xyXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZS50eXBlID0gJ3N1Y2Nlc3MnXHJcbiAgICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudGV4dCA9ICflj5Hlh7rlpLHotKXvvIzor7fnqI3lkI7ph43or5UnXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBjYXNlICdjb2xsZWN0JzpcclxuICAgICAgLy/mj73mlLZcclxuICAgICAgY29sbGVjdCh7IGlkIH0pXHJcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBnZXRPcmRlckJ5SWREYXRhKClcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudGV4dCA9ICfmj73mlLbmiJDlip8nXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnR5cGUgPSAnc3VjY2VzcydcclxuICAgICAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZS50ZXh0ID0gJ+aPveaUtuWksei0pe+8jOivt+eojeWQjumHjeivlSdcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJ2Fycml2ZSc6XHJcbiAgICAgIC8v56Gu6K6k6YCB6L6+XHJcbiAgICAgIHBpY2t1cERlbGl2ZXJlZCh7IGlkIH0pXHJcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBnZXRPcmRlckJ5SWREYXRhKClcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudGV4dCA9ICfkv67mlLnmiJDlip8nXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnR5cGUgPSAnc3VjY2VzcydcclxuICAgICAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZS50ZXh0ID0gJ+S/ruaUueWksei0pe+8jOivt+eojeWQjumHjeivlSdcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJ2RlbGl2ZXJ5X3RvX3RoZV9jb3VyaWVyX3BvaW50JzpcclxuICAgICAgLy/mipXpgJLliLDlv6vpgJLnvZHngrlcclxuICAgICAgZGVsaXZlcnlUb1RoZUNvdXJpZXJQb2ludCh7IGlkOiBpZCwgY291cmllcl9wb2ludDogJycsIGltYWdlczogWycnXSB9KVxyXG4gICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZ2V0T3JkZXJCeUlkRGF0YSgpXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnRleHQgPSAn5L+u5pS55oiQ5YqfJ1xyXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZS50eXBlID0gJ3N1Y2Nlc3MnXHJcbiAgICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudGV4dCA9ICfkv67mlLnlpLHotKXvvIzor7fnqI3lkI7ph43or5UnXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICBicmVha1xyXG4gIH1cclxufVxyXG5cclxuLy8g6IGU57O75a6i5oi3XHJcbmNvbnN0IGNvbnRhY3RDbGllbnQgPSAoKSA9PiB7XHJcbiAgdW5pLm1ha2VQaG9uZUNhbGwoe1xyXG4gICAgcGhvbmVOdW1iZXI6ICcxMzIwMDAwMDAwMCcsXHJcbiAgfSlcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIHNjcm9sbC15IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiZGV0YWlsIHBhbmVsXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICA8dGV4dD7ov5DljZXliJfooag8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJwcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICA8dmlldyB2LWZvcj1cIml0ZW0gaW4gZGV0YWlsc1wiIDprZXk9XCJpdGVtLmlkXCIgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDxuYXZpZ2F0b3IgOnVybD1cImAvcGFnZXMvcGlja3VwL3dheWJpbGxQaWNrVXBEZXRhaWw/d2F5YmlsbF9ubz0ke2l0ZW0ud2F5YmlsbF9ub31gXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlcl9ub19zdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0ud2F5YmlsbF9ubyB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwib3JkZXJfc3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgOmNsYXNzPVwiJ3N0YXRlLScgKyBpdGVtLnN0YXR1c1wiPnt7IGl0ZW0uc3RhdHVzX3RleHQgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICDpooTkvLDph43ph4/vvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0uZXN0aW1hdGVkX3dlaWdodCB9fUtHPC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgICAgIFVwcyDlj5bku7bnoIHvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0udXBzX3BybiB8fCAn5pegJyB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICBVcHMg5YeG5aSH5pe26Ze077yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD57eyBpdGVtLnVwc19yZWFkeV90aW1lIHx8ICfml6AnIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgICAgIFVwcyDmiKrmraLml7bpl7TvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0udXBzX2Nsb3NlX3RpbWUgfHwgJ+aXoCcgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwibGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+6Z2i5Y2VPC90ZXh0PlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IHYtaWY9XCJpdGVtLmxhYmVscy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImVtcHR5XCI+5pqC5pyq55Sf5oiQPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPHRleHQgdi1lbHNlXHJcbiAgICAgICAgICAgICAgICAgID4oe3sgaXRlbS5sYWJlbHMubGVuZ3RoIH19KVxyXG4gICAgICAgICAgICAgICAgICA8dW5pLWljb25zIHR5cGU9XCJzZWFyY2hcIiBzaXplPVwiMTZcIiBjb2xvcj1cIiMwMDdiZmZcIj48L3VuaS1pY29ucz5cclxuICAgICAgICAgICAgICAgIDwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICAgIDwhLS0g5pON5L2c5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm9wZXJhdGlvbnNcIj5cclxuICAgICAgICAgICAgICA8dmlldyB2LWZvcj1cIm9wZXJhdGlvbiBpbiBpdGVtLm9wZXJhdGlvbnNcIiA6a2V5PVwib3BlcmF0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWluaS1idG5cIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcclxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwib25CdXR0b25DbGljayhpdGVtLmlkLCBvcGVyYXRpb24udmFsdWUpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgb3BlcmF0aW9uLnRleHQgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZSBsYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0XHJcbiAgICAgICAgICAgICAgICA+54mp5ZOB5riF5Y2VXHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImJsblwiIHYtaWY9XCIhaXRlbS5nb29kcy5sZW5ndGhcIj7ml6A8L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC90ZXh0PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IHYtZm9yPVwiKGdvb2QsIGcpIGluIGl0ZW0uZ29vZHNcIiA6a2V5PVwiZ1wiIGNsYXNzPVwiZ29vZHNcIj5cclxuICAgICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgICAgPuexu+Wei++8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+e3sgZ29vZC5jYXRlZ29yeV9uYW1lIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgICAgPuWQjeensO+8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+e3sgZ29vZC5nb29kc19uYW1lIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9XCJjb2xvcjogIzY2NjY2NjsgZm9udC1zaXplOiAyMnJweFwiPnt7ICcgeCcgKyBnb29kLnF0eSB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgICA+5Lu35qC877yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD7vv6F7eyBnb29kLnByaWNlIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgICAgPuWQiOiuoe+8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+77+he3sgZ29vZC5hbW91bnQgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwhLS0gPGltYWdlXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImltYWdlXCJcclxuICAgICAgICAgICAgICAgIHYtZm9yPVwiaXRlbSBpbiBnb29kLmltYWdlc1wiXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBtb2RlPVwid2lkdGhGaXhcIlxyXG4gICAgICAgICAgICAgICAgOnNyYz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgID48L2ltYWdlPiAtLT5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8IS0tIOWbvueJh+ivpuaDhSAtLT5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dW5pLXBvcHVwIHJlZj1cIm1lc3NhZ2VSZWZcIiB0eXBlPVwibWVzc2FnZVwiPlxyXG4gICAgICAgIDx1bmktcG9wdXAtbWVzc2FnZVxyXG4gICAgICAgICAgOnR5cGU9XCJtZXNzYWdlLnR5cGVcIlxyXG4gICAgICAgICAgOm1lc3NhZ2U9XCJtZXNzYWdlLnRleHRcIlxyXG4gICAgICAgICAgOmR1cmF0aW9uPVwiMjAwMFwiXHJcbiAgICAgICAgPjwvdW5pLXBvcHVwLW1lc3NhZ2U+XHJcbiAgICAgIDwvdW5pLXBvcHVwPlxyXG4gICAgPC92aWV3PlxyXG4gIDwvc2Nyb2xsLXZpZXc+XHJcblxyXG4gIDwhLS0g55So5oi35pON5L2cIC0tPlxyXG4gIDx2aWV3XHJcbiAgICB2LWlmPVwiZGV0YWlsc1wiXHJcbiAgICBjbGFzcz1cImNvbnRhY3QtY2xpZW50XCJcclxuICAgIDpzdHlsZT1cInsgcGFkZGluZ0JvdHRvbTogc2FmZUFyZWFJbnNldHM/LmJvdHRvbSArICdweCcgfVwiXHJcbiAgPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJidXR0b25zXCI+XHJcbiAgICAgIDx2aWV3IEB0YXA9XCJjb250YWN0Q2xpZW50XCIgY2xhc3M9XCJwYXltZW50XCI+IOiBlOezu+WuouaItyA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbnBhZ2Uge1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxufVxyXG5cclxuLnZpZXdwb3J0IHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbi5wYW5lbCB7XHJcbiAgbWFyZ2luLXRvcDogMjBycHg7XHJcbiAgLnRpdGxlIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiA5MHJweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgcGFkZGluZzogMzBycHggNjBycHggMzBycHggNnJweDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHRleHQge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDEwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgYm9yZGVyLWxlZnQ6IDRycHggc29saWQgIzI3YmE5YjtcclxuICAgIH1cclxuICAgIG5hdmlnYXRvciB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgfVxyXG4gICAgLmJsbiB7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiAwO1xyXG4gICAgfVxyXG4gIH1cclxuICAubGFiZWwge1xyXG4gICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgcGFkZGluZzogNnJweDtcclxuICB9XHJcbn1cclxuXHJcbi5hcnJvdyB7XHJcbiAgJjo6YWZ0ZXIge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICByaWdodDogMzBycHg7XHJcbiAgICBjb250ZW50OiAnXFxlNmMyJztcclxuICAgIGNvbG9yOiAjY2NjO1xyXG4gICAgZm9udC1mYW1pbHk6ICdlcmFiYml0JyAhaW1wb3J0YW50O1xyXG4gICAgZm9udC1zaXplOiAzMnJweDtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICB9XHJcbn1cclxuXHJcbi8qIOWVhuWTgeivpuaDhSAqL1xyXG4uZGV0YWlsIHtcclxuICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gIHBhZGRpbmctYm90dG9tOiA3OHJweDtcclxuICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICAuY29udGVudCB7XHJcbiAgICBtYXJnaW4tbGVmdDogLTIwcnB4O1xyXG4gICAgLmltYWdlIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5wcm9wZXJ0aWVzIHtcclxuICAgIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgICBmb250LXNpemU6IDMwcnB4O1xyXG4gICAgLml0ZW0ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBsaW5lLWhlaWdodDogMjtcclxuICAgICAgbWFyZ2luOiAxMHJweDtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMjBycHg7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgICBib3gtc2hhZG93OiAwIDBycHggMTBycHggcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjUpO1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDEwcnB4O1xyXG4gICAgICAub3JkZXJfbm9fc3RhdGUge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgICAgIC5vcmRlcl9zdGF0ZSB7XHJcbiAgICAgICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICAgICAgLnN0YXRlLTIge1xyXG4gICAgICAgICAgICBjb2xvcjogIzI5NzlmZjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC5zdGF0ZS0zIHtcclxuICAgICAgICAgICAgY29sb3I6ICMxYzY3ZGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAuc3RhdGUtNCB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjZjNhNzNmO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLnN0YXRlLTUge1xyXG4gICAgICAgICAgICBjb2xvcjogIzE4YmMzNztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC5zdGF0ZS02IHtcclxuICAgICAgICAgICAgY29sb3I6ICNmM2E3M2Y7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAuc3RhdGUtNyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMDFiMDc1O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAuaW5mbyB7XHJcbiAgICAgICAgcGFkZGluZzogMTBycHggMjBycHg7XHJcbiAgICAgICAgLmxhYmVsLWluZm8ge1xyXG4gICAgICAgICAgY29sb3I6ICMwMDdiZmY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC51bmktaWNvbnMge1xyXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHJweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmVtcHR5IHtcclxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHJweDtcclxuICAgICAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAub3BlcmF0aW9ucyB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XHJcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xyXG4gICAgICAgIHBhZGRpbmc6IDBycHggMTBycHg7XHJcbiAgICAgIH1cclxuICAgICAgLmdvb2RzIHtcclxuICAgICAgICBtYXJnaW46IDEwcnB4IDIwcnB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDEwcnB4O1xyXG4gICAgICAgIGJvcmRlcjogMXJweCBzb2xpZCAjZWFlYWVhO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiDlupXpg6jogZTns7vlrqLmiLcgKi9cclxuLmNvbnRhY3QtY2xpZW50IHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgbGVmdDogMDtcclxuICByaWdodDogMDtcclxuICBib3R0b206IGNhbGMoKHZhcigtLXdpbmRvdy1ib3R0b20pKSk7XHJcbiAgei1pbmRleDogMTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIGhlaWdodDogNzJycHg7XHJcbiAgYm9yZGVyLXRvcDogMXJweCBzb2xpZCAjZWFlYWVhO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgLmJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAmID4gdmlldyB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA3MnJweDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7XHJcbiAgY29sbGVjdCxcclxuICBkZWxpdmVyeVRvVGhlQ291cmllclBvaW50LFxyXG4gIGdldFBpY2tVcEJ5SWQsXHJcbiAgcGlja3VwRGVsaXZlcmVkLFxyXG4gIHN0YXJ0T2ZmLFxyXG59IGZyb20gJ0Avc2VydmljZXMvd2F5YmlsbFBpY2tVcE9yZGVyJ1xyXG5pbXBvcnQgdHlwZSB7IFBpY2tVcERldGFpbEl0ZW0gfSBmcm9tICdAL3R5cGVzL3dheWJpbGxQaWNrVXAnXHJcbmltcG9ydCB7IG9uU2hvdyB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnXHJcblxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuXHJcbi8vIOaOpeaUtumhtemdouWPguaVsFxyXG5jb25zdCBxdWVyeSA9IGRlZmluZVByb3BzPHtcclxuICBpZDogc3RyaW5nXHJcbn0+KClcclxuXHJcbmNvbnN0IG1lc3NhZ2VSZWYgPSByZWYoKVxyXG5jb25zdCBtZXNzYWdlID0gcmVmKHtcclxuICB0eXBlOiAnc3VjY2VzcycsXHJcbiAgdGV4dDogJycsXHJcbn0pXHJcblxyXG4vLyDojrflj5bllYblk4Hor6bmg4Xkv6Hmga9cclxuY29uc3QgZGV0YWlscyA9IHJlZjxQaWNrVXBEZXRhaWxJdGVtW10+KClcclxuY29uc3QgZ2V0T3JkZXJCeUlkRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRQaWNrVXBCeUlkKHF1ZXJ5LmlkKVxyXG4gIGRldGFpbHMudmFsdWUgPSByZXMuZGF0YS5kZXRhaWxzXHJcbn1cclxuXHJcbi8vIOmhtemdouWKoOi9vVxyXG5vblNob3coKCkgPT4ge1xyXG4gIGdldE9yZGVyQnlJZERhdGEoKVxyXG59KVxyXG5cclxuLy8g54K55Ye75Zu+54mH5pe2XHJcbmNvbnN0IG9uVGFwSW1hZ2UgPSAodXJsOiBzdHJpbmcpID0+IHtcclxuICAvLyDlpKflm77pooTop4hcclxuICB1bmkucHJldmlld0ltYWdlKHtcclxuICAgIGN1cnJlbnQ6IHVybCxcclxuICAgIHVybHM6IGdvb2RzLnZhbHVlIS5tYWluUGljdHVyZXMsXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3Qgb25CdXR0b25DbGljayA9IGFzeW5jIChpZDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgY2FzZSAnc3RhcnRfb2ZmJzpcclxuICAgICAgLy/lj5Hlh7pcclxuICAgICAgc3RhcnRPZmYoeyBpZCB9KVxyXG4gICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZ2V0T3JkZXJCeUlkRGF0YSgpXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnRleHQgPSAn5Y+R5Ye65oiQ5YqfJ1xyXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZS50eXBlID0gJ3N1Y2Nlc3MnXHJcbiAgICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudGV4dCA9ICflj5Hlh7rlpLHotKXvvIzor7fnqI3lkI7ph43or5UnXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBjYXNlICdjb2xsZWN0JzpcclxuICAgICAgLy/mj73mlLZcclxuICAgICAgY29sbGVjdCh7IGlkIH0pXHJcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBnZXRPcmRlckJ5SWREYXRhKClcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudGV4dCA9ICfmj73mlLbmiJDlip8nXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnR5cGUgPSAnc3VjY2VzcydcclxuICAgICAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZS50ZXh0ID0gJ+aPveaUtuWksei0pe+8jOivt+eojeWQjumHjeivlSdcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJ2Fycml2ZSc6XHJcbiAgICAgIC8v56Gu6K6k6YCB6L6+XHJcbiAgICAgIHBpY2t1cERlbGl2ZXJlZCh7IGlkIH0pXHJcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBnZXRPcmRlckJ5SWREYXRhKClcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudGV4dCA9ICfkv67mlLnmiJDlip8nXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnR5cGUgPSAnc3VjY2VzcydcclxuICAgICAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZS50ZXh0ID0gJ+S/ruaUueWksei0pe+8jOivt+eojeWQjumHjeivlSdcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudHlwZSA9ICdlcnJvcidcclxuICAgICAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgJ2RlbGl2ZXJ5X3RvX3RoZV9jb3VyaWVyX3BvaW50JzpcclxuICAgICAgLy/mipXpgJLliLDlv6vpgJLnvZHngrlcclxuICAgICAgZGVsaXZlcnlUb1RoZUNvdXJpZXJQb2ludCh7IGlkOiBpZCwgY291cmllcl9wb2ludDogJycsIGltYWdlczogWycnXSB9KVxyXG4gICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZ2V0T3JkZXJCeUlkRGF0YSgpXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnRleHQgPSAn5L+u5pS55oiQ5YqfJ1xyXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZS50eXBlID0gJ3N1Y2Nlc3MnXHJcbiAgICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUudGV4dCA9ICfkv67mlLnlpLHotKXvvIzor7fnqI3lkI7ph43or5UnXHJcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICBicmVha1xyXG4gIH1cclxufVxyXG5cclxuLy8g6IGU57O75a6i5oi3XHJcbmNvbnN0IGNvbnRhY3RDbGllbnQgPSAoKSA9PiB7XHJcbiAgdW5pLm1ha2VQaG9uZUNhbGwoe1xyXG4gICAgcGhvbmVOdW1iZXI6ICcxMzIwMDAwMDAwMCcsXHJcbiAgfSlcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIHNjcm9sbC15IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiZGV0YWlsIHBhbmVsXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICA8dGV4dD7ov5DljZXliJfooag8L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJwcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICA8dmlldyB2LWZvcj1cIml0ZW0gaW4gZGV0YWlsc1wiIDprZXk9XCJpdGVtLmlkXCIgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDxuYXZpZ2F0b3IgOnVybD1cImAvcGFnZXMvcGlja3VwL3dheWJpbGxQaWNrVXBEZXRhaWw/d2F5YmlsbF9ubz0ke2l0ZW0ud2F5YmlsbF9ub31gXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlcl9ub19zdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0ud2F5YmlsbF9ubyB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwib3JkZXJfc3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgOmNsYXNzPVwiJ3N0YXRlLScgKyBpdGVtLnN0YXR1c1wiPnt7IGl0ZW0uc3RhdHVzX3RleHQgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICDpooTkvLDph43ph4/vvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0uZXN0aW1hdGVkX3dlaWdodCB9fUtHPC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgICAgIFVwcyDlj5bku7bnoIHvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0udXBzX3BybiB8fCAn5pegJyB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICBVcHMg5YeG5aSH5pe26Ze077yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD57eyBpdGVtLnVwc19yZWFkeV90aW1lIHx8ICfml6AnIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgICAgIFVwcyDmiKrmraLml7bpl7TvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGl0ZW0udXBzX2Nsb3NlX3RpbWUgfHwgJ+aXoCcgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwibGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+6Z2i5Y2VPC90ZXh0PlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IHYtaWY9XCJpdGVtLmxhYmVscy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImVtcHR5XCI+5pqC5pyq55Sf5oiQPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPHRleHQgdi1lbHNlXHJcbiAgICAgICAgICAgICAgICAgID4oe3sgaXRlbS5sYWJlbHMubGVuZ3RoIH19KVxyXG4gICAgICAgICAgICAgICAgICA8dW5pLWljb25zIHR5cGU9XCJzZWFyY2hcIiBzaXplPVwiMTZcIiBjb2xvcj1cIiMwMDdiZmZcIj48L3VuaS1pY29ucz5cclxuICAgICAgICAgICAgICAgIDwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICAgIDwhLS0g5pON5L2c5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm9wZXJhdGlvbnNcIj5cclxuICAgICAgICAgICAgICA8dmlldyB2LWZvcj1cIm9wZXJhdGlvbiBpbiBpdGVtLm9wZXJhdGlvbnNcIiA6a2V5PVwib3BlcmF0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWluaS1idG5cIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcclxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwib25CdXR0b25DbGljayhpdGVtLmlkLCBvcGVyYXRpb24udmFsdWUpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgb3BlcmF0aW9uLnRleHQgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZSBsYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0XHJcbiAgICAgICAgICAgICAgICA+54mp5ZOB5riF5Y2VXHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImJsblwiIHYtaWY9XCIhaXRlbS5nb29kcy5sZW5ndGhcIj7ml6A8L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC90ZXh0PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IHYtZm9yPVwiKGdvb2QsIGcpIGluIGl0ZW0uZ29vZHNcIiA6a2V5PVwiZ1wiIGNsYXNzPVwiZ29vZHNcIj5cclxuICAgICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgICAgPuexu+Wei++8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+e3sgZ29vZC5jYXRlZ29yeV9uYW1lIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgICAgPuWQjeensO+8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+e3sgZ29vZC5nb29kc19uYW1lIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9XCJjb2xvcjogIzY2NjY2NjsgZm9udC1zaXplOiAyMnJweFwiPnt7ICcgeCcgKyBnb29kLnF0eSB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgICA+5Lu35qC877yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD7vv6F7eyBnb29kLnByaWNlIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgICAgPuWQiOiuoe+8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+77+he3sgZ29vZC5hbW91bnQgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwhLS0gPGltYWdlXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImltYWdlXCJcclxuICAgICAgICAgICAgICAgIHYtZm9yPVwiaXRlbSBpbiBnb29kLmltYWdlc1wiXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBtb2RlPVwid2lkdGhGaXhcIlxyXG4gICAgICAgICAgICAgICAgOnNyYz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgID48L2ltYWdlPiAtLT5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8IS0tIOWbvueJh+ivpuaDhSAtLT5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dW5pLXBvcHVwIHJlZj1cIm1lc3NhZ2VSZWZcIiB0eXBlPVwibWVzc2FnZVwiPlxyXG4gICAgICAgIDx1bmktcG9wdXAtbWVzc2FnZVxyXG4gICAgICAgICAgOnR5cGU9XCJtZXNzYWdlLnR5cGVcIlxyXG4gICAgICAgICAgOm1lc3NhZ2U9XCJtZXNzYWdlLnRleHRcIlxyXG4gICAgICAgICAgOmR1cmF0aW9uPVwiMjAwMFwiXHJcbiAgICAgICAgPjwvdW5pLXBvcHVwLW1lc3NhZ2U+XHJcbiAgICAgIDwvdW5pLXBvcHVwPlxyXG4gICAgPC92aWV3PlxyXG4gIDwvc2Nyb2xsLXZpZXc+XHJcblxyXG4gIDwhLS0g55So5oi35pON5L2cIC0tPlxyXG4gIDx2aWV3XHJcbiAgICB2LWlmPVwiZGV0YWlsc1wiXHJcbiAgICBjbGFzcz1cImNvbnRhY3QtY2xpZW50XCJcclxuICAgIDpzdHlsZT1cInsgcGFkZGluZ0JvdHRvbTogc2FmZUFyZWFJbnNldHM/LmJvdHRvbSArICdweCcgfVwiXHJcbiAgPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJidXR0b25zXCI+XHJcbiAgICAgIDx2aWV3IEB0YXA9XCJjb250YWN0Q2xpZW50XCIgY2xhc3M9XCJwYXltZW50XCI+IOiBlOezu+WuouaItyA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbnBhZ2Uge1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxufVxyXG5cclxuLnZpZXdwb3J0IHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbi5wYW5lbCB7XHJcbiAgbWFyZ2luLXRvcDogMjBycHg7XHJcbiAgLnRpdGxlIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiA5MHJweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgcGFkZGluZzogMzBycHggNjBycHggMzBycHggNnJweDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHRleHQge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDEwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgYm9yZGVyLWxlZnQ6IDRycHggc29saWQgIzI3YmE5YjtcclxuICAgIH1cclxuICAgIG5hdmlnYXRvciB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgfVxyXG4gICAgLmJsbiB7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiAwO1xyXG4gICAgfVxyXG4gIH1cclxuICAubGFiZWwge1xyXG4gICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgcGFkZGluZzogNnJweDtcclxuICB9XHJcbn1cclxuXHJcbi5hcnJvdyB7XHJcbiAgJjo6YWZ0ZXIge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICByaWdodDogMzBycHg7XHJcbiAgICBjb250ZW50OiAnXFxlNmMyJztcclxuICAgIGNvbG9yOiAjY2NjO1xyXG4gICAgZm9udC1mYW1pbHk6ICdlcmFiYml0JyAhaW1wb3J0YW50O1xyXG4gICAgZm9udC1zaXplOiAzMnJweDtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICB9XHJcbn1cclxuXHJcbi8qIOWVhuWTgeivpuaDhSAqL1xyXG4uZGV0YWlsIHtcclxuICBwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG4gIHBhZGRpbmctYm90dG9tOiA3OHJweDtcclxuICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICAuY29udGVudCB7XHJcbiAgICBtYXJnaW4tbGVmdDogLTIwcnB4O1xyXG4gICAgLmltYWdlIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5wcm9wZXJ0aWVzIHtcclxuICAgIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgICBmb250LXNpemU6IDMwcnB4O1xyXG4gICAgLml0ZW0ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBsaW5lLWhlaWdodDogMjtcclxuICAgICAgbWFyZ2luOiAxMHJweDtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMjBycHg7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgICBib3gtc2hhZG93OiAwIDBycHggMTBycHggcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjUpO1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDEwcnB4O1xyXG4gICAgICAub3JkZXJfbm9fc3RhdGUge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgICAgIC5vcmRlcl9zdGF0ZSB7XHJcbiAgICAgICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICAgICAgLnN0YXRlLTIge1xyXG4gICAgICAgICAgICBjb2xvcjogIzI5NzlmZjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC5zdGF0ZS0zIHtcclxuICAgICAgICAgICAgY29sb3I6ICMxYzY3ZGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAuc3RhdGUtNCB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjZjNhNzNmO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLnN0YXRlLTUge1xyXG4gICAgICAgICAgICBjb2xvcjogIzE4YmMzNztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC5zdGF0ZS02IHtcclxuICAgICAgICAgICAgY29sb3I6ICNmM2E3M2Y7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAuc3RhdGUtNyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMDFiMDc1O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAuaW5mbyB7XHJcbiAgICAgICAgcGFkZGluZzogMTBycHggMjBycHg7XHJcbiAgICAgICAgLmxhYmVsLWluZm8ge1xyXG4gICAgICAgICAgY29sb3I6ICMwMDdiZmY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC51bmktaWNvbnMge1xyXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHJweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmVtcHR5IHtcclxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHJweDtcclxuICAgICAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAub3BlcmF0aW9ucyB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XHJcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xyXG4gICAgICAgIHBhZGRpbmc6IDBycHggMTBycHg7XHJcbiAgICAgIH1cclxuICAgICAgLmdvb2RzIHtcclxuICAgICAgICBtYXJnaW46IDEwcnB4IDIwcnB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDEwcnB4O1xyXG4gICAgICAgIGJvcmRlcjogMXJweCBzb2xpZCAjZWFlYWVhO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiDlupXpg6jogZTns7vlrqLmiLcgKi9cclxuLmNvbnRhY3QtY2xpZW50IHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgbGVmdDogMDtcclxuICByaWdodDogMDtcclxuICBib3R0b206IGNhbGMoKHZhcigtLXdpbmRvdy1ib3R0b20pKSk7XHJcbiAgei1pbmRleDogMTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIGhlaWdodDogNzJycHg7XHJcbiAgYm9yZGVyLXRvcDogMXJweCBzb2xpZCAjZWFlYWVhO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgLmJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAmID4gdmlldyB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA3MnJweDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IGdldFBpY2tVcEJ5V2F5YmlsbE5vIH0gZnJvbSAnQC9zZXJ2aWNlcy93YXliaWxsUGlja1VwT3JkZXInXHJcbmltcG9ydCB0eXBlIHsgUGlja1VwRGV0YWlsSXRlbSB9IGZyb20gJ0AvdHlwZXMvd2F5YmlsbFBpY2tVcCdcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbi8vIOiOt+WPluWxj+W5lei+ueeVjOWIsOWuieWFqOWMuuWfn+i3neemu1xyXG5jb25zdCB7IHNhZmVBcmVhSW5zZXRzIH0gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKVxyXG5cclxuLy8g5o6l5pS26aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIHdheWJpbGxfbm86IHN0cmluZ1xyXG59PigpXHJcblxyXG4vLyDojrflj5bllYblk4Hor6bmg4Xkv6Hmga9cclxuY29uc3QgZGV0YWlsID0gcmVmPFBpY2tVcERldGFpbEl0ZW0+KClcclxuY29uc3QgZ2V0T3JkZXJCeUlkRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRQaWNrVXBCeVdheWJpbGxObyhxdWVyeS53YXliaWxsX25vKVxyXG4gIGRldGFpbC52YWx1ZSA9IHJlcy5kYXRhXHJcbn1cclxuXHJcbi8vIOmhtemdouWKoOi9vVxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIGdldE9yZGVyQnlJZERhdGEoKVxyXG59KVxyXG5cclxuLy8g54K55Ye75Zu+54mH5pe2XHJcbmNvbnN0IG9uVGFwSW1hZ2UgPSAodXJsOiBzdHJpbmcpID0+IHtcclxuICAvLyDlpKflm77pooTop4hcclxuICB1bmkucHJldmlld0ltYWdlKHtcclxuICAgIGN1cnJlbnQ6IHVybCxcclxuICAgIHVybHM6IGdvb2RzLnZhbHVlIS5tYWluUGljdHVyZXMsXHJcbiAgfSlcclxufVxyXG5cclxuLy8g6IGU57O75a6i5oi3XHJcbmNvbnN0IGNvbnRhY3RDbGllbnQgPSAoKSA9PiB7XHJcbiAgdW5pLm1ha2VQaG9uZUNhbGwoe1xyXG4gICAgcGhvbmVOdW1iZXI6ICcxMzIwMDAwMDAwMCcsXHJcbiAgfSlcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIHNjcm9sbC15IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwiZGV0YWlsIHBhbmVsXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwicHJvcGVydGllc1wiPlxyXG4gICAgICAgICAgPHZpZXcgdi1pZj1cImRldGFpbFwiIGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm9yZGVyX25vX3N0YXRlXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICA8dGV4dD57eyBkZXRhaWwud2F5YmlsbF9ubyB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlcl9zdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHQgOmNsYXNzPVwiJ3N0YXRlLScgKyBkZXRhaWwuc3RhdHVzXCI+e3sgZGV0YWlsLnN0YXR1c190ZXh0IH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICDpooTkvLDph43ph4/vvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGRldGFpbC5lc3RpbWF0ZWRfd2VpZ2h0IH19S0c8L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3PlxyXG4gICAgICAgICAgICAgICAgVXBzIOWPluS7tuegge+8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+e3sgZGV0YWlsLnVwc19wcm4gfHwgJ+aXoCcgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3PlxyXG4gICAgICAgICAgICAgICAgVXBzIOWHhuWkh+aXtumXtO+8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+e3sgZGV0YWlsLnVwc19yZWFkeV90aW1lIHx8ICfml6AnIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgICAgIFVwcyDmiKrmraLml7bpl7TvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGRldGFpbC51cHNfY2xvc2VfdGltZSB8fCAn5pegJyB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXc+IOmdouWNlSA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZSBsYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0XHJcbiAgICAgICAgICAgICAgICA+54mp5ZOB5riF5Y2VXHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImJsblwiIHYtaWY9XCIhZGV0YWlsLmdvb2RzLmxlbmd0aFwiPuaXoDwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3RleHQ+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPHZpZXcgdi1mb3I9XCIoZ29vZCwgZykgaW4gZGV0YWlsLmdvb2RzXCIgOmtleT1cImdcIiBjbGFzcz1cImdvb2RzXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXdcclxuICAgICAgICAgICAgICAgID7nsbvlnovvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGdvb2QuY2F0ZWdvcnlfbmFtZSB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXdcclxuICAgICAgICAgICAgICAgID7lkI3np7DvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGdvb2QuZ29vZHNfbmFtZSB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPVwiY29sb3I6ICM2NjY2NjY7IGZvbnQtc2l6ZTogMjJycHhcIj57eyAnIHgnICsgZ29vZC5xdHkgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgICAgPuS7t+agvO+8mlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+77+he3sgZ29vZC5wcmljZSB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXdcclxuICAgICAgICAgICAgICAgID7lkIjorqHvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pu+/oXt7IGdvb2QuYW1vdW50IH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8IS0tIDxpbWFnZVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZVwiXHJcbiAgICAgICAgICAgICAgICB2LWZvcj1cIml0ZW0gaW4gZ29vZC5pbWFnZXNcIlxyXG4gICAgICAgICAgICAgICAgOmtleT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgbW9kZT1cIndpZHRoRml4XCJcclxuICAgICAgICAgICAgICAgIDpzcmM9XCJpdGVtXCJcclxuICAgICAgICAgICAgICA+PC9pbWFnZT4gLS0+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPCEtLSDlm77niYfor6bmg4UgLS0+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3Njcm9sbC12aWV3PlxyXG5cclxuICA8IS0tIOeUqOaIt+aTjeS9nCAtLT5cclxuICA8dmlld1xyXG4gICAgdi1pZj1cImRldGFpbHNcIlxyXG4gICAgY2xhc3M9XCJjb250YWN0LWNsaWVudFwiXHJcbiAgICA6c3R5bGU9XCJ7IHBhZGRpbmdCb3R0b206IHNhZmVBcmVhSW5zZXRzPy5ib3R0b20gKyAncHgnIH1cIlxyXG4gID5cclxuICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uc1wiPlxyXG4gICAgICA8dmlldyBAdGFwPVwiY29udGFjdENsaWVudFwiIGNsYXNzPVwicGF5bWVudFwiPiDogZTns7vlrqLmiLcgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbn1cclxuXHJcbi52aWV3cG9ydCB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcblxyXG4ucGFuZWwge1xyXG4gIG1hcmdpbi10b3A6IDIwcnB4O1xyXG4gIC50aXRsZSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDogOTBycHg7XHJcbiAgICBsaW5lLWhlaWdodDogMTtcclxuICAgIHBhZGRpbmc6IDMwcnB4IDYwcnB4IDMwcnB4IDZycHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB0ZXh0IHtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAxMHJweDtcclxuICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgICAgY29sb3I6ICMzMzM7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiA0cnB4IHNvbGlkICMyN2JhOWI7XHJcbiAgICB9XHJcbiAgICBuYXZpZ2F0b3Ige1xyXG4gICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICBjb2xvcjogIzY2NjtcclxuICAgIH1cclxuICAgIC5ibG4ge1xyXG4gICAgICBib3JkZXItbGVmdDogMDtcclxuICAgIH1cclxuICB9XHJcbiAgLmxhYmVsIHtcclxuICAgIGhlaWdodDogYXV0bztcclxuICAgIHBhZGRpbmc6IDZycHg7XHJcbiAgfVxyXG59XHJcblxyXG4uYXJyb3cge1xyXG4gICY6OmFmdGVyIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgcmlnaHQ6IDMwcnB4O1xyXG4gICAgY29udGVudDogJ1xcZTZjMic7XHJcbiAgICBjb2xvcjogI2NjYztcclxuICAgIGZvbnQtZmFtaWx5OiAnZXJhYmJpdCcgIWltcG9ydGFudDtcclxuICAgIGZvbnQtc2l6ZTogMzJycHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKiDllYblk4Hor6bmg4UgKi9cclxuLmRldGFpbCB7XHJcbiAgcGFkZGluZy1sZWZ0OiAyMHJweDtcclxuICBwYWRkaW5nLWJvdHRvbTogNzhycHg7XHJcbiAgbWFyZ2luLWJvdHRvbTogMjBycHg7XHJcbiAgLmNvbnRlbnQge1xyXG4gICAgbWFyZ2luLWxlZnQ6IC0yMHJweDtcclxuICAgIC5pbWFnZSB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgfVxyXG4gIH1cclxuICAucHJvcGVydGllcyB7XHJcbiAgICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAzMHJweDtcclxuICAgIC5pdGVtIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgbGluZS1oZWlnaHQ6IDI7XHJcbiAgICAgIG1hcmdpbjogMTBycHg7XHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDIwcnB4O1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgICAgYm94LXNoYWRvdzogMCAwcnB4IDEwcnB4IHJnYmEoMjAwLCAyMDAsIDIwMCwgMC41KTtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMjBycHg7XHJcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMHJweDtcclxuICAgICAgLm9yZGVyX25vX3N0YXRlIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcclxuICAgICAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgICAgICAub3JkZXJfc3RhdGUge1xyXG4gICAgICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgICAgIC5zdGF0ZS0yIHtcclxuICAgICAgICAgICAgY29sb3I6ICMyOTc5ZmY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAuc3RhdGUtMyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMWM2N2RhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLnN0YXRlLTQge1xyXG4gICAgICAgICAgICBjb2xvcjogI2YzYTczZjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC5zdGF0ZS01IHtcclxuICAgICAgICAgICAgY29sb3I6ICMxOGJjMzc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAuc3RhdGUtNiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjZjNhNzNmO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLnN0YXRlLTcge1xyXG4gICAgICAgICAgICBjb2xvcjogIzAxYjA3NTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLmluZm8ge1xyXG4gICAgICAgIHBhZGRpbmc6IDEwcnB4IDIwcnB4O1xyXG4gICAgICB9XHJcbiAgICAgIC5nb29kcyB7XHJcbiAgICAgICAgbWFyZ2luOiAxMHJweCAyMHJweDtcclxuICAgICAgICBwYWRkaW5nOiAxMHJweDtcclxuICAgICAgICBib3JkZXI6IDFycHggc29saWQgI2VhZWFlYTtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyog5bqV6YOo6IGU57O75a6i5oi3ICovXHJcbi5jb250YWN0LWNsaWVudCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgYm90dG9tOiBjYWxjKCh2YXIoLS13aW5kb3ctYm90dG9tKSkpO1xyXG4gIHotaW5kZXg6IDE7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBoZWlnaHQ6IDcycnB4O1xyXG4gIGJvcmRlci10b3A6IDFycHggc29saWQgI2VhZWFlYTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xyXG4gIC5idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG4gICAgZmxleDogMTtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgJiA+IHZpZXcge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICBsaW5lLWhlaWdodDogNzJycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBnZXRQaWNrVXBCeVdheWJpbGxObyB9IGZyb20gJ0Avc2VydmljZXMvd2F5YmlsbFBpY2tVcE9yZGVyJ1xyXG5pbXBvcnQgdHlwZSB7IFBpY2tVcERldGFpbEl0ZW0gfSBmcm9tICdAL3R5cGVzL3dheWJpbGxQaWNrVXAnXHJcbmltcG9ydCB7IG9uTG9hZCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnXHJcblxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuXHJcbi8vIOaOpeaUtumhtemdouWPguaVsFxyXG5jb25zdCBxdWVyeSA9IGRlZmluZVByb3BzPHtcclxuICB3YXliaWxsX25vOiBzdHJpbmdcclxufT4oKVxyXG5cclxuLy8g6I635Y+W5ZWG5ZOB6K+m5oOF5L+h5oGvXHJcbmNvbnN0IGRldGFpbCA9IHJlZjxQaWNrVXBEZXRhaWxJdGVtPigpXHJcbmNvbnN0IGdldE9yZGVyQnlJZERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0UGlja1VwQnlXYXliaWxsTm8ocXVlcnkud2F5YmlsbF9ubylcclxuICBkZXRhaWwudmFsdWUgPSByZXMuZGF0YVxyXG59XHJcblxyXG4vLyDpobXpnaLliqDovb1cclxub25Mb2FkKCgpID0+IHtcclxuICBnZXRPcmRlckJ5SWREYXRhKClcclxufSlcclxuXHJcbi8vIOeCueWHu+WbvueJh+aXtlxyXG5jb25zdCBvblRhcEltYWdlID0gKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgLy8g5aSn5Zu+6aKE6KeIXHJcbiAgdW5pLnByZXZpZXdJbWFnZSh7XHJcbiAgICBjdXJyZW50OiB1cmwsXHJcbiAgICB1cmxzOiBnb29kcy52YWx1ZSEubWFpblBpY3R1cmVzLFxyXG4gIH0pXHJcbn1cclxuXHJcbi8vIOiBlOezu+WuouaIt1xyXG5jb25zdCBjb250YWN0Q2xpZW50ID0gKCkgPT4ge1xyXG4gIHVuaS5tYWtlUGhvbmVDYWxsKHtcclxuICAgIHBob25lTnVtYmVyOiAnMTMyMDAwMDAwMDAnLFxyXG4gIH0pXHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHNjcm9sbC12aWV3IGVuYWJsZS1iYWNrLXRvLXRvcCBzY3JvbGwteSBjbGFzcz1cInZpZXdwb3J0XCI+XHJcbiAgICA8dmlldyBjbGFzcz1cImRldGFpbCBwYW5lbFwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInByb3BlcnRpZXNcIj5cclxuICAgICAgICAgIDx2aWV3IHYtaWY9XCJkZXRhaWxcIiBjbGFzcz1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlcl9ub19zdGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDx2aWV3PlxyXG4gICAgICAgICAgICAgICAgPHRleHQ+e3sgZGV0YWlsLndheWJpbGxfbm8gfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwib3JkZXJfc3RhdGVcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IDpjbGFzcz1cIidzdGF0ZS0nICsgZGV0YWlsLnN0YXR1c1wiPnt7IGRldGFpbC5zdGF0dXNfdGV4dCB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaW5mb1wiPlxyXG4gICAgICAgICAgICAgIDx2aWV3PlxyXG4gICAgICAgICAgICAgICAg6aKE5Lyw6YeN6YeP77yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD57eyBkZXRhaWwuZXN0aW1hdGVkX3dlaWdodCB9fUtHPC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgICAgIFVwcyDlj5bku7bnoIHvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGRldGFpbC51cHNfcHJuIHx8ICfml6AnIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldz5cclxuICAgICAgICAgICAgICAgIFVwcyDlh4blpIfml7bpl7TvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pnt7IGRldGFpbC51cHNfcmVhZHlfdGltZSB8fCAn5pegJyB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXc+XHJcbiAgICAgICAgICAgICAgICBVcHMg5oiq5q2i5pe26Ze077yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD57eyBkZXRhaWwudXBzX2Nsb3NlX3RpbWUgfHwgJ+aXoCcgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3PiDpnaLljZUgPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGl0bGUgbGFiZWxcIj5cclxuICAgICAgICAgICAgICA8dGV4dFxyXG4gICAgICAgICAgICAgICAgPueJqeWTgea4heWNlVxyXG4gICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJibG5cIiB2LWlmPVwiIWRldGFpbC5nb29kcy5sZW5ndGhcIj7ml6A8L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC90ZXh0PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IHYtZm9yPVwiKGdvb2QsIGcpIGluIGRldGFpbC5nb29kc1wiIDprZXk9XCJnXCIgY2xhc3M9XCJnb29kc1wiPlxyXG4gICAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgICA+57G75Z6L77yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD57eyBnb29kLmNhdGVnb3J5X25hbWUgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgICA+5ZCN56ew77yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD57eyBnb29kLmdvb2RzX25hbWUgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT1cImNvbG9yOiAjNjY2NjY2OyBmb250LXNpemU6IDIycnB4XCI+e3sgJyB4JyArIGdvb2QucXR5IH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgICAgICAgICAgPHZpZXdcclxuICAgICAgICAgICAgICAgID7ku7fmoLzvvJpcclxuICAgICAgICAgICAgICAgIDx0ZXh0Pu+/oXt7IGdvb2QucHJpY2UgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgICA+5ZCI6K6h77yaXHJcbiAgICAgICAgICAgICAgICA8dGV4dD7vv6F7eyBnb29kLmFtb3VudCB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPCEtLSA8aW1hZ2VcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJpdGVtIGluIGdvb2QuaW1hZ2VzXCJcclxuICAgICAgICAgICAgICAgIDprZXk9XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgIG1vZGU9XCJ3aWR0aEZpeFwiXHJcbiAgICAgICAgICAgICAgICA6c3JjPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgPjwvaW1hZ2U+IC0tPlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwhLS0g5Zu+54mH6K+m5oOFIC0tPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgPC9zY3JvbGwtdmlldz5cclxuXHJcbiAgPCEtLSDnlKjmiLfmk43kvZwgLS0+XHJcbiAgPHZpZXdcclxuICAgIHYtaWY9XCJkZXRhaWxzXCJcclxuICAgIGNsYXNzPVwiY29udGFjdC1jbGllbnRcIlxyXG4gICAgOnN0eWxlPVwieyBwYWRkaW5nQm90dG9tOiBzYWZlQXJlYUluc2V0cz8uYm90dG9tICsgJ3B4JyB9XCJcclxuICA+XHJcbiAgICA8dmlldyBjbGFzcz1cImJ1dHRvbnNcIj5cclxuICAgICAgPHZpZXcgQHRhcD1cImNvbnRhY3RDbGllbnRcIiBjbGFzcz1cInBheW1lbnRcIj4g6IGU57O75a6i5oi3IDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLnBhbmVsIHtcclxuICBtYXJnaW4tdG9wOiAyMHJweDtcclxuICAudGl0bGUge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBoZWlnaHQ6IDkwcnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICBwYWRkaW5nOiAzMHJweCA2MHJweCAzMHJweCA2cnB4O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgdGV4dCB7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMTBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBib3JkZXItbGVmdDogNHJweCBzb2xpZCAjMjdiYTliO1xyXG4gICAgfVxyXG4gICAgbmF2aWdhdG9yIHtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICB9XHJcbiAgICAuYmxuIHtcclxuICAgICAgYm9yZGVyLWxlZnQ6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5sYWJlbCB7XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICBwYWRkaW5nOiA2cnB4O1xyXG4gIH1cclxufVxyXG5cclxuLmFycm93IHtcclxuICAmOjphZnRlciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAzMHJweDtcclxuICAgIGNvbnRlbnQ6ICdcXGU2YzInO1xyXG4gICAgY29sb3I6ICNjY2M7XHJcbiAgICBmb250LWZhbWlseTogJ2VyYWJiaXQnICFpbXBvcnRhbnQ7XHJcbiAgICBmb250LXNpemU6IDMycnB4O1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gIH1cclxufVxyXG5cclxuLyog5ZWG5ZOB6K+m5oOFICovXHJcbi5kZXRhaWwge1xyXG4gIHBhZGRpbmctbGVmdDogMjBycHg7XHJcbiAgcGFkZGluZy1ib3R0b206IDc4cnB4O1xyXG4gIG1hcmdpbi1ib3R0b206IDIwcnB4O1xyXG4gIC5jb250ZW50IHtcclxuICAgIG1hcmdpbi1sZWZ0OiAtMjBycHg7XHJcbiAgICAuaW1hZ2Uge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgIH1cclxuICB9XHJcbiAgLnByb3BlcnRpZXMge1xyXG4gICAgcGFkZGluZzogMCAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMzBycHg7XHJcbiAgICAuaXRlbSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAyO1xyXG4gICAgICBtYXJnaW46IDEwcnB4O1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAyMHJweDtcclxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgY29sb3I6ICMzMzM7XHJcbiAgICAgIGJveC1zaGFkb3c6IDAgMHJweCAxMHJweCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNSk7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcnB4O1xyXG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTBycHg7XHJcbiAgICAgIC5vcmRlcl9ub19zdGF0ZSB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XHJcbiAgICAgICAgcGFkZGluZzogMjBycHg7XHJcbiAgICAgICAgLm9yZGVyX3N0YXRlIHtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgICAgICAuc3RhdGUtMiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjk3OWZmO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLnN0YXRlLTMge1xyXG4gICAgICAgICAgICBjb2xvcjogIzFjNjdkYTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC5zdGF0ZS00IHtcclxuICAgICAgICAgICAgY29sb3I6ICNmM2E3M2Y7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAuc3RhdGUtNSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMThiYzM3O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLnN0YXRlLTYge1xyXG4gICAgICAgICAgICBjb2xvcjogI2YzYTczZjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC5zdGF0ZS03IHtcclxuICAgICAgICAgICAgY29sb3I6ICMwMWIwNzU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC5pbmZvIHtcclxuICAgICAgICBwYWRkaW5nOiAxMHJweCAyMHJweDtcclxuICAgICAgfVxyXG4gICAgICAuZ29vZHMge1xyXG4gICAgICAgIG1hcmdpbjogMTBycHggMjBycHg7XHJcbiAgICAgICAgcGFkZGluZzogMTBycHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcnB4IHNvbGlkICNlYWVhZWE7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qIOW6lemDqOiBlOezu+WuouaItyAqL1xyXG4uY29udGFjdC1jbGllbnQge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBsZWZ0OiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogY2FsYygodmFyKC0td2luZG93LWJvdHRvbSkpKTtcclxuICB6LWluZGV4OiAxO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgaGVpZ2h0OiA3MnJweDtcclxuICBib3JkZXItdG9wOiAxcnB4IHNvbGlkICNlYWVhZWE7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAuYnV0dG9ucyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICYgPiB2aWV3IHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgbGluZS1oZWlnaHQ6IDcycnB4O1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogI2ZmZjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxyXG5cdDx2aWV3IHYtaWY9XCJ2aXNpYmxlU3luY1wiIDpjbGFzcz1cInsgJ3VuaS1kcmF3ZXItLXZpc2libGUnOiBzaG93RHJhd2VyIH1cIiBjbGFzcz1cInVuaS1kcmF3ZXJcIiBAdG91Y2htb3ZlLnN0b3AucHJldmVudD1cImNsZWFyXCI+XHJcblx0XHQ8dmlldyBjbGFzcz1cInVuaS1kcmF3ZXJfX21hc2tcIiA6Y2xhc3M9XCJ7ICd1bmktZHJhd2VyX19tYXNrLS12aXNpYmxlJzogc2hvd0RyYXdlciAmJiBtYXNrIH1cIiBAdGFwPVwiY2xvc2UoJ21hc2snKVwiIC8+XHJcblx0XHQ8dmlldyBjbGFzcz1cInVuaS1kcmF3ZXJfX2NvbnRlbnRcIiA6Y2xhc3M9XCJ7J3VuaS1kcmF3ZXItLXJpZ2h0JzogcmlnaHRNb2RlLCd1bmktZHJhd2VyLS1sZWZ0JzogIXJpZ2h0TW9kZSwgJ3VuaS1kcmF3ZXJfX2NvbnRlbnQtLXZpc2libGUnOiBzaG93RHJhd2VyfVwiIDpzdHlsZT1cInt3aWR0aDpkcmF3ZXJXaWR0aCsncHgnfVwiPlxyXG5cdFx0XHQ8c2xvdCAvPlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PCEtLSAjaWZkZWYgSDUgLS0+XHJcblx0XHQ8a2V5cHJlc3MgQGVzYz1cImNsb3NlKCdtYXNrJylcIiAvPlxyXG5cdFx0PCEtLSAjZW5kaWYgLS0+XHJcblx0PC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuXHQvLyAjaWZkZWYgSDVcclxuXHRpbXBvcnQga2V5cHJlc3MgZnJvbSAnLi9rZXlwcmVzcy5qcydcclxuXHQvLyAjZW5kaWZcclxuXHQvKipcclxuXHQgKiBEcmF3ZXIg5oq95bGJXHJcblx0ICogQGRlc2NyaXB0aW9uIOaKveWxieS+p+a7keiPnOWNlVxyXG5cdCAqIEB0dXRvcmlhbCBodHRwczovL2V4dC5kY2xvdWQubmV0LmNuL3BsdWdpbj9pZD0yNlxyXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gbWFzayA9IFt0cnVlIHwgZmFsc2VdIOaYr+WQpuaYvuekuumBrue9qVxyXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gbWFza0NsaWNrID0gW3RydWUgfCBmYWxzZV0g54K55Ye76YGu572p5piv5ZCm5YWz6ZetXHJcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBtb2RlID0gW2xlZnQgfCByaWdodF0gRHJhd2VyIOa7keWHuuS9jee9rlxyXG5cdCAqIFx0QHZhbHVlIGxlZnQg5LuO5bem5L6n5ruR5Ye6XHJcblx0ICogXHRAdmFsdWUgcmlnaHQg5LuO5Y+z5L6n5L6n5ruR5Ye6XHJcblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IHdpZHRoIOaKveWxieeahOWuveW6piDvvIzku4UgdnVlIOmhtemdoueUn+aViFxyXG5cdCAqIEBldmVudCB7RnVuY3Rpb259IGNsb3NlIOe7hOS7tuWFs+mXreaXtuinpuWPkeS6i+S7tlxyXG5cdCAqL1xyXG5cdGV4cG9ydCBkZWZhdWx0IHtcclxuXHRcdG5hbWU6ICdVbmlEcmF3ZXInLFxyXG5cdFx0Y29tcG9uZW50czoge1xyXG5cdFx0XHQvLyAjaWZkZWYgSDVcclxuXHRcdFx0a2V5cHJlc3NcclxuXHRcdFx0Ly8gI2VuZGlmXHJcblx0XHR9LFxyXG5cdFx0ZW1pdHM6WydjaGFuZ2UnXSxcclxuXHRcdHByb3BzOiB7XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiDmmL7npLrmqKHlvI/vvIjlt6bjgIHlj7PvvInvvIzlj6rlnKjliJ3lp4vljJbnlJ/mlYhcclxuXHRcdFx0ICovXHJcblx0XHRcdG1vZGU6IHtcclxuXHRcdFx0XHR0eXBlOiBTdHJpbmcsXHJcblx0XHRcdFx0ZGVmYXVsdDogJydcclxuXHRcdFx0fSxcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIOiSmeWxguaYvuekuueKtuaAgVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bWFzazoge1xyXG5cdFx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdFx0ZGVmYXVsdDogdHJ1ZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog6YGu572p5piv5ZCm5Y+v54K55Ye75YWz6ZetXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRtYXNrQ2xpY2s6e1xyXG5cdFx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdFx0ZGVmYXVsdDogdHJ1ZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICog5oq95bGJ5a695bqmXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR3aWR0aDoge1xyXG5cdFx0XHRcdHR5cGU6IE51bWJlcixcclxuXHRcdFx0XHRkZWZhdWx0OiAyMjBcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dmlzaWJsZVN5bmM6IGZhbHNlLFxyXG5cdFx0XHRcdHNob3dEcmF3ZXI6IGZhbHNlLFxyXG5cdFx0XHRcdHJpZ2h0TW9kZTogZmFsc2UsXHJcblx0XHRcdFx0d2F0Y2hUaW1lcjogbnVsbCxcclxuXHRcdFx0XHRkcmF3ZXJXaWR0aDogMjIwXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRjcmVhdGVkKCkge1xyXG5cdFx0XHQvLyAjaWZuZGVmIEFQUC1OVlVFXHJcblx0XHRcdHRoaXMuZHJhd2VyV2lkdGggPSB0aGlzLndpZHRoXHJcblx0XHRcdC8vICNlbmRpZlxyXG5cdFx0XHR0aGlzLnJpZ2h0TW9kZSA9IHRoaXMubW9kZSA9PT0gJ3JpZ2h0J1xyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0Y2xlYXIoKXt9LFxyXG5cdFx0XHRjbG9zZSh0eXBlKSB7XHJcblx0XHRcdFx0Ly8gZml4ZWQgYnkgbWVoYW90aWFuIOaKveWxieWwmuacquWujOWFqOWFs+mXreaIlumBrue9qeemgeatoueCueWHu+aXtuS4jeinpuWPkeS7peS4i+mAu+i+kVxyXG5cdFx0XHRcdGlmKCh0eXBlID09PSAnbWFzaycgJiYgIXRoaXMubWFza0NsaWNrKSB8fCAhdGhpcy52aXNpYmxlU3luYykgcmV0dXJuXHJcblx0XHRcdFx0dGhpcy5fY2hhbmdlKCdzaG93RHJhd2VyJywgJ3Zpc2libGVTeW5jJywgZmFsc2UpXHJcblx0XHRcdH0sXHJcblx0XHRcdG9wZW4oKSB7XHJcblx0XHRcdFx0Ly8gZml4ZWQgYnkgbWVoYW90aWFuIOWkhOeQhumHjeWkjeeCueWHu+aJk+W8gOeahOS6i+S7tlxyXG5cdFx0XHRcdGlmKHRoaXMudmlzaWJsZVN5bmMpIHJldHVyblxyXG5cdFx0XHRcdHRoaXMuX2NoYW5nZSgndmlzaWJsZVN5bmMnLCAnc2hvd0RyYXdlcicsIHRydWUpXHJcblx0XHRcdH0sXHJcblx0XHRcdF9jaGFuZ2UocGFyYW0xLCBwYXJhbTIsIHN0YXR1cykge1xyXG5cdFx0XHRcdHRoaXNbcGFyYW0xXSA9IHN0YXR1c1xyXG5cdFx0XHRcdGlmICh0aGlzLndhdGNoVGltZXIpIHtcclxuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLndhdGNoVGltZXIpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMud2F0Y2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpc1twYXJhbTJdID0gc3RhdHVzXHJcblx0XHRcdFx0XHR0aGlzLiRlbWl0KCdjaGFuZ2UnLHN0YXR1cylcclxuXHRcdFx0XHR9LCBzdGF0dXMgPyA1MCA6IDMwMClcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiA+XHJcblx0JHVuaS1tYXNrOiByZ2JhKCRjb2xvcjogIzAwMDAwMCwgJGFscGhhOiAwLjQpIDtcclxuXHQvLyDmir3lsYnlrr3luqZcclxuXHQkZHJhd2VyLXdpZHRoOiAyMjBweDtcclxuXHJcblx0LnVuaS1kcmF3ZXIge1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0ZGlzcGxheTogYmxvY2s7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdHBvc2l0aW9uOiBmaXhlZDtcclxuXHRcdHRvcDogMDtcclxuXHRcdGxlZnQ6IDA7XHJcblx0XHRyaWdodDogMDtcclxuXHRcdGJvdHRvbTogMDtcclxuXHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0XHR6LWluZGV4OiA5OTk7XHJcblx0fVxyXG5cclxuXHQudW5pLWRyYXdlcl9fY29udGVudCB7XHJcblx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHRkaXNwbGF5OiBibG9jaztcclxuXHRcdC8qICNlbmRpZiAqL1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0dG9wOiAwO1xyXG5cdFx0d2lkdGg6ICRkcmF3ZXItd2lkdGg7XHJcblx0XHRib3R0b206IDA7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkdW5pLWJnLWNvbG9yO1xyXG5cdFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTtcclxuXHR9XHJcblxyXG5cdC51bmktZHJhd2VyLS1sZWZ0IHtcclxuXHRcdGxlZnQ6IDA7XHJcblx0XHQvKiAjaWZkZWYgQVBQLU5WVUUgKi9cclxuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtJGRyYXdlci13aWR0aCk7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHR9XHJcblxyXG5cdC51bmktZHJhd2VyLS1yaWdodCB7XHJcblx0XHRyaWdodDogMDtcclxuXHRcdC8qICNpZmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVYKCRkcmF3ZXItd2lkdGgpO1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0XHQvKiAjaWZuZGVmIEFQUC1OVlVFICovXHJcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHR9XHJcblxyXG5cdC51bmktZHJhd2VyX19jb250ZW50LS12aXNpYmxlIHtcclxuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpO1xyXG5cdH1cclxuXHJcblxyXG5cdC51bmktZHJhd2VyX19tYXNrIHtcclxuXHRcdC8qICNpZm5kZWYgQVBQLU5WVUUgKi9cclxuXHRcdGRpc3BsYXk6IGJsb2NrO1xyXG5cdFx0LyogI2VuZGlmICovXHJcblx0XHRvcGFjaXR5OiAwO1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0dG9wOiAwO1xyXG5cdFx0bGVmdDogMDtcclxuXHRcdGJvdHRvbTogMDtcclxuXHRcdHJpZ2h0OiAwO1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogJHVuaS1tYXNrO1xyXG5cdFx0dHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xyXG5cdH1cclxuXHJcblx0LnVuaS1kcmF3ZXJfX21hc2stLXZpc2libGUge1xyXG5cdFx0LyogI2lmbmRlZiBBUFAtTlZVRSAqL1xyXG5cdFx0ZGlzcGxheTogYmxvY2s7XHJcblx0XHQvKiAjZW5kaWYgKi9cclxuXHRcdG9wYWNpdHk6IDE7XHJcblx0fVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XG4gIDx2aWV3IGNsYXNzPVwibGlzdFwiPlxuICAgIDwhLS0gPHVuaS1zZWFyY2gtYmFyIEBjb25maXJtPVwic2VhcmNoXCIgOmZvY3VzPVwidHJ1ZVwiIHYtbW9kZWw9XCJzZWFyY2hWYWx1ZVwiIEBibHVyPVwiYmx1clwiIEBmb2N1cz1cImZvY3VzXCIgQGlucHV0PVwiaW5wdXRcIiBAY2FuY2VsPVwiY2FuY2VsXCIgQGNsZWFyPVwiY2xlYXJcIj48L3VuaS1zZWFyY2gtYmFyPiAtLT5cbiAgICA8dW5pLWVhc3lpbnB1dFxuICAgICAgdi1tb2RlbD1cInNlYXJjaFZhbHVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5Y2V5Y+3XCJcbiAgICAgIHN1ZmZpeEljb249XCJzY2FuXCJcbiAgICAgIEBpY29uQ2xpY2s9XCJzY2FuSW5wdXRcIlxuICAgIC8+XG4gICAgPHZpZXcgY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCIoaXRlbSwgaSkgaW4gd2F5YmlsbERlbGl2ZXJ5XCIgOmtleT1cImlcIiBAY2xpY2s9XCJpdGVtQ2xpY2soaXRlbSlcIj5cbiAgICAgIDx2aWV3IGNsYXNzPVwib3JkZXItbm9cIj5cbiAgICAgICAgPHRleHQ+IOa0vumAgeWNleWPtzoge3sgaXRlbS5vcmRlcl9ubyB9fSA8L3RleHQ+XG4gICAgICAgIDxpbWFnZVxuICAgICAgICAgIEBjbGljaz1cImNvcHlPcmRlck5vKGl0ZW0ub3JkZXJfbm8pXCJcbiAgICAgICAgICBjbGFzcz1cImljb25cIlxuICAgICAgICAgIHNyYz1cIi9zdGF0aWMvY29weS5wbmdcIlxuICAgICAgICAgIG1vZGU9XCJhc3BlY3RGaWxsXCJcbiAgICAgICAgLz5cbiAgICAgIDwvdmlldz5cbiAgICAgIDx2aWV3IGNsYXNzPVwiYWRkcmVzcy1pbmZvXCI+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwiaW5mb1wiPlxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlclwiPlxuICAgICAgICAgICAgPHRleHQ+XG4gICAgICAgICAgICAgIHt7IGl0ZW0uYWRkcmVzcy5maXJzdF9uYW1lICsgJyAnICsgaXRlbS5hZGRyZXNzLmxhc3RfbmFtZSB9fVxuICAgICAgICAgICAgICB7eyAnKycgKyBpdGVtLmFkZHJlc3MubW9iaWxlX2NvZGUgKyAnICcgKyBpdGVtLmFkZHJlc3MubW9iaWxlIH19XG4gICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICA8aW1hZ2VcbiAgICAgICAgICAgICAgQGNsaWNrPVwiY2FsbFBob25lKGl0ZW0uYWRkcmVzcy5tb2JpbGVfY29kZSArICcgJyArIGl0ZW0uYWRkcmVzcy5tb2JpbGUpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uXCJcbiAgICAgICAgICAgICAgc3JjPVwiL3N0YXRpYy9jYWxsLnBuZ1wiXG4gICAgICAgICAgICAgIG1vZGU9XCJhc3BlY3RGaWxsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC92aWV3PlxuICAgICAgICAgIDx2aWV3PlxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJhZGRyZXNzXCI+XG4gICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiY2l0eVwiPnt7IGl0ZW0uYWRkcmVzcy5jaXR5IH19PC90ZXh0PlxuICAgICAgICAgICAgICB7eyBpdGVtLmFkZHJlc3MuemlwX2NvZGUgfX1cbiAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgIDxpbWFnZVxuICAgICAgICAgICAgICBAY2xpY2s9XCJjb3B5T3JkZXJObyhpdGVtLmFkZHJlc3MuemlwX2NvZGUpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uXCJcbiAgICAgICAgICAgICAgc3JjPVwiL3N0YXRpYy9jb3B5LnBuZ1wiXG4gICAgICAgICAgICAgIG1vZGU9XCJhc3BlY3RGaWxsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC92aWV3PlxuICAgICAgICA8L3ZpZXc+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwiaW5mb1wiPjwvdmlldz5cbiAgICAgIDwvdmlldz5cbiAgICAgIDx2aWV3Pjwvdmlldz5cbiAgICAgIDx2aWV3IGNsYXNzPVwib3BlcmF0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdi1mb3I9XCIob3BlcmF0aW9uLCBpKSBpbiBpdGVtLm9wZXJhdGlvbnNcIlxuICAgICAgICAgIDprZXk9XCJpXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkJ1dHRvbkNsaWNrKGl0ZW0sIG9wZXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgIHR5cGU9XCJpbmZvXCJcbiAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBvcGVyYXRpb24udGV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdmlldz5cbiAgICA8L3ZpZXc+XG5cbiAgICA8dmlldyB2LWlmPVwid2F5YmlsbERlbGl2ZXJ5Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiaXMtZW1wdHlcIj7mmoLml6DmtL7pgIHljZU8L3ZpZXc+XG5cbiAgICA8dW5pLXBvcHVwIHJlZj1cIm1lc3NhZ2VSZWZcIiB0eXBlPVwibWVzc2FnZVwiPlxuICAgICAgPHVuaS1wb3B1cC1tZXNzYWdlXG4gICAgICAgIDp0eXBlPVwibWVzc2FnZVR5cGVcIlxuICAgICAgICA6bWVzc2FnZT1cIm1lc3NhZ2VUZXh0XCJcbiAgICAgICAgOmR1cmF0aW9uPVwiMjAwMFwiXG4gICAgICA+PC91bmktcG9wdXAtbWVzc2FnZT5cbiAgICA8L3VuaS1wb3B1cD5cbiAgICA8dW5pLWRyYXdlciByZWY9XCJzaG93UmlnaHRSZWZcIiBtb2RlPVwicmlnaHRcIiA6bWFzay1jbGljaz1cInRydWVcIj5cbiAgICAgIDxzY3JvbGwtdmlldyBzdHlsZT1cImhlaWdodDogMTAwJVwiIHNjcm9sbC15PVwidHJ1ZVwiPlxuICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwicmVzZXRGb3JtXCIgdHlwZT1cImluZm9cIj7ph43nva48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1Gb3JtXCIgdHlwZT1cInByaW1hcnlcIj7noa7orqQ8L2J1dHRvbj5cbiAgICAgICAgPC92aWV3PlxuICAgICAgPC9zY3JvbGwtdmlldz5cbiAgICA8L3VuaS1kcmF3ZXI+XG4gIDwvdmlldz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgeyByZWFjdGl2ZSwgcmVmIH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgb25Mb2FkLCBvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcbmltcG9ydCB7IGNoZWNrUGVybWlzc2lvbiB9IGZyb20gJ0AvdXRpbHMnXG5cbmxldCBwaWNrdXBXYXliaWxsRGVsaXZlcnlPcmRlclVSTCA9ICcnXG5sZXQgc2VuZE91dFVSTCA9ICcnXG5sZXQgZGVsaXZlcmVkVVJMID0gJydcbmxldCByZWZ1c2VVUkwgPSAnJ1xubGV0IGNyZWF0ZVRyYWNrUG9kVVJMID0gJydcbmxldCBjYW5jZWxGZWRFeFBpY2tVcFVSTCA9ICcnXG5cbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXG5jb25zdCBsb2FkaW5nQnRuID0gcmVmKGZhbHNlKVxuY29uc3QgdG9rZW4gPSByZWYoKVxuY29uc3Qgc2VhcmNoVmFsdWUgPSByZWYoKVxuY29uc3Qgd2F5YmlsbERlbGl2ZXJ5ID0gcmVmKFtdIGFzIGFueSlcbmNvbnN0IG1lc3NhZ2VUeXBlID0gcmVmKClcbmNvbnN0IG1lc3NhZ2VUZXh0ID0gcmVmKClcbmNvbnN0IG1lc3NhZ2VSZWYgPSByZWYoKVxuY29uc3Qgc2hvd1JpZ2h0UmVmID0gcmVmKClcblxuY29uc3QgcmVzZXRGb3JtID0gKCkgPT4ge31cbmNvbnN0IGNvbmZpcm1Gb3JtID0gKCkgPT4ge1xuICBzaG93UmlnaHRSZWYudmFsdWUuY2xvc2UoKVxufVxuXG5jb25zdCBjb3B5T3JkZXJObyA9IChvcmRlcl9ubzogc3RyaW5nKSA9PiB7XG4gIHVuaS5zZXRDbGlwYm9hcmREYXRhKHtcbiAgICBkYXRhOiBvcmRlcl9ubyxcbiAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICB1bmkuc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6ICflpI3liLbmiJDlip8nLFxuICAgICAgICBpY29uOiAnc3VjY2VzcycsXG4gICAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgfSlcbiAgICB9LFxuICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgIF9fZl9fKCdsb2cnLCdhdCBwYWdlcy93YXliaWxsRGVsaXZlcnlPcmRlci93YXliaWxsRGVsaXZlcnlPcmRlci52dWU6MTIxJywn5aSN5Yi25aSx6LSlJylcbiAgICB9LFxuICB9KVxufVxuXG5jb25zdCBjYWxsUGhvbmUgPSAocGhvbmVOdW1iZXI6IHN0cmluZykgPT4ge1xuICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvd2F5YmlsbERlbGl2ZXJ5T3JkZXIvd2F5YmlsbERlbGl2ZXJ5T3JkZXIudnVlOjEyNycscGhvbmVOdW1iZXIpXG5cbiAgdW5pLm1ha2VQaG9uZUNhbGwoe1xuICAgIHBob25lTnVtYmVyOiBwaG9uZU51bWJlcixcbiAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvd2F5YmlsbERlbGl2ZXJ5T3JkZXIvd2F5YmlsbERlbGl2ZXJ5T3JkZXIudnVlOjEzMicsJ+aLqOaJk+eUteivneaIkOWKn++8gScpXG4gICAgfSxcbiAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBfX2ZfXygnbG9nJywnYXQgcGFnZXMvd2F5YmlsbERlbGl2ZXJ5T3JkZXIvd2F5YmlsbERlbGl2ZXJ5T3JkZXIudnVlOjEzNScsJ+aLqOaJk+eUteivneWksei0pe+8gScpXG4gICAgfSxcbiAgfSlcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxufVxuXG5jb25zdCBzY2FuSW5wdXQgPSBhc3luYyAoKSA9PiB7XG5cbiAgbGV0IHN0YXR1cyA9IGF3YWl0IGNoZWNrUGVybWlzc2lvbigpXG4gIGlmIChzdGF0dXMgIT09IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHVuaS5zY2FuQ29kZSh7XG4gICAgc3VjY2VzczogKHJlczogYW55KSA9PiB7XG4gICAgICAvLyB2YWxpRm9ybURhdGEudmFsdWUub3JkZXJfY29kZSA9IHJlcy5yZXN1bHQ7XG4gICAgICAvLyBvbnN1Ym1pdCgpO1xuICAgIH0sXG4gICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgLy8g6ZyA6KaB5rOo5oSP55qE5piv5bCP56iL5bqP5omr56CB5LiN6ZyA6KaB55Sz6K+355u45py65p2D6ZmQXG4gICAgfSxcbiAgfSlcbn1cblxuY29uc3QgaXRlbUNsaWNrID0gKGl0ZW06IGFueSkgPT4ge1xuICB1bmkuc2V0U3RvcmFnZVN5bmMoJ3NlbGVjdEl0ZW0nLCBpdGVtKVxuXG4gIHVuaS5uYXZpZ2F0ZVRvKHtcbiAgICB1cmw6ICcvcGFnZXMvd2F5YmlsbERlbGl2ZXJ5T3JkZXIvb3JkZXJJbmZvP2lkPScgKyBpdGVtLmlkLFxuICB9KVxufVxuXG5jb25zdCBvbkJ1dHRvbkNsaWNrID0gYXN5bmMgKHJvdzogeyBpZDogYW55IH0sIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgaWYgKHZhbHVlID09PSAnc2VuZF9vdXQnKSB7XG4gICAgc2VuZE91dCh7IGlkOiByb3cuaWQgfSlcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2RlbGl2ZXJlZCcpIHtcbiAgICAvL+ehruiupOmAgei+vlxuICAgIHVwZGF0ZURlbGl2ZXJlZCh7IGlkOiByb3cuaWQgfSlcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3JlZnVzZScpIHtcbiAgICB1cGRhdGVSZWZ1c2UoeyBpZDogcm93LmlkIH0pXG4gIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjcmVhdGVfdHJhY2tfcG9kJykge1xuICAgIGNyZWF0ZVRyYWNrUG9kKHsgaWQ6IHJvdy5pZCB9KVxuICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZWRpdCcpIHtcbiAgICAvLyBiYVRhYmxlLmZvcm0uaXRlbXMgPSByb3c7XG4gICAgLy8gYmFUYWJsZS5mb3JtLm9wZXJhdGUgPSAnZWRpdCc7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09ICdnZW5lcmF0ZV9sYWJlbCcpIHtcbiAgICAvLyBiYVRhYmxlLmZvcm0uaXRlbXMgPSByb3c7XG4gICAgLy8gZ2VuZXJhdGVMYWJlbEZvcm0uaWQgPSByb3cuaWQ7XG4gICAgLy8gZ2VuZXJhdGVMYWJlbFZpc2libGUudmFsdWUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmVkZXhfYXBwb2ludG1lbnRfcGlja191cCcpIHtcbiAgICAvLyBiYVRhYmxlLmZvcm0uaXRlbXMgPSByb3c7XG4gICAgLy8gYmFUYWJsZS5mb3JtLm9wZXJhdGUgPSAnRmVkRXhQaWNrVXAnO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSAncHJpbnRfZ2V0X2JhY2tfbGFiZWwnKSB7XG4gICAgLy8gdG9QcmludFJldHJpZXZlKHJvdyk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmZWRleF9jYW5jZWxfcGlja191cCcpIHtcbiAgICBjYW5jZWxGZWRFeFBpY2tVcCh7IGlkOiByb3cuaWQgfSlcbiAgfVxufVxuXG5jb25zdCBzZW5kT3V0ID0gKGRhdGE6IHsgaWQ6IGFueSB9KSA9PiB7XG4gIGxvYWRpbmdCdG4udmFsdWUgPSB0cnVlXG4gIHVuaS5yZXF1ZXN0KHtcbiAgICB1cmw6IHNlbmRPdXRVUkwsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyOiB7XG4gICAgICBiYXRva2VuOiB0b2tlbi52YWx1ZSxcbiAgICB9LFxuICAgIGRhdGE6IGRhdGEsXG4gICAgc3VjY2VzczogKHsgZGF0YSB9OiBhbnkpID0+IHtcbiAgICAgIGxvYWRpbmdCdG4udmFsdWUgPSBmYWxzZVxuICAgICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnc3VjY2VzcydcbiAgICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+WPkeWHuuaIkOWKnydcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICBsb2FkaW5nQnRuLnZhbHVlID0gZmFsc2VcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSAn5Y+R5Ye65aSx6LSl77yM6K+356iN5ZCO6YeN6K+VJ1xuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcbiAgICB9LFxuICB9KVxufVxuXG5jb25zdCB1cGRhdGVEZWxpdmVyZWQgPSAoZGF0YTogeyBpZDogYW55IH0pID0+IHtcbiAgbG9hZGluZ0J0bi52YWx1ZSA9IHRydWVcbiAgdW5pLnJlcXVlc3Qoe1xuICAgIHVybDogZGVsaXZlcmVkVVJMLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcjoge1xuICAgICAgYmF0b2tlbjogdG9rZW4udmFsdWUsXG4gICAgfSxcbiAgICBkYXRhOiBkYXRhLFxuICAgIHN1Y2Nlc3M6ICh7IGRhdGEgfTogYW55KSA9PiB7XG4gICAgICBsb2FkaW5nQnRuLnZhbHVlID0gZmFsc2VcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ3N1Y2Nlc3MnXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfnoa7orqTpgIHovr7miJDlip8nXG4gICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxuICAgIH0sXG4gICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgbG9hZGluZ0J0bi52YWx1ZSA9IGZhbHNlXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcbiAgICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+ehruiupOmAgei+vuWksei0pe+8jOivt+eojeWQjumHjeivlSdcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXG4gICAgfSxcbiAgfSlcbn1cblxuY29uc3QgdXBkYXRlUmVmdXNlID0gKGRhdGE6IHsgaWQ6IGFueSB9KSA9PiB7XG4gIGxvYWRpbmdCdG4udmFsdWUgPSB0cnVlXG4gIHVuaS5yZXF1ZXN0KHtcbiAgICB1cmw6IHJlZnVzZVVSTCxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXI6IHtcbiAgICAgIGJhdG9rZW46IHRva2VuLnZhbHVlLFxuICAgIH0sXG4gICAgZGF0YTogZGF0YSxcbiAgICBzdWNjZXNzOiAoeyBkYXRhIH06IGFueSkgPT4ge1xuICAgICAgbG9hZGluZ0J0bi52YWx1ZSA9IGZhbHNlXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xuICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSAn5bey5ouS57ud562+5pS2J1xuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcbiAgICB9LFxuICAgIGZhaWw6IChlcnIpID0+IHtcbiAgICAgIGxvYWRpbmdCdG4udmFsdWUgPSBmYWxzZVxuICAgICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfkv67mlLnlpLHotKXvvIzor7fnqI3lkI7ph43or5UnXG4gICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxuICAgIH0sXG4gIH0pXG59XG5cbmNvbnN0IGNyZWF0ZVRyYWNrUG9kID0gKGRhdGE6IHsgaWQ6IGFueSB9KSA9PiB7XG4gIGxvYWRpbmdCdG4udmFsdWUgPSB0cnVlXG4gIHVuaS5yZXF1ZXN0KHtcbiAgICB1cmw6IGNyZWF0ZVRyYWNrUG9kVVJMLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcjoge1xuICAgICAgYmF0b2tlbjogdG9rZW4udmFsdWUsXG4gICAgfSxcbiAgICBkYXRhOiBkYXRhLFxuICAgIHN1Y2Nlc3M6ICh7IGRhdGEgfTogYW55KSA9PiB7XG4gICAgICBsb2FkaW5nQnRuLnZhbHVlID0gZmFsc2VcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ3N1Y2Nlc3MnXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICflkIzmraXmiJDlip8nXG4gICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxuICAgIH0sXG4gICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgbG9hZGluZ0J0bi52YWx1ZSA9IGZhbHNlXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcbiAgICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+WQjOatpeWksei0pe+8jOivt+eojeWQjumHjeivlSdcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXG4gICAgfSxcbiAgfSlcbn1cblxuY29uc3QgY2FuY2VsRmVkRXhQaWNrVXAgPSAoZGF0YTogeyBpZDogYW55IH0pID0+IHtcbiAgbG9hZGluZ0J0bi52YWx1ZSA9IHRydWVcbiAgdW5pLnJlcXVlc3Qoe1xuICAgIHVybDogY2FuY2VsRmVkRXhQaWNrVXBVUkwsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyOiB7XG4gICAgICBiYXRva2VuOiB0b2tlbi52YWx1ZSxcbiAgICB9LFxuICAgIGRhdGE6IGRhdGEsXG4gICAgc3VjY2VzczogKHsgZGF0YSB9OiBhbnkpID0+IHtcbiAgICAgIGxvYWRpbmdCdG4udmFsdWUgPSBmYWxzZVxuICAgICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnc3VjY2VzcydcbiAgICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+aTjeS9nOaIkOWKnydcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICBsb2FkaW5nQnRuLnZhbHVlID0gZmFsc2VcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSAn5pON5L2c5aSx6LSl77yM6K+356iN5ZCO6YeN6K+VJ1xuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcbiAgICB9LFxuICB9KVxufVxuXG5jb25zdCBnZXRMaXN0ID0gKCkgPT4ge1xuICBsb2FkaW5nLnZhbHVlID0gdHJ1ZVxuICB1bmkucmVxdWVzdCh7XG4gICAgdXJsOiBwaWNrdXBXYXliaWxsRGVsaXZlcnlPcmRlclVSTCArICcvaW5kZXgnLFxuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVyOiB7XG4gICAgICBiYXRva2VuOiB0b2tlbi52YWx1ZSxcbiAgICB9LFxuICAgIHN1Y2Nlc3M6ICh7IGRhdGEgfTogYW55KSA9PiB7XG4gICAgICBsb2FkaW5nLnZhbHVlID0gZmFsc2VcbiAgICAgIF9fZl9fKCdsb2cnLCdhdCBwYWdlcy93YXliaWxsRGVsaXZlcnlPcmRlci93YXliaWxsRGVsaXZlcnlPcmRlci52dWU6MzM2JyxkYXRhKVxuICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgIHdheWJpbGxEZWxpdmVyeS52YWx1ZSA9IGRhdGEuZGF0YS5saXN0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcbiAgICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSBkYXRhLm1zZ1xuICAgICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxuICAgICAgfVxuICAgIH0sXG4gICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgbG9hZGluZy52YWx1ZSA9IGZhbHNlXG4gICAgfSxcbiAgfSlcbn1cbm9uTG9hZCgoKSA9PiB7XG4gIHRva2VuLnZhbHVlID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd0b2tlbicpXG4gIGdldExpc3QoKVxufSlcbm9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCgoZXZlbnQpID0+IHtcbiAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XG4gICAgc2hvd1JpZ2h0UmVmLnZhbHVlLm9wZW4oKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbi5saXN0IHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXg6IDE7XG5cbiAgLnVuaS1lYXN5aW5wdXQge1xuICAgIG1hcmdpbi10b3A6IDIwcnB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHJweCk7XG4gIH1cblxuICAuaXRlbSB7XG4gICAgbWFyZ2luLXRvcDogMjBycHg7XG4gICAgd2lkdGg6IDk1JTtcbiAgICBib3gtc2hhZG93OiAwIDVycHggMTVycHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcnB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cbiAgICAub3JkZXItbm8ge1xuICAgICAgcGFkZGluZzogMTRycHg7XG4gICAgICBmb250LXNpemU6IDE2cnB4O1xuICAgIH1cblxuICAgIC5pY29uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA1cnB4O1xuICAgICAgd2lkdGg6IDI0cnB4O1xuICAgICAgaGVpZ2h0OiAyNHJweDtcbiAgICB9XG5cbiAgICAuYWRkcmVzcy1pbmZvIHtcbiAgICAgIHBhZGRpbmc6IDE0cnB4O1xuICAgICAgZm9udC1zaXplOiAxNnJweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwcnB4O1xuXG4gICAgICAuaW5mbyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgLnVzZXIge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcnB4O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFkZHJlc3Mge1xuICAgICAgICAgIC5jaXR5IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMzBycHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLmlzLWVtcHR5IHtcbiAgICBtYXJnaW4tdG9wOiAyMHJweDtcbiAgfVxufVxuXG4ub3BlcmF0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIHdpZHRoOiAxMDAlO1xuXG4gIGJ1dHRvbiB7XG4gICAgZm9udC1zaXplOiAxNnJweDtcbiAgICBtYXJnaW46IDEwcnB4O1xuICB9XG59XG5cbi5idXR0b24tZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcblxuICBidXR0b24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDM1cHg7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICBmb250LXNpemU6IDE2cnB4O1xuICB9XG5cbiAgLnVuaS1pY29ucyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGRlZmF1bHQgXCIvc3RhdGljL2NvcHkucG5nXCIiLCJleHBvcnQgZGVmYXVsdCBcIi9zdGF0aWMvY2FsbC5wbmdcIiIsIjx0ZW1wbGF0ZT5cbiAgPHZpZXcgY2xhc3M9XCJsaXN0XCI+XG4gICAgPCEtLSA8dW5pLXNlYXJjaC1iYXIgQGNvbmZpcm09XCJzZWFyY2hcIiA6Zm9jdXM9XCJ0cnVlXCIgdi1tb2RlbD1cInNlYXJjaFZhbHVlXCIgQGJsdXI9XCJibHVyXCIgQGZvY3VzPVwiZm9jdXNcIiBAaW5wdXQ9XCJpbnB1dFwiIEBjYW5jZWw9XCJjYW5jZWxcIiBAY2xlYXI9XCJjbGVhclwiPjwvdW5pLXNlYXJjaC1iYXI+IC0tPlxuICAgIDx1bmktZWFzeWlucHV0XG4gICAgICB2LW1vZGVsPVwic2VhcmNoVmFsdWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXljZXlj7dcIlxuICAgICAgc3VmZml4SWNvbj1cInNjYW5cIlxuICAgICAgQGljb25DbGljaz1cInNjYW5JbnB1dFwiXG4gICAgLz5cbiAgICA8dmlldyBjbGFzcz1cIml0ZW1cIiB2LWZvcj1cIihpdGVtLCBpKSBpbiB3YXliaWxsRGVsaXZlcnlcIiA6a2V5PVwiaVwiIEBjbGljaz1cIml0ZW1DbGljayhpdGVtKVwiPlxuICAgICAgPHZpZXcgY2xhc3M9XCJvcmRlci1ub1wiPlxuICAgICAgICA8dGV4dD4g5rS+6YCB5Y2V5Y+3OiB7eyBpdGVtLm9yZGVyX25vIH19IDwvdGV4dD5cbiAgICAgICAgPGltYWdlXG4gICAgICAgICAgQGNsaWNrPVwiY29weU9yZGVyTm8oaXRlbS5vcmRlcl9ubylcIlxuICAgICAgICAgIGNsYXNzPVwiaWNvblwiXG4gICAgICAgICAgc3JjPVwiL3N0YXRpYy9jb3B5LnBuZ1wiXG4gICAgICAgICAgbW9kZT1cImFzcGVjdEZpbGxcIlxuICAgICAgICAvPlxuICAgICAgPC92aWV3PlxuICAgICAgPHZpZXcgY2xhc3M9XCJhZGRyZXNzLWluZm9cIj5cbiAgICAgICAgPHZpZXcgY2xhc3M9XCJpbmZvXCI+XG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyXCI+XG4gICAgICAgICAgICA8dGV4dD5cbiAgICAgICAgICAgICAge3sgaXRlbS5hZGRyZXNzLmZpcnN0X25hbWUgKyAnICcgKyBpdGVtLmFkZHJlc3MubGFzdF9uYW1lIH19XG4gICAgICAgICAgICAgIHt7ICcrJyArIGl0ZW0uYWRkcmVzcy5tb2JpbGVfY29kZSArICcgJyArIGl0ZW0uYWRkcmVzcy5tb2JpbGUgfX1cbiAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgIDxpbWFnZVxuICAgICAgICAgICAgICBAY2xpY2s9XCJjYWxsUGhvbmUoaXRlbS5hZGRyZXNzLm1vYmlsZV9jb2RlICsgJyAnICsgaXRlbS5hZGRyZXNzLm1vYmlsZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImljb25cIlxuICAgICAgICAgICAgICBzcmM9XCIvc3RhdGljL2NhbGwucG5nXCJcbiAgICAgICAgICAgICAgbW9kZT1cImFzcGVjdEZpbGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgICAgPHZpZXc+XG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cImFkZHJlc3NcIj5cbiAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJjaXR5XCI+e3sgaXRlbS5hZGRyZXNzLmNpdHkgfX08L3RleHQ+XG4gICAgICAgICAgICAgIHt7IGl0ZW0uYWRkcmVzcy56aXBfY29kZSB9fVxuICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgPGltYWdlXG4gICAgICAgICAgICAgIEBjbGljaz1cImNvcHlPcmRlck5vKGl0ZW0uYWRkcmVzcy56aXBfY29kZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImljb25cIlxuICAgICAgICAgICAgICBzcmM9XCIvc3RhdGljL2NvcHkucG5nXCJcbiAgICAgICAgICAgICAgbW9kZT1cImFzcGVjdEZpbGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3ZpZXc+XG4gICAgICAgIDwvdmlldz5cbiAgICAgICAgPHZpZXcgY2xhc3M9XCJpbmZvXCI+PC92aWV3PlxuICAgICAgPC92aWV3PlxuICAgICAgPHZpZXc+PC92aWV3PlxuICAgICAgPHZpZXcgY2xhc3M9XCJvcGVyYXRpb25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB2LWZvcj1cIihvcGVyYXRpb24sIGkpIGluIGl0ZW0ub3BlcmF0aW9uc1wiXG4gICAgICAgICAgOmtleT1cImlcIlxuICAgICAgICAgIEBjbGljaz1cIm9uQnV0dG9uQ2xpY2soaXRlbSwgb3BlcmF0aW9uLnZhbHVlKVwiXG4gICAgICAgICAgdHlwZT1cImluZm9cIlxuICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG9wZXJhdGlvbi50ZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC92aWV3PlxuICAgIDwvdmlldz5cblxuICAgIDx2aWV3IHYtaWY9XCJ3YXliaWxsRGVsaXZlcnkubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJpcy1lbXB0eVwiPuaaguaXoOa0vumAgeWNlTwvdmlldz5cblxuICAgIDx1bmktcG9wdXAgcmVmPVwibWVzc2FnZVJlZlwiIHR5cGU9XCJtZXNzYWdlXCI+XG4gICAgICA8dW5pLXBvcHVwLW1lc3NhZ2VcbiAgICAgICAgOnR5cGU9XCJtZXNzYWdlVHlwZVwiXG4gICAgICAgIDptZXNzYWdlPVwibWVzc2FnZVRleHRcIlxuICAgICAgICA6ZHVyYXRpb249XCIyMDAwXCJcbiAgICAgID48L3VuaS1wb3B1cC1tZXNzYWdlPlxuICAgIDwvdW5pLXBvcHVwPlxuICAgIDx1bmktZHJhd2VyIHJlZj1cInNob3dSaWdodFJlZlwiIG1vZGU9XCJyaWdodFwiIDptYXNrLWNsaWNrPVwidHJ1ZVwiPlxuICAgICAgPHNjcm9sbC12aWV3IHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCIgc2Nyb2xsLXk9XCJ0cnVlXCI+XG4gICAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJyZXNldEZvcm1cIiB0eXBlPVwiaW5mb1wiPumHjee9rjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gQGNsaWNrPVwiY29uZmlybUZvcm1cIiB0eXBlPVwicHJpbWFyeVwiPuehruiupDwvYnV0dG9uPlxuICAgICAgICA8L3ZpZXc+XG4gICAgICA8L3Njcm9sbC12aWV3PlxuICAgIDwvdW5pLWRyYXdlcj5cbiAgPC92aWV3PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cbmltcG9ydCB7IHJlYWN0aXZlLCByZWYgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBvbkxvYWQsIG9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xuaW1wb3J0IHsgY2hlY2tQZXJtaXNzaW9uIH0gZnJvbSAnQC91dGlscydcblxubGV0IHBpY2t1cFdheWJpbGxEZWxpdmVyeU9yZGVyVVJMID0gJydcbmxldCBzZW5kT3V0VVJMID0gJydcbmxldCBkZWxpdmVyZWRVUkwgPSAnJ1xubGV0IHJlZnVzZVVSTCA9ICcnXG5sZXQgY3JlYXRlVHJhY2tQb2RVUkwgPSAnJ1xubGV0IGNhbmNlbEZlZEV4UGlja1VwVVJMID0gJydcblxuY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSlcbmNvbnN0IGxvYWRpbmdCdG4gPSByZWYoZmFsc2UpXG5jb25zdCB0b2tlbiA9IHJlZigpXG5jb25zdCBzZWFyY2hWYWx1ZSA9IHJlZigpXG5jb25zdCB3YXliaWxsRGVsaXZlcnkgPSByZWYoW10gYXMgYW55KVxuY29uc3QgbWVzc2FnZVR5cGUgPSByZWYoKVxuY29uc3QgbWVzc2FnZVRleHQgPSByZWYoKVxuY29uc3QgbWVzc2FnZVJlZiA9IHJlZigpXG5jb25zdCBzaG93UmlnaHRSZWYgPSByZWYoKVxuXG5jb25zdCByZXNldEZvcm0gPSAoKSA9PiB7fVxuY29uc3QgY29uZmlybUZvcm0gPSAoKSA9PiB7XG4gIHNob3dSaWdodFJlZi52YWx1ZS5jbG9zZSgpXG59XG5cbmNvbnN0IGNvcHlPcmRlck5vID0gKG9yZGVyX25vOiBzdHJpbmcpID0+IHtcbiAgdW5pLnNldENsaXBib2FyZERhdGEoe1xuICAgIGRhdGE6IG9yZGVyX25vLFxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuaS5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogJ+WkjeWItuaIkOWKnycsXG4gICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgICAgZHVyYXRpb246IDIwMDAsXG4gICAgICB9KVxuICAgIH0sXG4gICAgZmFpbDogZnVuY3Rpb24gKCkge1xuICAgICAgY29uc29sZS5sb2coJ+WkjeWItuWksei0pScpXG4gICAgfSxcbiAgfSlcbn1cblxuY29uc3QgY2FsbFBob25lID0gKHBob25lTnVtYmVyOiBzdHJpbmcpID0+IHtcbiAgY29uc29sZS5sb2cocGhvbmVOdW1iZXIpXG4gIC8vICNpZmRlZiBBUFAtUExVU1xuICB1bmkubWFrZVBob25lQ2FsbCh7XG4gICAgcGhvbmVOdW1iZXI6IHBob25lTnVtYmVyLFxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnNvbGUubG9nKCfmi6jmiZPnlLXor53miJDlip/vvIEnKVxuICAgIH0sXG4gICAgZmFpbDogZnVuY3Rpb24gKCkge1xuICAgICAgY29uc29sZS5sb2coJ+aLqOaJk+eUteivneWksei0pe+8gScpXG4gICAgfSxcbiAgfSlcbiAgLy8gI2VuZGlmXG5cbiAgLy8gI2lmZGVmIE1QLVdFSVhJTlxuICB3eC5tYWtlUGhvbmVDYWxsKHtcbiAgICBwaG9uZU51bWJlcjogcGhvbmVOdW1iZXIsXG4gICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgY29uc29sZS5sb2coJ+aLqOaJk+eUteivneaIkOWKn++8gScpXG4gICAgfSxcbiAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zb2xlLmxvZygn5ouo5omT55S16K+d5aSx6LSl77yBJylcbiAgICB9LFxuICB9KVxuICAvLyAjZW5kaWZcbn1cblxuY29uc3Qgc2NhbklucHV0ID0gYXN5bmMgKCkgPT4ge1xuICAvLyAjaWZkZWYgQVBQLVBMVVNcbiAgbGV0IHN0YXR1cyA9IGF3YWl0IGNoZWNrUGVybWlzc2lvbigpXG4gIGlmIChzdGF0dXMgIT09IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvLyAjZW5kaWZcbiAgdW5pLnNjYW5Db2RlKHtcbiAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcbiAgICAgIC8vIHZhbGlGb3JtRGF0YS52YWx1ZS5vcmRlcl9jb2RlID0gcmVzLnJlc3VsdDtcbiAgICAgIC8vIG9uc3VibWl0KCk7XG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICAvLyDpnIDopoHms6jmhI/nmoTmmK/lsI/nqIvluo/miavnoIHkuI3pnIDopoHnlLPor7fnm7jmnLrmnYPpmZBcbiAgICB9LFxuICB9KVxufVxuXG5jb25zdCBpdGVtQ2xpY2sgPSAoaXRlbTogYW55KSA9PiB7XG4gIHVuaS5zZXRTdG9yYWdlU3luYygnc2VsZWN0SXRlbScsIGl0ZW0pXG5cbiAgdW5pLm5hdmlnYXRlVG8oe1xuICAgIHVybDogJy9wYWdlcy93YXliaWxsRGVsaXZlcnlPcmRlci9vcmRlckluZm8/aWQ9JyArIGl0ZW0uaWQsXG4gIH0pXG59XG5cbmNvbnN0IG9uQnV0dG9uQ2xpY2sgPSBhc3luYyAocm93OiB7IGlkOiBhbnkgfSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAodmFsdWUgPT09ICdzZW5kX291dCcpIHtcbiAgICBzZW5kT3V0KHsgaWQ6IHJvdy5pZCB9KVxuICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZGVsaXZlcmVkJykge1xuICAgIC8v56Gu6K6k6YCB6L6+XG4gICAgdXBkYXRlRGVsaXZlcmVkKHsgaWQ6IHJvdy5pZCB9KVxuICB9IGVsc2UgaWYgKHZhbHVlID09PSAncmVmdXNlJykge1xuICAgIHVwZGF0ZVJlZnVzZSh7IGlkOiByb3cuaWQgfSlcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2NyZWF0ZV90cmFja19wb2QnKSB7XG4gICAgY3JlYXRlVHJhY2tQb2QoeyBpZDogcm93LmlkIH0pXG4gIH0gZWxzZSBpZiAodmFsdWUgPT09ICdlZGl0Jykge1xuICAgIC8vIGJhVGFibGUuZm9ybS5pdGVtcyA9IHJvdztcbiAgICAvLyBiYVRhYmxlLmZvcm0ub3BlcmF0ZSA9ICdlZGl0JztcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2dlbmVyYXRlX2xhYmVsJykge1xuICAgIC8vIGJhVGFibGUuZm9ybS5pdGVtcyA9IHJvdztcbiAgICAvLyBnZW5lcmF0ZUxhYmVsRm9ybS5pZCA9IHJvdy5pZDtcbiAgICAvLyBnZW5lcmF0ZUxhYmVsVmlzaWJsZS52YWx1ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmZWRleF9hcHBvaW50bWVudF9waWNrX3VwJykge1xuICAgIC8vIGJhVGFibGUuZm9ybS5pdGVtcyA9IHJvdztcbiAgICAvLyBiYVRhYmxlLmZvcm0ub3BlcmF0ZSA9ICdGZWRFeFBpY2tVcCc7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09ICdwcmludF9nZXRfYmFja19sYWJlbCcpIHtcbiAgICAvLyB0b1ByaW50UmV0cmlldmUocm93KTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZlZGV4X2NhbmNlbF9waWNrX3VwJykge1xuICAgIGNhbmNlbEZlZEV4UGlja1VwKHsgaWQ6IHJvdy5pZCB9KVxuICB9XG59XG5cbmNvbnN0IHNlbmRPdXQgPSAoZGF0YTogeyBpZDogYW55IH0pID0+IHtcbiAgbG9hZGluZ0J0bi52YWx1ZSA9IHRydWVcbiAgdW5pLnJlcXVlc3Qoe1xuICAgIHVybDogc2VuZE91dFVSTCxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXI6IHtcbiAgICAgIGJhdG9rZW46IHRva2VuLnZhbHVlLFxuICAgIH0sXG4gICAgZGF0YTogZGF0YSxcbiAgICBzdWNjZXNzOiAoeyBkYXRhIH06IGFueSkgPT4ge1xuICAgICAgbG9hZGluZ0J0bi52YWx1ZSA9IGZhbHNlXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xuICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSAn5Y+R5Ye65oiQ5YqfJ1xuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcbiAgICB9LFxuICAgIGZhaWw6IChlcnIpID0+IHtcbiAgICAgIGxvYWRpbmdCdG4udmFsdWUgPSBmYWxzZVxuICAgICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICflj5Hlh7rlpLHotKXvvIzor7fnqI3lkI7ph43or5UnXG4gICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxuICAgIH0sXG4gIH0pXG59XG5cbmNvbnN0IHVwZGF0ZURlbGl2ZXJlZCA9IChkYXRhOiB7IGlkOiBhbnkgfSkgPT4ge1xuICBsb2FkaW5nQnRuLnZhbHVlID0gdHJ1ZVxuICB1bmkucmVxdWVzdCh7XG4gICAgdXJsOiBkZWxpdmVyZWRVUkwsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyOiB7XG4gICAgICBiYXRva2VuOiB0b2tlbi52YWx1ZSxcbiAgICB9LFxuICAgIGRhdGE6IGRhdGEsXG4gICAgc3VjY2VzczogKHsgZGF0YSB9OiBhbnkpID0+IHtcbiAgICAgIGxvYWRpbmdCdG4udmFsdWUgPSBmYWxzZVxuICAgICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnc3VjY2VzcydcbiAgICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+ehruiupOmAgei+vuaIkOWKnydcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICBsb2FkaW5nQnRuLnZhbHVlID0gZmFsc2VcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSAn56Gu6K6k6YCB6L6+5aSx6LSl77yM6K+356iN5ZCO6YeN6K+VJ1xuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcbiAgICB9LFxuICB9KVxufVxuXG5jb25zdCB1cGRhdGVSZWZ1c2UgPSAoZGF0YTogeyBpZDogYW55IH0pID0+IHtcbiAgbG9hZGluZ0J0bi52YWx1ZSA9IHRydWVcbiAgdW5pLnJlcXVlc3Qoe1xuICAgIHVybDogcmVmdXNlVVJMLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcjoge1xuICAgICAgYmF0b2tlbjogdG9rZW4udmFsdWUsXG4gICAgfSxcbiAgICBkYXRhOiBkYXRhLFxuICAgIHN1Y2Nlc3M6ICh7IGRhdGEgfTogYW55KSA9PiB7XG4gICAgICBsb2FkaW5nQnRuLnZhbHVlID0gZmFsc2VcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ3N1Y2Nlc3MnXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICflt7Lmi5Lnu53nrb7mlLYnXG4gICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxuICAgIH0sXG4gICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgbG9hZGluZ0J0bi52YWx1ZSA9IGZhbHNlXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdlcnJvcidcbiAgICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+S/ruaUueWksei0pe+8jOivt+eojeWQjumHjeivlSdcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXG4gICAgfSxcbiAgfSlcbn1cblxuY29uc3QgY3JlYXRlVHJhY2tQb2QgPSAoZGF0YTogeyBpZDogYW55IH0pID0+IHtcbiAgbG9hZGluZ0J0bi52YWx1ZSA9IHRydWVcbiAgdW5pLnJlcXVlc3Qoe1xuICAgIHVybDogY3JlYXRlVHJhY2tQb2RVUkwsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyOiB7XG4gICAgICBiYXRva2VuOiB0b2tlbi52YWx1ZSxcbiAgICB9LFxuICAgIGRhdGE6IGRhdGEsXG4gICAgc3VjY2VzczogKHsgZGF0YSB9OiBhbnkpID0+IHtcbiAgICAgIGxvYWRpbmdCdG4udmFsdWUgPSBmYWxzZVxuICAgICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnc3VjY2VzcydcbiAgICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gJ+WQjOatpeaIkOWKnydcbiAgICAgIG1lc3NhZ2VSZWYudmFsdWUub3BlbigpXG4gICAgfSxcbiAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICBsb2FkaW5nQnRuLnZhbHVlID0gZmFsc2VcbiAgICAgIG1lc3NhZ2VUeXBlLnZhbHVlID0gJ2Vycm9yJ1xuICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSAn5ZCM5q2l5aSx6LSl77yM6K+356iN5ZCO6YeN6K+VJ1xuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcbiAgICB9LFxuICB9KVxufVxuXG5jb25zdCBjYW5jZWxGZWRFeFBpY2tVcCA9IChkYXRhOiB7IGlkOiBhbnkgfSkgPT4ge1xuICBsb2FkaW5nQnRuLnZhbHVlID0gdHJ1ZVxuICB1bmkucmVxdWVzdCh7XG4gICAgdXJsOiBjYW5jZWxGZWRFeFBpY2tVcFVSTCxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXI6IHtcbiAgICAgIGJhdG9rZW46IHRva2VuLnZhbHVlLFxuICAgIH0sXG4gICAgZGF0YTogZGF0YSxcbiAgICBzdWNjZXNzOiAoeyBkYXRhIH06IGFueSkgPT4ge1xuICAgICAgbG9hZGluZ0J0bi52YWx1ZSA9IGZhbHNlXG4gICAgICBtZXNzYWdlVHlwZS52YWx1ZSA9ICdzdWNjZXNzJ1xuICAgICAgbWVzc2FnZVRleHQudmFsdWUgPSAn5pON5L2c5oiQ5YqfJ1xuICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcbiAgICB9LFxuICAgIGZhaWw6IChlcnIpID0+IHtcbiAgICAgIGxvYWRpbmdCdG4udmFsdWUgPSBmYWxzZVxuICAgICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXG4gICAgICBtZXNzYWdlVGV4dC52YWx1ZSA9ICfmk43kvZzlpLHotKXvvIzor7fnqI3lkI7ph43or5UnXG4gICAgICBtZXNzYWdlUmVmLnZhbHVlLm9wZW4oKVxuICAgIH0sXG4gIH0pXG59XG5cbmNvbnN0IGdldExpc3QgPSAoKSA9PiB7XG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlXG4gIHVuaS5yZXF1ZXN0KHtcbiAgICB1cmw6IHBpY2t1cFdheWJpbGxEZWxpdmVyeU9yZGVyVVJMICsgJy9pbmRleCcsXG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBoZWFkZXI6IHtcbiAgICAgIGJhdG9rZW46IHRva2VuLnZhbHVlLFxuICAgIH0sXG4gICAgc3VjY2VzczogKHsgZGF0YSB9OiBhbnkpID0+IHtcbiAgICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICAgICAgY29uc29sZS5sb2coZGF0YSlcbiAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSkge1xuICAgICAgICB3YXliaWxsRGVsaXZlcnkudmFsdWUgPSBkYXRhLmRhdGEubGlzdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZVR5cGUudmFsdWUgPSAnZXJyb3InXG4gICAgICAgIG1lc3NhZ2VUZXh0LnZhbHVlID0gZGF0YS5tc2dcbiAgICAgICAgbWVzc2FnZVJlZi52YWx1ZS5vcGVuKClcbiAgICAgIH1cbiAgICB9LFxuICAgIGZhaWw6IChlcnIpID0+IHtcbiAgICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxuICAgIH0sXG4gIH0pXG59XG5vbkxvYWQoKCkgPT4ge1xuICB0b2tlbi52YWx1ZSA9IHVuaS5nZXRTdG9yYWdlU3luYygndG9rZW4nKVxuICBnZXRMaXN0KClcbn0pXG5vbk5hdmlnYXRpb25CYXJCdXR0b25UYXAoKGV2ZW50KSA9PiB7XG4gIGlmIChldmVudC5pbmRleCA9PT0gMCkge1xuICAgIHNob3dSaWdodFJlZi52YWx1ZS5vcGVuKClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XG4ubGlzdCB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4OiAxO1xuXG4gIC51bmktZWFzeWlucHV0IHtcbiAgICBtYXJnaW4tdG9wOiAyMHJweDtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBycHgpO1xuICB9XG5cbiAgLml0ZW0ge1xuICAgIG1hcmdpbi10b3A6IDIwcnB4O1xuICAgIHdpZHRoOiA5NSU7XG4gICAgYm94LXNoYWRvdzogMCA1cnB4IDE1cnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICBib3JkZXItcmFkaXVzOiAyMHJweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXG4gICAgLm9yZGVyLW5vIHtcbiAgICAgIHBhZGRpbmc6IDE0cnB4O1xuICAgICAgZm9udC1zaXplOiAxNnJweDtcbiAgICB9XG5cbiAgICAuaWNvbiB7XG4gICAgICBtYXJnaW4tbGVmdDogNXJweDtcbiAgICAgIHdpZHRoOiAyNHJweDtcbiAgICAgIGhlaWdodDogMjRycHg7XG4gICAgfVxuXG4gICAgLmFkZHJlc3MtaW5mbyB7XG4gICAgICBwYWRkaW5nOiAxNHJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZycHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHJweDtcblxuICAgICAgLmluZm8ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgICAgIC51c2VyIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHJweDtcbiAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hZGRyZXNzIHtcbiAgICAgICAgICAuY2l0eSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDMwcnB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5pcy1lbXB0eSB7XG4gICAgbWFyZ2luLXRvcDogMjBycHg7XG4gIH1cbn1cblxuLm9wZXJhdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICB3aWR0aDogMTAwJTtcblxuICBidXR0b24ge1xuICAgIGZvbnQtc2l6ZTogMTZycHg7XG4gICAgbWFyZ2luOiAxMHJweDtcbiAgfVxufVxuXG4uYnV0dG9uLWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG5cbiAgYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAzNXB4O1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgZm9udC1zaXplOiAxNnJweDtcbiAgfVxuXG4gIC51bmktaWNvbnMge1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHVzZU1lbWJlclN0b3JlIH0gZnJvbSAnQC9zdG9yZXMnXHJcblxyXG5jb25zdCBtZW1iZXJTdG9yZSA9IHVzZU1lbWJlclN0b3JlKClcclxuLy8g6YCA5Ye655m75b2VXHJcbmNvbnN0IG9uTG9nb3V0ID0gKCkgPT4ge1xyXG4gIC8vIOaooeaAgeW8ueeql1xyXG4gIHVuaS5zaG93TW9kYWwoe1xyXG4gICAgY29udGVudDogJ+aYr+WQpumAgOWHuueZu+W9le+8nycsXHJcbiAgICBjb25maXJtQ29sb3I6ICcjMjdCQTlCJyxcclxuICAgIHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAgICAgLy8g5riF55CG55So5oi35L+h5oGvXHJcbiAgICAgICAgbWVtYmVyU3RvcmUuY2xlYXJQcm9maWxlKClcclxuICAgICAgICAvLyDov5Tlm57kuIrkuIDpobVcclxuICAgICAgICB1bmkubmF2aWdhdGVCYWNrKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDwhLS0g5YiX6KGoMSAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwibGlzdFwiIHYtaWY9XCJtZW1iZXJTdG9yZS5wcm9maWxlXCI+XHJcbiAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzTWVtYmVyL2FkZHJlc3MvYWRkcmVzc1wiIGhvdmVyLWNsYXNzPVwibm9uZVwiIGNsYXNzPVwiaXRlbSBhcnJvd1wiPlxyXG4gICAgICAgIOaIkeeahOaUtui0p+WcsOWdgFxyXG4gICAgICA8L25hdmlnYXRvcj5cclxuICAgIDwvdmlldz5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgPCEtLSDliJfooagzIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJsaXN0XCI+XHJcbiAgICAgIDxidXR0b24gaG92ZXItY2xhc3M9XCJub25lXCIgY2xhc3M9XCJpdGVtIGFycm93XCI+5YWz5LqO6Iux6YCU5LuT5bqTPC9idXR0b24+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tIOaTjeS9nOaMiemSriAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiYWN0aW9uXCIgdi1pZj1cIm1lbWJlclN0b3JlLnByb2ZpbGVcIj5cclxuICAgICAgPHZpZXcgQHRhcD1cIm9uTG9nb3V0XCIgY2xhc3M9XCJidXR0b25cIj7pgIDlh7rnmbvlvZU8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbnBhZ2Uge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XHJcbn1cclxuXHJcbi52aWV3cG9ydCB7XHJcbiAgcGFkZGluZzogMjBycHg7XHJcbn1cclxuXHJcbi8qIOWIl+ihqCAqL1xyXG4ubGlzdCB7XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIG1hcmdpbi1ib3R0b206IDIwcnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIC5pdGVtIHtcclxuICAgIGxpbmUtaGVpZ2h0OiA5MHJweDtcclxuICAgIHBhZGRpbmctbGVmdDogMTBycHg7XHJcbiAgICBmb250LXNpemU6IDMwcnB4O1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgICBib3JkZXItdG9wOiAxcnB4IHNvbGlkICNkZGQ7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAmOjphZnRlciB7XHJcbiAgICAgIHdpZHRoOiBhdXRvO1xyXG4gICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgIGxlZnQ6IGF1dG87XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgIH1cclxuICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAmOjphZnRlciB7XHJcbiAgICAgIHJpZ2h0OiA1cnB4O1xyXG4gICAgfVxyXG4gIH1cclxuICAuYXJyb3c6OmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICdcXGU2YzInO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICBjb2xvcjogI2NjYztcclxuICAgIGZvbnQtZmFtaWx5OiAnZXJhYmJpdCcgIWltcG9ydGFudDtcclxuICAgIGZvbnQtc2l6ZTogMzJycHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKiDmk43kvZzmjInpkq4gKi9cclxuLmFjdGlvbiB7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGxpbmUtaGVpZ2h0OiA5MHJweDtcclxuICBtYXJnaW4tdG9wOiA0MHJweDtcclxuICBmb250LXNpemU6IDMycnB4O1xyXG4gIGNvbG9yOiAjMzMzO1xyXG4gIC5idXR0b24ge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgIG1hcmdpbi1ib3R0b206IDIwcnB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHVzZU1lbWJlclN0b3JlIH0gZnJvbSAnQC9zdG9yZXMnXHJcblxyXG5jb25zdCBtZW1iZXJTdG9yZSA9IHVzZU1lbWJlclN0b3JlKClcclxuLy8g6YCA5Ye655m75b2VXHJcbmNvbnN0IG9uTG9nb3V0ID0gKCkgPT4ge1xyXG4gIC8vIOaooeaAgeW8ueeql1xyXG4gIHVuaS5zaG93TW9kYWwoe1xyXG4gICAgY29udGVudDogJ+aYr+WQpumAgOWHuueZu+W9le+8nycsXHJcbiAgICBjb25maXJtQ29sb3I6ICcjMjdCQTlCJyxcclxuICAgIHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAgICAgLy8g5riF55CG55So5oi35L+h5oGvXHJcbiAgICAgICAgbWVtYmVyU3RvcmUuY2xlYXJQcm9maWxlKClcclxuICAgICAgICAvLyDov5Tlm57kuIrkuIDpobVcclxuICAgICAgICB1bmkubmF2aWdhdGVCYWNrKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDwhLS0g5YiX6KGoMSAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwibGlzdFwiIHYtaWY9XCJtZW1iZXJTdG9yZS5wcm9maWxlXCI+XHJcbiAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiL3BhZ2VzTWVtYmVyL2FkZHJlc3MvYWRkcmVzc1wiIGhvdmVyLWNsYXNzPVwibm9uZVwiIGNsYXNzPVwiaXRlbSBhcnJvd1wiPlxyXG4gICAgICAgIOaIkeeahOaUtui0p+WcsOWdgFxyXG4gICAgICA8L25hdmlnYXRvcj5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0gI2lmZGVmIE1QLVdFSVhJTiAtLT5cclxuICAgIDwhLS0g5YiX6KGoMiAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwibGlzdFwiPlxyXG4gICAgICA8YnV0dG9uIGhvdmVyLWNsYXNzPVwibm9uZVwiIGNsYXNzPVwiaXRlbSBhcnJvd1wiIG9wZW4tdHlwZT1cIm9wZW5TZXR0aW5nXCI+5o6I5p2D566h55CGPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gaG92ZXItY2xhc3M9XCJub25lXCIgY2xhc3M9XCJpdGVtIGFycm93XCIgb3Blbi10eXBlPVwiZmVlZGJhY2tcIj7pl67popjlj43ppog8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBob3Zlci1jbGFzcz1cIm5vbmVcIiBjbGFzcz1cIml0ZW0gYXJyb3dcIiBvcGVuLXR5cGU9XCJjb250YWN0XCI+6IGU57O75oiR5LusPC9idXR0b24+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tICNlbmRpZiAtLT5cclxuICAgIDwhLS0g5YiX6KGoMyAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwibGlzdFwiPlxyXG4gICAgICA8YnV0dG9uIGhvdmVyLWNsYXNzPVwibm9uZVwiIGNsYXNzPVwiaXRlbSBhcnJvd1wiPuWFs+S6juiLsemAlOS7k+W6kzwvYnV0dG9uPlxyXG4gICAgPC92aWV3PlxyXG4gICAgPCEtLSDmk43kvZzmjInpkq4gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cImFjdGlvblwiIHYtaWY9XCJtZW1iZXJTdG9yZS5wcm9maWxlXCI+XHJcbiAgICAgIDx2aWV3IEB0YXA9XCJvbkxvZ291dFwiIGNsYXNzPVwiYnV0dG9uXCI+6YCA5Ye655m75b2VPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIHBhZGRpbmc6IDIwcnB4O1xyXG59XHJcblxyXG4vKiDliJfooaggKi9cclxuLmxpc3Qge1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICAuaXRlbSB7XHJcbiAgICBsaW5lLWhlaWdodDogOTBycHg7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcnB4O1xyXG4gICAgZm9udC1zaXplOiAzMHJweDtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgYm9yZGVyLXRvcDogMXJweCBzb2xpZCAjZGRkO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgJjo6YWZ0ZXIge1xyXG4gICAgICB3aWR0aDogYXV0bztcclxuICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICBsZWZ0OiBhdXRvO1xyXG4gICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgfVxyXG4gICAgJjo6YWZ0ZXIge1xyXG4gICAgICByaWdodDogNXJweDtcclxuICAgIH1cclxuICB9XHJcbiAgLmFycm93OjphZnRlciB7XHJcbiAgICBjb250ZW50OiAnXFxlNmMyJztcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgY29sb3I6ICNjY2M7XHJcbiAgICBmb250LWZhbWlseTogJ2VyYWJiaXQnICFpbXBvcnRhbnQ7XHJcbiAgICBmb250LXNpemU6IDMycnB4O1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gIH1cclxufVxyXG5cclxuLyog5pON5L2c5oyJ6ZKuICovXHJcbi5hY3Rpb24ge1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBsaW5lLWhlaWdodDogOTBycHg7XHJcbiAgbWFyZ2luLXRvcDogNDBycHg7XHJcbiAgZm9udC1zaXplOiAzMnJweDtcclxuICBjb2xvcjogIzMzMztcclxuICAuYnV0dG9uIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgdHlwZSB7IFByb2ZpbGVEZXRhaWwsIFByb2ZpbGVQYXJhbXMgfSBmcm9tICdAL3R5cGVzL21lbWJlcidcclxuaW1wb3J0IHsgaHR0cCB9IGZyb20gJ0AvdXRpbHMvaHR0cCdcclxuXHJcbi8qKlxyXG4gKiDojrflj5bkuKrkurrkv6Hmga9cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRNZW1iZXJQcm9maWxlQVBJID0gKCkgPT4ge1xyXG4gIHJldHVybiBodHRwPFByb2ZpbGVEZXRhaWw+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6ICcvbWVtYmVyL3Byb2ZpbGUnLFxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDkv67mlLnkuKrkurrkv6Hmga9cclxuICogQHBhcmFtIGRhdGEg6K+35rGC5L2T5Y+C5pWwXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcHV0TWVtYmVyUHJvZmlsZUFQSSA9IChkYXRhOiBQcm9maWxlUGFyYW1zKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8UHJvZmlsZURldGFpbD4oe1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogJy9tZW1iZXIvcHJvZmlsZScsXHJcbiAgICBkYXRhLFxyXG4gIH0pXHJcbn1cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgZ2V0TWVtYmVyUHJvZmlsZUFQSSwgcHV0TWVtYmVyUHJvZmlsZUFQSSB9IGZyb20gJ0Avc2VydmljZXMvcHJvZmlsZSdcclxuaW1wb3J0IHsgdXNlTWVtYmVyU3RvcmUgfSBmcm9tICdAL3N0b3JlcydcclxuaW1wb3J0IHR5cGUgeyBHZW5kZXIsIFByb2ZpbGVEZXRhaWwgfSBmcm9tICdAL3R5cGVzL21lbWJlcidcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0AvdXRpbHMnXHJcbmltcG9ydCB7IG9uTG9hZCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnXHJcblxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuXHJcbi8vIOiOt+WPluS4quS6uuS/oeaBr++8jOS/ruaUueS4quS6uuS/oeaBr+mcgOaPkOS+m+WIneWni+WAvFxyXG5jb25zdCBwcm9maWxlID0gcmVmKHt9IGFzIFByb2ZpbGVEZXRhaWwpXHJcbmNvbnN0IGdldE1lbWJlclByb2ZpbGVEYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldE1lbWJlclByb2ZpbGVBUEkoKVxyXG4gIHByb2ZpbGUudmFsdWUgPSByZXMucmVzdWx0XHJcbiAgLy8g5ZCM5q2lIFN0b3JlIOeahOWktOWDj+WSjOaYteensO+8jOeUqOS6juaIkeeahOmhtemdouWxleekulxyXG4gIG1lbWJlclN0b3JlLnByb2ZpbGUhLmF2YXRhciA9IHJlcy5yZXN1bHQuYXZhdGFyXHJcbiAgbWVtYmVyU3RvcmUucHJvZmlsZSEubmlja25hbWUgPSByZXMucmVzdWx0Lm5pY2tuYW1lXHJcbn1cclxuXHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0TWVtYmVyUHJvZmlsZURhdGEoKVxyXG59KVxyXG5cclxuY29uc3QgbWVtYmVyU3RvcmUgPSB1c2VNZW1iZXJTdG9yZSgpXHJcbi8vIOS/ruaUueWktOWDj1xyXG5jb25zdCBvbkF2YXRhckNoYW5nZSA9ICgpID0+IHtcclxuICAvLyDosIPnlKjmi43nhacv6YCJ5oup5Zu+54mHXHJcbiAgLy8g6YCJ5oup5Zu+54mH5p2h5Lu257yW6K+RXHJcblxyXG4gIC8vIOW+ruS/oeWwj+eoi+W6j+S7juWfuuehgOW6kyAyLjIxLjAg5byA5aeL77yMIHd4LmNob29zZUltYWdlIOWBnOatoue7tOaKpO+8jOivt+S9v+eUqCB1bmkuY2hvb3NlTWVkaWEg5Luj5pu/XHJcbiAgdW5pLmNob29zZUltYWdlKHtcclxuICAgIGNvdW50OiAxLFxyXG4gICAgc3VjY2VzczogKHJlcykgPT4ge1xyXG4gICAgICAvLyDmlofku7bot6/lvoRcclxuICAgICAgY29uc3QgdGVtcEZpbGVQYXRocyA9IHJlcy50ZW1wRmlsZVBhdGhzXHJcbiAgICAgIC8vIOS4iuS8oFxyXG4gICAgICB1cGxvYWRGaWxlKHRlbXBGaWxlUGF0aHNbMF0pXHJcbiAgICB9LFxyXG4gIH0pXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxufVxyXG5cclxuLy8g5paH5Lu25LiK5LygLeWFvOWuueWwj+eoi+W6j+err+OAgUg156uv44CBQXBw56uvXHJcbmNvbnN0IHVwbG9hZEZpbGUgPSAoZmlsZTogc3RyaW5nKSA9PiB7XHJcbiAgLy8g5paH5Lu25LiK5LygXHJcbiAgdW5pLnVwbG9hZEZpbGUoe1xyXG4gICAgdXJsOiAnL21lbWJlci9wcm9maWxlL2F2YXRhcicsXHJcbiAgICBuYW1lOiAnZmlsZScsXHJcbiAgICBmaWxlUGF0aDogZmlsZSxcclxuICAgIHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICBjb25zdCBhdmF0YXIgPSBKU09OLnBhcnNlKHJlcy5kYXRhKS5yZXN1bHQuYXZhdGFyXHJcbiAgICAgICAgLy8g5Liq5Lq65L+h5oGv6aG15pWw5o2u5pu05pawXHJcbiAgICAgICAgcHJvZmlsZS52YWx1ZSEuYXZhdGFyID0gYXZhdGFyXHJcbiAgICAgICAgLy8gU3RvcmXlpLTlg4/mm7TmlrBcclxuICAgICAgICBtZW1iZXJTdG9yZS5wcm9maWxlIS5hdmF0YXIgPSBhdmF0YXJcclxuICAgICAgICB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ3N1Y2Nlc3MnLCB0aXRsZTogJ+abtOaWsOaIkOWKnycgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ2Vycm9yJywgdGl0bGU6ICflh7rnjrDplJnor68nIH0pXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5cclxuLy8g5L+u5pS55oCn5YirXHJcbmNvbnN0IG9uR2VuZGVyQ2hhbmdlOiBVbmlIZWxwZXIuUmFkaW9Hcm91cE9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgcHJvZmlsZS52YWx1ZS5nZW5kZXIgPSBldi5kZXRhaWwudmFsdWUgYXMgR2VuZGVyXHJcbn1cclxuXHJcbi8vIOS/ruaUueeUn+aXpVxyXG5jb25zdCBvbkJpcnRoZGF5Q2hhbmdlOiBVbmlIZWxwZXIuRGF0ZVBpY2tlck9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgcHJvZmlsZS52YWx1ZS5iaXJ0aGRheSA9IGV2LmRldGFpbC52YWx1ZVxyXG59XHJcblxyXG4vLyDkv67mlLnln47luIJcclxubGV0IGZ1bGxMb2NhdGlvbkNvZGU6IFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSA9IFsnJywgJycsICcnXVxyXG5jb25zdCBvbkZ1bGxMb2NhdGlvbkNoYW5nZTogVW5pSGVscGVyLlJlZ2lvblBpY2tlck9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgLy8g5L+u5pS55YmN56uv55WM6Z2iXHJcbiAgcHJvZmlsZS52YWx1ZS5mdWxsTG9jYXRpb24gPSBldi5kZXRhaWwudmFsdWUuam9pbignICcpXHJcbiAgLy8g5o+Q5Lqk5ZCO56uv5pu05pawXHJcbiAgZnVsbExvY2F0aW9uQ29kZSA9IGV2LmRldGFpbC5jb2RlIVxyXG59XHJcblxyXG4vLyDngrnlh7vkv53lrZjmj5DkuqTooajljZVcclxuY29uc3Qgb25TdWJtaXQgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgeyBuaWNrbmFtZSwgZ2VuZGVyLCBiaXJ0aGRheSB9ID0gcHJvZmlsZS52YWx1ZVxyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IHB1dE1lbWJlclByb2ZpbGVBUEkoe1xyXG4gICAgbmlja25hbWUsXHJcbiAgICBnZW5kZXIsXHJcbiAgICBiaXJ0aGRheSxcclxuICAgIHByb3ZpbmNlQ29kZTogZnVsbExvY2F0aW9uQ29kZVswXSxcclxuICAgIGNpdHlDb2RlOiBmdWxsTG9jYXRpb25Db2RlWzFdLFxyXG4gICAgY291bnR5Q29kZTogZnVsbExvY2F0aW9uQ29kZVsyXSxcclxuICB9KVxyXG4gIC8vIOabtOaWsFN0b3Jl5pi156ewXHJcbiAgbWVtYmVyU3RvcmUucHJvZmlsZSEubmlja25hbWUgPSByZXMucmVzdWx0Lm5pY2tuYW1lXHJcbiAgdW5pLnNob3dUb2FzdCh7IGljb246ICdzdWNjZXNzJywgdGl0bGU6ICfkv53lrZjmiJDlip8nIH0pXHJcbiAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICB1bmkubmF2aWdhdGVCYWNrKClcclxuICB9LCA0MDApXHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPCEtLSDlr7zoiKrmoI8gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cIm5hdmJhclwiIDpzdHlsZT1cInsgcGFkZGluZ1RvcDogc2FmZUFyZWFJbnNldHM/LnRvcCArICdweCcgfVwiPlxyXG4gICAgICA8bmF2aWdhdG9yIG9wZW4tdHlwZT1cIm5hdmlnYXRlQmFja1wiIGNsYXNzPVwiYmFjayBpY29uLWxlZnRcIiBob3Zlci1jbGFzcz1cIm5vbmVcIj48L25hdmlnYXRvcj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPuS4quS6uuS/oeaBrzwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g5aS05YOPIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJhdmF0YXJcIj5cclxuICAgICAgPHZpZXcgQHRhcD1cIm9uQXZhdGFyQ2hhbmdlXCIgY2xhc3M9XCJhdmF0YXItY29udGVudFwiPlxyXG4gICAgICAgIDxpbWFnZSBjbGFzcz1cImltYWdlXCIgOnNyYz1cInByb2ZpbGU/LmF2YXRhclwiIG1vZGU9XCJhc3BlY3RGaWxsXCIgLz5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cInRleHRcIj7ngrnlh7vkv67mlLnlpLTlg488L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g6KGo5Y2VIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgIDwhLS0g6KGo5Y2V5YaF5a65IC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cImZvcm0tY29udGVudFwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1pdGVtXCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+6LSm5Y+3PC90ZXh0PlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJhY2NvdW50IHBsYWNlaG9sZGVyXCI+e3sgcHJvZmlsZT8uYWNjb3VudCB9fTwvdGV4dD5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJmb3JtLWl0ZW1cIj5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibGFiZWxcIj7mmLXnp7A8L3RleHQ+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCLor7floavlhpnmmLXnp7BcIiB2LW1vZGVsPVwicHJvZmlsZSEubmlja25hbWVcIiAvPlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJsYWJlbFwiPuaAp+WIqzwvdGV4dD5cclxuICAgICAgICAgIDxyYWRpby1ncm91cCBAY2hhbmdlPVwib25HZW5kZXJDaGFuZ2VcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICA8cmFkaW8gdmFsdWU9XCLnlLdcIiBjb2xvcj1cIiMyN2JhOWJcIiA6Y2hlY2tlZD1cInByb2ZpbGU/LmdlbmRlciA9PT0gJ+eUtydcIiAvPlxyXG4gICAgICAgICAgICAgIOeUt1xyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgIDxyYWRpbyB2YWx1ZT1cIuWls1wiIGNvbG9yPVwiIzI3YmE5YlwiIDpjaGVja2VkPVwicHJvZmlsZT8uZ2VuZGVyID09PSAn5aWzJ1wiIC8+XHJcbiAgICAgICAgICAgICAg5aWzXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8L3JhZGlvLWdyb3VwPlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJsYWJlbFwiPueUn+aXpTwvdGV4dD5cclxuICAgICAgICAgIDxwaWNrZXJcclxuICAgICAgICAgICAgQGNoYW5nZT1cIm9uQmlydGhkYXlDaGFuZ2VcIlxyXG4gICAgICAgICAgICBtb2RlPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicGlja2VyXCJcclxuICAgICAgICAgICAgOnZhbHVlPVwicHJvZmlsZT8uYmlydGhkYXlcIlxyXG4gICAgICAgICAgICBzdGFydD1cIjE5MDAtMDEtMDFcIlxyXG4gICAgICAgICAgICA6ZW5kPVwiZm9ybWF0RGF0ZShuZXcgRGF0ZSgpKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx2aWV3IHYtaWY9XCJwcm9maWxlPy5iaXJ0aGRheVwiPnt7IHByb2ZpbGU/LmJpcnRoZGF5IH19PC92aWV3PlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInBsYWNlaG9sZGVyXCIgdi1lbHNlPuivt+mAieaLqeaXpeacnzwvdmlldz5cclxuICAgICAgICAgIDwvcGlja2VyPlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8IS0tIOWPquacieW+ruS/oeWwj+eoi+W6j+err+WGhee9ruS6huecgeW4guWMuuaVsOaNriAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1pdGVtXCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+6IGM5LiaPC90ZXh0PlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwi6K+35aGr5YaZ6IGM5LiaXCIgOnZhbHVlPVwicHJvZmlsZT8ucHJvZmVzc2lvblwiIC8+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDwhLS0g5o+Q5Lqk5oyJ6ZKuIC0tPlxyXG4gICAgICA8YnV0dG9uIEB0YXA9XCJvblN1Ym1pdFwiIGNsYXNzPVwiZm9ybS1idXR0b25cIj7kv50g5a2YPC9idXR0b24+XHJcbiAgICA8L3ZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbnBhZ2Uge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XHJcbn1cclxuXHJcbi52aWV3cG9ydCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly9wY2FwaS14aWFvdHV4aWFuLWZyb250LWRldnRlc3QuaXRoZWltYS5uZXQvbWluaWFwcC9pbWFnZXMvb3JkZXJfYmcucG5nKTtcclxuICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gNDIwcnB4O1xyXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbn1cclxuXHJcbi8vIOWvvOiIquagj1xyXG4ubmF2YmFyIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgIGNvbG9yOiAjZmZmO1xyXG4gIH1cclxuXHJcbiAgLmJhY2sge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgaGVpZ2h0OiA0MHB4O1xyXG4gICAgd2lkdGg6IDQwcHg7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgZm9udC1zaXplOiAyMHB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIH1cclxufVxyXG5cclxuLy8g5aS05YOPXHJcbi5hdmF0YXIge1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDI2MHJweDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgLmltYWdlIHtcclxuICAgIHdpZHRoOiAxNjBycHg7XHJcbiAgICBoZWlnaHQ6IDE2MHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XHJcbiAgfVxyXG5cclxuICAudGV4dCB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHBhZGRpbmctdG9wOiAyMHJweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGNvbG9yOiAjZmZmO1xyXG4gIH1cclxufVxyXG5cclxuLy8g6KGo5Y2VXHJcbi5mb3JtIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xyXG5cclxuICAmLWNvbnRlbnQge1xyXG4gICAgbWFyZ2luOiAyMHJweCAyMHJweCAwO1xyXG4gICAgcGFkZGluZzogMCAyMHJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICB9XHJcblxyXG4gICYtaXRlbSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgaGVpZ2h0OiA5NnJweDtcclxuICAgIGxpbmUtaGVpZ2h0OiA0NnJweDtcclxuICAgIHBhZGRpbmc6IDI1cnB4IDEwcnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcnB4IHNvbGlkICNkZGQ7XHJcblxyXG4gICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIC5sYWJlbCB7XHJcbiAgICAgIHdpZHRoOiAxODBycHg7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgfVxyXG5cclxuICAgIC5hY2NvdW50IHtcclxuICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0IHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIGhlaWdodDogNDZycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLnJhZGlvIHtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAyMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAucGlja2VyIHtcclxuICAgICAgZmxleDogMTtcclxuICAgIH1cclxuICAgIC5wbGFjZWhvbGRlciB7XHJcbiAgICAgIGNvbG9yOiAjODA4MDgwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJi1idXR0b24ge1xyXG4gICAgaGVpZ2h0OiA4MHJweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGxpbmUtaGVpZ2h0OiA4MHJweDtcclxuICAgIG1hcmdpbjogMzBycHggMjBycHg7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuICAgIGJvcmRlci1yYWRpdXM6IDgwcnB4O1xyXG4gICAgZm9udC1zaXplOiAzMHJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IGdldE1lbWJlclByb2ZpbGVBUEksIHB1dE1lbWJlclByb2ZpbGVBUEkgfSBmcm9tICdAL3NlcnZpY2VzL3Byb2ZpbGUnXHJcbmltcG9ydCB7IHVzZU1lbWJlclN0b3JlIH0gZnJvbSAnQC9zdG9yZXMnXHJcbmltcG9ydCB0eXBlIHsgR2VuZGVyLCBQcm9maWxlRGV0YWlsIH0gZnJvbSAnQC90eXBlcy9tZW1iZXInXHJcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAL3V0aWxzJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLy8g6I635Y+W5bGP5bmV6L6555WM5Yiw5a6J5YWo5Yy65Z+f6Led56a7XHJcbmNvbnN0IHsgc2FmZUFyZWFJbnNldHMgfSA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpXHJcblxyXG4vLyDojrflj5bkuKrkurrkv6Hmga/vvIzkv67mlLnkuKrkurrkv6Hmga/pnIDmj5DkvpvliJ3lp4vlgLxcclxuY29uc3QgcHJvZmlsZSA9IHJlZih7fSBhcyBQcm9maWxlRGV0YWlsKVxyXG5jb25zdCBnZXRNZW1iZXJQcm9maWxlRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJQcm9maWxlQVBJKClcclxuICBwcm9maWxlLnZhbHVlID0gcmVzLnJlc3VsdFxyXG4gIC8vIOWQjOatpSBTdG9yZSDnmoTlpLTlg4/lkozmmLXnp7DvvIznlKjkuo7miJHnmoTpobXpnaLlsZXnpLpcclxuICBtZW1iZXJTdG9yZS5wcm9maWxlIS5hdmF0YXIgPSByZXMucmVzdWx0LmF2YXRhclxyXG4gIG1lbWJlclN0b3JlLnByb2ZpbGUhLm5pY2tuYW1lID0gcmVzLnJlc3VsdC5uaWNrbmFtZVxyXG59XHJcblxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIGdldE1lbWJlclByb2ZpbGVEYXRhKClcclxufSlcclxuXHJcbmNvbnN0IG1lbWJlclN0b3JlID0gdXNlTWVtYmVyU3RvcmUoKVxyXG4vLyDkv67mlLnlpLTlg49cclxuY29uc3Qgb25BdmF0YXJDaGFuZ2UgPSAoKSA9PiB7XHJcbiAgLy8g6LCD55So5ouN54WnL+mAieaLqeWbvueJh1xyXG4gIC8vIOmAieaLqeWbvueJh+adoeS7tue8luivkVxyXG4gIC8vICNpZmRlZiBINSB8fCBBUFAtUExVU1xyXG4gIC8vIOW+ruS/oeWwj+eoi+W6j+S7juWfuuehgOW6kyAyLjIxLjAg5byA5aeL77yMIHd4LmNob29zZUltYWdlIOWBnOatoue7tOaKpO+8jOivt+S9v+eUqCB1bmkuY2hvb3NlTWVkaWEg5Luj5pu/XHJcbiAgdW5pLmNob29zZUltYWdlKHtcclxuICAgIGNvdW50OiAxLFxyXG4gICAgc3VjY2VzczogKHJlcykgPT4ge1xyXG4gICAgICAvLyDmlofku7bot6/lvoRcclxuICAgICAgY29uc3QgdGVtcEZpbGVQYXRocyA9IHJlcy50ZW1wRmlsZVBhdGhzXHJcbiAgICAgIC8vIOS4iuS8oFxyXG4gICAgICB1cGxvYWRGaWxlKHRlbXBGaWxlUGF0aHNbMF0pXHJcbiAgICB9LFxyXG4gIH0pXHJcbiAgLy8gI2VuZGlmXHJcblxyXG4gIC8vICNpZmRlZiBNUC1XRUlYSU5cclxuICAvLyB1bmkuY2hvb3NlTWVkaWEg5LuF5pSv5oyB5b6u5L+h5bCP56iL5bqP56uvXHJcbiAgdW5pLmNob29zZU1lZGlhKHtcclxuICAgIC8vIOaWh+S7tuS4quaVsFxyXG4gICAgY291bnQ6IDEsXHJcbiAgICAvLyDmlofku7bnsbvlnotcclxuICAgIG1lZGlhVHlwZTogWydpbWFnZSddLFxyXG4gICAgc3VjY2VzczogKHJlcykgPT4ge1xyXG4gICAgICAvLyDmnKzlnLDot6/lvoRcclxuICAgICAgY29uc3QgeyB0ZW1wRmlsZVBhdGggfSA9IHJlcy50ZW1wRmlsZXNbMF1cclxuICAgICAgLy8g5LiK5LygXHJcbiAgICAgIHVwbG9hZEZpbGUodGVtcEZpbGVQYXRoKVxyXG4gICAgfSxcclxuICB9KVxyXG4gIC8vICNlbmRpZlxyXG59XHJcblxyXG4vLyDmlofku7bkuIrkvKAt5YW85a655bCP56iL5bqP56uv44CBSDXnq6/jgIFBcHDnq69cclxuY29uc3QgdXBsb2FkRmlsZSA9IChmaWxlOiBzdHJpbmcpID0+IHtcclxuICAvLyDmlofku7bkuIrkvKBcclxuICB1bmkudXBsb2FkRmlsZSh7XHJcbiAgICB1cmw6ICcvbWVtYmVyL3Byb2ZpbGUvYXZhdGFyJyxcclxuICAgIG5hbWU6ICdmaWxlJyxcclxuICAgIGZpbGVQYXRoOiBmaWxlLFxyXG4gICAgc3VjY2VzczogKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgIGNvbnN0IGF2YXRhciA9IEpTT04ucGFyc2UocmVzLmRhdGEpLnJlc3VsdC5hdmF0YXJcclxuICAgICAgICAvLyDkuKrkurrkv6Hmga/pobXmlbDmja7mm7TmlrBcclxuICAgICAgICBwcm9maWxlLnZhbHVlIS5hdmF0YXIgPSBhdmF0YXJcclxuICAgICAgICAvLyBTdG9yZeWktOWDj+abtOaWsFxyXG4gICAgICAgIG1lbWJlclN0b3JlLnByb2ZpbGUhLmF2YXRhciA9IGF2YXRhclxyXG4gICAgICAgIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnc3VjY2VzcycsIHRpdGxlOiAn5pu05paw5oiQ5YqfJyB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnZXJyb3InLCB0aXRsZTogJ+WHuueOsOmUmeivrycgfSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcblxyXG4vLyDkv67mlLnmgKfliKtcclxuY29uc3Qgb25HZW5kZXJDaGFuZ2U6IFVuaUhlbHBlci5SYWRpb0dyb3VwT25DaGFuZ2UgPSAoZXYpID0+IHtcclxuICBwcm9maWxlLnZhbHVlLmdlbmRlciA9IGV2LmRldGFpbC52YWx1ZSBhcyBHZW5kZXJcclxufVxyXG5cclxuLy8g5L+u5pS555Sf5pelXHJcbmNvbnN0IG9uQmlydGhkYXlDaGFuZ2U6IFVuaUhlbHBlci5EYXRlUGlja2VyT25DaGFuZ2UgPSAoZXYpID0+IHtcclxuICBwcm9maWxlLnZhbHVlLmJpcnRoZGF5ID0gZXYuZGV0YWlsLnZhbHVlXHJcbn1cclxuXHJcbi8vIOS/ruaUueWfjuW4glxyXG5sZXQgZnVsbExvY2F0aW9uQ29kZTogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gWycnLCAnJywgJyddXHJcbmNvbnN0IG9uRnVsbExvY2F0aW9uQ2hhbmdlOiBVbmlIZWxwZXIuUmVnaW9uUGlja2VyT25DaGFuZ2UgPSAoZXYpID0+IHtcclxuICAvLyDkv67mlLnliY3nq6/nlYzpnaJcclxuICBwcm9maWxlLnZhbHVlLmZ1bGxMb2NhdGlvbiA9IGV2LmRldGFpbC52YWx1ZS5qb2luKCcgJylcclxuICAvLyDmj5DkuqTlkI7nq6/mm7TmlrBcclxuICBmdWxsTG9jYXRpb25Db2RlID0gZXYuZGV0YWlsLmNvZGUhXHJcbn1cclxuXHJcbi8vIOeCueWHu+S/neWtmOaPkOS6pOihqOWNlVxyXG5jb25zdCBvblN1Ym1pdCA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCB7IG5pY2tuYW1lLCBnZW5kZXIsIGJpcnRoZGF5IH0gPSBwcm9maWxlLnZhbHVlXHJcbiAgY29uc3QgcmVzID0gYXdhaXQgcHV0TWVtYmVyUHJvZmlsZUFQSSh7XHJcbiAgICBuaWNrbmFtZSxcclxuICAgIGdlbmRlcixcclxuICAgIGJpcnRoZGF5LFxyXG4gICAgcHJvdmluY2VDb2RlOiBmdWxsTG9jYXRpb25Db2RlWzBdLFxyXG4gICAgY2l0eUNvZGU6IGZ1bGxMb2NhdGlvbkNvZGVbMV0sXHJcbiAgICBjb3VudHlDb2RlOiBmdWxsTG9jYXRpb25Db2RlWzJdLFxyXG4gIH0pXHJcbiAgLy8g5pu05pawU3RvcmXmmLXnp7BcclxuICBtZW1iZXJTdG9yZS5wcm9maWxlIS5uaWNrbmFtZSA9IHJlcy5yZXN1bHQubmlja25hbWVcclxuICB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ3N1Y2Nlc3MnLCB0aXRsZTogJ+S/neWtmOaIkOWKnycgfSlcclxuICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIHVuaS5uYXZpZ2F0ZUJhY2soKVxyXG4gIH0sIDQwMClcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cInZpZXdwb3J0XCI+XHJcbiAgICA8IS0tIOWvvOiIquagjyAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwibmF2YmFyXCIgOnN0eWxlPVwieyBwYWRkaW5nVG9wOiBzYWZlQXJlYUluc2V0cz8udG9wICsgJ3B4JyB9XCI+XHJcbiAgICAgIDxuYXZpZ2F0b3Igb3Blbi10eXBlPVwibmF2aWdhdGVCYWNrXCIgY2xhc3M9XCJiYWNrIGljb24tbGVmdFwiIGhvdmVyLWNsYXNzPVwibm9uZVwiPjwvbmF2aWdhdG9yPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInRpdGxlXCI+5Liq5Lq65L+h5oGvPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPCEtLSDlpLTlg48gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cImF2YXRhclwiPlxyXG4gICAgICA8dmlldyBAdGFwPVwib25BdmF0YXJDaGFuZ2VcIiBjbGFzcz1cImF2YXRhci1jb250ZW50XCI+XHJcbiAgICAgICAgPGltYWdlIGNsYXNzPVwiaW1hZ2VcIiA6c3JjPVwicHJvZmlsZT8uYXZhdGFyXCIgbW9kZT1cImFzcGVjdEZpbGxcIiAvPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPueCueWHu+S/ruaUueWktOWDjzwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPCEtLSDooajljZUgLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgPCEtLSDooajljZXlhoXlrrkgLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1jb250ZW50XCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJmb3JtLWl0ZW1cIj5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibGFiZWxcIj7otKblj7c8L3RleHQ+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImFjY291bnQgcGxhY2Vob2xkZXJcIj57eyBwcm9maWxlPy5hY2NvdW50IH19PC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJsYWJlbFwiPuaYteensDwvdGV4dD5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeaYteensFwiIHYtbW9kZWw9XCJwcm9maWxlIS5uaWNrbmFtZVwiIC8+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1pdGVtXCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+5oCn5YirPC90ZXh0PlxyXG4gICAgICAgICAgPHJhZGlvLWdyb3VwIEBjaGFuZ2U9XCJvbkdlbmRlckNoYW5nZVwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgIDxyYWRpbyB2YWx1ZT1cIueUt1wiIGNvbG9yPVwiIzI3YmE5YlwiIDpjaGVja2VkPVwicHJvZmlsZT8uZ2VuZGVyID09PSAn55S3J1wiIC8+XHJcbiAgICAgICAgICAgICAg55S3XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgPHJhZGlvIHZhbHVlPVwi5aWzXCIgY29sb3I9XCIjMjdiYTliXCIgOmNoZWNrZWQ9XCJwcm9maWxlPy5nZW5kZXIgPT09ICflpbMnXCIgLz5cclxuICAgICAgICAgICAgICDlpbNcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDwvcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1pdGVtXCI+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+55Sf5pelPC90ZXh0PlxyXG4gICAgICAgICAgPHBpY2tlclxyXG4gICAgICAgICAgICBAY2hhbmdlPVwib25CaXJ0aGRheUNoYW5nZVwiXHJcbiAgICAgICAgICAgIG1vZGU9XCJkYXRlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJwaWNrZXJcIlxyXG4gICAgICAgICAgICA6dmFsdWU9XCJwcm9maWxlPy5iaXJ0aGRheVwiXHJcbiAgICAgICAgICAgIHN0YXJ0PVwiMTkwMC0wMS0wMVwiXHJcbiAgICAgICAgICAgIDplbmQ9XCJmb3JtYXREYXRlKG5ldyBEYXRlKCkpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHZpZXcgdi1pZj1cInByb2ZpbGU/LmJpcnRoZGF5XCI+e3sgcHJvZmlsZT8uYmlydGhkYXkgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicGxhY2Vob2xkZXJcIiB2LWVsc2U+6K+36YCJ5oup5pel5pyfPC92aWV3PlxyXG4gICAgICAgICAgPC9waWNrZXI+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwhLS0g5Y+q5pyJ5b6u5L+h5bCP56iL5bqP56uv5YaF572u5LqG55yB5biC5Yy65pWw5o2uIC0tPlxyXG4gICAgICAgIDwhLS0gI2lmZGVmIE1QLVdFSVhJTiAtLT5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJsYWJlbFwiPuWfjuW4gjwvdGV4dD5cclxuICAgICAgICAgIDxwaWNrZXJcclxuICAgICAgICAgICAgQGNoYW5nZT1cIm9uRnVsbExvY2F0aW9uQ2hhbmdlXCJcclxuICAgICAgICAgICAgbW9kZT1cInJlZ2lvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicGlja2VyXCJcclxuICAgICAgICAgICAgOnZhbHVlPVwicHJvZmlsZT8uZnVsbExvY2F0aW9uPy5zcGxpdCgnICcpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHZpZXcgdi1pZj1cInByb2ZpbGU/LmZ1bGxMb2NhdGlvblwiPnt7IHByb2ZpbGUuZnVsbExvY2F0aW9uIH19PC92aWV3PlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInBsYWNlaG9sZGVyXCIgdi1lbHNlPuivt+mAieaLqeWfjuW4gjwvdmlldz5cclxuICAgICAgICAgIDwvcGlja2VyPlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8IS0tICNlbmRpZiAtLT5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJsYWJlbFwiPuiBjOS4mjwvdGV4dD5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeiBjOS4mlwiIDp2YWx1ZT1cInByb2ZpbGU/LnByb2Zlc3Npb25cIiAvPlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8IS0tIOaPkOS6pOaMiemSriAtLT5cclxuICAgICAgPGJ1dHRvbiBAdGFwPVwib25TdWJtaXRcIiBjbGFzcz1cImZvcm0tYnV0dG9uXCI+5L+dIOWtmDwvYnV0dG9uPlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vcGNhcGkteGlhb3R1eGlhbi1mcm9udC1kZXZ0ZXN0Lml0aGVpbWEubmV0L21pbmlhcHAvaW1hZ2VzL29yZGVyX2JnLnBuZyk7XHJcbiAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDQyMHJweDtcclxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG59XHJcblxyXG4vLyDlr7zoiKrmoI9cclxuLm5hdmJhciB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgaGVpZ2h0OiA0MHB4O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuICB9XHJcblxyXG4gIC5iYWNrIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGhlaWdodDogNDBweDtcclxuICAgIHdpZHRoOiA0MHB4O1xyXG4gICAgbGVmdDogMDtcclxuICAgIGZvbnQtc2l6ZTogMjBweDtcclxuICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcbn1cclxuXHJcbi8vIOWktOWDj1xyXG4uYXZhdGFyIHtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAyNjBycHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblxyXG4gIC5pbWFnZSB7XHJcbiAgICB3aWR0aDogMTYwcnB4O1xyXG4gICAgaGVpZ2h0OiAxNjBycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xyXG4gIH1cclxuXHJcbiAgLnRleHQge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwYWRkaW5nLXRvcDogMjBycHg7XHJcbiAgICBsaW5lLWhlaWdodDogMTtcclxuICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuICB9XHJcbn1cclxuXHJcbi8vIOihqOWNlVxyXG4uZm9ybSB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcclxuXHJcbiAgJi1jb250ZW50IHtcclxuICAgIG1hcmdpbjogMjBycHggMjBycHggMDtcclxuICAgIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgfVxyXG5cclxuICAmLWl0ZW0ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGhlaWdodDogOTZycHg7XHJcbiAgICBsaW5lLWhlaWdodDogNDZycHg7XHJcbiAgICBwYWRkaW5nOiAyNXJweCAxMHJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZGRkO1xyXG5cclxuICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAubGFiZWwge1xyXG4gICAgICB3aWR0aDogMTgwcnB4O1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgIH1cclxuXHJcbiAgICAuYWNjb3VudCB7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgfVxyXG5cclxuICAgIC5pbnB1dCB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICBoZWlnaHQ6IDQ2cnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5yYWRpbyB7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLnBpY2tlciB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICB9XHJcbiAgICAucGxhY2Vob2xkZXIge1xyXG4gICAgICBjb2xvcjogIzgwODA4MDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICYtYnV0dG9uIHtcclxuICAgIGhlaWdodDogODBycHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBsaW5lLWhlaWdodDogODBycHg7XHJcbiAgICBtYXJnaW46IDMwcnB4IDIwcnB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbiAgICBib3JkZXItcmFkaXVzOiA4MHJweDtcclxuICAgIGZvbnQtc2l6ZTogMzBycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgdHlwZSB7IEFkZHJlc3NJdGVtLCBBZGRyZXNzUGFyYW1zIH0gZnJvbSAnQC90eXBlcy9hZGRyZXNzJ1xyXG5pbXBvcnQgeyBodHRwIH0gZnJvbSAnQC91dGlscy9odHRwJ1xyXG5cclxuLyoqXHJcbiAqIOa3u+WKoOaUtui0p+WcsOWdgFxyXG4gKiBAcGFyYW0gZGF0YSDor7fmsYLlj4LmlbBcclxuICovXHJcbmV4cG9ydCBjb25zdCBwb3N0TWVtYmVyQWRkcmVzc0FQSSA9IChkYXRhOiBBZGRyZXNzUGFyYW1zKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHAoe1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICcvbWVtYmVyL2FkZHJlc3MnLFxyXG4gICAgZGF0YSxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W5pS26LSn5Zyw5Z2A5YiX6KGoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0TWVtYmVyQWRkcmVzc0FQSSA9ICgpID0+IHtcclxuICByZXR1cm4gaHR0cDxBZGRyZXNzSXRlbVtdPih7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiAnL21lbWJlci9hZGRyZXNzJyxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W5pS26LSn5Zyw5Z2A6K+m5oOFXHJcbiAqIEBwYXJhbSBpZCDlnLDlnYBpZCjot6/lvoTlj4LmlbApXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0TWVtYmVyQWRkcmVzc0J5SWRBUEkgPSAoaWQ6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBodHRwPEFkZHJlc3NJdGVtPih7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiBgL21lbWJlci9hZGRyZXNzLyR7aWR9YCxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog5L+u5pS55pS26LSn5Zyw5Z2AXHJcbiAqIEBwYXJhbSBpZCDlnLDlnYBpZCjot6/lvoTlj4LmlbApXHJcbiAqIEBwYXJhbSBkYXRhIOihqOWNleaVsOaNrijor7fmsYLkvZPlj4LmlbApXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcHV0TWVtYmVyQWRkcmVzc0J5SWRBUEkgPSAoaWQ6IHN0cmluZywgZGF0YTogQWRkcmVzc1BhcmFtcykgPT4ge1xyXG4gIHJldHVybiBodHRwKHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGAvbWVtYmVyL2FkZHJlc3MvJHtpZH1gLFxyXG4gICAgZGF0YSxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog5Yig6Zmk5pS26LSn5Zyw5Z2AXHJcbiAqIEBwYXJhbSBpZCDlnLDlnYBpZCjot6/lvoTlj4LmlbApXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZGVsZXRlTWVtYmVyQWRkcmVzc0J5SWRBUEkgPSAoaWQ6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBodHRwKHtcclxuICAgIG1ldGhvZDogJ0RFTEVURScsXHJcbiAgICB1cmw6IGAvbWVtYmVyL2FkZHJlc3MvJHtpZH1gLFxyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBBZGRyZXNzSXRlbSB9IGZyb20gJ0AvdHlwZXMvYWRkcmVzcydcclxuaW1wb3J0IHsgZGVmaW5lU3RvcmUgfSBmcm9tICdwaW5pYSdcclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuZXhwb3J0IGNvbnN0IHVzZUFkZHJlc3NTdG9yZSA9IGRlZmluZVN0b3JlKCdhZGRyZXNzJywgKCkgPT4ge1xyXG4gIGNvbnN0IHNlbGVjdGVkQWRkcmVzcyA9IHJlZjxBZGRyZXNzSXRlbT4oKVxyXG5cclxuICBjb25zdCBjaGFuZ2VTZWxlY3RlZEFkZHJlc3MgPSAodmFsOiBBZGRyZXNzSXRlbSkgPT4ge1xyXG4gICAgc2VsZWN0ZWRBZGRyZXNzLnZhbHVlID0gdmFsXHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgc2VsZWN0ZWRBZGRyZXNzLFxyXG4gICAgY2hhbmdlU2VsZWN0ZWRBZGRyZXNzLFxyXG4gIH1cclxufSlcclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgZGVsZXRlTWVtYmVyQWRkcmVzc0J5SWRBUEksIGdldE1lbWJlckFkZHJlc3NBUEkgfSBmcm9tICdAL3NlcnZpY2VzL2FkZHJlc3MnXHJcbmltcG9ydCB7IHVzZUFkZHJlc3NTdG9yZSB9IGZyb20gJ0Avc3RvcmVzL21vZHVsZXMvYWRkcmVzcydcclxuaW1wb3J0IHR5cGUgeyBBZGRyZXNzSXRlbSB9IGZyb20gJ0AvdHlwZXMvYWRkcmVzcydcclxuaW1wb3J0IHsgb25TaG93IH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbi8vIOiOt+WPluaUtui0p+WcsOWdgOWIl+ihqOaVsOaNrlxyXG5jb25zdCBhZGRyZXNzTGlzdCA9IHJlZjxBZGRyZXNzSXRlbVtdPihbXSlcclxuY29uc3QgZ2V0TWVtYmVyQWRkcmVzc0RhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0TWVtYmVyQWRkcmVzc0FQSSgpXHJcbiAgYWRkcmVzc0xpc3QudmFsdWUgPSByZXMucmVzdWx0XHJcbn1cclxuXHJcbi8vIOWIneWni+WMluiwg+eUqCjpobXpnaLmmL7npLopXHJcbm9uU2hvdygoKSA9PiB7XHJcbiAgZ2V0TWVtYmVyQWRkcmVzc0RhdGEoKVxyXG59KVxyXG5cclxuLy8g5Yig6Zmk5pS26LSn5Zyw5Z2AXHJcbmNvbnN0IG9uRGVsZXRlQWRkcmVzcyA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgLy8g5LqM5qyh56Gu6K6kXHJcbiAgdW5pLnNob3dNb2RhbCh7XHJcbiAgICBjb250ZW50OiAn5Yig6Zmk5Zyw5Z2APycsXHJcbiAgICBjb25maXJtQ29sb3I6ICcjMjdCQTlCJyxcclxuICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAgICAgLy8g5qC55o2uaWTliKDpmaTmlLbotKflnLDlnYBcclxuICAgICAgICBhd2FpdCBkZWxldGVNZW1iZXJBZGRyZXNzQnlJZEFQSShpZClcclxuICAgICAgICAvLyDph43mlrDojrflj5bmlLbotKflnLDlnYDliJfooahcclxuICAgICAgICBnZXRNZW1iZXJBZGRyZXNzRGF0YSgpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5cclxuLy8g5L+u5pS55pS26LSn5Zyw5Z2AXHJcbmNvbnN0IG9uQ2hhbmdlQWRkcmVzcyA9IChpdGVtOiBBZGRyZXNzSXRlbSkgPT4ge1xyXG4gIC8vIOS/ruaUueWcsOWdgFxyXG4gIGNvbnN0IGFkZHJlc3NTdG9yZSA9IHVzZUFkZHJlc3NTdG9yZSgpXHJcbiAgYWRkcmVzc1N0b3JlLmNoYW5nZVNlbGVjdGVkQWRkcmVzcyhpdGVtKVxyXG4gIC8vIOi/lOWbnuS4iuS4gOmhtVxyXG4gIHVuaS5uYXZpZ2F0ZUJhY2soKVxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDwhLS0g5Zyw5Z2A5YiX6KGoIC0tPlxyXG4gICAgPHNjcm9sbC12aWV3IGVuYWJsZS1iYWNrLXRvLXRvcCBjbGFzcz1cInNjcm9sbC12aWV3XCIgc2Nyb2xsLXk+XHJcbiAgICAgIDx2aWV3IHYtaWY9XCJhZGRyZXNzTGlzdC5sZW5ndGhcIiBjbGFzcz1cImFkZHJlc3NcIj5cclxuICAgICAgICA8dW5pLXN3aXBlLWFjdGlvbiBjbGFzcz1cImFkZHJlc3MtbGlzdFwiPlxyXG4gICAgICAgICAgPCEtLSDmlLbotKflnLDlnYDpobkgLS0+XHJcbiAgICAgICAgICA8dW5pLXN3aXBlLWFjdGlvbi1pdGVtIGNsYXNzPVwiaXRlbVwiIHYtZm9yPVwiaXRlbSBpbiBhZGRyZXNzTGlzdFwiIDprZXk9XCJpdGVtLmlkXCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbS1jb250ZW50XCIgQHRhcD1cIm9uQ2hhbmdlQWRkcmVzcyhpdGVtKVwiPlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlclwiPlxyXG4gICAgICAgICAgICAgICAge3sgaXRlbS5yZWNlaXZlciB9fVxyXG4gICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJjb250YWN0XCI+e3sgaXRlbS5jb250YWN0IH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPHRleHQgdi1pZj1cIml0ZW0uaXNEZWZhdWx0XCIgY2xhc3M9XCJiYWRnZVwiPum7mOiupDwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJsb2NhdGVcIj57eyBpdGVtLmZ1bGxMb2NhdGlvbiB9fSB7eyBpdGVtLmFkZHJlc3MgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPCEtLSBINSDnq6/pnIDmt7vliqAgLnByZXZlbnQg6Zi75q2i6ZO+5o6l55qE6buY6K6k6KGM5Li6IC0tPlxyXG4gICAgICAgICAgICAgIDxuYXZpZ2F0b3JcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXHJcbiAgICAgICAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgOnVybD1cImAvcGFnZXNNZW1iZXIvYWRkcmVzcy1mb3JtL2FkZHJlc3MtZm9ybT9pZD0ke2l0ZW0uaWR9YFwiXHJcbiAgICAgICAgICAgICAgICBAdGFwLnN0b3A9XCIoKSA9PiB7fVwiXHJcbiAgICAgICAgICAgICAgICBAdGFwLnByZXZlbnQ9XCIoKSA9PiB7fVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAg5L+u5pS5XHJcbiAgICAgICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgPCEtLSDlj7Pkvqfmj5Lmp70gLS0+XHJcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSAjcmlnaHQ+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBAdGFwPVwib25EZWxldGVBZGRyZXNzKGl0ZW0uaWQpXCIgY2xhc3M9XCJkZWxldGUtYnV0dG9uXCI+5Yig6ZmkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3VuaS1zd2lwZS1hY3Rpb24taXRlbT5cclxuICAgICAgICA8L3VuaS1zd2lwZS1hY3Rpb24+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgdi1lbHNlIGNsYXNzPVwiYmxhbmtcIj7mmoLml6DmlLbotKflnLDlnYA8L3ZpZXc+XHJcbiAgICA8L3Njcm9sbC12aWV3PlxyXG4gICAgPCEtLSDmt7vliqDmjInpkq4gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cImFkZC1idG5cIj5cclxuICAgICAgPG5hdmlnYXRvciBob3Zlci1jbGFzcz1cIm5vbmVcIiB1cmw9XCIvcGFnZXNNZW1iZXIvYWRkcmVzcy1mb3JtL2FkZHJlc3MtZm9ybVwiPlxyXG4gICAgICAgIOaWsOW7uuWcsOWdgFxyXG4gICAgICA8L25hdmlnYXRvcj5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbn1cclxuXHJcbi8qIOWIoOmZpOaMiemSriAqL1xyXG4uZGVsZXRlLWJ1dHRvbiB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIHdpZHRoOiA1MHB4O1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBmb250LXNpemU6IDI4cnB4O1xyXG4gIGNvbG9yOiAjZmZmO1xyXG4gIGJvcmRlci1yYWRpdXM6IDA7XHJcbiAgcGFkZGluZzogMDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2Y0NDQ0O1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcclxuXHJcbiAgLnNjcm9sbC12aWV3IHtcclxuICAgIHBhZGRpbmctdG9wOiAyMHJweDtcclxuICB9XHJcbn1cclxuXHJcbi5hZGRyZXNzIHtcclxuICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gIG1hcmdpbjogMCAyMHJweDtcclxuICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cclxuICAuaXRlbS1jb250ZW50IHtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgcGFkZGluZzogNDBycHggMTBycHggMzhycHg7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcnB4IHNvbGlkICNkZGQ7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblxyXG4gICAgLmVkaXQge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogMzZycHg7XHJcbiAgICAgIHJpZ2h0OiAzMHJweDtcclxuICAgICAgcGFkZGluZzogMnJweCAwIDJycHggMjBycHg7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiAxcnB4IHNvbGlkICM2NjY7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgICBsaW5lLWhlaWdodDogMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5pdGVtOmxhc3QtY2hpbGQgLml0ZW0tY29udGVudCB7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgfVxyXG5cclxuICAudXNlciB7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMjBycHg7XHJcbiAgICBjb2xvcjogIzMzMztcclxuXHJcbiAgICAuY29udGFjdCB7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgfVxyXG5cclxuICAgIC5iYWRnZSB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgcGFkZGluZzogNHJweCAxMHJweCAycnB4IDE0cnB4O1xyXG4gICAgICBtYXJnaW46IDJycHggMCAwIDEwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogIzI3YmE5YjtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNnJweDtcclxuICAgICAgYm9yZGVyOiAxcnB4IHNvbGlkICMyN2JhOWI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAubG9jYXRlIHtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgfVxyXG59XHJcblxyXG4uYmxhbmsge1xyXG4gIG1hcmdpbi10b3A6IDMwMHJweDtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgZm9udC1zaXplOiAzMnJweDtcclxuICBjb2xvcjogIzg4ODtcclxufVxyXG5cclxuLmFkZC1idG4ge1xyXG4gIGhlaWdodDogODBycHg7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGxpbmUtaGVpZ2h0OiA4MHJweDtcclxuICBtYXJnaW46IDMwcnB4IDIwcnB4O1xyXG4gIGNvbG9yOiAjZmZmO1xyXG4gIGJvcmRlci1yYWRpdXM6IDgwcnB4O1xyXG4gIGZvbnQtc2l6ZTogMzBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBkZWxldGVNZW1iZXJBZGRyZXNzQnlJZEFQSSwgZ2V0TWVtYmVyQWRkcmVzc0FQSSB9IGZyb20gJ0Avc2VydmljZXMvYWRkcmVzcydcclxuaW1wb3J0IHsgdXNlQWRkcmVzc1N0b3JlIH0gZnJvbSAnQC9zdG9yZXMvbW9kdWxlcy9hZGRyZXNzJ1xyXG5pbXBvcnQgdHlwZSB7IEFkZHJlc3NJdGVtIH0gZnJvbSAnQC90eXBlcy9hZGRyZXNzJ1xyXG5pbXBvcnQgeyBvblNob3cgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLy8g6I635Y+W5pS26LSn5Zyw5Z2A5YiX6KGo5pWw5o2uXHJcbmNvbnN0IGFkZHJlc3NMaXN0ID0gcmVmPEFkZHJlc3NJdGVtW10+KFtdKVxyXG5jb25zdCBnZXRNZW1iZXJBZGRyZXNzRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJBZGRyZXNzQVBJKClcclxuICBhZGRyZXNzTGlzdC52YWx1ZSA9IHJlcy5yZXN1bHRcclxufVxyXG5cclxuLy8g5Yid5aeL5YyW6LCD55SoKOmhtemdouaYvuekuilcclxub25TaG93KCgpID0+IHtcclxuICBnZXRNZW1iZXJBZGRyZXNzRGF0YSgpXHJcbn0pXHJcblxyXG4vLyDliKDpmaTmlLbotKflnLDlnYBcclxuY29uc3Qgb25EZWxldGVBZGRyZXNzID0gKGlkOiBzdHJpbmcpID0+IHtcclxuICAvLyDkuozmrKHnoa7orqRcclxuICB1bmkuc2hvd01vZGFsKHtcclxuICAgIGNvbnRlbnQ6ICfliKDpmaTlnLDlnYA/JyxcclxuICAgIGNvbmZpcm1Db2xvcjogJyMyN0JBOUInLFxyXG4gICAgc3VjY2VzczogYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgICAgICAvLyDmoLnmja5pZOWIoOmZpOaUtui0p+WcsOWdgFxyXG4gICAgICAgIGF3YWl0IGRlbGV0ZU1lbWJlckFkZHJlc3NCeUlkQVBJKGlkKVxyXG4gICAgICAgIC8vIOmHjeaWsOiOt+WPluaUtui0p+WcsOWdgOWIl+ihqFxyXG4gICAgICAgIGdldE1lbWJlckFkZHJlc3NEYXRhKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcblxyXG4vLyDkv67mlLnmlLbotKflnLDlnYBcclxuY29uc3Qgb25DaGFuZ2VBZGRyZXNzID0gKGl0ZW06IEFkZHJlc3NJdGVtKSA9PiB7XHJcbiAgLy8g5L+u5pS55Zyw5Z2AXHJcbiAgY29uc3QgYWRkcmVzc1N0b3JlID0gdXNlQWRkcmVzc1N0b3JlKClcclxuICBhZGRyZXNzU3RvcmUuY2hhbmdlU2VsZWN0ZWRBZGRyZXNzKGl0ZW0pXHJcbiAgLy8g6L+U5Zue5LiK5LiA6aG1XHJcbiAgdW5pLm5hdmlnYXRlQmFjaygpXHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPCEtLSDlnLDlnYDliJfooaggLS0+XHJcbiAgICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIGNsYXNzPVwic2Nyb2xsLXZpZXdcIiBzY3JvbGwteT5cclxuICAgICAgPHZpZXcgdi1pZj1cImFkZHJlc3NMaXN0Lmxlbmd0aFwiIGNsYXNzPVwiYWRkcmVzc1wiPlxyXG4gICAgICAgIDx1bmktc3dpcGUtYWN0aW9uIGNsYXNzPVwiYWRkcmVzcy1saXN0XCI+XHJcbiAgICAgICAgICA8IS0tIOaUtui0p+WcsOWdgOmhuSAtLT5cclxuICAgICAgICAgIDx1bmktc3dpcGUtYWN0aW9uLWl0ZW0gY2xhc3M9XCJpdGVtXCIgdi1mb3I9XCJpdGVtIGluIGFkZHJlc3NMaXN0XCIgOmtleT1cIml0ZW0uaWRcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtLWNvbnRlbnRcIiBAdGFwPVwib25DaGFuZ2VBZGRyZXNzKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBpdGVtLnJlY2VpdmVyIH19XHJcbiAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cImNvbnRhY3RcIj57eyBpdGVtLmNvbnRhY3QgfX08L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8dGV4dCB2LWlmPVwiaXRlbS5pc0RlZmF1bHRcIiBjbGFzcz1cImJhZGdlXCI+6buY6K6kPC90ZXh0PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImxvY2F0ZVwiPnt7IGl0ZW0uZnVsbExvY2F0aW9uIH19IHt7IGl0ZW0uYWRkcmVzcyB9fTwvdmlldz5cclxuICAgICAgICAgICAgICA8IS0tIEg1IOerr+mcgOa3u+WKoCAucHJldmVudCDpmLvmraLpk77mjqXnmoTpu5jorqTooYzkuLogLS0+XHJcbiAgICAgICAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICA6dXJsPVwiYC9wYWdlc01lbWJlci9hZGRyZXNzLWZvcm0vYWRkcmVzcy1mb3JtP2lkPSR7aXRlbS5pZH1gXCJcclxuICAgICAgICAgICAgICAgIEB0YXAuc3RvcD1cIigpID0+IHt9XCJcclxuICAgICAgICAgICAgICAgIEB0YXAucHJldmVudD1cIigpID0+IHt9XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICDkv67mlLlcclxuICAgICAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8IS0tIOWPs+S+p+aPkuanvSAtLT5cclxuICAgICAgICAgICAgPHRlbXBsYXRlICNyaWdodD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIEB0YXA9XCJvbkRlbGV0ZUFkZHJlc3MoaXRlbS5pZClcIiBjbGFzcz1cImRlbGV0ZS1idXR0b25cIj7liKDpmaQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdW5pLXN3aXBlLWFjdGlvbi1pdGVtPlxyXG4gICAgICAgIDwvdW5pLXN3aXBlLWFjdGlvbj5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dmlldyB2LWVsc2UgY2xhc3M9XCJibGFua1wiPuaaguaXoOaUtui0p+WcsOWdgDwvdmlldz5cclxuICAgIDwvc2Nyb2xsLXZpZXc+XHJcbiAgICA8IS0tIOa3u+WKoOaMiemSriAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwiYWRkLWJ0blwiPlxyXG4gICAgICA8bmF2aWdhdG9yIGhvdmVyLWNsYXNzPVwibm9uZVwiIHVybD1cIi9wYWdlc01lbWJlci9hZGRyZXNzLWZvcm0vYWRkcmVzcy1mb3JtXCI+XHJcbiAgICAgICAg5paw5bu65Zyw5Z2AXHJcbiAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLyog5Yig6Zmk5oyJ6ZKuICovXHJcbi5kZWxldGUtYnV0dG9uIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgd2lkdGg6IDUwcHg7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgY29sb3I6ICNmZmY7XHJcbiAgYm9yZGVyLXJhZGl1czogMDtcclxuICBwYWRkaW5nOiAwO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNjZjQ0NDQ7XHJcbn1cclxuXHJcbi52aWV3cG9ydCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xyXG5cclxuICAuc2Nyb2xsLXZpZXcge1xyXG4gICAgcGFkZGluZy10b3A6IDIwcnB4O1xyXG4gIH1cclxufVxyXG5cclxuLmFkZHJlc3Mge1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgbWFyZ2luOiAwIDIwcnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gIC5pdGVtLWNvbnRlbnQge1xyXG4gICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICBwYWRkaW5nOiA0MHJweCAxMHJweCAzOHJweDtcclxuICAgIGJvcmRlci1ib3R0b206IDFycHggc29saWQgI2RkZDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHJcbiAgICAuZWRpdCB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiAzNnJweDtcclxuICAgICAgcmlnaHQ6IDMwcnB4O1xyXG4gICAgICBwYWRkaW5nOiAycnB4IDAgMnJweCAyMHJweDtcclxuICAgICAgYm9yZGVyLWxlZnQ6IDFycHggc29saWQgIzY2NjtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLml0ZW06bGFzdC1jaGlsZCAuaXRlbS1jb250ZW50IHtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICB9XHJcblxyXG4gIC51c2VyIHtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG5cclxuICAgIC5jb250YWN0IHtcclxuICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICB9XHJcblxyXG4gICAgLmJhZGdlIHtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICBwYWRkaW5nOiA0cnB4IDEwcnB4IDJycHggMTRycHg7XHJcbiAgICAgIG1hcmdpbjogMnJweCAwIDAgMTBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjMjdiYTliO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA2cnB4O1xyXG4gICAgICBib3JkZXI6IDFycHggc29saWQgIzI3YmE5YjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5sb2NhdGUge1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcclxuICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICBjb2xvcjogIzMzMztcclxuICB9XHJcbn1cclxuXHJcbi5ibGFuayB7XHJcbiAgbWFyZ2luLXRvcDogMzAwcnB4O1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBmb250LXNpemU6IDMycnB4O1xyXG4gIGNvbG9yOiAjODg4O1xyXG59XHJcblxyXG4uYWRkLWJ0biB7XHJcbiAgaGVpZ2h0OiA4MHJweDtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgbGluZS1oZWlnaHQ6IDgwcnB4O1xyXG4gIG1hcmdpbjogMzBycHggMjBycHg7XHJcbiAgY29sb3I6ICNmZmY7XHJcbiAgYm9yZGVyLXJhZGl1czogODBycHg7XHJcbiAgZm9udC1zaXplOiAzMHJweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7XHJcbiAgZ2V0TWVtYmVyQWRkcmVzc0J5SWRBUEksXHJcbiAgcG9zdE1lbWJlckFkZHJlc3NBUEksXHJcbiAgcHV0TWVtYmVyQWRkcmVzc0J5SWRBUEksXHJcbn0gZnJvbSAnQC9zZXJ2aWNlcy9hZGRyZXNzJ1xyXG5pbXBvcnQgeyBvbkxvYWQgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLy8g6KGo5Y2V5pWw5o2uXHJcbmNvbnN0IGZvcm0gPSByZWYoe1xyXG4gIHJlY2VpdmVyOiAnJywgLy8g5pS26LSn5Lq6XHJcbiAgY29udGFjdDogJycsIC8vIOiBlOezu+aWueW8j1xyXG4gIGZ1bGxMb2NhdGlvbjogJycsIC8vIOecgeW4guWMuijliY3nq6/lsZXnpLopXHJcbiAgcHJvdmluY2VDb2RlOiAnJywgLy8g55yB5Lu957yW56CBKOWQjuerr+WPguaVsClcclxuICBjaXR5Q29kZTogJycsIC8vIOWfjuW4gue8lueggSjlkI7nq6/lj4LmlbApXHJcbiAgY291bnR5Q29kZTogJycsIC8vIOWMui/ljr/nvJbnoIEo5ZCO56uv5Y+C5pWwKVxyXG4gIGFkZHJlc3M6ICcnLCAvLyDor6bnu4blnLDlnYBcclxuICBpc0RlZmF1bHQ6IDAsIC8vIOm7mOiupOWcsOWdgO+8jDHkuLrmmK/vvIww5Li65ZCmXHJcbn0pXHJcblxyXG4vLyDojrflj5bpobXpnaLlj4LmlbBcclxuY29uc3QgcXVlcnkgPSBkZWZpbmVQcm9wczx7XHJcbiAgaWQ/OiBzdHJpbmdcclxufT4oKVxyXG5cclxuLy8g6I635Y+W5pS26LSn5Zyw5Z2A6K+m5oOF5pWw5o2uXHJcbmNvbnN0IGdldE1lbWJlckFkZHJlc3NCeUlkRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBpZiAocXVlcnkuaWQpIHtcclxuICAgIC8vIOWPkemAgeivt+axglxyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0TWVtYmVyQWRkcmVzc0J5SWRBUEkocXVlcnkuaWQpXHJcbiAgICAvLyDmiormlbDmja7lkIjlubbliLDooajljZXkuK1cclxuICAgIE9iamVjdC5hc3NpZ24oZm9ybS52YWx1ZSwgcmVzLnJlc3VsdClcclxuICB9XHJcbn1cclxuXHJcbi8vIOmhtemdouWKoOi9vVxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIGdldE1lbWJlckFkZHJlc3NCeUlkRGF0YSgpXHJcbn0pXHJcblxyXG4vLyDliqjmgIHorr7nva7moIfpophcclxudW5pLnNldE5hdmlnYXRpb25CYXJUaXRsZSh7IHRpdGxlOiBxdWVyeS5pZCA/ICfkv67mlLnlnLDlnYAnIDogJ+aWsOW7uuWcsOWdgCcgfSlcclxuXHJcbi8vIOaUtumbhuaJgOWcqOWcsOWMulxyXG5jb25zdCBvblJlZ2lvbkNoYW5nZTogVW5pSGVscGVyLlJlZ2lvblBpY2tlck9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgLy8g55yB5biC5Yy6KOWJjeerr+WxleekuilcclxuICBmb3JtLnZhbHVlLmZ1bGxMb2NhdGlvbiA9IGV2LmRldGFpbC52YWx1ZS5qb2luKCcgJylcclxuICAvLyDnnIHluILljLoo5ZCO56uv5Y+C5pWwKVxyXG4gIGNvbnN0IFtwcm92aW5jZUNvZGUsIGNpdHlDb2RlLCBjb3VudHlDb2RlXSA9IGV2LmRldGFpbC5jb2RlIVxyXG4gIC8vIGZvcm0udmFsdWUucHJvdmluY2VDb2RlID0gcHJvdmluY2VDb2RlXHJcbiAgT2JqZWN0LmFzc2lnbihmb3JtLnZhbHVlLCB7IHByb3ZpbmNlQ29kZSwgY2l0eUNvZGUsIGNvdW50eUNvZGUgfSlcclxufVxyXG5cclxuLy8g5pS26ZuG5piv5ZCm6buY6K6k5pS26LSn5Zyw5Z2AXHJcbmNvbnN0IG9uU3dpdGNoQ2hhbmdlOiBVbmlIZWxwZXIuU3dpdGNoT25DaGFuZ2UgPSAoZXYpID0+IHtcclxuICBmb3JtLnZhbHVlLmlzRGVmYXVsdCA9IGV2LmRldGFpbC52YWx1ZSA/IDEgOiAwXHJcbn1cclxuXHJcbi8vIOWumuS5ieagoemqjOinhOWImVxyXG5jb25zdCBydWxlczogVW5pSGVscGVyLlVuaUZvcm1zUnVsZXMgPSB7XHJcbiAgcmVjZWl2ZXI6IHtcclxuICAgIHJ1bGVzOiBbeyByZXF1aXJlZDogdHJ1ZSwgZXJyb3JNZXNzYWdlOiAn6K+36L6T5YWl5pS26LSn5Lq65aeT5ZCNJyB9XSxcclxuICB9LFxyXG4gIGNvbnRhY3Q6IHtcclxuICAgIHJ1bGVzOiBbXHJcbiAgICAgIHsgcmVxdWlyZWQ6IHRydWUsIGVycm9yTWVzc2FnZTogJ+ivt+i+k+WFpeiBlOezu+aWueW8jycgfSxcclxuICAgICAgeyBwYXR0ZXJuOiAvXjFbMy05XVxcZHs5fSQvLCBlcnJvck1lc3NhZ2U6ICfmiYvmnLrlj7fmoLzlvI/kuI3mraPnoa4nIH0sXHJcbiAgICBdLFxyXG4gIH0sXHJcbiAgY291bnR5Q29kZToge1xyXG4gICAgcnVsZXM6IFt7IHJlcXVpcmVkOiB0cnVlLCBlcnJvck1lc3NhZ2U6ICfor7fpgInmi6nmiYDlnKjlnLDljLonIH1dLFxyXG4gIH0sXHJcbiAgYWRkcmVzczoge1xyXG4gICAgcnVsZXM6IFt7IHJlcXVpcmVkOiB0cnVlLCBlcnJvck1lc3NhZ2U6ICfor7fpgInmi6nor6bnu4blnLDlnYAnIH1dLFxyXG4gIH0sXHJcbn1cclxuXHJcbi8vIOihqOWNlee7hOS7tuWunuS+i1xyXG5jb25zdCBmb3JtUmVmID0gcmVmPFVuaUhlbHBlci5VbmlGb3Jtc0luc3RhbmNlPigpXHJcblxyXG4vLyDmj5DkuqTooajljZVcclxuY29uc3Qgb25TdWJtaXQgPSBhc3luYyAoKSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIC8vIOihqOWNleagoemqjFxyXG4gICAgYXdhaXQgZm9ybVJlZi52YWx1ZT8udmFsaWRhdGU/LigpXHJcbiAgICAvLyDmoKHpqozpgJrov4flkI7lho3lj5HpgIHor7fmsYJcclxuICAgIGlmIChxdWVyeS5pZCkge1xyXG4gICAgICAvLyDkv67mlLnlnLDlnYDor7fmsYJcclxuICAgICAgYXdhaXQgcHV0TWVtYmVyQWRkcmVzc0J5SWRBUEkocXVlcnkuaWQsIGZvcm0udmFsdWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDmlrDlu7rlnLDlnYDor7fmsYJcclxuICAgICAgYXdhaXQgcG9zdE1lbWJlckFkZHJlc3NBUEkoZm9ybS52YWx1ZSlcclxuICAgIH1cclxuICAgIC8vIOaIkOWKn+aPkOekulxyXG4gICAgdW5pLnNob3dUb2FzdCh7IGljb246ICdzdWNjZXNzJywgdGl0bGU6IHF1ZXJ5LmlkID8gJ+S/ruaUueaIkOWKnycgOiAn5re75Yqg5oiQ5YqfJyB9KVxyXG4gICAgLy8g6L+U5Zue5LiK5LiA6aG1XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdW5pLm5hdmlnYXRlQmFjaygpXHJcbiAgICB9LCA0MDApXHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnZXJyb3InLCB0aXRsZTogJ+ivt+Whq+WGmeWujOaVtOS/oeaBrycgfSlcclxuICB9XHJcbn1cclxuXHJcblxyXG5jb25zdCBvbkNpdHlDaGFuZ2U6IFVuaUhlbHBlci5VbmlEYXRhUGlja2VyT25DaGFuZ2UgPSAoZXYpID0+IHtcclxuICAvLyDnnIHluILljLpcclxuICBjb25zdCBbcHJvdmluY2UsIGNpdHksIGNvdW50eV0gPSBldi5kZXRhaWwudmFsdWVcclxuICAvLyDmlLbpm4blkI7nq6/miYDpnIDnmoQgY29kZSDmlbDmja5cclxuICBPYmplY3QuYXNzaWduKGZvcm0udmFsdWUsIHtcclxuICAgIHByb3ZpbmNlQ29kZTogcHJvdmluY2UudmFsdWUsXHJcbiAgICBjaXR5Q29kZTogY2l0eS52YWx1ZSxcclxuICAgIGNvdW50eUNvZGU6IGNvdW50eS52YWx1ZSxcclxuICB9KVxyXG59XHJcblxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgIDx1bmktZm9ybXMgOnJ1bGVzPVwicnVsZXNcIiA6bW9kZWw9XCJmb3JtXCIgcmVmPVwiZm9ybVJlZlwiPlxyXG4gICAgICA8IS0tIOihqOWNleWGheWuuSAtLT5cclxuICAgICAgPHVuaS1mb3Jtcy1pdGVtIG5hbWU9XCJyZWNlaXZlclwiIGNsYXNzPVwiZm9ybS1pdGVtXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJsYWJlbFwiPuaUtui0p+S6ujwvdGV4dD5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHBsYWNlaG9sZGVyPVwi6K+35aGr5YaZ5pS26LSn5Lq65aeT5ZCNXCIgdi1tb2RlbD1cImZvcm0ucmVjZWl2ZXJcIiAvPlxyXG4gICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxyXG4gICAgICA8dW5pLWZvcm1zLWl0ZW0gbmFtZT1cImNvbnRhY3RcIiBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwibGFiZWxcIj7miYvmnLrlj7fnoIE8L3RleHQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBjbGFzcz1cImlucHV0XCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+35aGr5YaZ5pS26LSn5Lq65omL5py65Y+356CBXCJcclxuICAgICAgICAgIDptYXhsZW5ndGg9XCIxMVwiXHJcbiAgICAgICAgICB2LW1vZGVsPVwiZm9ybS5jb250YWN0XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxyXG4gICAgICA8dW5pLWZvcm1zLWl0ZW0gbmFtZT1cImNvdW50eUNvZGVcIiBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwibGFiZWxcIj7miYDlnKjlnLDljLo8L3RleHQ+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIDx1bmktZGF0YS1waWNrZXJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36YCJ5oup5Zyw5Z2AXCJcclxuICAgICAgICAgIHBvcHVwLXRpdGxlPVwi6K+36YCJ5oup5Z+O5biCXCJcclxuICAgICAgICAgIGNvbGxlY3Rpb249XCJvcGVuZGItY2l0eS1jaGluYVwiXHJcbiAgICAgICAgICBmaWVsZD1cImNvZGUgYXMgdmFsdWUsIG5hbWUgYXMgdGV4dFwiXHJcbiAgICAgICAgICBvcmRlcmJ5PVwidmFsdWUgYXNjXCJcclxuICAgICAgICAgIDpzdGVwLXNlYXJoPVwidHJ1ZVwiXHJcbiAgICAgICAgICBzZWxmLWZpZWxkPVwiY29kZVwiXHJcbiAgICAgICAgICBwYXJlbnQtZmllbGQ9XCJwYXJlbnRfY29kZVwiXHJcbiAgICAgICAgICBAY2hhbmdlPVwib25DaXR5Q2hhbmdlXCJcclxuICAgICAgICAgIDpjbGVhci1pY29uPVwiZmFsc2VcIlxyXG4gICAgICAgICAgdi1tb2RlbD1cImZvcm0uY291bnR5Q29kZVwiXHJcbiAgICAgICAgLz5cclxuXHJcbiAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XHJcbiAgICAgIDx1bmktZm9ybXMtaXRlbSBuYW1lPVwiYWRkcmVzc1wiIGNsYXNzPVwiZm9ybS1pdGVtXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJsYWJlbFwiPuivpue7huWcsOWdgDwvdGV4dD5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHBsYWNlaG9sZGVyPVwi6KGX6YGT44CB5qW854mM5Y+3562J5L+h5oGvXCIgdi1tb2RlbD1cImZvcm0uYWRkcmVzc1wiIC8+XHJcbiAgICAgIDwvdW5pLWZvcm1zLWl0ZW0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiZm9ybS1pdGVtXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj7orr7kuLrpu5jorqTlnLDlnYA8L2xhYmVsPlxyXG4gICAgICAgIDxzd2l0Y2hcclxuICAgICAgICAgIEBjaGFuZ2U9XCJvblN3aXRjaENoYW5nZVwiXHJcbiAgICAgICAgICBjbGFzcz1cInN3aXRjaFwiXHJcbiAgICAgICAgICBjb2xvcj1cIiMyN2JhOWJcIlxyXG4gICAgICAgICAgOmNoZWNrZWQ9XCJmb3JtLmlzRGVmYXVsdCA9PT0gMVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC91bmktZm9ybXM+XHJcbiAgPC92aWV3PlxyXG4gIDwhLS0g5o+Q5Lqk5oyJ6ZKuIC0tPlxyXG4gIDxidXR0b24gQHRhcD1cIm9uU3VibWl0XCIgY2xhc3M9XCJidXR0b25cIj7kv53lrZjlubbkvb/nlKg8L2J1dHRvbj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG4vLyDmt7HluqbpgInmi6nlmajkv67mlLkgdW5pLWRhdGEtcGlja2VyIOe7hOS7tuagt+W8j1xyXG46ZGVlcCguc2VsZWN0ZWQtYXJlYSkge1xyXG4gIGZsZXg6IDAgMSBhdXRvO1xyXG4gIGhlaWdodDogYXV0bztcclxufVxyXG5cclxucGFnZSB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcclxufVxyXG5cclxuLmNvbnRlbnQge1xyXG4gIG1hcmdpbjogMjBycHggMjBycHggMDtcclxuICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gIC5mb3JtLWl0ZW0sXHJcbiAgLnVuaS1mb3Jtcy1pdGVtIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWluLWhlaWdodDogOTZycHg7XHJcbiAgICBwYWRkaW5nOiAyNXJweCAxMHJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZGRkO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcclxuXHJcbiAgICAvLyDosIPmlbQgdW5pLWZvcm1zIOagt+W8j1xyXG4gICAgLnVuaS1mb3Jtcy1pdGVtX19jb250ZW50IHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgIH1cclxuXHJcbiAgICAudW5pLWZvcm1zLWl0ZW1fX2Vycm9yIHtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDIwMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAmOmxhc3QtY2hpbGQge1xyXG4gICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLmxhYmVsIHtcclxuICAgICAgd2lkdGg6IDIwMHJweDtcclxuICAgICAgY29sb3I6ICMzMzM7XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0IHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIGhlaWdodDogNDZycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLnN3aXRjaCB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgcmlnaHQ6IC0yMHJweDtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xyXG4gICAgfVxyXG5cclxuICAgIC5waWNrZXIge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgfVxyXG5cclxuICAgIC5wbGFjZWhvbGRlciB7XHJcbiAgICAgIGNvbG9yOiAjODA4MDgwO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmJ1dHRvbiB7XHJcbiAgaGVpZ2h0OiA4MHJweDtcclxuICBtYXJnaW46IDMwcnB4IDIwcnB4O1xyXG4gIGNvbG9yOiAjZmZmO1xyXG4gIGJvcmRlci1yYWRpdXM6IDgwcnB4O1xyXG4gIGZvbnQtc2l6ZTogMzBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQge1xyXG4gIGdldE1lbWJlckFkZHJlc3NCeUlkQVBJLFxyXG4gIHBvc3RNZW1iZXJBZGRyZXNzQVBJLFxyXG4gIHB1dE1lbWJlckFkZHJlc3NCeUlkQVBJLFxyXG59IGZyb20gJ0Avc2VydmljZXMvYWRkcmVzcydcclxuaW1wb3J0IHsgb25Mb2FkIH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbi8vIOihqOWNleaVsOaNrlxyXG5jb25zdCBmb3JtID0gcmVmKHtcclxuICByZWNlaXZlcjogJycsIC8vIOaUtui0p+S6ulxyXG4gIGNvbnRhY3Q6ICcnLCAvLyDogZTns7vmlrnlvI9cclxuICBmdWxsTG9jYXRpb246ICcnLCAvLyDnnIHluILljLoo5YmN56uv5bGV56S6KVxyXG4gIHByb3ZpbmNlQ29kZTogJycsIC8vIOecgeS7vee8lueggSjlkI7nq6/lj4LmlbApXHJcbiAgY2l0eUNvZGU6ICcnLCAvLyDln47luILnvJbnoIEo5ZCO56uv5Y+C5pWwKVxyXG4gIGNvdW50eUNvZGU6ICcnLCAvLyDljLov5Y6/57yW56CBKOWQjuerr+WPguaVsClcclxuICBhZGRyZXNzOiAnJywgLy8g6K+m57uG5Zyw5Z2AXHJcbiAgaXNEZWZhdWx0OiAwLCAvLyDpu5jorqTlnLDlnYDvvIwx5Li65piv77yMMOS4uuWQplxyXG59KVxyXG5cclxuLy8g6I635Y+W6aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIGlkPzogc3RyaW5nXHJcbn0+KClcclxuXHJcbi8vIOiOt+WPluaUtui0p+WcsOWdgOivpuaDheaVsOaNrlxyXG5jb25zdCBnZXRNZW1iZXJBZGRyZXNzQnlJZERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgaWYgKHF1ZXJ5LmlkKSB7XHJcbiAgICAvLyDlj5HpgIHor7fmsYJcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGdldE1lbWJlckFkZHJlc3NCeUlkQVBJKHF1ZXJ5LmlkKVxyXG4gICAgLy8g5oqK5pWw5o2u5ZCI5bm25Yiw6KGo5Y2V5LitXHJcbiAgICBPYmplY3QuYXNzaWduKGZvcm0udmFsdWUsIHJlcy5yZXN1bHQpXHJcbiAgfVxyXG59XHJcblxyXG4vLyDpobXpnaLliqDovb1cclxub25Mb2FkKCgpID0+IHtcclxuICBnZXRNZW1iZXJBZGRyZXNzQnlJZERhdGEoKVxyXG59KVxyXG5cclxuLy8g5Yqo5oCB6K6+572u5qCH6aKYXHJcbnVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogcXVlcnkuaWQgPyAn5L+u5pS55Zyw5Z2AJyA6ICfmlrDlu7rlnLDlnYAnIH0pXHJcblxyXG4vLyDmlLbpm4bmiYDlnKjlnLDljLpcclxuY29uc3Qgb25SZWdpb25DaGFuZ2U6IFVuaUhlbHBlci5SZWdpb25QaWNrZXJPbkNoYW5nZSA9IChldikgPT4ge1xyXG4gIC8vIOecgeW4guWMuijliY3nq6/lsZXnpLopXHJcbiAgZm9ybS52YWx1ZS5mdWxsTG9jYXRpb24gPSBldi5kZXRhaWwudmFsdWUuam9pbignICcpXHJcbiAgLy8g55yB5biC5Yy6KOWQjuerr+WPguaVsClcclxuICBjb25zdCBbcHJvdmluY2VDb2RlLCBjaXR5Q29kZSwgY291bnR5Q29kZV0gPSBldi5kZXRhaWwuY29kZSFcclxuICAvLyBmb3JtLnZhbHVlLnByb3ZpbmNlQ29kZSA9IHByb3ZpbmNlQ29kZVxyXG4gIE9iamVjdC5hc3NpZ24oZm9ybS52YWx1ZSwgeyBwcm92aW5jZUNvZGUsIGNpdHlDb2RlLCBjb3VudHlDb2RlIH0pXHJcbn1cclxuXHJcbi8vIOaUtumbhuaYr+WQpum7mOiupOaUtui0p+WcsOWdgFxyXG5jb25zdCBvblN3aXRjaENoYW5nZTogVW5pSGVscGVyLlN3aXRjaE9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgZm9ybS52YWx1ZS5pc0RlZmF1bHQgPSBldi5kZXRhaWwudmFsdWUgPyAxIDogMFxyXG59XHJcblxyXG4vLyDlrprkuYnmoKHpqozop4TliJlcclxuY29uc3QgcnVsZXM6IFVuaUhlbHBlci5VbmlGb3Jtc1J1bGVzID0ge1xyXG4gIHJlY2VpdmVyOiB7XHJcbiAgICBydWxlczogW3sgcmVxdWlyZWQ6IHRydWUsIGVycm9yTWVzc2FnZTogJ+ivt+i+k+WFpeaUtui0p+S6uuWnk+WQjScgfV0sXHJcbiAgfSxcclxuICBjb250YWN0OiB7XHJcbiAgICBydWxlczogW1xyXG4gICAgICB7IHJlcXVpcmVkOiB0cnVlLCBlcnJvck1lc3NhZ2U6ICfor7fovpPlhaXogZTns7vmlrnlvI8nIH0sXHJcbiAgICAgIHsgcGF0dGVybjogL14xWzMtOV1cXGR7OX0kLywgZXJyb3JNZXNzYWdlOiAn5omL5py65Y+35qC85byP5LiN5q2j56GuJyB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIGNvdW50eUNvZGU6IHtcclxuICAgIHJ1bGVzOiBbeyByZXF1aXJlZDogdHJ1ZSwgZXJyb3JNZXNzYWdlOiAn6K+36YCJ5oup5omA5Zyo5Zyw5Yy6JyB9XSxcclxuICB9LFxyXG4gIGFkZHJlc3M6IHtcclxuICAgIHJ1bGVzOiBbeyByZXF1aXJlZDogdHJ1ZSwgZXJyb3JNZXNzYWdlOiAn6K+36YCJ5oup6K+m57uG5Zyw5Z2AJyB9XSxcclxuICB9LFxyXG59XHJcblxyXG4vLyDooajljZXnu4Tku7blrp7kvotcclxuY29uc3QgZm9ybVJlZiA9IHJlZjxVbmlIZWxwZXIuVW5pRm9ybXNJbnN0YW5jZT4oKVxyXG5cclxuLy8g5o+Q5Lqk6KGo5Y2VXHJcbmNvbnN0IG9uU3VibWl0ID0gYXN5bmMgKCkgPT4ge1xyXG4gIHRyeSB7XHJcbiAgICAvLyDooajljZXmoKHpqoxcclxuICAgIGF3YWl0IGZvcm1SZWYudmFsdWU/LnZhbGlkYXRlPy4oKVxyXG4gICAgLy8g5qCh6aqM6YCa6L+H5ZCO5YaN5Y+R6YCB6K+35rGCXHJcbiAgICBpZiAocXVlcnkuaWQpIHtcclxuICAgICAgLy8g5L+u5pS55Zyw5Z2A6K+35rGCXHJcbiAgICAgIGF3YWl0IHB1dE1lbWJlckFkZHJlc3NCeUlkQVBJKHF1ZXJ5LmlkLCBmb3JtLnZhbHVlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5paw5bu65Zyw5Z2A6K+35rGCXHJcbiAgICAgIGF3YWl0IHBvc3RNZW1iZXJBZGRyZXNzQVBJKGZvcm0udmFsdWUpXHJcbiAgICB9XHJcbiAgICAvLyDmiJDlip/mj5DnpLpcclxuICAgIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnc3VjY2VzcycsIHRpdGxlOiBxdWVyeS5pZCA/ICfkv67mlLnmiJDlip8nIDogJ+a3u+WKoOaIkOWKnycgfSlcclxuICAgIC8vIOi/lOWbnuS4iuS4gOmhtVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHVuaS5uYXZpZ2F0ZUJhY2soKVxyXG4gICAgfSwgNDAwKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ2Vycm9yJywgdGl0bGU6ICfor7floavlhpnlrozmlbTkv6Hmga8nIH0pXHJcbiAgfVxyXG59XHJcblxyXG4vLyAjaWZkZWYgSDUgfHwgQVBQLVBMVVNcclxuY29uc3Qgb25DaXR5Q2hhbmdlOiBVbmlIZWxwZXIuVW5pRGF0YVBpY2tlck9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgLy8g55yB5biC5Yy6XHJcbiAgY29uc3QgW3Byb3ZpbmNlLCBjaXR5LCBjb3VudHldID0gZXYuZGV0YWlsLnZhbHVlXHJcbiAgLy8g5pS26ZuG5ZCO56uv5omA6ZyA55qEIGNvZGUg5pWw5o2uXHJcbiAgT2JqZWN0LmFzc2lnbihmb3JtLnZhbHVlLCB7XHJcbiAgICBwcm92aW5jZUNvZGU6IHByb3ZpbmNlLnZhbHVlLFxyXG4gICAgY2l0eUNvZGU6IGNpdHkudmFsdWUsXHJcbiAgICBjb3VudHlDb2RlOiBjb3VudHkudmFsdWUsXHJcbiAgfSlcclxufVxyXG4vLyAjZW5kaWZcclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICA8dW5pLWZvcm1zIDpydWxlcz1cInJ1bGVzXCIgOm1vZGVsPVwiZm9ybVwiIHJlZj1cImZvcm1SZWZcIj5cclxuICAgICAgPCEtLSDooajljZXlhoXlrrkgLS0+XHJcbiAgICAgIDx1bmktZm9ybXMtaXRlbSBuYW1lPVwicmVjZWl2ZXJcIiBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwibGFiZWxcIj7mlLbotKfkuro8L3RleHQ+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeaUtui0p+S6uuWnk+WQjVwiIHYtbW9kZWw9XCJmb3JtLnJlY2VpdmVyXCIgLz5cclxuICAgICAgPC91bmktZm9ybXMtaXRlbT5cclxuICAgICAgPHVuaS1mb3Jtcy1pdGVtIG5hbWU9XCJjb250YWN0XCIgY2xhc3M9XCJmb3JtLWl0ZW1cIj5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+5omL5py65Y+356CBPC90ZXh0PlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJpbnB1dFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeaUtui0p+S6uuaJi+acuuWPt+eggVwiXHJcbiAgICAgICAgICA6bWF4bGVuZ3RoPVwiMTFcIlxyXG4gICAgICAgICAgdi1tb2RlbD1cImZvcm0uY29udGFjdFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC91bmktZm9ybXMtaXRlbT5cclxuICAgICAgPHVuaS1mb3Jtcy1pdGVtIG5hbWU9XCJjb3VudHlDb2RlXCIgY2xhc3M9XCJmb3JtLWl0ZW1cIj5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImxhYmVsXCI+5omA5Zyo5Zyw5Yy6PC90ZXh0PlxyXG4gICAgICAgIDwhLS0gI2lmZGVmIE1QLVdFSVhJTiAtLT5cclxuICAgICAgICA8cGlja2VyXHJcbiAgICAgICAgICBAY2hhbmdlPVwib25SZWdpb25DaGFuZ2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJwaWNrZXJcIlxyXG4gICAgICAgICAgbW9kZT1cInJlZ2lvblwiXHJcbiAgICAgICAgICA6dmFsdWU9XCJmb3JtLmZ1bGxMb2NhdGlvbi5zcGxpdCgnICcpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8dmlldyB2LWlmPVwiZm9ybS5mdWxsTG9jYXRpb25cIj57eyBmb3JtLmZ1bGxMb2NhdGlvbiB9fTwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IHYtZWxzZSBjbGFzcz1cInBsYWNlaG9sZGVyXCI+6K+36YCJ5oup55yBL+W4gi/ljLoo5Y6/KTwvdmlldz5cclxuICAgICAgICA8L3BpY2tlcj5cclxuICAgICAgICA8IS0tICNlbmRpZiAtLT5cclxuXHJcbiAgICAgICAgPCEtLSAjaWZkZWYgSDUgfHwgQVBQLVBMVVMgLS0+XHJcbiAgICAgICAgPHVuaS1kYXRhLXBpY2tlclxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fpgInmi6nlnLDlnYBcIlxyXG4gICAgICAgICAgcG9wdXAtdGl0bGU9XCLor7fpgInmi6nln47luIJcIlxyXG4gICAgICAgICAgY29sbGVjdGlvbj1cIm9wZW5kYi1jaXR5LWNoaW5hXCJcclxuICAgICAgICAgIGZpZWxkPVwiY29kZSBhcyB2YWx1ZSwgbmFtZSBhcyB0ZXh0XCJcclxuICAgICAgICAgIG9yZGVyYnk9XCJ2YWx1ZSBhc2NcIlxyXG4gICAgICAgICAgOnN0ZXAtc2Vhcmg9XCJ0cnVlXCJcclxuICAgICAgICAgIHNlbGYtZmllbGQ9XCJjb2RlXCJcclxuICAgICAgICAgIHBhcmVudC1maWVsZD1cInBhcmVudF9jb2RlXCJcclxuICAgICAgICAgIEBjaGFuZ2U9XCJvbkNpdHlDaGFuZ2VcIlxyXG4gICAgICAgICAgOmNsZWFyLWljb249XCJmYWxzZVwiXHJcbiAgICAgICAgICB2LW1vZGVsPVwiZm9ybS5jb3VudHlDb2RlXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDwhLS0gI2VuZGlmIC0tPlxyXG4gICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxyXG4gICAgICA8dW5pLWZvcm1zLWl0ZW0gbmFtZT1cImFkZHJlc3NcIiBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwibGFiZWxcIj7or6bnu4blnLDlnYA8L3RleHQ+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBwbGFjZWhvbGRlcj1cIuihl+mBk+OAgealvOeJjOWPt+etieS/oeaBr1wiIHYtbW9kZWw9XCJmb3JtLmFkZHJlc3NcIiAvPlxyXG4gICAgICA8L3VuaS1mb3Jtcy1pdGVtPlxyXG4gICAgICA8dmlldyBjbGFzcz1cImZvcm0taXRlbVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+6K6+5Li66buY6K6k5Zyw5Z2APC9sYWJlbD5cclxuICAgICAgICA8c3dpdGNoXHJcbiAgICAgICAgICBAY2hhbmdlPVwib25Td2l0Y2hDaGFuZ2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzd2l0Y2hcIlxyXG4gICAgICAgICAgY29sb3I9XCIjMjdiYTliXCJcclxuICAgICAgICAgIDpjaGVja2VkPVwiZm9ybS5pc0RlZmF1bHQgPT09IDFcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdW5pLWZvcm1zPlxyXG4gIDwvdmlldz5cclxuICA8IS0tIOaPkOS6pOaMiemSriAtLT5cclxuICA8YnV0dG9uIEB0YXA9XCJvblN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uXCI+5L+d5a2Y5bm25L2/55SoPC9idXR0b24+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLy8g5rex5bqm6YCJ5oup5Zmo5L+u5pS5IHVuaS1kYXRhLXBpY2tlciDnu4Tku7bmoLflvI9cclxuOmRlZXAoLnNlbGVjdGVkLWFyZWEpIHtcclxuICBmbGV4OiAwIDEgYXV0bztcclxuICBoZWlnaHQ6IGF1dG87XHJcbn1cclxuXHJcbnBhZ2Uge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XHJcbn1cclxuXHJcbi5jb250ZW50IHtcclxuICBtYXJnaW46IDIwcnB4IDIwcnB4IDA7XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cclxuICAuZm9ybS1pdGVtLFxyXG4gIC51bmktZm9ybXMtaXRlbSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIG1pbi1oZWlnaHQ6IDk2cnB4O1xyXG4gICAgcGFkZGluZzogMjVycHggMTBycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgIGJvcmRlci1ib3R0b206IDFycHggc29saWQgI2RkZDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcblxyXG4gICAgLy8g6LCD5pW0IHVuaS1mb3JtcyDmoLflvI9cclxuICAgIC51bmktZm9ybXMtaXRlbV9fY29udGVudCB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLnVuaS1mb3Jtcy1pdGVtX19lcnJvciB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAyMDBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIC5sYWJlbCB7XHJcbiAgICAgIHdpZHRoOiAyMDBycHg7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgfVxyXG5cclxuICAgIC5pbnB1dCB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICBoZWlnaHQ6IDQ2cnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5zd2l0Y2gge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHJpZ2h0OiAtMjBycHg7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcclxuICAgIH1cclxuXHJcbiAgICAucGlja2VyIHtcclxuICAgICAgZmxleDogMTtcclxuICAgIH1cclxuXHJcbiAgICAucGxhY2Vob2xkZXIge1xyXG4gICAgICBjb2xvcjogIzgwODA4MDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi5idXR0b24ge1xyXG4gIGhlaWdodDogODBycHg7XHJcbiAgbWFyZ2luOiAzMHJweCAyMHJweDtcclxuICBjb2xvcjogI2ZmZjtcclxuICBib3JkZXItcmFkaXVzOiA4MHJweDtcclxuICBmb250LXNpemU6IDMwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiaW1wb3J0IHR5cGUgeyBPcmRlckxpc3RSZXN1bHQgfSBmcm9tICdAL3R5cGVzL29yZGVyJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgT3JkZXJDcmVhdGVQYXJhbXMsXHJcbiAgT3JkZXJMaXN0UGFyYW1zLFxyXG4gIE9yZGVyTG9naXN0aWNSZXN1bHQsXHJcbiAgT3JkZXJQcmVSZXN1bHQsXHJcbiAgT3JkZXJSZXN1bHQsXHJcbn0gZnJvbSAnQC90eXBlcy9vcmRlcidcclxuaW1wb3J0IHsgaHR0cCB9IGZyb20gJ0AvdXRpbHMvaHR0cCdcclxuLyoqXHJcbiAqIOWhq+WGmeiuouWNlS3ojrflj5bpooTku5jorqLljZVcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRNZW1iZXJPcmRlclByZUFQSSA9ICgpID0+IHtcclxuICByZXR1cm4gaHR0cDxPcmRlclByZVJlc3VsdD4oe1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogJy9tZW1iZXIvb3JkZXIvcHJlJyxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog5aGr5YaZ6K6i5Y2VLeiOt+WPlueri+WNs+i0reS5sOiuouWNlVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldE1lbWJlck9yZGVyUHJlTm93QVBJID0gKGRhdGE6IHtcclxuICBza3VJZDogc3RyaW5nXHJcbiAgY291bnQ6IHN0cmluZ1xyXG4gIGFkZHJlc3NJZD86IHN0cmluZ1xyXG59KSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8T3JkZXJQcmVSZXN1bHQ+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6ICcvbWVtYmVyL29yZGVyL3ByZS9ub3cnLFxyXG4gICAgZGF0YSxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog5aGr5YaZ6K6i5Y2VLeWGjeasoei0reS5sFxyXG4gKiBAcGFyYW0gaWQg6K6i5Y2VaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRNZW1iZXJPcmRlclJlcHVyY2hhc2VCeUlkQVBJID0gKGlkOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gaHR0cDxPcmRlclByZVJlc3VsdD4oe1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogYC9tZW1iZXIvb3JkZXIvcmVwdXJjaGFzZS8ke2lkfWAsXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIOaPkOS6pOiuouWNlVxyXG4gKiBAcGFyYW0gZGF0YSDor7fmsYLlj4LmlbBcclxuICovXHJcbmV4cG9ydCBjb25zdCBwb3N0TWVtYmVyT3JkZXJBUEkgPSAoZGF0YTogT3JkZXJDcmVhdGVQYXJhbXMpID0+IHtcclxuICByZXR1cm4gaHR0cDx7IGlkOiBzdHJpbmcgfT4oe1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICcvbWVtYmVyL29yZGVyJyxcclxuICAgIGRhdGEsXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIOiOt+WPluiuouWNleivpuaDhVxyXG4gKiBAcGFyYW0gaWQg6K6i5Y2VaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRNZW1iZXJPcmRlckJ5SWRBUEkgPSAoaWQ6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBodHRwPE9yZGVyUmVzdWx0Pih7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiBgL21lbWJlci9vcmRlci8ke2lkfWAsXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIOaooeaLn+WPkei0py3lhoXmtYvniYhcclxuICogQGRlc2NyaXB0aW9uIOWcqERFVueOr+Wig+S4i+S9v+eUqO+8jOS7heWcqOiuouWNleeKtuaAgeS4uuW+heWPkei0p+aXtu+8jOWPr+aooeaLn+WPkei0p++8jOiwg+eUqOWQjuiuouWNleeKtuaAgeS/ruaUueS4uuW+heaUtui0p++8jOWMheWQq+aooeaLn+eJqea1geOAglxyXG4gKiBAcGFyYW0gaWQg6K6i5Y2VaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRNZW1iZXJPcmRlckNvbnNpZ25tZW50QnlJZEFQSSA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHAoe1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogYC9tZW1iZXIvb3JkZXIvY29uc2lnbm1lbnQvJHtpZH1gLFxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnoa7orqTmlLbotKdcclxuICogQGRlc2NyaXB0aW9uIOS7heWcqOiuouWNleeKtuaAgeS4uuW+heaUtui0p+aXtu+8jOWPr+ehruiupOaUtui0p+OAglxyXG4gKiBAcGFyYW0gaWQg6K6i5Y2VaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBwdXRNZW1iZXJPcmRlclJlY2VpcHRCeUlkQVBJID0gKGlkOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gaHR0cDxPcmRlclJlc3VsdD4oe1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYC9tZW1iZXIvb3JkZXIvJHtpZH0vcmVjZWlwdGAsXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIOiOt+WPluiuouWNleeJqea1gVxyXG4gKiBAZGVzY3JpcHRpb24g5LuF5Zyo6K6i5Y2V54q25oCB5Li65b6F5pS26LSn77yM5b6F6K+E5Lu377yM5bey5a6M5oiQ5pe277yM5Y+v6I635Y+W54mp5rWB5L+h5oGv44CCXHJcbiAqIEBwYXJhbSBpZCDorqLljZVpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldE1lbWJlck9yZGVyTG9naXN0aWNzQnlJZEFQSSA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8T3JkZXJMb2dpc3RpY1Jlc3VsdD4oe1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogYC9tZW1iZXIvb3JkZXIvJHtpZH0vbG9naXN0aWNzYCxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog5Yig6Zmk6K6i5Y2VXHJcbiAqIEBkZXNjcmlwdGlvbiDku4XlnKjorqLljZXnirbmgIHkuLrlvoXor4Tku7fvvIzlt7LlrozmiJDvvIzlt7Llj5bmtojml7bvvIzlj6/liKDpmaTorqLljZXjgIJcclxuICogQHBhcmFtIGRhdGEgaWRzIOiuouWNlembhuWQiFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZU1lbWJlck9yZGVyQVBJID0gKGRhdGE6IHsgaWRzOiBzdHJpbmdbXSB9KSA9PiB7XHJcbiAgcmV0dXJuIGh0dHAoe1xyXG4gICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgIHVybDogYC9tZW1iZXIvb3JkZXJgLFxyXG4gICAgZGF0YSxcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog5Y+W5raI6K6i5Y2VXHJcbiAqIEBkZXNjcmlwdGlvbiDku4XlnKjorqLljZXnirbmgIHkuLrlvoXku5jmrL7ml7bvvIzlj6/lj5bmtojorqLljZXjgIJcclxuICogQHBhcmFtIGlkIOiuouWNlWlkXHJcbiAqIEBwYXJhbSBkYXRhIGNhbmNlbFJlYXNvbiDlj5bmtojnkIbnlLFcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRNZW1iZXJPcmRlckNhbmNlbEJ5SWRBUEkgPSAoaWQ6IHN0cmluZywgZGF0YTogeyBjYW5jZWxSZWFzb246IHN0cmluZyB9KSA9PiB7XHJcbiAgcmV0dXJuIGh0dHA8T3JkZXJSZXN1bHQ+KHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGAvbWVtYmVyL29yZGVyLyR7aWR9L2NhbmNlbGAsXHJcbiAgICBkYXRhLFxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDojrflj5borqLljZXliJfooahcclxuICogQHBhcmFtIGRhdGEgb3JkZXJTdGF0ZSDorqLljZXnirbmgIFcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRNZW1iZXJPcmRlckFQSSA9IChkYXRhOiBPcmRlckxpc3RQYXJhbXMpID0+IHtcclxuICByZXR1cm4gaHR0cDxPcmRlckxpc3RSZXN1bHQ+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IGAvbWVtYmVyL29yZGVyYCxcclxuICAgIGRhdGEsXHJcbiAgfSlcclxufVxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQge1xyXG4gIGdldE1lbWJlck9yZGVyUHJlQVBJLFxyXG4gIGdldE1lbWJlck9yZGVyUHJlTm93QVBJLFxyXG4gIGdldE1lbWJlck9yZGVyUmVwdXJjaGFzZUJ5SWRBUEksXHJcbiAgcG9zdE1lbWJlck9yZGVyQVBJLFxyXG59IGZyb20gJ0Avc2VydmljZXMvb3JkZXInXHJcbmltcG9ydCB7IHVzZUFkZHJlc3NTdG9yZSB9IGZyb20gJ0Avc3RvcmVzL21vZHVsZXMvYWRkcmVzcydcclxuaW1wb3J0IHR5cGUgeyBPcmRlclByZVJlc3VsdCB9IGZyb20gJ0AvdHlwZXMvb3JkZXInXHJcbmltcG9ydCB7IG9uTG9hZCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyBjb21wdXRlZCwgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLy8g6I635Y+W5bGP5bmV6L6555WM5Yiw5a6J5YWo5Yy65Z+f6Led56a7XHJcbmNvbnN0IHsgc2FmZUFyZWFJbnNldHMgfSA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpXHJcbi8vIOiuouWNleWkh+azqFxyXG5jb25zdCBidXllck1lc3NhZ2UgPSByZWYoJycpXHJcbi8vIOmFjemAgeaXtumXtFxyXG5jb25zdCBkZWxpdmVyeUxpc3QgPSByZWYoW1xyXG4gIHsgdHlwZTogMSwgdGV4dDogJ+aXtumXtOS4jemZkCAo5ZGo5LiA6Iez5ZGo5pelKScgfSxcclxuICB7IHR5cGU6IDIsIHRleHQ6ICflt6XkvZzml6XpgIEgKOWRqOS4gOiHs+WRqOS6lCknIH0sXHJcbiAgeyB0eXBlOiAzLCB0ZXh0OiAn5ZGo5pyr6YWN6YCBICjlkajlha3oh7Plkajml6UpJyB9LFxyXG5dKVxyXG4vLyDlvZPliY3phY3pgIHml7bpl7TkuIvmoIdcclxuY29uc3QgYWN0aXZlSW5kZXggPSByZWYoMClcclxuLy8g5b2T5YmN6YWN6YCB5pe26Ze0XHJcbmNvbnN0IGFjdGl2ZURlbGl2ZXJ5ID0gY29tcHV0ZWQoKCkgPT4gZGVsaXZlcnlMaXN0LnZhbHVlW2FjdGl2ZUluZGV4LnZhbHVlXSlcclxuLy8g5L+u5pS56YWN6YCB5pe26Ze0XHJcbmNvbnN0IG9uQ2hhbmdlRGVsaXZlcnk6IFVuaUhlbHBlci5TZWxlY3RvclBpY2tlck9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgYWN0aXZlSW5kZXgudmFsdWUgPSBldi5kZXRhaWwudmFsdWVcclxufVxyXG5cclxuLy8g6aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIHNrdUlkPzogc3RyaW5nXHJcbiAgY291bnQ/OiBzdHJpbmdcclxuICBvcmRlcklkPzogc3RyaW5nXHJcbn0+KClcclxuXHJcbi8vIOiOt+WPluiuouWNleS/oeaBr1xyXG5jb25zdCBvcmRlclByZSA9IHJlZjxPcmRlclByZVJlc3VsdD4oKVxyXG5jb25zdCBnZXRNZW1iZXJPcmRlclByZURhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgaWYgKHF1ZXJ5LmNvdW50ICYmIHF1ZXJ5LnNrdUlkKSB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJPcmRlclByZU5vd0FQSSh7XHJcbiAgICAgIGNvdW50OiBxdWVyeS5jb3VudCxcclxuICAgICAgc2t1SWQ6IHF1ZXJ5LnNrdUlkLFxyXG4gICAgfSlcclxuICAgIG9yZGVyUHJlLnZhbHVlID0gcmVzLnJlc3VsdFxyXG4gIH0gZWxzZSBpZiAocXVlcnkub3JkZXJJZCkge1xyXG4gICAgLy8g5YaN5qyh6LSt5LmwXHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJPcmRlclJlcHVyY2hhc2VCeUlkQVBJKHF1ZXJ5Lm9yZGVySWQpXHJcbiAgICBvcmRlclByZS52YWx1ZSA9IHJlcy5yZXN1bHRcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0TWVtYmVyT3JkZXJQcmVBUEkoKVxyXG4gICAgb3JkZXJQcmUudmFsdWUgPSByZXMucmVzdWx0XHJcbiAgfVxyXG59XHJcblxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIGdldE1lbWJlck9yZGVyUHJlRGF0YSgpXHJcbn0pXHJcblxyXG5jb25zdCBhZGRyZXNzU3RvcmUgPSB1c2VBZGRyZXNzU3RvcmUoKVxyXG4vLyDmlLbotKflnLDlnYBcclxuY29uc3Qgc2VsZWN0ZUFkZHJlc3MgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIGFkZHJlc3NTdG9yZS5zZWxlY3RlZEFkZHJlc3MgfHwgb3JkZXJQcmUudmFsdWU/LnVzZXJBZGRyZXNzZXMuZmluZCgodikgPT4gdi5pc0RlZmF1bHQpXHJcbn0pXHJcblxyXG4vLyDmj5DkuqTorqLljZVcclxuY29uc3Qgb25PcmRlclN1Ym1pdCA9IGFzeW5jICgpID0+IHtcclxuICAvLyDmsqHmnInmlLbotKflnLDlnYDmj5DphpJcclxuICBpZiAoIXNlbGVjdGVBZGRyZXNzLnZhbHVlPy5pZCkge1xyXG4gICAgcmV0dXJuIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnbm9uZScsIHRpdGxlOiAn6K+36YCJ5oup5pS26LSn5Zyw5Z2AJyB9KVxyXG4gIH1cclxuICAvLyDlj5HpgIHor7fmsYJcclxuICBjb25zdCByZXMgPSBhd2FpdCBwb3N0TWVtYmVyT3JkZXJBUEkoe1xyXG4gICAgYWRkcmVzc0lkOiBzZWxlY3RlQWRkcmVzcy52YWx1ZT8uaWQsXHJcbiAgICBidXllck1lc3NhZ2U6IGJ1eWVyTWVzc2FnZS52YWx1ZSxcclxuICAgIGRlbGl2ZXJ5VGltZVR5cGU6IGFjdGl2ZURlbGl2ZXJ5LnZhbHVlLnR5cGUsXHJcbiAgICBnb29kczogb3JkZXJQcmUudmFsdWUhLmdvb2RzLm1hcCgodikgPT4gKHsgY291bnQ6IHYuY291bnQsIHNrdUlkOiB2LnNrdUlkIH0pKSxcclxuICAgIHBheUNoYW5uZWw6IDIsXHJcbiAgICBwYXlUeXBlOiAxLFxyXG4gIH0pXHJcbiAgLy8g5YWz6Zet5b2T5YmN6aG16Z2i77yM6Lez6L2s5Yiw6K6i5Y2V6K+m5oOF77yM5Lyg6YCS6K6i5Y2VaWRcclxuICB1bmkucmVkaXJlY3RUbyh7IHVybDogYC9wYWdlc09yZGVyL2RldGFpbC9kZXRhaWw/aWQ9JHtyZXMucmVzdWx0LmlkfWAgfSlcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIHNjcm9sbC15IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDwhLS0g5pS26LSn5Zyw5Z2AIC0tPlxyXG4gICAgPG5hdmlnYXRvclxyXG4gICAgICB2LWlmPVwic2VsZWN0ZUFkZHJlc3NcIlxyXG4gICAgICBjbGFzcz1cInNoaXBtZW50XCJcclxuICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgdXJsPVwiL3BhZ2VzTWVtYmVyL2FkZHJlc3MvYWRkcmVzcz9mcm9tPW9yZGVyXCJcclxuICAgID5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyXCI+IHt7IHNlbGVjdGVBZGRyZXNzLnJlY2VpdmVyIH19IHt7IHNlbGVjdGVBZGRyZXNzLmNvbnRhY3QgfX0gPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImFkZHJlc3NcIj4ge3sgc2VsZWN0ZUFkZHJlc3MuZnVsbExvY2F0aW9uIH19IHt7IHNlbGVjdGVBZGRyZXNzLmFkZHJlc3MgfX0gPC92aWV3PlxyXG4gICAgICA8dGV4dCBjbGFzcz1cImljb24gaWNvbi1yaWdodFwiPjwvdGV4dD5cclxuICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgPG5hdmlnYXRvclxyXG4gICAgICB2LWVsc2VcclxuICAgICAgY2xhc3M9XCJzaGlwbWVudFwiXHJcbiAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgIHVybD1cIi9wYWdlc01lbWJlci9hZGRyZXNzL2FkZHJlc3M/ZnJvbT1vcmRlclwiXHJcbiAgICA+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiYWRkcmVzc1wiPiDor7fpgInmi6nmlLbotKflnLDlnYAgPC92aWV3PlxyXG4gICAgICA8dGV4dCBjbGFzcz1cImljb24gaWNvbi1yaWdodFwiPjwvdGV4dD5cclxuICAgIDwvbmF2aWdhdG9yPlxyXG5cclxuICAgIDwhLS0g5ZWG5ZOB5L+h5oGvIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJnb29kc1wiPlxyXG4gICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgdi1mb3I9XCJpdGVtIGluIG9yZGVyUHJlPy5nb29kc1wiXHJcbiAgICAgICAgOmtleT1cIml0ZW0uc2t1SWRcIlxyXG4gICAgICAgIDp1cmw9XCJgL3BhZ2VzL2dvb2RzL2dvb2RzP2lkPSR7aXRlbS5pZH1gXCJcclxuICAgICAgICBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8aW1hZ2UgY2xhc3M9XCJwaWN0dXJlXCIgOnNyYz1cIml0ZW0ucGljdHVyZVwiIC8+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJtZXRhXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXNcIj4ge3sgaXRlbS5uYW1lIH19IDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYXR0cnNcIj57eyBpdGVtLmF0dHJzVGV4dCB9fTwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VzXCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicGF5LXByaWNlIHN5bWJvbFwiPnt7IGl0ZW0ucGF5UHJpY2UgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2Ugc3ltYm9sXCI+e3sgaXRlbS5wcmljZSB9fTwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiY291bnRcIj54e3sgaXRlbS5jb3VudCB9fTwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgPC92aWV3PlxyXG5cclxuICAgIDwhLS0g6YWN6YCB5Y+K5pSv5LuY5pa55byPIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJyZWxhdGVkXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPumFjemAgeaXtumXtDwvdGV4dD5cclxuICAgICAgICA8cGlja2VyIDpyYW5nZT1cImRlbGl2ZXJ5TGlzdFwiIHJhbmdlLWtleT1cInRleHRcIiBAY2hhbmdlPVwib25DaGFuZ2VEZWxpdmVyeVwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJpY29uLWZvbnRzIHBpY2tlclwiPnt7IGFjdGl2ZURlbGl2ZXJ5LnRleHQgfX08L3ZpZXc+XHJcbiAgICAgICAgPC9waWNrZXI+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+6K6i5Y2V5aSH5rOoPC90ZXh0PlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJpbnB1dFwiXHJcbiAgICAgICAgICA6Y3Vyc29yLXNwYWNpbmc9XCIzMFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIumAiemimO+8jOW7uuiurueVmeiogOWJjeWFiOS4juWVhuWutuayn+mAmuehruiupFwiXHJcbiAgICAgICAgICB2LW1vZGVsPVwiYnV5ZXJNZXNzYWdlXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcblxyXG4gICAgPCEtLSDmlK/ku5jph5Hpop0gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cInNldHRsZW1lbnRcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+5ZWG5ZOB5oC75Lu3OiA8L3RleHQ+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJudW1iZXIgc3ltYm9sXCI+e3sgb3JkZXJQcmU/LnN1bW1hcnkudG90YWxQcmljZS50b0ZpeGVkKDIpIH19PC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPui/kOi0uTogPC90ZXh0PlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwibnVtYmVyIHN5bWJvbFwiPnt7IG9yZGVyUHJlPy5zdW1tYXJ5LnBvc3RGZWUudG9GaXhlZCgyKSB9fTwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvc2Nyb2xsLXZpZXc+XHJcblxyXG4gIDwhLS0g5ZC45bqV5bel5YW35qCPIC0tPlxyXG4gIDx2aWV3IGNsYXNzPVwidG9vbGJhclwiIDpzdHlsZT1cInsgcGFkZGluZ0JvdHRvbTogc2FmZUFyZWFJbnNldHM/LmJvdHRvbSArICdweCcgfVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0b3RhbC1wYXkgc3ltYm9sXCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwibnVtYmVyXCI+e3sgb3JkZXJQcmU/LnN1bW1hcnkudG90YWxQYXlQcmljZS50b0ZpeGVkKDIpIH19PC90ZXh0PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJidXR0b25cIiA6Y2xhc3M9XCJ7IGRpc2FibGVkOiAhc2VsZWN0ZUFkZHJlc3M/LmlkIH1cIiBAdGFwPVwib25PcmRlclN1Ym1pdFwiPlxyXG4gICAgICDmj5DkuqTorqLljZVcclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XHJcbn1cclxuXHJcbi5zeW1ib2w6OmJlZm9yZSB7XHJcbiAgY29udGVudDogJ8KlJztcclxuICBmb250LXNpemU6IDgwJTtcclxuICBtYXJnaW4tcmlnaHQ6IDVycHg7XHJcbn1cclxuXHJcbi5zaGlwbWVudCB7XHJcbiAgbWFyZ2luOiAyMHJweDtcclxuICBwYWRkaW5nOiAzMHJweCAzMHJweCAzMHJweCA4NHJweDtcclxuICBmb250LXNpemU6IDI2cnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJhY2tncm91bmQ6IHVybChodHRwczovL3BjYXBpLXhpYW90dXhpYW4tZnJvbnQtZGV2dGVzdC5pdGhlaW1hLm5ldC9taW5pYXBwL2ltYWdlcy9sb2NhdGUucG5nKVxyXG4gICAgMjBycHggY2VudGVyIC8gNTBycHggbm8tcmVwZWF0ICNmZmY7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuICAuaWNvbiB7XHJcbiAgICBmb250LXNpemU6IDM2cnB4O1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAyMHJweDtcclxuICB9XHJcblxyXG4gIC51c2VyIHtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogNXJweDtcclxuICB9XHJcblxyXG4gIC5hZGRyZXNzIHtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG4gIH1cclxufVxyXG5cclxuLmdvb2RzIHtcclxuICBtYXJnaW46IDIwcnB4O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIHBhZGRpbmc6IDMwcnB4IDA7XHJcbiAgICBib3JkZXItdG9wOiAxcnB4IHNvbGlkICNlZWU7XHJcblxyXG4gICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgIGJvcmRlci10b3A6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLnBpY3R1cmUge1xyXG4gICAgICB3aWR0aDogMTcwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDE3MHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLm1ldGEge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgfVxyXG5cclxuICAgIC5uYW1lIHtcclxuICAgICAgaGVpZ2h0OiA4MHJweDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmF0dHJzIHtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuODtcclxuICAgICAgcGFkZGluZzogMCAxNXJweDtcclxuICAgICAgbWFyZ2luLXRvcDogNnJweDtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNHJweDtcclxuICAgICAgY29sb3I6ICM4ODg7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjg7XHJcbiAgICB9XHJcblxyXG4gICAgLnByaWNlcyB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcclxuICAgICAgbWFyZ2luLXRvcDogNnJweDtcclxuICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuXHJcbiAgICAgIC5wYXktcHJpY2Uge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBycHg7XHJcbiAgICAgICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5wcmljZSB7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgICBjb2xvcjogIzk5OTtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5jb3VudCB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICByaWdodDogMDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4ucmVsYXRlZCB7XHJcbiAgbWFyZ2luOiAyMHJweDtcclxuICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWluLWhlaWdodDogODBycHg7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgfVxyXG5cclxuICAuaW5wdXQge1xyXG4gICAgZmxleDogMTtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgbWFyZ2luOiAyMHJweCAwO1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgfVxyXG5cclxuICAuaXRlbSAudGV4dCB7XHJcbiAgICB3aWR0aDogMTI1cnB4O1xyXG4gIH1cclxuXHJcbiAgLnBpY2tlciB7XHJcbiAgICBjb2xvcjogIzY2NjtcclxuICB9XHJcblxyXG4gIC5waWNrZXI6OmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICdcXGU2YzInO1xyXG4gIH1cclxufVxyXG5cclxuLyog57uT566X5riF5Y2VICovXHJcbi5zZXR0bGVtZW50IHtcclxuICBtYXJnaW46IDIwcnB4O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBoZWlnaHQ6IDgwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG4gIH1cclxuXHJcbiAgLmRhbmdlciB7XHJcbiAgICBjb2xvcjogI2NmNDQ0NDtcclxuICB9XHJcbn1cclxuXHJcbi8qIOWQuOW6leW3peWFt+agjyAqL1xyXG4udG9vbGJhciB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgYm90dG9tOiBjYWxjKHZhcigtLXdpbmRvdy1ib3R0b20pKTtcclxuICB6LWluZGV4OiAxO1xyXG5cclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIGhlaWdodDogMTAwcnB4O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgYm9yZGVyLXRvcDogMXJweCBzb2xpZCAjZWFlYWVhO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcblxyXG4gIC50b3RhbC1wYXkge1xyXG4gICAgZm9udC1zaXplOiA0MHJweDtcclxuICAgIGNvbG9yOiAjY2Y0NDQ0O1xyXG5cclxuICAgIC5kZWNpbWFsIHtcclxuICAgICAgZm9udC1zaXplOiA3NSU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuYnV0dG9uIHtcclxuICAgIHdpZHRoOiAyMjBycHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBsaW5lLWhlaWdodDogNzJycHg7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbiAgICBib3JkZXItcmFkaXVzOiA3MnJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgfVxyXG5cclxuICAuZGlzYWJsZWQge1xyXG4gICAgb3BhY2l0eTogMC42O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQge1xyXG4gIGdldE1lbWJlck9yZGVyUHJlQVBJLFxyXG4gIGdldE1lbWJlck9yZGVyUHJlTm93QVBJLFxyXG4gIGdldE1lbWJlck9yZGVyUmVwdXJjaGFzZUJ5SWRBUEksXHJcbiAgcG9zdE1lbWJlck9yZGVyQVBJLFxyXG59IGZyb20gJ0Avc2VydmljZXMvb3JkZXInXHJcbmltcG9ydCB7IHVzZUFkZHJlc3NTdG9yZSB9IGZyb20gJ0Avc3RvcmVzL21vZHVsZXMvYWRkcmVzcydcclxuaW1wb3J0IHR5cGUgeyBPcmRlclByZVJlc3VsdCB9IGZyb20gJ0AvdHlwZXMvb3JkZXInXHJcbmltcG9ydCB7IG9uTG9hZCB9IGZyb20gJ0BkY2xvdWRpby91bmktYXBwJ1xyXG5pbXBvcnQgeyBjb21wdXRlZCwgcmVmIH0gZnJvbSAndnVlJ1xyXG5cclxuLy8g6I635Y+W5bGP5bmV6L6555WM5Yiw5a6J5YWo5Yy65Z+f6Led56a7XHJcbmNvbnN0IHsgc2FmZUFyZWFJbnNldHMgfSA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpXHJcbi8vIOiuouWNleWkh+azqFxyXG5jb25zdCBidXllck1lc3NhZ2UgPSByZWYoJycpXHJcbi8vIOmFjemAgeaXtumXtFxyXG5jb25zdCBkZWxpdmVyeUxpc3QgPSByZWYoW1xyXG4gIHsgdHlwZTogMSwgdGV4dDogJ+aXtumXtOS4jemZkCAo5ZGo5LiA6Iez5ZGo5pelKScgfSxcclxuICB7IHR5cGU6IDIsIHRleHQ6ICflt6XkvZzml6XpgIEgKOWRqOS4gOiHs+WRqOS6lCknIH0sXHJcbiAgeyB0eXBlOiAzLCB0ZXh0OiAn5ZGo5pyr6YWN6YCBICjlkajlha3oh7Plkajml6UpJyB9LFxyXG5dKVxyXG4vLyDlvZPliY3phY3pgIHml7bpl7TkuIvmoIdcclxuY29uc3QgYWN0aXZlSW5kZXggPSByZWYoMClcclxuLy8g5b2T5YmN6YWN6YCB5pe26Ze0XHJcbmNvbnN0IGFjdGl2ZURlbGl2ZXJ5ID0gY29tcHV0ZWQoKCkgPT4gZGVsaXZlcnlMaXN0LnZhbHVlW2FjdGl2ZUluZGV4LnZhbHVlXSlcclxuLy8g5L+u5pS56YWN6YCB5pe26Ze0XHJcbmNvbnN0IG9uQ2hhbmdlRGVsaXZlcnk6IFVuaUhlbHBlci5TZWxlY3RvclBpY2tlck9uQ2hhbmdlID0gKGV2KSA9PiB7XHJcbiAgYWN0aXZlSW5kZXgudmFsdWUgPSBldi5kZXRhaWwudmFsdWVcclxufVxyXG5cclxuLy8g6aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIHNrdUlkPzogc3RyaW5nXHJcbiAgY291bnQ/OiBzdHJpbmdcclxuICBvcmRlcklkPzogc3RyaW5nXHJcbn0+KClcclxuXHJcbi8vIOiOt+WPluiuouWNleS/oeaBr1xyXG5jb25zdCBvcmRlclByZSA9IHJlZjxPcmRlclByZVJlc3VsdD4oKVxyXG5jb25zdCBnZXRNZW1iZXJPcmRlclByZURhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgaWYgKHF1ZXJ5LmNvdW50ICYmIHF1ZXJ5LnNrdUlkKSB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJPcmRlclByZU5vd0FQSSh7XHJcbiAgICAgIGNvdW50OiBxdWVyeS5jb3VudCxcclxuICAgICAgc2t1SWQ6IHF1ZXJ5LnNrdUlkLFxyXG4gICAgfSlcclxuICAgIG9yZGVyUHJlLnZhbHVlID0gcmVzLnJlc3VsdFxyXG4gIH0gZWxzZSBpZiAocXVlcnkub3JkZXJJZCkge1xyXG4gICAgLy8g5YaN5qyh6LSt5LmwXHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJPcmRlclJlcHVyY2hhc2VCeUlkQVBJKHF1ZXJ5Lm9yZGVySWQpXHJcbiAgICBvcmRlclByZS52YWx1ZSA9IHJlcy5yZXN1bHRcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0TWVtYmVyT3JkZXJQcmVBUEkoKVxyXG4gICAgb3JkZXJQcmUudmFsdWUgPSByZXMucmVzdWx0XHJcbiAgfVxyXG59XHJcblxyXG5vbkxvYWQoKCkgPT4ge1xyXG4gIGdldE1lbWJlck9yZGVyUHJlRGF0YSgpXHJcbn0pXHJcblxyXG5jb25zdCBhZGRyZXNzU3RvcmUgPSB1c2VBZGRyZXNzU3RvcmUoKVxyXG4vLyDmlLbotKflnLDlnYBcclxuY29uc3Qgc2VsZWN0ZUFkZHJlc3MgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIGFkZHJlc3NTdG9yZS5zZWxlY3RlZEFkZHJlc3MgfHwgb3JkZXJQcmUudmFsdWU/LnVzZXJBZGRyZXNzZXMuZmluZCgodikgPT4gdi5pc0RlZmF1bHQpXHJcbn0pXHJcblxyXG4vLyDmj5DkuqTorqLljZVcclxuY29uc3Qgb25PcmRlclN1Ym1pdCA9IGFzeW5jICgpID0+IHtcclxuICAvLyDmsqHmnInmlLbotKflnLDlnYDmj5DphpJcclxuICBpZiAoIXNlbGVjdGVBZGRyZXNzLnZhbHVlPy5pZCkge1xyXG4gICAgcmV0dXJuIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnbm9uZScsIHRpdGxlOiAn6K+36YCJ5oup5pS26LSn5Zyw5Z2AJyB9KVxyXG4gIH1cclxuICAvLyDlj5HpgIHor7fmsYJcclxuICBjb25zdCByZXMgPSBhd2FpdCBwb3N0TWVtYmVyT3JkZXJBUEkoe1xyXG4gICAgYWRkcmVzc0lkOiBzZWxlY3RlQWRkcmVzcy52YWx1ZT8uaWQsXHJcbiAgICBidXllck1lc3NhZ2U6IGJ1eWVyTWVzc2FnZS52YWx1ZSxcclxuICAgIGRlbGl2ZXJ5VGltZVR5cGU6IGFjdGl2ZURlbGl2ZXJ5LnZhbHVlLnR5cGUsXHJcbiAgICBnb29kczogb3JkZXJQcmUudmFsdWUhLmdvb2RzLm1hcCgodikgPT4gKHsgY291bnQ6IHYuY291bnQsIHNrdUlkOiB2LnNrdUlkIH0pKSxcclxuICAgIHBheUNoYW5uZWw6IDIsXHJcbiAgICBwYXlUeXBlOiAxLFxyXG4gIH0pXHJcbiAgLy8g5YWz6Zet5b2T5YmN6aG16Z2i77yM6Lez6L2s5Yiw6K6i5Y2V6K+m5oOF77yM5Lyg6YCS6K6i5Y2VaWRcclxuICB1bmkucmVkaXJlY3RUbyh7IHVybDogYC9wYWdlc09yZGVyL2RldGFpbC9kZXRhaWw/aWQ9JHtyZXMucmVzdWx0LmlkfWAgfSlcclxufVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIHNjcm9sbC15IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDwhLS0g5pS26LSn5Zyw5Z2AIC0tPlxyXG4gICAgPG5hdmlnYXRvclxyXG4gICAgICB2LWlmPVwic2VsZWN0ZUFkZHJlc3NcIlxyXG4gICAgICBjbGFzcz1cInNoaXBtZW50XCJcclxuICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgdXJsPVwiL3BhZ2VzTWVtYmVyL2FkZHJlc3MvYWRkcmVzcz9mcm9tPW9yZGVyXCJcclxuICAgID5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyXCI+IHt7IHNlbGVjdGVBZGRyZXNzLnJlY2VpdmVyIH19IHt7IHNlbGVjdGVBZGRyZXNzLmNvbnRhY3QgfX0gPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImFkZHJlc3NcIj4ge3sgc2VsZWN0ZUFkZHJlc3MuZnVsbExvY2F0aW9uIH19IHt7IHNlbGVjdGVBZGRyZXNzLmFkZHJlc3MgfX0gPC92aWV3PlxyXG4gICAgICA8dGV4dCBjbGFzcz1cImljb24gaWNvbi1yaWdodFwiPjwvdGV4dD5cclxuICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgPG5hdmlnYXRvclxyXG4gICAgICB2LWVsc2VcclxuICAgICAgY2xhc3M9XCJzaGlwbWVudFwiXHJcbiAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgIHVybD1cIi9wYWdlc01lbWJlci9hZGRyZXNzL2FkZHJlc3M/ZnJvbT1vcmRlclwiXHJcbiAgICA+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiYWRkcmVzc1wiPiDor7fpgInmi6nmlLbotKflnLDlnYAgPC92aWV3PlxyXG4gICAgICA8dGV4dCBjbGFzcz1cImljb24gaWNvbi1yaWdodFwiPjwvdGV4dD5cclxuICAgIDwvbmF2aWdhdG9yPlxyXG5cclxuICAgIDwhLS0g5ZWG5ZOB5L+h5oGvIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJnb29kc1wiPlxyXG4gICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgdi1mb3I9XCJpdGVtIGluIG9yZGVyUHJlPy5nb29kc1wiXHJcbiAgICAgICAgOmtleT1cIml0ZW0uc2t1SWRcIlxyXG4gICAgICAgIDp1cmw9XCJgL3BhZ2VzL2dvb2RzL2dvb2RzP2lkPSR7aXRlbS5pZH1gXCJcclxuICAgICAgICBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8aW1hZ2UgY2xhc3M9XCJwaWN0dXJlXCIgOnNyYz1cIml0ZW0ucGljdHVyZVwiIC8+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJtZXRhXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXNcIj4ge3sgaXRlbS5uYW1lIH19IDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYXR0cnNcIj57eyBpdGVtLmF0dHJzVGV4dCB9fTwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VzXCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicGF5LXByaWNlIHN5bWJvbFwiPnt7IGl0ZW0ucGF5UHJpY2UgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2Ugc3ltYm9sXCI+e3sgaXRlbS5wcmljZSB9fTwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiY291bnRcIj54e3sgaXRlbS5jb3VudCB9fTwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgPC92aWV3PlxyXG5cclxuICAgIDwhLS0g6YWN6YCB5Y+K5pSv5LuY5pa55byPIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJyZWxhdGVkXCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPumFjemAgeaXtumXtDwvdGV4dD5cclxuICAgICAgICA8cGlja2VyIDpyYW5nZT1cImRlbGl2ZXJ5TGlzdFwiIHJhbmdlLWtleT1cInRleHRcIiBAY2hhbmdlPVwib25DaGFuZ2VEZWxpdmVyeVwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJpY29uLWZvbnRzIHBpY2tlclwiPnt7IGFjdGl2ZURlbGl2ZXJ5LnRleHQgfX08L3ZpZXc+XHJcbiAgICAgICAgPC9waWNrZXI+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+6K6i5Y2V5aSH5rOoPC90ZXh0PlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJpbnB1dFwiXHJcbiAgICAgICAgICA6Y3Vyc29yLXNwYWNpbmc9XCIzMFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIumAiemimO+8jOW7uuiurueVmeiogOWJjeWFiOS4juWVhuWutuayn+mAmuehruiupFwiXHJcbiAgICAgICAgICB2LW1vZGVsPVwiYnV5ZXJNZXNzYWdlXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcblxyXG4gICAgPCEtLSDmlK/ku5jph5Hpop0gLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cInNldHRsZW1lbnRcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+5ZWG5ZOB5oC75Lu3OiA8L3RleHQ+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJudW1iZXIgc3ltYm9sXCI+e3sgb3JkZXJQcmU/LnN1bW1hcnkudG90YWxQcmljZS50b0ZpeGVkKDIpIH19PC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPui/kOi0uTogPC90ZXh0PlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwibnVtYmVyIHN5bWJvbFwiPnt7IG9yZGVyUHJlPy5zdW1tYXJ5LnBvc3RGZWUudG9GaXhlZCgyKSB9fTwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvc2Nyb2xsLXZpZXc+XHJcblxyXG4gIDwhLS0g5ZC45bqV5bel5YW35qCPIC0tPlxyXG4gIDx2aWV3IGNsYXNzPVwidG9vbGJhclwiIDpzdHlsZT1cInsgcGFkZGluZ0JvdHRvbTogc2FmZUFyZWFJbnNldHM/LmJvdHRvbSArICdweCcgfVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0b3RhbC1wYXkgc3ltYm9sXCI+XHJcbiAgICAgIDx0ZXh0IGNsYXNzPVwibnVtYmVyXCI+e3sgb3JkZXJQcmU/LnN1bW1hcnkudG90YWxQYXlQcmljZS50b0ZpeGVkKDIpIH19PC90ZXh0PlxyXG4gICAgPC92aWV3PlxyXG4gICAgPHZpZXcgY2xhc3M9XCJidXR0b25cIiA6Y2xhc3M9XCJ7IGRpc2FibGVkOiAhc2VsZWN0ZUFkZHJlc3M/LmlkIH1cIiBAdGFwPVwib25PcmRlclN1Ym1pdFwiPlxyXG4gICAgICDmj5DkuqTorqLljZVcclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XHJcbn1cclxuXHJcbi5zeW1ib2w6OmJlZm9yZSB7XHJcbiAgY29udGVudDogJ8KlJztcclxuICBmb250LXNpemU6IDgwJTtcclxuICBtYXJnaW4tcmlnaHQ6IDVycHg7XHJcbn1cclxuXHJcbi5zaGlwbWVudCB7XHJcbiAgbWFyZ2luOiAyMHJweDtcclxuICBwYWRkaW5nOiAzMHJweCAzMHJweCAzMHJweCA4NHJweDtcclxuICBmb250LXNpemU6IDI2cnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJhY2tncm91bmQ6IHVybChodHRwczovL3BjYXBpLXhpYW90dXhpYW4tZnJvbnQtZGV2dGVzdC5pdGhlaW1hLm5ldC9taW5pYXBwL2ltYWdlcy9sb2NhdGUucG5nKVxyXG4gICAgMjBycHggY2VudGVyIC8gNTBycHggbm8tcmVwZWF0ICNmZmY7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuICAuaWNvbiB7XHJcbiAgICBmb250LXNpemU6IDM2cnB4O1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAyMHJweDtcclxuICB9XHJcblxyXG4gIC51c2VyIHtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogNXJweDtcclxuICB9XHJcblxyXG4gIC5hZGRyZXNzIHtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG4gIH1cclxufVxyXG5cclxuLmdvb2RzIHtcclxuICBtYXJnaW46IDIwcnB4O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIHBhZGRpbmc6IDMwcnB4IDA7XHJcbiAgICBib3JkZXItdG9wOiAxcnB4IHNvbGlkICNlZWU7XHJcblxyXG4gICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgIGJvcmRlci10b3A6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLnBpY3R1cmUge1xyXG4gICAgICB3aWR0aDogMTcwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDE3MHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLm1ldGEge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgfVxyXG5cclxuICAgIC5uYW1lIHtcclxuICAgICAgaGVpZ2h0OiA4MHJweDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmF0dHJzIHtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuODtcclxuICAgICAgcGFkZGluZzogMCAxNXJweDtcclxuICAgICAgbWFyZ2luLXRvcDogNnJweDtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNHJweDtcclxuICAgICAgY29sb3I6ICM4ODg7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjg7XHJcbiAgICB9XHJcblxyXG4gICAgLnByaWNlcyB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcclxuICAgICAgbWFyZ2luLXRvcDogNnJweDtcclxuICAgICAgZm9udC1zaXplOiAyOHJweDtcclxuXHJcbiAgICAgIC5wYXktcHJpY2Uge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBycHg7XHJcbiAgICAgICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5wcmljZSB7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgICBjb2xvcjogIzk5OTtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5jb3VudCB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICByaWdodDogMDtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4ucmVsYXRlZCB7XHJcbiAgbWFyZ2luOiAyMHJweDtcclxuICBwYWRkaW5nOiAwIDIwcnB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWluLWhlaWdodDogODBycHg7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgfVxyXG5cclxuICAuaW5wdXQge1xyXG4gICAgZmxleDogMTtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgbWFyZ2luOiAyMHJweCAwO1xyXG4gICAgcGFkZGluZy1yaWdodDogMjBycHg7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgfVxyXG5cclxuICAuaXRlbSAudGV4dCB7XHJcbiAgICB3aWR0aDogMTI1cnB4O1xyXG4gIH1cclxuXHJcbiAgLnBpY2tlciB7XHJcbiAgICBjb2xvcjogIzY2NjtcclxuICB9XHJcblxyXG4gIC5waWNrZXI6OmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICdcXGU2YzInO1xyXG4gIH1cclxufVxyXG5cclxuLyog57uT566X5riF5Y2VICovXHJcbi5zZXR0bGVtZW50IHtcclxuICBtYXJnaW46IDIwcnB4O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBoZWlnaHQ6IDgwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG4gIH1cclxuXHJcbiAgLmRhbmdlciB7XHJcbiAgICBjb2xvcjogI2NmNDQ0NDtcclxuICB9XHJcbn1cclxuXHJcbi8qIOWQuOW6leW3peWFt+agjyAqL1xyXG4udG9vbGJhciB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgYm90dG9tOiBjYWxjKHZhcigtLXdpbmRvdy1ib3R0b20pKTtcclxuICB6LWluZGV4OiAxO1xyXG5cclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIGhlaWdodDogMTAwcnB4O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgYm9yZGVyLXRvcDogMXJweCBzb2xpZCAjZWFlYWVhO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcblxyXG4gIC50b3RhbC1wYXkge1xyXG4gICAgZm9udC1zaXplOiA0MHJweDtcclxuICAgIGNvbG9yOiAjY2Y0NDQ0O1xyXG5cclxuICAgIC5kZWNpbWFsIHtcclxuICAgICAgZm9udC1zaXplOiA3NSU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuYnV0dG9uIHtcclxuICAgIHdpZHRoOiAyMjBycHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBsaW5lLWhlaWdodDogNzJycHg7XHJcbiAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbiAgICBib3JkZXItcmFkaXVzOiA3MnJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgfVxyXG5cclxuICAuZGlzYWJsZWQge1xyXG4gICAgb3BhY2l0eTogMC42O1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgZW4gZnJvbSAnLi9lbi5qc29uJ1xyXG5pbXBvcnQgemhIYW5zIGZyb20gJy4vemgtSGFucy5qc29uJ1xyXG5pbXBvcnQgemhIYW50IGZyb20gJy4vemgtSGFudC5qc29uJ1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblx0ZW4sXHJcblx0J3poLUhhbnMnOiB6aEhhbnMsXHJcblx0J3poLUhhbnQnOiB6aEhhbnRcclxufVxuIiwiPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwidW5pLWNvdW50ZG93blwiPlxyXG5cdFx0PHRleHQgdi1pZj1cInNob3dEYXlcIiA6c3R5bGU9XCJbdGltZVN0eWxlXVwiIGNsYXNzPVwidW5pLWNvdW50ZG93bl9fbnVtYmVyXCI+e3sgZCB9fTwvdGV4dD5cclxuXHRcdDx0ZXh0IHYtaWY9XCJzaG93RGF5XCIgOnN0eWxlPVwiW3NwbGl0b3JTdHlsZV1cIiBjbGFzcz1cInVuaS1jb3VudGRvd25fX3NwbGl0b3JcIj57e2RheVRleHR9fTwvdGV4dD5cclxuXHRcdDx0ZXh0IDpzdHlsZT1cIlt0aW1lU3R5bGVdXCIgY2xhc3M9XCJ1bmktY291bnRkb3duX19udW1iZXJcIj57eyBoIH19PC90ZXh0PlxyXG5cdFx0PHRleHQgOnN0eWxlPVwiW3NwbGl0b3JTdHlsZV1cIiBjbGFzcz1cInVuaS1jb3VudGRvd25fX3NwbGl0b3JcIj57eyBzaG93Q29sb24gPyAnOicgOiBob3VyVGV4dCB9fTwvdGV4dD5cclxuXHRcdDx0ZXh0IDpzdHlsZT1cIlt0aW1lU3R5bGVdXCIgY2xhc3M9XCJ1bmktY291bnRkb3duX19udW1iZXJcIj57eyBpIH19PC90ZXh0PlxyXG5cdFx0PHRleHQgOnN0eWxlPVwiW3NwbGl0b3JTdHlsZV1cIiBjbGFzcz1cInVuaS1jb3VudGRvd25fX3NwbGl0b3JcIj57eyBzaG93Q29sb24gPyAnOicgOiBtaW51dGVUZXh0IH19PC90ZXh0PlxyXG5cdFx0PHRleHQgOnN0eWxlPVwiW3RpbWVTdHlsZV1cIiBjbGFzcz1cInVuaS1jb3VudGRvd25fX251bWJlclwiPnt7IHMgfX08L3RleHQ+XHJcblx0XHQ8dGV4dCB2LWlmPVwiIXNob3dDb2xvblwiIDpzdHlsZT1cIltzcGxpdG9yU3R5bGVdXCIgY2xhc3M9XCJ1bmktY291bnRkb3duX19zcGxpdG9yXCI+e3tzZWNvbmRUZXh0fX08L3RleHQ+XHJcblx0PC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0PlxyXG5cdGltcG9ydCB7XHJcblx0XHRpbml0VnVlSTE4blxyXG5cdH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1pMThuJ1xyXG5cdGltcG9ydCBtZXNzYWdlcyBmcm9tICcuL2kxOG4vaW5kZXguanMnXHJcblx0Y29uc3Qge1xyXG5cdFx0dFxyXG5cdH0gPSBpbml0VnVlSTE4bihtZXNzYWdlcylcclxuXHQvKipcclxuXHQgKiBDb3VudGRvd24g5YCS6K6h5pe2XHJcblx0ICogQGRlc2NyaXB0aW9uIOWAkuiuoeaXtue7hOS7tlxyXG5cdCAqIEB0dXRvcmlhbCBodHRwczovL2V4dC5kY2xvdWQubmV0LmNuL3BsdWdpbj9pZD0yNVxyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBiYWNrZ3JvdW5kQ29sb3Ig6IOM5pmv6ImyXHJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGNvbG9yIOaWh+Wtl+minOiJslxyXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBkYXkg5aSp5pWwXHJcblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGhvdXIg5bCP5pe2XHJcblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IG1pbnV0ZSDliIbpkp9cclxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gc2Vjb25kIOenklxyXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSB0aW1lc3RhbXAg5pe26Ze05oizXHJcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBzaG93RGF5ID0gW3RydWV8ZmFsc2VdIOaYr+WQpuaYvuekuuWkqeaVsFxyXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2hvdy1jb2xvbiA9IFt0cnVlfGZhbHNlXSDmmK/lkKbku6XlhpLlj7fkuLrliIbpmpTnrKZcclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gc3BsaXRvckNvbG9yIOWIhuWJsuespuWPt+minOiJslxyXG5cdCAqIEBldmVudCB7RnVuY3Rpb259IHRpbWV1cCDlgJLorqHml7bml7bpl7TliLDop6blj5Hkuovku7ZcclxuXHQgKiBAZXhhbXBsZSA8dW5pLWNvdW50ZG93biA6ZGF5PVwiMVwiIDpob3VyPVwiMVwiIDptaW51dGU9XCIxMlwiIDpzZWNvbmQ9XCI0MFwiPjwvdW5pLWNvdW50ZG93bj5cclxuXHQgKi9cclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRuYW1lOiAnVW5pQ291bnRkb3duJyxcclxuXHRcdGVtaXRzOiBbJ3RpbWV1cCddLFxyXG5cdFx0cHJvcHM6IHtcclxuXHRcdFx0c2hvd0RheToge1xyXG5cdFx0XHRcdHR5cGU6IEJvb2xlYW4sXHJcblx0XHRcdFx0ZGVmYXVsdDogdHJ1ZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzaG93Q29sb246IHtcclxuXHRcdFx0XHR0eXBlOiBCb29sZWFuLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IHRydWVcclxuXHRcdFx0fSxcclxuXHRcdFx0c3RhcnQ6IHtcclxuXHRcdFx0XHR0eXBlOiBCb29sZWFuLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IHRydWVcclxuXHRcdFx0fSxcclxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcnXHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbG9yOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcjMzMzJ1xyXG5cdFx0XHR9LFxuXHRcdFx0Zm9udFNpemU6IHtcblx0XHRcdFx0dHlwZTogTnVtYmVyLFxuXHRcdFx0XHRkZWZhdWx0OiAxNFxuXHRcdFx0fSxcclxuXHRcdFx0c3BsaXRvckNvbG9yOiB7XHJcblx0XHRcdFx0dHlwZTogU3RyaW5nLFxyXG5cdFx0XHRcdGRlZmF1bHQ6ICcjMzMzJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRkYXk6IHtcclxuXHRcdFx0XHR0eXBlOiBOdW1iZXIsXHJcblx0XHRcdFx0ZGVmYXVsdDogMFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRob3VyOiB7XHJcblx0XHRcdFx0dHlwZTogTnVtYmVyLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IDBcclxuXHRcdFx0fSxcclxuXHRcdFx0bWludXRlOiB7XHJcblx0XHRcdFx0dHlwZTogTnVtYmVyLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IDBcclxuXHRcdFx0fSxcclxuXHRcdFx0c2Vjb25kOiB7XHJcblx0XHRcdFx0dHlwZTogTnVtYmVyLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IDBcclxuXHRcdFx0fSxcclxuXHRcdFx0dGltZXN0YW1wOiB7XHJcblx0XHRcdFx0dHlwZTogTnVtYmVyLFxyXG5cdFx0XHRcdGRlZmF1bHQ6IDBcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dGltZXI6IG51bGwsXHJcblx0XHRcdFx0c3luY0ZsYWc6IGZhbHNlLFxyXG5cdFx0XHRcdGQ6ICcwMCcsXHJcblx0XHRcdFx0aDogJzAwJyxcclxuXHRcdFx0XHRpOiAnMDAnLFxyXG5cdFx0XHRcdHM6ICcwMCcsXHJcblx0XHRcdFx0bGVmdFRpbWU6IDAsXHJcblx0XHRcdFx0c2Vjb25kczogMFxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Y29tcHV0ZWQ6IHtcclxuXHRcdFx0ZGF5VGV4dCgpIHtcclxuXHRcdFx0XHRyZXR1cm4gdChcInVuaS1jb3VudGRvd24uZGF5XCIpXHJcblx0XHRcdH0sXHJcblx0XHRcdGhvdXJUZXh0KHZhbCkge1xyXG5cdFx0XHRcdHJldHVybiB0KFwidW5pLWNvdW50ZG93bi5oXCIpXHJcblx0XHRcdH0sXHJcblx0XHRcdG1pbnV0ZVRleHQodmFsKSB7XHJcblx0XHRcdFx0cmV0dXJuIHQoXCJ1bmktY291bnRkb3duLm1cIilcclxuXHRcdFx0fSxcclxuXHRcdFx0c2Vjb25kVGV4dCh2YWwpIHtcclxuXHRcdFx0XHRyZXR1cm4gdChcInVuaS1jb3VudGRvd24uc1wiKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aW1lU3R5bGUoKSB7XHJcblx0XHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdFx0Y29sb3IsXHJcblx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRcdFx0Zm9udFNpemVcclxuXHRcdFx0XHR9ID0gdGhpc1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRjb2xvcixcclxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcixcblx0XHRcdFx0XHRmb250U2l6ZTogYCR7Zm9udFNpemV9cHhgLFxuXHRcdFx0XHRcdHdpZHRoOiBgJHtmb250U2l6ZSAqIDIyIC8gMTR9cHhgLCAvLyDmjInlrZfkvZPlpKflsI/kuLogMTRweCDml7bnmoTmr5TkvovnvKnmlL5cbiBcdFx0XHRcdFx0bGluZUhlaWdodDogYCR7Zm9udFNpemUgKiAyMCAvIDE0fXB4YCxcblx0XHRcdFx0XHRib3JkZXJSYWRpdXM6IGAke2ZvbnRTaXplICogMyAvIDE0fXB4YCxcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzcGxpdG9yU3R5bGUoKSB7XG5cdFx0XHRcdGNvbnN0IHsgc3BsaXRvckNvbG9yLCBmb250U2l6ZSwgYmFja2dyb3VuZENvbG9yIH0gPSB0aGlzXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y29sb3I6IHNwbGl0b3JDb2xvcixcblx0XHRcdFx0XHRmb250U2l6ZTogYCR7Zm9udFNpemUgKiAxMiAvIDE0fXB4YCxcblx0XHRcdFx0XHRtYXJnaW46IGJhY2tncm91bmRDb2xvciA/IGAke2ZvbnRTaXplICogNCAvIDE0fXB4YCA6ICcnXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0d2F0Y2g6IHtcclxuXHRcdFx0ZGF5KHZhbCkge1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlRmxhZygpXHJcblx0XHRcdH0sXHJcblx0XHRcdGhvdXIodmFsKSB7XG5cdFx0XHRcdHRoaXMuY2hhbmdlRmxhZygpXHJcblx0XHRcdH0sXHJcblx0XHRcdG1pbnV0ZSh2YWwpIHtcblx0XHRcdFx0dGhpcy5jaGFuZ2VGbGFnKClcclxuXHRcdFx0fSxcclxuXHRcdFx0c2Vjb25kKHZhbCkge1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlRmxhZygpXHJcblx0XHRcdH0sXHJcblx0XHRcdHN0YXJ0OiB7XHJcblx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlLFxyXG5cdFx0XHRcdGhhbmRsZXIobmV3VmFsLCBvbGRWYWwpIHtcclxuXHRcdFx0XHRcdGlmIChuZXdWYWwpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdGFydERhdGEoKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmICghb2xkVmFsKSByZXR1cm5cclxuXHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRjcmVhdGVkOiBmdW5jdGlvbihlKSB7XHJcblx0XHRcdHRoaXMuc2Vjb25kcyA9IHRoaXMudG9TZWNvbmRzKHRoaXMudGltZXN0YW1wLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQpXHJcblx0XHRcdHRoaXMuY291bnREb3duKClcclxuXHRcdH0sXHJcblx0XHQvLyAjaWZuZGVmIFZVRTNcclxuXHRcdGRlc3Ryb3llZCgpIHtcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKVxyXG5cdFx0fSxcclxuXHRcdC8vICNlbmRpZlxyXG5cdFx0Ly8gI2lmZGVmIFZVRTNcclxuXHRcdHVubW91bnRlZCgpIHtcclxuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKVxyXG5cdFx0fSxcclxuXHRcdC8vICNlbmRpZlxyXG5cdFx0bWV0aG9kczoge1xyXG5cdFx0XHR0b1NlY29uZHModGltZXN0YW1wLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XHJcblx0XHRcdFx0aWYgKHRpbWVzdGFtcCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRpbWVzdGFtcCAtIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCwgMTApXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBkYXkgKiA2MCAqIDYwICogMjQgKyBob3VycyAqIDYwICogNjAgKyBtaW51dGVzICogNjAgKyBzZWNvbmRzXHJcblx0XHRcdH0sXHJcblx0XHRcdHRpbWVVcCgpIHtcclxuXHRcdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXIpXHJcblx0XHRcdFx0dGhpcy4kZW1pdCgndGltZXVwJylcclxuXHRcdFx0fSxcclxuXHRcdFx0Y291bnREb3duKCkge1xyXG5cdFx0XHRcdGxldCBzZWNvbmRzID0gdGhpcy5zZWNvbmRzXHJcblx0XHRcdFx0bGV0IFtkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IFswLCAwLCAwLCAwXVxyXG5cdFx0XHRcdGlmIChzZWNvbmRzID4gMCkge1xyXG5cdFx0XHRcdFx0ZGF5ID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gKDYwICogNjAgKiAyNCkpXHJcblx0XHRcdFx0XHRob3VyID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gKDYwICogNjApKSAtIChkYXkgKiAyNClcclxuXHRcdFx0XHRcdG1pbnV0ZSA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKSAtIChkYXkgKiAyNCAqIDYwKSAtIChob3VyICogNjApXHJcblx0XHRcdFx0XHRzZWNvbmQgPSBNYXRoLmZsb29yKHNlY29uZHMpIC0gKGRheSAqIDI0ICogNjAgKiA2MCkgLSAoaG91ciAqIDYwICogNjApIC0gKG1pbnV0ZSAqIDYwKVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnRpbWVVcCgpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChkYXkgPCAxMCkge1xyXG5cdFx0XHRcdFx0ZGF5ID0gJzAnICsgZGF5XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChob3VyIDwgMTApIHtcclxuXHRcdFx0XHRcdGhvdXIgPSAnMCcgKyBob3VyXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChtaW51dGUgPCAxMCkge1xyXG5cdFx0XHRcdFx0bWludXRlID0gJzAnICsgbWludXRlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChzZWNvbmQgPCAxMCkge1xyXG5cdFx0XHRcdFx0c2Vjb25kID0gJzAnICsgc2Vjb25kXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuZCA9IGRheVxyXG5cdFx0XHRcdHRoaXMuaCA9IGhvdXJcclxuXHRcdFx0XHR0aGlzLmkgPSBtaW51dGVcclxuXHRcdFx0XHR0aGlzLnMgPSBzZWNvbmRcblx0XHRcdH0sXHJcblx0XHRcdHN0YXJ0RGF0YSgpIHtcclxuXHRcdFx0XHR0aGlzLnNlY29uZHMgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnRpbWVzdGFtcCwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kKVxyXG5cdFx0XHRcdGlmICh0aGlzLnNlY29uZHMgPD0gMCkge1xuXHRcdFx0XHRcdHRoaXMuc2Vjb25kcyA9IHRoaXMudG9TZWNvbmRzKDAsIDAsIDAsIDAsIDApXG5cdFx0XHRcdFx0dGhpcy5jb3VudERvd24oKVxyXG5cdFx0XHRcdFx0cmV0dXJuXHJcblx0XHRcdFx0fVxuXHRcdFx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXIpXHJcblx0XHRcdFx0dGhpcy5jb3VudERvd24oKVxyXG5cdFx0XHRcdHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnNlY29uZHMtLVxyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2Vjb25kcyA8IDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy50aW1lVXAoKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm5cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuY291bnREb3duKClcclxuXHRcdFx0XHR9LCAxMDAwKVxyXG5cdFx0XHR9LFxuXHRcdFx0dXBkYXRlKCl7XG5cdFx0XHRcdHRoaXMuc3RhcnREYXRhKCk7XG5cdFx0XHR9LFxyXG5cdFx0XHRjaGFuZ2VGbGFnKCkge1xuXHRcdFx0XHRpZiAoIXRoaXMuc3luY0ZsYWcpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2Vjb25kcyA9IHRoaXMudG9TZWNvbmRzKHRoaXMudGltZXN0YW1wLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQpXHJcblx0XHRcdFx0XHR0aGlzLnN0YXJ0RGF0YSgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zeW5jRmxhZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG5cdCRmb250LXNpemU6IDE0cHg7XG5cclxuXHQudW5pLWNvdW50ZG93biB7XG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHJcblx0XHQmX19zcGxpdG9yIHtcclxuXHRcdFx0bWFyZ2luOiAwIDJweDtcclxuXHRcdFx0Zm9udC1zaXplOiAkZm9udC1zaXplO1xuXHRcdFx0Y29sb3I6ICMzMzM7XG5cdFx0fVxyXG5cclxuXHRcdCZfX251bWJlciB7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XHJcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdFx0Zm9udC1zaXplOiAkZm9udC1zaXplO1xuXHRcdH1cclxuXHR9XHJcbjwvc3R5bGU+XG4iLCIvKiog6K6i5Y2V54q25oCB5p6a5Li+ICovXHJcbmV4cG9ydCBlbnVtIE9yZGVyU3RhdGUge1xyXG4gIC8qKiDlvoXku5jmrL4gKi9cclxuICBEYWlGdUt1YW4gPSAxLFxyXG4gIC8qKiDlvoXlj5HotKcgKi9cclxuICBEYWlGYUh1byA9IDIsXHJcbiAgLyoqIOW+heaUtui0pyAqL1xyXG4gIERhaVNob3VIdW8gPSAzLFxyXG4gIC8qKiDlvoXor4Tku7cgKi9cclxuICBEYWlQaW5nSmlhID0gNCxcclxuICAvKiog5bey5a6M5oiQICovXHJcbiAgWWlXYW5DaGVuZyA9IDUsXHJcbiAgLyoqIOW3suWPlua2iCAqL1xyXG4gIFlpUXVYaWFvID0gNixcclxufVxyXG4vKiog6K6i5Y2V54q25oCB5YiX6KGoICovXHJcbmV4cG9ydCBjb25zdCBvcmRlclN0YXRlTGlzdCA9IFtcclxuICB7IGlkOiAwLCB0ZXh0OiAnJyB9LFxyXG4gIHsgaWQ6IDEsIHRleHQ6ICflvoXku5jmrL4nIH0sXHJcbiAgeyBpZDogMiwgdGV4dDogJ+W+heWPkei0pycgfSxcclxuICB7IGlkOiAzLCB0ZXh0OiAn5b6F5pS26LSnJyB9LFxyXG4gIHsgaWQ6IDQsIHRleHQ6ICflvoXor4Tku7cnIH0sXHJcbiAgeyBpZDogNSwgdGV4dDogJ+W3suWujOaIkCcgfSxcclxuICB7IGlkOiA2LCB0ZXh0OiAn5bey5Y+W5raIJyB9LFxyXG5dXHJcbiIsIjx0ZW1wbGF0ZSBuYW1lPVwic2tlbGV0b25cIj5cclxuICA8dmlldyBjbGFzcz1cInNrLWNvbnRhaW5lclwiPlxyXG4gICAgPHNjcm9sbC12aWV3XHJcbiAgICAgIDpzY3JvbGwteT1cInRydWVcIlxyXG4gICAgICBjbGFzcz1cInZpZXdwb3J0IHNrLXRyYW5zcGFyZW50XCJcclxuICAgICAgaWQ9XCJzY3JvbGxlclwiXHJcbiAgICAgIDplbmFibGUtYmFjay10by10b3A9XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJvdmVydmlldyBzay1pbWFnZVwiIHN0eWxlPVwicGFkZGluZy10b3A6IDY0cHhcIj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInN0YXR1cyBzay10cmFuc3BhcmVudCBzay10ZXh0LTAtMDAwMC04MjYgc2stdGV4dFwiPuW+heaUtui0pzwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cInNoaXBtZW50XCI+XHJcbiAgICAgICAgPG5hdmlnYXRvciBjbGFzcz1cImxvZ2lzdGljcyBzay1pbWFnZSBzay1wc2V1ZG8gc2stcHNldWRvLWNpcmNsZVwiIGhvdmVyLWNsYXNzPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJtZXNzYWdlIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny01MTIgc2stdGV4dFwiXHJcbiAgICAgICAgICAgID7lsI/lhZTlhZTliLDkuoblsI/npo/lrrbph4zvvIzor7fnrb7mlLY8L3ZpZXdcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZGF0ZSBzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctOTkwIHNrLXRleHRcIj4yMDIzLTA0LTE1IDIzOjIzOjA0PC92aWV3PlxyXG4gICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwibG9jYXRlIHNrLWltYWdlXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInVzZXIgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTYzMCBzay10ZXh0XCI+6IuP5Lic5Z2hIDEzNjMzMzM2NjY2PC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJhZGRyZXNzIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny02MDYgc2stdGV4dFwiXHJcbiAgICAgICAgICAgID7lub/kuJznnIEg5bm/5bee5biCIOWkqeays+WMuuWQieWxseW5vOWEv+WbrTwvdmlld1xyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImdvb2RzXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgICA8bmF2aWdhdG9yIGNsYXNzPVwibmF2aWdhdG9yXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxpbWFnZSBjbGFzcz1cImNvdmVyIHNrLWltYWdlXCI+PC9pbWFnZT5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJtZXRhXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny00NzQgc2stdGV4dFwiXHJcbiAgICAgICAgICAgICAgICA+5Y6a5Y6a5LiA5oyJ5bCx5bmy54i977yM5Z+D5Y+K6L+b5Y+j6ZW/57uS5qOJ5q+b5be+PC92aWV3XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidHlwZSBzay10cmFuc3BhcmVudCBzay10ZXh0LTIyLTIyMjItMjM3IHNrLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgPui2heWAvDTmnaHoo4XvvIjngbDok53oibIr57KJ6ImyK+mTtueBsCvlq6npu4TvvIk8L3ZpZXdcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJhY3R1YWxcIj5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJzeW1ib2wgc2stdHJhbnNwYXJlbnQgc2stb3BhY2l0eVwiPsKlPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cInNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny0xMDIgc2stdGV4dFwiPjY4PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInF1YW50aXR5IHNrLXRyYW5zcGFyZW50IHNrLW9wYWNpdHlcIj54MTwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICA8bmF2aWdhdG9yIGNsYXNzPVwibmF2aWdhdG9yXCIgaG92ZXItY2xhc3M9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxpbWFnZSBjbGFzcz1cImNvdmVyIHNrLWltYWdlXCI+PC9pbWFnZT5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJtZXRhXCI+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMTQtMjg1Ny05Njkgc2stdGV4dFwiXHJcbiAgICAgICAgICAgICAgICA+S0pF6YeR5bGe6Imy57O76L276YeP55S15Yqo6L2m6aqR6KGM55uU55S35aWz6YCa55SoPC92aWV3XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidHlwZSBzay10cmFuc3BhcmVudCBzay10ZXh0LTIyLTIyMjItNTEwIHNrLXRleHRcIj7njqvnkbDph5FMPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYWN0dWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic3ltYm9sIHNrLXRyYW5zcGFyZW50IHNrLW9wYWNpdHlcIj7CpTwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJzay10cmFuc3BhcmVudCBzay10ZXh0LTE0LTI4NTctNDMxIHNrLXRleHRcIj4xMjA8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwicXVhbnRpdHkgc2stdHJhbnNwYXJlbnQgc2stb3BhY2l0eVwiPngxPC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgIDxuYXZpZ2F0b3IgY2xhc3M9XCJuYXZpZ2F0b3JcIiBob3Zlci1jbGFzcz1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPGltYWdlIGNsYXNzPVwiY292ZXIgc2staW1hZ2VcIj48L2ltYWdlPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm1ldGFcIj5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXMgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTEzMCBzay10ZXh0XCJcclxuICAgICAgICAgICAgICAgID7mupDoh6rmvrPmtLLov5vlj6Pnvormr5vvvIzlhL/nq6XlpaLmmpbnvormr5vooqvljYfnuqfmrL48L3ZpZXdcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0eXBlIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMjItMjIyMi0xMTAgc2stdGV4dFwiXHJcbiAgICAgICAgICAgICAgICA+5pil56eL5qy+77yMIDEwMCXnvormr5vmrL7vvJoxNTB4MjAwY23vvIzpgILlkIgxLjLnsbMvMS4zNeexs+W6ijwvdmlld1xyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImFjdHVhbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cInN5bWJvbCBzay10cmFuc3BhcmVudCBzay1vcGFjaXR5XCI+wqU8L3RleHQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwic2stdHJhbnNwYXJlbnQgc2stdGV4dC0xNC0yODU3LTI3MyBzay10ZXh0XCI+Mjg5PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInF1YW50aXR5IHNrLXRyYW5zcGFyZW50IHNrLW9wYWNpdHlcIj54MTwvdmlldz5cclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwidG90YWxcIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGV4dCBzay10cmFuc3BhcmVudCBzay10ZXh0LTAtMDAwMC0zMDIgc2stdGV4dFwiPuWVhuWTgeaAu+S7tzogPC92aWV3PlxyXG4gICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMC0wMDAwLTk5OCBzay10ZXh0IHNrLXBzZXVkbyBzay1wc2V1ZG8tY2lyY2xlXCJcclxuICAgICAgICAgICAgICA+NDc3PC92aWV3XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGV4dCBzay10cmFuc3BhcmVudCBzay10ZXh0LTAtMDAwMC05MTIgc2stdGV4dFwiPui/kOi0uTogPC92aWV3PlxyXG4gICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMC0wMDAwLTIwOCBzay10ZXh0IHNrLXBzZXVkbyBzay1wc2V1ZG8tY2lyY2xlXCJcclxuICAgICAgICAgICAgICA+Mjwvdmlld1xyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInRleHQgc2stdHJhbnNwYXJlbnQgc2stdGV4dC0wLTAwMDAtNTM4IHNrLXRleHRcIj7lupTku5jph5Hpop06IDwvdmlldz5cclxuICAgICAgICAgICAgPHZpZXdcclxuICAgICAgICAgICAgICBjbGFzcz1cInN5bWJvbCBwcmltYXJ5IHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMC0wMDAwLTg1OCBzay10ZXh0IHNrLXBzZXVkbyBzay1wc2V1ZG8tY2lyY2xlXCJcclxuICAgICAgICAgICAgICA+NDc5PC92aWV3XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJkZXRhaWxcIj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInRpdGxlIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMC0wMDAwLTY2IHNrLXRleHRcIj7orqLljZXkv6Hmga88L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbSBzay10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICDorqLljZXnvJblj7c6IDE2NDU4MDk2Mzk5NTE5NjIxMTNcclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJjb3B5IHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMC0wMDAwLTUyMiBzay10ZXh0XCI+5aSN5Yi2PC90ZXh0PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtIHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMC0wMDAwLTM1MyBzay10ZXh0XCJcclxuICAgICAgICAgICAgPuS4i+WNleaXtumXtDogMjAyMy0wNC0xMSAyMzoyMjo1MDwvdmlld1xyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0b29sYmFyXCIgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTogMzRweFwiPlxyXG4gICAgICAgIDx2aWV3XHJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5IHNrLXRyYW5zcGFyZW50IHNrLXRleHQtMzEtOTQ0NC00MTEgc2stdGV4dFwiXHJcbiAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtcG9zaXRpb24teDogNTAlXCJcclxuICAgICAgICAgID7lho3mrKHotK3kubA8L3ZpZXdcclxuICAgICAgICA+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvc2Nyb2xsLXZpZXc+XHJcbiAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlPlxyXG4uc2stdHJhbnNwYXJlbnQge1xyXG4gIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctMTA3IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDQ0LjhycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQge1xyXG4gIGJhY2tncm91bmQtb3JpZ2luOiBjb250ZW50LWJveCAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3ggIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG4gIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTAtMDAwMC04MjYge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDAlLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgMTAwJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzNnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTUxMiB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzNi40cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctOTkwIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMzLjZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny02MzAge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzYuNHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0xNC0yODU3LTYwNiB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMTQuMjg1NyUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA4NS43MTQzJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAzMy42cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctNDc0IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDM2LjRycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMjItMjIyMi0yMzcge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDIyLjIyMjIlLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgNzcuNzc3OCUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNDMuMnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stb3BhY2l0eSB7XHJcbiAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctMTAyIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMzLjZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny05Njkge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzYuNHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0yMi0yMjIyLTUxMCB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMjIuMjIyMiUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA3Ny43Nzc4JSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSA0My4ycnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctNDMxIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMzLjZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMTQtMjg1Ny0xMzAge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDE0LjI4NTclLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgODUuNzE0MyUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzYuNHJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0yMi0yMjIyLTExMCB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMjIuMjIyMiUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSA3Ny43Nzc4JSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSA0My4ycnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTE0LTI4NTctMjczIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAxNC4yODU3JSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDg1LjcxNDMlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDMzLjZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMC0wMDAwLTMwMiB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMCUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSAxMDAlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDI2cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTAtMDAwMC05OTgge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDAlLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgMTAwJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAyNnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0wLTAwMDAtOTEyIHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAwJSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDEwMCUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMjZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMC0wMDAwLTIwOCB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMCUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSAxMDAlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDI2cnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTAtMDAwMC01Mzgge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDAlLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgMTAwJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAyNnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0wLTAwMDAtODU4IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAwJSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDEwMCUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzZycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMC0wMDAwLTY2IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAwJSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDEwMCUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzBycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMC0wMDAwLTUyMiB7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxyXG4gICAgdHJhbnNwYXJlbnQgMCUsXHJcbiAgICAjZWVlZWVlIDAlLFxyXG4gICAgI2VlZWVlZSAxMDAlLFxyXG4gICAgdHJhbnNwYXJlbnQgMCVcclxuICApICFpbXBvcnRhbnQ7XHJcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDIwcnB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay10ZXh0LTAtMDAwMC0zNTMge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDAlLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgMTAwJSxcclxuICAgIHRyYW5zcGFyZW50IDAlXHJcbiAgKSAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAyNnJweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxufVxyXG4uc2stdGV4dC0wLTAwMDAtMzc1IHtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICB0cmFuc3BhcmVudCAwJSxcclxuICAgICNlZWVlZWUgMCUsXHJcbiAgICAjZWVlZWVlIDEwMCUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMzJycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXRleHQtMzEtOTQ0NC00MTEge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcclxuICAgIHRyYW5zcGFyZW50IDMxLjk0NDQlLFxyXG4gICAgI2VlZWVlZSAwJSxcclxuICAgICNlZWVlZWUgNjguMDU1NiUsXHJcbiAgICB0cmFuc3BhcmVudCAwJVxyXG4gICkgIWltcG9ydGFudDtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNzJycHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLWltYWdlIHtcclxuICBiYWNrZ3JvdW5kOiAjZWZlZmVmICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXBzZXVkbzo6YmVmb3JlLFxyXG4uc2stcHNldWRvOjphZnRlciB7XHJcbiAgYmFja2dyb3VuZDogI2VmZWZlZiAhaW1wb3J0YW50O1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDtcclxuICBjb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcclxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNrLXBzZXVkby1yZWN0OjpiZWZvcmUsXHJcbi5zay1wc2V1ZG8tcmVjdDo6YWZ0ZXIge1xyXG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxufVxyXG4uc2stcHNldWRvLWNpcmNsZTo6YmVmb3JlLFxyXG4uc2stcHNldWRvLWNpcmNsZTo6YWZ0ZXIge1xyXG4gIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50O1xyXG59XHJcbi5zay1jb250YWluZXIge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogMDtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxufVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgeyBodHRwIH0gZnJvbSAnQC91dGlscy9odHRwJ1xyXG5cclxuLyoqXHJcbiAqIOiOt+WPluW+ruS/oeaUr+S7mOWPguaVsFxyXG4gKiBAcGFyYW0gZGF0YSBvcmRlcklkIOiuouWNlWlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UGF5V3hQYXlNaW5pUGF5QVBJID0gKGRhdGE6IHsgb3JkZXJJZDogc3RyaW5nIH0pID0+IHtcclxuICByZXR1cm4gaHR0cDxXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0UGF5bWVudE9wdGlvbj4oe1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHVybDogJy9wYXkvd3hQYXkvbWluaVBheScsXHJcbiAgICBkYXRhLFxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDmqKHmi5/mlK/ku5gt5YaF5rWL54mIXHJcbiAqIEBwYXJhbSBkYXRhIG9yZGVySWQg6K6i5Y2VaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQYXlNb2NrQVBJID0gKGRhdGE6IHsgb3JkZXJJZDogc3RyaW5nIH0pID0+IHtcclxuICByZXR1cm4gaHR0cCh7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiAnL3BheS9tb2NrJyxcclxuICAgIGRhdGEsXHJcbiAgfSlcclxufVxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyB1c2VHdWVzc0xpc3QgfSBmcm9tICdAL2NvbXBvc2FibGVzJ1xyXG5pbXBvcnQgeyBPcmRlclN0YXRlLCBvcmRlclN0YXRlTGlzdCB9IGZyb20gJ0Avc2VydmljZXMvY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG4gIGRlbGV0ZU1lbWJlck9yZGVyQVBJLFxyXG4gIGdldE1lbWJlck9yZGVyQnlJZEFQSSxcclxuICBnZXRNZW1iZXJPcmRlckNhbmNlbEJ5SWRBUEksXHJcbiAgZ2V0TWVtYmVyT3JkZXJMb2dpc3RpY3NCeUlkQVBJLFxyXG4gIGdldE1lbWJlck9yZGVyQ29uc2lnbm1lbnRCeUlkQVBJLFxyXG4gIHB1dE1lbWJlck9yZGVyUmVjZWlwdEJ5SWRBUEksXHJcbn0gZnJvbSAnQC9zZXJ2aWNlcy9vcmRlcidcclxuaW1wb3J0IHR5cGUgeyBMb2dpc3RpY0l0ZW0sIE9yZGVyUmVzdWx0IH0gZnJvbSAnQC90eXBlcy9vcmRlcidcclxuaW1wb3J0IHsgb25Mb2FkLCBvblJlYWR5IH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IFBhZ2VTa2VsZXRvbiBmcm9tICcuL2NvbXBvbmVudHMvUGFnZVNrZWxldG9uLnZ1ZSdcclxuaW1wb3J0IHsgZ2V0UGF5TW9ja0FQSSwgZ2V0UGF5V3hQYXlNaW5pUGF5QVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9wYXknXHJcblxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuLy8g54yc5L2g5Zac5qyiXHJcbmNvbnN0IHsgZ3Vlc3NSZWYsIG9uU2Nyb2xsdG9sb3dlciB9ID0gdXNlR3Vlc3NMaXN0KClcclxuLy8g5by55Ye65bGC57uE5Lu2XHJcbmNvbnN0IHBvcHVwID0gcmVmPFVuaUhlbHBlci5VbmlQb3B1cEluc3RhbmNlPigpXHJcbi8vIOWPlua2iOWOn+WboOWIl+ihqFxyXG5jb25zdCByZWFzb25MaXN0ID0gcmVmKFtcclxuICAn5ZWG5ZOB5peg6LSnJyxcclxuICAn5LiN5oOz6KaB5LqGJyxcclxuICAn5ZWG5ZOB5L+h5oGv5aGr6ZSZ5LqGJyxcclxuICAn5Zyw5Z2A5L+h5oGv5aGr5YaZ6ZSZ6K+vJyxcclxuICAn5ZWG5ZOB6ZmN5Lu3JyxcclxuICAn5YW25a6DJyxcclxuXSlcclxuLy8g6K6i5Y2V5Y+W5raI5Y6f5ZugXHJcbmNvbnN0IHJlYXNvbiA9IHJlZignJylcclxuLy8g5aSN5Yi25YaF5a65XHJcbmNvbnN0IG9uQ29weSA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgLy8g6K6+572u57O757uf5Ymq6LS05p2/55qE5YaF5a65XHJcbiAgdW5pLnNldENsaXBib2FyZERhdGEoeyBkYXRhOiBpZCB9KVxyXG59XHJcbi8vIOiOt+WPlumhtemdouWPguaVsFxyXG5jb25zdCBxdWVyeSA9IGRlZmluZVByb3BzPHtcclxuICBpZDogc3RyaW5nXHJcbn0+KClcclxuXHJcbi8vIOiOt+WPlumhtemdouagiFxyXG5jb25zdCBwYWdlcyA9IGdldEN1cnJlbnRQYWdlcygpXHJcblxyXG4vLyDln7rkuo7lsI/nqIvluo/nmoQgUGFnZSDnsbvlnovmianlsZUgdW5pLWFwcCDnmoQgUGFnZVxyXG50eXBlIFBhZ2VJbnN0YW5jZSA9IFBhZ2UuUGFnZUluc3RhbmNlICYgV2VjaGF0TWluaXByb2dyYW0uUGFnZS5JbnN0YW5jZU1ldGhvZHM8YW55PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4vLyDojrflj5borqLljZXor6bmg4VcclxuY29uc3Qgb3JkZXIgPSByZWY8T3JkZXJSZXN1bHQ+KClcclxuY29uc3QgZ2V0TWVtYmVyT3JkZXJCeUlkRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJPcmRlckJ5SWRBUEkocXVlcnkuaWQpXHJcbiAgb3JkZXIudmFsdWUgPSByZXMucmVzdWx0XHJcbiAgaWYgKFxyXG4gICAgW09yZGVyU3RhdGUuRGFpU2hvdUh1bywgT3JkZXJTdGF0ZS5EYWlQaW5nSmlhLCBPcmRlclN0YXRlLllpV2FuQ2hlbmddLmluY2x1ZGVzKFxyXG4gICAgICBvcmRlci52YWx1ZS5vcmRlclN0YXRlLFxyXG4gICAgKVxyXG4gICkge1xyXG4gICAgZ2V0TWVtYmVyT3JkZXJMb2dpc3RpY3NCeUlkRGF0YSgpXHJcbiAgfVxyXG59XHJcblxyXG4vLyDojrflj5bnianmtYHkv6Hmga9cclxuY29uc3QgbG9naXN0aWNMaXN0ID0gcmVmPExvZ2lzdGljSXRlbVtdPihbXSlcclxuY29uc3QgZ2V0TWVtYmVyT3JkZXJMb2dpc3RpY3NCeUlkRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJPcmRlckxvZ2lzdGljc0J5SWRBUEkocXVlcnkuaWQpXHJcbiAgbG9naXN0aWNMaXN0LnZhbHVlID0gcmVzLnJlc3VsdC5saXN0XHJcbn1cclxuXHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgZ2V0TWVtYmVyT3JkZXJCeUlkRGF0YSgpXHJcbn0pXHJcblxyXG4vLyDlgJLorqHml7bnu5PmnZ/kuovku7ZcclxuY29uc3Qgb25UaW1ldXAgPSAoKSA9PiB7XHJcbiAgLy8g5L+u5pS56K6i5Y2V54q25oCB5Li65bey5Y+W5raIXHJcbiAgb3JkZXIudmFsdWUhLm9yZGVyU3RhdGUgPSBPcmRlclN0YXRlLllpUXVYaWFvXHJcbn1cclxuXHJcbi8vIOiuouWNleaUr+S7mFxyXG5jb25zdCBvbk9yZGVyUGF5ID0gYXN5bmMgKCkgPT4ge1xyXG4gIGlmIChpbXBvcnQubWV0YS5lbnYuREVWKSB7XHJcbiAgICAvLyDlvIDlj5Hnjq/looPmqKHmi5/mlK/ku5hcclxuICAgIGF3YWl0IGdldFBheU1vY2tBUEkoeyBvcmRlcklkOiBxdWVyeS5pZCB9KVxyXG4gIH0gZWxzZSB7XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgLy8gSDXnq68g5ZKMIEFwcCDnq6/mnKrlvIDpgJrmlK/ku5gt5qih5ouf5pSv5LuY5L2T6aqMXHJcbiAgICBhd2FpdCBnZXRQYXlNb2NrQVBJKHsgb3JkZXJJZDogcXVlcnkuaWQgfSlcclxuXHJcbiAgfVxyXG4gIC8vIOWFs+mXreW9k+WJjemhte+8jOWGjei3s+i9rOaUr+S7mOe7k+aenOmhtVxyXG4gIHVuaS5yZWRpcmVjdFRvKHsgdXJsOiBgL3BhZ2VzT3JkZXIvcGF5bWVudC9wYXltZW50P2lkPSR7cXVlcnkuaWR9YCB9KVxyXG59XHJcblxyXG4vLyDmmK/lkKbkuLrlvIDlj5Hnjq/looNcclxuY29uc3QgaXNEZXYgPSBpbXBvcnQubWV0YS5lbnYuREVWXHJcbi8vIOaooeaLn+WPkei0p1xyXG5jb25zdCBvbk9yZGVyU2VuZCA9IGFzeW5jICgpID0+IHtcclxuICBpZiAoaXNEZXYpIHtcclxuICAgIGF3YWl0IGdldE1lbWJlck9yZGVyQ29uc2lnbm1lbnRCeUlkQVBJKHF1ZXJ5LmlkKVxyXG4gICAgdW5pLnNob3dUb2FzdCh7IGljb246ICdzdWNjZXNzJywgdGl0bGU6ICfmqKHmi5/lj5HotKflrozmiJAnIH0pXHJcbiAgICAvLyDkuLvliqjmm7TmlrDorqLljZXnirbmgIFcclxuICAgIG9yZGVyLnZhbHVlIS5vcmRlclN0YXRlID0gT3JkZXJTdGF0ZS5EYWlTaG91SHVvXHJcbiAgfVxyXG59XHJcbi8vIOehruiupOaUtui0p1xyXG5jb25zdCBvbk9yZGVyQ29uZmlybSA9ICgpID0+IHtcclxuICAvLyDkuozmrKHnoa7orqTlvLnnqpdcclxuICB1bmkuc2hvd01vZGFsKHtcclxuICAgIGNvbnRlbnQ6ICfkuLrkv53pmpzmgqjnmoTmnYPnm4rvvIzor7fmlLbliLDotKflubbnoa7orqTml6Dor6/lkI7vvIzlho3noa7orqTmlLbotKcnLFxyXG4gICAgY29uZmlybUNvbG9yOiAnIzI3QkE5QicsXHJcbiAgICBzdWNjZXNzOiBhc3luYyAoc3VjY2VzcykgPT4ge1xyXG4gICAgICBpZiAoc3VjY2Vzcy5jb25maXJtKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcHV0TWVtYmVyT3JkZXJSZWNlaXB0QnlJZEFQSShxdWVyeS5pZClcclxuICAgICAgICAvLyDmm7TmlrDorqLljZXnirbmgIFcclxuICAgICAgICBvcmRlci52YWx1ZSA9IHJlcy5yZXN1bHRcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcbi8vIOWIoOmZpOiuouWNlVxyXG5jb25zdCBvbk9yZGVyRGVsZXRlID0gKCkgPT4ge1xyXG4gIC8vIOS6jOasoeehruiupFxyXG4gIHVuaS5zaG93TW9kYWwoe1xyXG4gICAgY29udGVudDogJ+aYr+WQpuWIoOmZpOiuouWNlScsXHJcbiAgICBjb25maXJtQ29sb3I6ICcjMjdCQTlCJyxcclxuICAgIHN1Y2Nlc3M6IGFzeW5jIChzdWNjZXNzKSA9PiB7XHJcbiAgICAgIGlmIChzdWNjZXNzLmNvbmZpcm0pIHtcclxuICAgICAgICBhd2FpdCBkZWxldGVNZW1iZXJPcmRlckFQSSh7IGlkczogW3F1ZXJ5LmlkXSB9KVxyXG4gICAgICAgIHVuaS5yZWRpcmVjdFRvKHsgdXJsOiAnL3BhZ2VzT3JkZXIvbGlzdC9saXN0JyB9KVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuXHJcbi8vIOWPlua2iOiuouWNlVxyXG5jb25zdCBvbk9yZGVyQ2FuY2VsID0gYXN5bmMgKCkgPT4ge1xyXG4gIC8vIOWPkemAgeivt+axglxyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldE1lbWJlck9yZGVyQ2FuY2VsQnlJZEFQSShxdWVyeS5pZCwgeyBjYW5jZWxSZWFzb246IHJlYXNvbi52YWx1ZSB9KVxyXG4gIC8vIOabtOaWsOiuouWNleS/oeaBr1xyXG4gIG9yZGVyLnZhbHVlID0gcmVzLnJlc3VsdFxyXG4gIC8vIOWFs+mXreW8ueeql1xyXG4gIHBvcHVwLnZhbHVlPy5jbG9zZSEoKVxyXG4gIC8vIOi9u+aPkOekulxyXG4gIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnbm9uZScsIHRpdGxlOiAn6K6i5Y2V5Y+W5raI5oiQ5YqfJyB9KVxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDwhLS0g6Ieq5a6a5LmJ5a+86Iiq5qCPOiDpu5jorqTpgI/mmI7kuI3lj6/op4EsIHNjcm9sbC12aWV3IOa7muWKqOWIsCA1MCDml7blsZXnpLogLS0+XHJcbiAgPHZpZXcgY2xhc3M9XCJuYXZiYXJcIiA6c3R5bGU9XCJ7IHBhZGRpbmdUb3A6IHNhZmVBcmVhSW5zZXRzPy50b3AgKyAncHgnIH1cIj5cclxuICAgIDx2aWV3IGNsYXNzPVwid3JhcFwiPlxyXG4gICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgdi1pZj1cInBhZ2VzLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgIG9wZW4tdHlwZT1cIm5hdmlnYXRlQmFja1wiXHJcbiAgICAgICAgY2xhc3M9XCJiYWNrIGljb24tbGVmdFwiXHJcbiAgICAgID48L25hdmlnYXRvcj5cclxuICAgICAgPG5hdmlnYXRvciB2LWVsc2UgdXJsPVwiL3BhZ2VzL2luZGV4L2luZGV4XCIgb3Blbi10eXBlPVwic3dpdGNoVGFiXCIgY2xhc3M9XCJiYWNrIGljb24taG9tZVwiPlxyXG4gICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPuiuouWNleivpuaDhTwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3ZpZXc+XHJcbiAgPHNjcm9sbC12aWV3XHJcbiAgICBlbmFibGUtYmFjay10by10b3BcclxuICAgIHNjcm9sbC15XHJcbiAgICBjbGFzcz1cInZpZXdwb3J0XCJcclxuICAgIGlkPVwic2Nyb2xsZXJcIlxyXG4gICAgQHNjcm9sbHRvbG93ZXI9XCJvblNjcm9sbHRvbG93ZXJcIlxyXG4gID5cclxuICAgIDx0ZW1wbGF0ZSB2LWlmPVwib3JkZXJcIj5cclxuICAgICAgPCEtLSDorqLljZXnirbmgIEgLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwib3ZlcnZpZXdcIiA6c3R5bGU9XCJ7IHBhZGRpbmdUb3A6IHNhZmVBcmVhSW5zZXRzIS50b3AgKyAyMCArICdweCcgfVwiPlxyXG4gICAgICAgIDwhLS0g5b6F5LuY5qy+54q25oCBOuWxleekuuWAkuiuoeaXtiAtLT5cclxuICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIm9yZGVyLm9yZGVyU3RhdGUgPT09IE9yZGVyU3RhdGUuRGFpRnVLdWFuXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInN0YXR1cyBpY29uLWNsb2NrXCI+562J5b6F5LuY5qy+PC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXBzXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwibW9uZXlcIj7lupTku5jph5Hpop06IMKlIHt7IG9yZGVyLnBheU1vbmV5IH19PC90ZXh0PlxyXG4gICAgICAgICAgICA8dGV4dCBjbGFzcz1cInRpbWVcIj7mlK/ku5jliankvZk8L3RleHQ+XHJcbiAgICAgICAgICAgIDx1bmktY291bnRkb3duXHJcbiAgICAgICAgICAgICAgOnNlY29uZD1cIm9yZGVyLmNvdW50ZG93blwiXHJcbiAgICAgICAgICAgICAgY29sb3I9XCIjZmZmXCJcclxuICAgICAgICAgICAgICBzcGxpdG9yLWNvbG9yPVwiI2ZmZlwiXHJcbiAgICAgICAgICAgICAgOnNob3ctZGF5PVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIDpzaG93LWNvbG9uPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIEB0aW1ldXA9XCJvblRpbWV1cFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvblwiIEB0YXA9XCJvbk9yZGVyUGF5XCI+5Y675pSv5LuYPC92aWV3PlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPCEtLSDlhbbku5borqLljZXnirbmgIE65bGV56S65YaN5qyh6LSt5Lmw5oyJ6ZKuIC0tPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICA8IS0tIOiuouWNleeKtuaAgeaWh+WtlyAtLT5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwic3RhdHVzXCI+IHt7IG9yZGVyU3RhdGVMaXN0W29yZGVyLm9yZGVyU3RhdGVdLnRleHQgfX0gPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICA6dXJsPVwiYC9wYWdlc09yZGVyL2NyZWF0ZS9jcmVhdGU/b3JkZXJJZD0ke3F1ZXJ5LmlkfWBcIlxyXG4gICAgICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDlho3mrKHotK3kubBcclxuICAgICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICAgIDwhLS0g5b6F5Y+R6LSn54q25oCB77ya5qih5ouf5Y+R6LSnLOW8gOWPkeacn+mXtOS9v+eUqCznlKjkuo7kv67mlLnorqLljZXnirbmgIHkuLrlt7Llj5HotKcgLS0+XHJcbiAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgdi1pZj1cImlzRGV2ICYmIG9yZGVyLm9yZGVyU3RhdGUgPT0gT3JkZXJTdGF0ZS5EYWlGYUh1b1wiXHJcbiAgICAgICAgICAgICAgQHRhcD1cIm9uT3JkZXJTZW5kXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDmqKHmi5/lj5HotKdcclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICA8IS0tIOW+heaUtui0p+eKtuaAgTog5bGV56S656Gu6K6k5pS26LSn5oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICAgIHYtaWY9XCJvcmRlci5vcmRlclN0YXRlID09PSBPcmRlclN0YXRlLkRhaVNob3VIdW9cIlxyXG4gICAgICAgICAgICAgIEB0YXA9XCJvbk9yZGVyQ29uZmlybVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg56Gu6K6k5pS26LSnXHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDwhLS0g6YWN6YCB54q25oCBIC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInNoaXBtZW50XCI+XHJcbiAgICAgICAgPCEtLSDorqLljZXnianmtYHkv6Hmga8gLS0+XHJcbiAgICAgICAgPHZpZXcgdi1mb3I9XCJpdGVtIGluIGxvZ2lzdGljTGlzdFwiIDprZXk9XCJpdGVtLmlkXCIgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIm1lc3NhZ2VcIj5cclxuICAgICAgICAgICAge3sgaXRlbS50ZXh0IH19XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImRhdGVcIj4ge3sgaXRlbS50aW1lIH19IDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPCEtLSDnlKjmiLfmlLbotKflnLDlnYAgLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJsb2NhdGVcIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwidXNlclwiPiB7eyBvcmRlci5yZWNlaXZlckNvbnRhY3QgfX0ge3sgb3JkZXIucmVjZWl2ZXJNb2JpbGUgfX0gPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJhZGRyZXNzXCI+IHt7IG9yZGVyLnJlY2VpdmVyQWRkcmVzcyB9fSA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICA8IS0tIOWVhuWTgeS/oeaBryAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJnb29kc1wiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgICBjbGFzcz1cIm5hdmlnYXRvclwiXHJcbiAgICAgICAgICAgIHYtZm9yPVwiaXRlbSBpbiBvcmRlci5za3VzXCJcclxuICAgICAgICAgICAgOmtleT1cIml0ZW0uaWRcIlxyXG4gICAgICAgICAgICA6dXJsPVwiYC9wYWdlcy9nb29kcy9nb29kcz9pZD0ke2l0ZW0uc3B1SWR9YFwiXHJcbiAgICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbWFnZSBjbGFzcz1cImNvdmVyXCIgOnNyYz1cIml0ZW0uaW1hZ2VcIj48L2ltYWdlPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cIm1ldGFcIj5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXNcIj57eyBpdGVtLm5hbWUgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0eXBlXCI+e3sgaXRlbS5hdHRyc1RleHQgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJhY3R1YWxcIj5cclxuICAgICAgICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJzeW1ib2xcIj7CpTwvdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPHRleHQ+e3sgaXRlbS5jdXJQcmljZSB9fTwvdGV4dD5cclxuICAgICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJxdWFudGl0eVwiPnh7eyBpdGVtLnF1YW50aXR5IH19PC92aWV3PlxyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgIDwhLS0g5b6F6K+E5Lu354q25oCBOuWxleekuuaMiemSriAtLT5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYWN0aW9uXCIgdi1pZj1cIm9yZGVyLm9yZGVyU3RhdGUgPT09IE9yZGVyU3RhdGUuRGFpUGluZ0ppYVwiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCI+55Sz6K+35ZSu5ZCOPC92aWV3PlxyXG4gICAgICAgICAgICA8bmF2aWdhdG9yIHVybD1cIlwiIGNsYXNzPVwiYnV0dG9uXCI+IOWOu+ivhOS7tyA8L25hdmlnYXRvcj5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPCEtLSDlkIjorqEgLS0+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0b3RhbFwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0ZXh0XCI+5ZWG5ZOB5oC75Lu3OiA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwic3ltYm9sXCI+e3sgb3JkZXIudG90YWxNb25leSB9fTwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGV4dFwiPui/kOi0uTogPC92aWV3PlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInN5bWJvbFwiPnt7IG9yZGVyLnBvc3RGZWUgfX08L3ZpZXc+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInRleHRcIj7lupTku5jph5Hpop06IDwvdmlldz5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJzeW1ib2wgcHJpbWFyeVwiPnt7IG9yZGVyLnBheU1vbmV5IH19PC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG5cclxuICAgICAgPCEtLSDorqLljZXkv6Hmga8gLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiZGV0YWlsXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPuiuouWNleS/oeaBrzwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIOiuouWNlee8luWPtzoge3sgcXVlcnkuaWQgfX0gPHRleHQgY2xhc3M9XCJjb3B5XCIgQHRhcD1cIm9uQ29weShxdWVyeS5pZClcIj7lpI3liLY8L3RleHQ+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIj7kuIvljZXml7bpl7Q6IHt7IG9yZGVyLmNyZWF0ZVRpbWUgfX08L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICA8IS0tIOeMnOS9oOWWnOasoiAtLT5cclxuICAgICAgPFh0eEd1ZXNzIHJlZj1cImd1ZXNzUmVmXCIgLz5cclxuXHJcbiAgICAgIDwhLS0g5bqV6YOo5pON5L2c5qCPIC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInRvb2xiYXItaGVpZ2h0XCIgOnN0eWxlPVwieyBwYWRkaW5nQm90dG9tOiBzYWZlQXJlYUluc2V0cz8uYm90dG9tICsgJ3B4JyB9XCI+PC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cInRvb2xiYXJcIiA6c3R5bGU9XCJ7IHBhZGRpbmdCb3R0b206IHNhZmVBcmVhSW5zZXRzPy5ib3R0b20gKyAncHgnIH1cIj5cclxuICAgICAgICA8IS0tIOW+heS7mOasvueKtuaAgTrlsZXnpLrmlK/ku5jmjInpkq4gLS0+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJvcmRlci5vcmRlclN0YXRlID09PSBPcmRlclN0YXRlLkRhaUZ1S3VhblwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24gcHJpbWFyeVwiIEB0YXA9XCJvbk9yZGVyUGF5XCI+IOWOu+aUr+S7mCA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvblwiIEB0YXA9XCJwb3B1cD8ub3Blbj8uKClcIj4g5Y+W5raI6K6i5Y2VIDwvdmlldz5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgIDwhLS0g5YW25LuW6K6i5Y2V54q25oCBOuaMiemcgOWxleekuuaMiemSriAtLT5cclxuICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICA6dXJsPVwiYC9wYWdlc09yZGVyL2NyZWF0ZS9jcmVhdGU/b3JkZXJJZD0ke3F1ZXJ5LmlkfWBcIlxyXG4gICAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICDlho3mrKHotK3kubBcclxuICAgICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgPCEtLSDlvoXmlLbotKfnirbmgIE6IOWxleekuuehruiupOaUtui0pyAtLT5cclxuICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIlxyXG4gICAgICAgICAgICB2LWlmPVwib3JkZXIub3JkZXJTdGF0ZSA9PT0gT3JkZXJTdGF0ZS5EYWlTaG91SHVvXCJcclxuICAgICAgICAgICAgQHRhcD1cIm9uT3JkZXJDb25maXJtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg56Gu6K6k5pS26LSnXHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICA8IS0tIOW+heivhOS7t+eKtuaAgTog5bGV56S65Y676K+E5Lu3IC0tPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b25cIiB2LWlmPVwib3JkZXIub3JkZXJTdGF0ZSA9PT0gT3JkZXJTdGF0ZS5EYWlQaW5nSmlhXCI+IOWOu+ivhOS7tyA8L3ZpZXc+XHJcbiAgICAgICAgICA8IS0tIOW+heivhOS7ty/lt7LlrozmiJAv5bey5Y+W5raIIOeKtuaAgTog5bGV56S65Yig6Zmk6K6i5Y2VIC0tPlxyXG4gICAgICAgICAgPHZpZXdcclxuICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gZGVsZXRlXCJcclxuICAgICAgICAgICAgdi1pZj1cIm9yZGVyLm9yZGVyU3RhdGUgPj0gT3JkZXJTdGF0ZS5EYWlQaW5nSmlhXCJcclxuICAgICAgICAgICAgQHRhcD1cIm9uT3JkZXJEZWxldGVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICDliKDpmaTorqLljZVcclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgPCEtLSDpqqjmnrblsY/nu4Tku7YgLS0+XHJcbiAgICAgIDxQYWdlU2tlbGV0b24gLz5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgPC9zY3JvbGwtdmlldz5cclxuICA8IS0tIOWPlua2iOiuouWNleW8ueeqlyAtLT5cclxuICA8dW5pLXBvcHVwIHJlZj1cInBvcHVwXCIgdHlwZT1cImJvdHRvbVwiIGJhY2tncm91bmQtY29sb3I9XCIjZmZmXCI+XHJcbiAgICA8dmlldyBjbGFzcz1cInBvcHVwLXJvb3RcIj5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJ0aXRsZVwiPuiuouWNleWPlua2iDwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwidGlwc1wiPuivt+mAieaLqeWPlua2iOiuouWNleeahOWOn+WboO+8mjwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImNlbGxcIiB2LWZvcj1cIml0ZW0gaW4gcmVhc29uTGlzdFwiIDprZXk9XCJpdGVtXCIgQHRhcD1cInJlYXNvbiA9IGl0ZW1cIj5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidGV4dFwiPnt7IGl0ZW0gfX08L3RleHQ+XHJcbiAgICAgICAgICA8dGV4dCBjbGFzcz1cImljb25cIiA6Y2xhc3M9XCJ7IGNoZWNrZWQ6IGl0ZW0gPT09IHJlYXNvbiB9XCI+PC90ZXh0PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImZvb3RlclwiPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uXCIgQHRhcD1cInBvcHVwPy5jbG9zZT8uKClcIj7lj5bmtog8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b24gcHJpbWFyeVwiIEB0YXA9XCJvbk9yZGVyQ2FuY2VsXCI+56Gu6K6kPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgPC91bmktcG9wdXA+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4ubmF2YmFyIHtcclxuICB3aWR0aDogNzUwcnB4O1xyXG4gIGNvbG9yOiAjMDAwO1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICB6LWluZGV4OiA5O1xyXG4gIC8qIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7ICovXHJcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcblxyXG4gIC53cmFwIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHJcbiAgICAudGl0bGUge1xyXG4gICAgICBoZWlnaHQ6IDQ0cHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBmb250LXNpemU6IDMycnB4O1xyXG4gICAgICAvKiBjb2xvcjogIzAwMDsgKi9cclxuICAgICAgY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5iYWNrIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICBoZWlnaHQ6IDQ0cHg7XHJcbiAgICAgIHdpZHRoOiA0NHB4O1xyXG4gICAgICBmb250LXNpemU6IDQ0cnB4O1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgLyogY29sb3I6ICMwMDA7ICovXHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLnZpZXdwb3J0IHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y4O1xyXG59XHJcblxyXG4ub3ZlcnZpZXcge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cclxuICBsaW5lLWhlaWdodDogMTtcclxuICBwYWRkaW5nLWJvdHRvbTogMzBycHg7XHJcbiAgY29sb3I6ICNmZmY7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vcGNhcGkteGlhb3R1eGlhbi1mcm9udC1kZXZ0ZXN0Lml0aGVpbWEubmV0L21pbmlhcHAvaW1hZ2VzL29yZGVyX2JnLnBuZyk7XHJcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcclxuXHJcbiAgLnN0YXR1cyB7XHJcbiAgICBmb250LXNpemU6IDM2cnB4O1xyXG4gIH1cclxuXHJcbiAgLnN0YXR1czo6YmVmb3JlIHtcclxuICAgIG1hcmdpbi1yaWdodDogNnJweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgfVxyXG5cclxuICAudGlwcyB7XHJcbiAgICBtYXJnaW46IDMwcnB4IDA7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgICAubW9uZXkge1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IDMwcnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmJ1dHRvbi1ncm91cCB7XHJcbiAgICBtYXJnaW4tdG9wOiAzMHJweDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgfVxyXG5cclxuICAuYnV0dG9uIHtcclxuICAgIHdpZHRoOiAyNjBycHg7XHJcbiAgICBoZWlnaHQ6IDY0cnB4O1xyXG4gICAgbWFyZ2luOiAwIDEwcnB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbGluZS1oZWlnaHQ6IDY0cnB4O1xyXG4gICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgIGNvbG9yOiAjMjdiYTliO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNjhycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIH1cclxufVxyXG5cclxuLnNoaXBtZW50IHtcclxuICBsaW5lLWhlaWdodDogMS40O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgbWFyZ2luOiAyMHJweCAyMHJweCAwO1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gIC5sb2NhdGUsXHJcbiAgLml0ZW0ge1xyXG4gICAgbWluLWhlaWdodDogMTIwcnB4O1xyXG4gICAgcGFkZGluZzogMzBycHggMzBycHggMjVycHggNzVycHg7XHJcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDUwcnB4O1xyXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcclxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDZycHggY2VudGVyO1xyXG4gIH1cclxuXHJcbiAgLmxvY2F0ZSB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly9wY2FwaS14aWFvdHV4aWFuLWZyb250LWRldnRlc3QuaXRoZWltYS5uZXQvbWluaWFwcC9pbWFnZXMvbG9jYXRlLnBuZyk7XHJcblxyXG4gICAgLnVzZXIge1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogIzQ0NDtcclxuICAgIH1cclxuXHJcbiAgICAuYWRkcmVzcyB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vcGNhcGkteGlhb3R1eGlhbi1mcm9udC1kZXZ0ZXN0Lml0aGVpbWEubmV0L21pbmlhcHAvaW1hZ2VzL2Nhci5wbmcpO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZWVlO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuICAgIC5tZXNzYWdlIHtcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmRhdGUge1xyXG4gICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICBjb2xvcjogIzY2NjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi5nb29kcyB7XHJcbiAgbWFyZ2luOiAyMHJweCAyMHJweCAwO1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgcGFkZGluZzogMzBycHggMDtcclxuICAgIGJvcmRlci1ib3R0b206IDFycHggc29saWQgI2VlZTtcclxuXHJcbiAgICAubmF2aWdhdG9yIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgbWFyZ2luOiAyMHJweCAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5jb3ZlciB7XHJcbiAgICAgIHdpZHRoOiAxNzBycHg7XHJcbiAgICAgIGhlaWdodDogMTcwcnB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAyMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAubWV0YSB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLm5hbWUge1xyXG4gICAgICBoZWlnaHQ6IDgwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogIzQ0NDtcclxuICAgIH1cclxuXHJcbiAgICAudHlwZSB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjg7XHJcbiAgICAgIHBhZGRpbmc6IDAgMTVycHg7XHJcbiAgICAgIG1hcmdpbi10b3A6IDZycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRycHg7XHJcbiAgICAgIGNvbG9yOiAjODg4O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y4O1xyXG4gICAgfVxyXG5cclxuICAgIC5wcmljZSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIG1hcmdpbi10b3A6IDZycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLnN5bWJvbCB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjBycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLm9yaWdpbmFsIHtcclxuICAgICAgY29sb3I6ICM5OTk7XHJcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xyXG4gICAgfVxyXG5cclxuICAgIC5hY3R1YWwge1xyXG4gICAgICBtYXJnaW4tbGVmdDogMTBycHg7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgfVxyXG5cclxuICAgIC50ZXh0IHtcclxuICAgICAgZm9udC1zaXplOiAyMnJweDtcclxuICAgIH1cclxuXHJcbiAgICAucXVhbnRpdHkge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogMDtcclxuICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgfVxyXG5cclxuICAgIC5hY3Rpb24ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgICAgcGFkZGluZzogMzBycHggMCAwO1xyXG5cclxuICAgICAgLmJ1dHRvbiB7XHJcbiAgICAgICAgd2lkdGg6IDIwMHJweDtcclxuICAgICAgICBoZWlnaHQ6IDYwcnB4O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICBsaW5lLWhlaWdodDogNjBycHg7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcnB4O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDYwcnB4O1xyXG4gICAgICAgIGJvcmRlcjogMXJweCBzb2xpZCAjY2NjO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5wcmltYXJ5IHtcclxuICAgICAgICBjb2xvcjogIzI3YmE5YjtcclxuICAgICAgICBib3JkZXItY29sb3I6ICMyN2JhOWI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC50b3RhbCB7XHJcbiAgICBsaW5lLWhlaWdodDogMTtcclxuICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICBwYWRkaW5nOiAyMHJweCAwO1xyXG4gICAgY29sb3I6ICM2NjY7XHJcblxyXG4gICAgLnJvdyB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgcGFkZGluZzogMTBycHggMDtcclxuICAgIH1cclxuXHJcbiAgICAuc3ltYm9sOjpiZWZvcmUge1xyXG4gICAgICBjb250ZW50OiAnwqUnO1xyXG4gICAgICBmb250LXNpemU6IDgwJTtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAzcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5wcmltYXJ5IHtcclxuICAgICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzZycHg7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uZGV0YWlsIHtcclxuICBsaW5lLWhlaWdodDogMTtcclxuICBwYWRkaW5nOiAzMHJweCAyMHJweCAwO1xyXG4gIG1hcmdpbjogMjBycHggMjBycHggMDtcclxuICBmb250LXNpemU6IDI2cnB4O1xyXG4gIGNvbG9yOiAjNjY2O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gIC50aXRsZSB7XHJcbiAgICBmb250LXNpemU6IDMwcnB4O1xyXG4gICAgY29sb3I6ICM0NDQ7XHJcbiAgfVxyXG5cclxuICAucm93IHtcclxuICAgIHBhZGRpbmc6IDIwcnB4IDA7XHJcblxyXG4gICAgLml0ZW0ge1xyXG4gICAgICBwYWRkaW5nOiAxMHJweCAwO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC5jb3B5IHtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMjBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjBycHg7XHJcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcbiAgICAgIHBhZGRpbmc6IDVycHggMTBycHg7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAxMHJweDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi50b29sYmFyLWhlaWdodCB7XHJcbiAgaGVpZ2h0OiAxMDBycHg7XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbn1cclxuXHJcbi50b29sYmFyIHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgbGVmdDogMDtcclxuICByaWdodDogMDtcclxuICBib3R0b206IGNhbGModmFyKC0td2luZG93LWJvdHRvbSkpO1xyXG4gIHotaW5kZXg6IDE7XHJcblxyXG4gIGhlaWdodDogMTAwcnB4O1xyXG4gIHBhZGRpbmc6IDAgMjBycHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcclxuICBib3JkZXItdG9wOiAxcnB4IHNvbGlkICNlZGVkZWQ7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZWRlZGVkO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcblxyXG4gIC5idXR0b24ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgICB3aWR0aDogMjAwcnB4O1xyXG4gICAgaGVpZ2h0OiA3MnJweDtcclxuICAgIG1hcmdpbi1sZWZ0OiAxNXJweDtcclxuICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiA3MnJweDtcclxuICAgIGJvcmRlcjogMXJweCBzb2xpZCAjY2NjO1xyXG4gICAgY29sb3I6ICM0NDQ7XHJcbiAgfVxyXG5cclxuICAuZGVsZXRlIHtcclxuICAgIG9yZGVyOiA0O1xyXG4gICAgY29sb3I6ICNjZjQ0NDQ7XHJcbiAgfVxyXG5cclxuICAuYnV0dG9uIHtcclxuICAgIG9yZGVyOiAzO1xyXG4gIH1cclxuXHJcbiAgLnNlY29uZGFyeSB7XHJcbiAgICBvcmRlcjogMjtcclxuICAgIGNvbG9yOiAjMjdiYTliO1xyXG4gICAgYm9yZGVyLWNvbG9yOiAjMjdiYTliO1xyXG4gIH1cclxuXHJcbiAgLnByaW1hcnkge1xyXG4gICAgb3JkZXI6IDE7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgfVxyXG59XHJcblxyXG4ucG9wdXAtcm9vdCB7XHJcbiAgcGFkZGluZzogMzBycHggMzBycHggMDtcclxuICBib3JkZXItcmFkaXVzOiAxMHJweCAxMHJweCAwIDA7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIGZvbnQtc2l6ZTogMzBycHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAzMHJweDtcclxuICB9XHJcblxyXG4gIC5kZXNjcmlwdGlvbiB7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgcGFkZGluZzogMCAyMHJweDtcclxuXHJcbiAgICAudGlwcyB7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAxMnJweDtcclxuICAgIH1cclxuXHJcbiAgICAuY2VsbCB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgcGFkZGluZzogMTVycHggMDtcclxuICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICB9XHJcblxyXG4gICAgLmljb246OmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6ICdcXGU2Y2QnO1xyXG4gICAgICBmb250LWZhbWlseTogJ2VyYWJiaXQnICFpbXBvcnRhbnQ7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzhycHg7XHJcbiAgICAgIGNvbG9yOiAjOTk5O1xyXG4gICAgfVxyXG5cclxuICAgIC5pY29uLmNoZWNrZWQ6OmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6ICdcXGU2Y2MnO1xyXG4gICAgICBmb250LXNpemU6IDM4cnB4O1xyXG4gICAgICBjb2xvcjogIzI3YmE5YjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5mb290ZXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIHBhZGRpbmc6IDMwcnB4IDAgNDBycHg7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgY29sb3I6ICM0NDQ7XHJcblxyXG4gICAgLmJ1dHRvbiB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIGhlaWdodDogNzJycHg7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgbGluZS1oZWlnaHQ6IDcycnB4O1xyXG4gICAgICBtYXJnaW46IDAgMjBycHg7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA3MnJweDtcclxuICAgICAgYm9yZGVyOiAxcnB4IHNvbGlkICNjY2M7XHJcbiAgICB9XHJcblxyXG4gICAgLnByaW1hcnkge1xyXG4gICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyB1c2VHdWVzc0xpc3QgfSBmcm9tICdAL2NvbXBvc2FibGVzJ1xyXG5pbXBvcnQgeyBPcmRlclN0YXRlLCBvcmRlclN0YXRlTGlzdCB9IGZyb20gJ0Avc2VydmljZXMvY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG4gIGRlbGV0ZU1lbWJlck9yZGVyQVBJLFxyXG4gIGdldE1lbWJlck9yZGVyQnlJZEFQSSxcclxuICBnZXRNZW1iZXJPcmRlckNhbmNlbEJ5SWRBUEksXHJcbiAgZ2V0TWVtYmVyT3JkZXJMb2dpc3RpY3NCeUlkQVBJLFxyXG4gIGdldE1lbWJlck9yZGVyQ29uc2lnbm1lbnRCeUlkQVBJLFxyXG4gIHB1dE1lbWJlck9yZGVyUmVjZWlwdEJ5SWRBUEksXHJcbn0gZnJvbSAnQC9zZXJ2aWNlcy9vcmRlcidcclxuaW1wb3J0IHR5cGUgeyBMb2dpc3RpY0l0ZW0sIE9yZGVyUmVzdWx0IH0gZnJvbSAnQC90eXBlcy9vcmRlcidcclxuaW1wb3J0IHsgb25Mb2FkLCBvblJlYWR5IH0gZnJvbSAnQGRjbG91ZGlvL3VuaS1hcHAnXHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IFBhZ2VTa2VsZXRvbiBmcm9tICcuL2NvbXBvbmVudHMvUGFnZVNrZWxldG9uLnZ1ZSdcclxuaW1wb3J0IHsgZ2V0UGF5TW9ja0FQSSwgZ2V0UGF5V3hQYXlNaW5pUGF5QVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9wYXknXHJcblxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuLy8g54yc5L2g5Zac5qyiXHJcbmNvbnN0IHsgZ3Vlc3NSZWYsIG9uU2Nyb2xsdG9sb3dlciB9ID0gdXNlR3Vlc3NMaXN0KClcclxuLy8g5by55Ye65bGC57uE5Lu2XHJcbmNvbnN0IHBvcHVwID0gcmVmPFVuaUhlbHBlci5VbmlQb3B1cEluc3RhbmNlPigpXHJcbi8vIOWPlua2iOWOn+WboOWIl+ihqFxyXG5jb25zdCByZWFzb25MaXN0ID0gcmVmKFtcclxuICAn5ZWG5ZOB5peg6LSnJyxcclxuICAn5LiN5oOz6KaB5LqGJyxcclxuICAn5ZWG5ZOB5L+h5oGv5aGr6ZSZ5LqGJyxcclxuICAn5Zyw5Z2A5L+h5oGv5aGr5YaZ6ZSZ6K+vJyxcclxuICAn5ZWG5ZOB6ZmN5Lu3JyxcclxuICAn5YW25a6DJyxcclxuXSlcclxuLy8g6K6i5Y2V5Y+W5raI5Y6f5ZugXHJcbmNvbnN0IHJlYXNvbiA9IHJlZignJylcclxuLy8g5aSN5Yi25YaF5a65XHJcbmNvbnN0IG9uQ29weSA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgLy8g6K6+572u57O757uf5Ymq6LS05p2/55qE5YaF5a65XHJcbiAgdW5pLnNldENsaXBib2FyZERhdGEoeyBkYXRhOiBpZCB9KVxyXG59XHJcbi8vIOiOt+WPlumhtemdouWPguaVsFxyXG5jb25zdCBxdWVyeSA9IGRlZmluZVByb3BzPHtcclxuICBpZDogc3RyaW5nXHJcbn0+KClcclxuXHJcbi8vIOiOt+WPlumhtemdouagiFxyXG5jb25zdCBwYWdlcyA9IGdldEN1cnJlbnRQYWdlcygpXHJcblxyXG4vLyDln7rkuo7lsI/nqIvluo/nmoQgUGFnZSDnsbvlnovmianlsZUgdW5pLWFwcCDnmoQgUGFnZVxyXG50eXBlIFBhZ2VJbnN0YW5jZSA9IFBhZ2UuUGFnZUluc3RhbmNlICYgV2VjaGF0TWluaXByb2dyYW0uUGFnZS5JbnN0YW5jZU1ldGhvZHM8YW55PlxyXG5cclxuLy8gI2lmZGVmIE1QLVdFSVhJTlxyXG4vLyDojrflj5blvZPliY3pobXpnaLlrp7kvovvvIzmlbDnu4TmnIDlkI7kuIDpoblcclxuY29uc3QgcGFnZUluc3RhbmNlID0gcGFnZXMuYXQoLTEpIGFzIFBhZ2VJbnN0YW5jZVxyXG5cclxuLy8g6aG16Z2i5riy5p+T5a6M5q+V77yM57uR5a6a5Yqo55S75pWI5p6cXHJcbm9uUmVhZHkoKCkgPT4ge1xyXG4gIC8vIOWKqOeUu+aViOaenCzlr7zoiKrmoI/og4zmma/oibJcclxuICBwYWdlSW5zdGFuY2UuYW5pbWF0ZShcclxuICAgICcubmF2YmFyJyxcclxuICAgIFt7IGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyB9LCB7IGJhY2tncm91bmRDb2xvcjogJyNmOGY4ZjgnIH1dLFxyXG4gICAgMTAwMCxcclxuICAgIHtcclxuICAgICAgc2Nyb2xsU291cmNlOiAnI3Njcm9sbGVyJyxcclxuICAgICAgdGltZVJhbmdlOiAxMDAwLFxyXG4gICAgICBzdGFydFNjcm9sbE9mZnNldDogMCxcclxuICAgICAgZW5kU2Nyb2xsT2Zmc2V0OiA1MCxcclxuICAgIH0sXHJcbiAgKVxyXG4gIC8vIOWKqOeUu+aViOaenCzlr7zoiKrmoI/moIfpophcclxuICBwYWdlSW5zdGFuY2UuYW5pbWF0ZSgnLm5hdmJhciAudGl0bGUnLCBbeyBjb2xvcjogJ3RyYW5zcGFyZW50JyB9LCB7IGNvbG9yOiAnIzAwMCcgfV0sIDEwMDAsIHtcclxuICAgIHNjcm9sbFNvdXJjZTogJyNzY3JvbGxlcicsXHJcbiAgICB0aW1lUmFuZ2U6IDEwMDAsXHJcbiAgICBzdGFydFNjcm9sbE9mZnNldDogMCxcclxuICAgIGVuZFNjcm9sbE9mZnNldDogNTAsXHJcbiAgfSlcclxuICAvLyDliqjnlLvmlYjmnpws5a+86Iiq5qCP6L+U5Zue5oyJ6ZKuXHJcbiAgcGFnZUluc3RhbmNlLmFuaW1hdGUoJy5uYXZiYXIgLmJhY2snLCBbeyBjb2xvcjogJyNmZmYnIH0sIHsgY29sb3I6ICcjMDAwJyB9XSwgMTAwMCwge1xyXG4gICAgc2Nyb2xsU291cmNlOiAnI3Njcm9sbGVyJyxcclxuICAgIHRpbWVSYW5nZTogMTAwMCxcclxuICAgIHN0YXJ0U2Nyb2xsT2Zmc2V0OiAwLFxyXG4gICAgZW5kU2Nyb2xsT2Zmc2V0OiA1MCxcclxuICB9KVxyXG59KVxyXG4vLyAjZW5kaWZcclxuXHJcbi8vIOiOt+WPluiuouWNleivpuaDhVxyXG5jb25zdCBvcmRlciA9IHJlZjxPcmRlclJlc3VsdD4oKVxyXG5jb25zdCBnZXRNZW1iZXJPcmRlckJ5SWREYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldE1lbWJlck9yZGVyQnlJZEFQSShxdWVyeS5pZClcclxuICBvcmRlci52YWx1ZSA9IHJlcy5yZXN1bHRcclxuICBpZiAoXHJcbiAgICBbT3JkZXJTdGF0ZS5EYWlTaG91SHVvLCBPcmRlclN0YXRlLkRhaVBpbmdKaWEsIE9yZGVyU3RhdGUuWWlXYW5DaGVuZ10uaW5jbHVkZXMoXHJcbiAgICAgIG9yZGVyLnZhbHVlLm9yZGVyU3RhdGUsXHJcbiAgICApXHJcbiAgKSB7XHJcbiAgICBnZXRNZW1iZXJPcmRlckxvZ2lzdGljc0J5SWREYXRhKClcclxuICB9XHJcbn1cclxuXHJcbi8vIOiOt+WPlueJqea1geS/oeaBr1xyXG5jb25zdCBsb2dpc3RpY0xpc3QgPSByZWY8TG9naXN0aWNJdGVtW10+KFtdKVxyXG5jb25zdCBnZXRNZW1iZXJPcmRlckxvZ2lzdGljc0J5SWREYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldE1lbWJlck9yZGVyTG9naXN0aWNzQnlJZEFQSShxdWVyeS5pZClcclxuICBsb2dpc3RpY0xpc3QudmFsdWUgPSByZXMucmVzdWx0Lmxpc3RcclxufVxyXG5cclxub25Mb2FkKCgpID0+IHtcclxuICBnZXRNZW1iZXJPcmRlckJ5SWREYXRhKClcclxufSlcclxuXHJcbi8vIOWAkuiuoeaXtue7k+adn+S6i+S7tlxyXG5jb25zdCBvblRpbWV1cCA9ICgpID0+IHtcclxuICAvLyDkv67mlLnorqLljZXnirbmgIHkuLrlt7Llj5bmtohcclxuICBvcmRlci52YWx1ZSEub3JkZXJTdGF0ZSA9IE9yZGVyU3RhdGUuWWlRdVhpYW9cclxufVxyXG5cclxuLy8g6K6i5Y2V5pSv5LuYXHJcbmNvbnN0IG9uT3JkZXJQYXkgPSBhc3luYyAoKSA9PiB7XHJcbiAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcclxuICAgIC8vIOW8gOWPkeeOr+Wig+aooeaLn+aUr+S7mFxyXG4gICAgYXdhaXQgZ2V0UGF5TW9ja0FQSSh7IG9yZGVySWQ6IHF1ZXJ5LmlkIH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vICNpZmRlZiBNUC1XRUlYSU5cclxuICAgIC8vIOato+W8j+eOr+Wig+W+ruS/oeaUr+S7mFxyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0UGF5V3hQYXlNaW5pUGF5QVBJKHsgb3JkZXJJZDogcXVlcnkuaWQgfSlcclxuICAgIGF3YWl0IHd4LnJlcXVlc3RQYXltZW50KHJlcy5yZXN1bHQpXHJcbiAgICAvLyAjZW5kaWZcclxuXHJcbiAgICAvLyAjaWZkZWYgSDUgfHwgQVBQLVBMVVNcclxuICAgIC8vIEg156uvIOWSjCBBcHAg56uv5pyq5byA6YCa5pSv5LuYLeaooeaLn+aUr+S7mOS9k+mqjFxyXG4gICAgYXdhaXQgZ2V0UGF5TW9ja0FQSSh7IG9yZGVySWQ6IHF1ZXJ5LmlkIH0pXHJcbiAgICAvLyAjZW5kaWZcclxuICB9XHJcbiAgLy8g5YWz6Zet5b2T5YmN6aG177yM5YaN6Lez6L2s5pSv5LuY57uT5p6c6aG1XHJcbiAgdW5pLnJlZGlyZWN0VG8oeyB1cmw6IGAvcGFnZXNPcmRlci9wYXltZW50L3BheW1lbnQ/aWQ9JHtxdWVyeS5pZH1gIH0pXHJcbn1cclxuXHJcbi8vIOaYr+WQpuS4uuW8gOWPkeeOr+Wig1xyXG5jb25zdCBpc0RldiA9IGltcG9ydC5tZXRhLmVudi5ERVZcclxuLy8g5qih5ouf5Y+R6LSnXHJcbmNvbnN0IG9uT3JkZXJTZW5kID0gYXN5bmMgKCkgPT4ge1xyXG4gIGlmIChpc0Rldikge1xyXG4gICAgYXdhaXQgZ2V0TWVtYmVyT3JkZXJDb25zaWdubWVudEJ5SWRBUEkocXVlcnkuaWQpXHJcbiAgICB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ3N1Y2Nlc3MnLCB0aXRsZTogJ+aooeaLn+WPkei0p+WujOaIkCcgfSlcclxuICAgIC8vIOS4u+WKqOabtOaWsOiuouWNleeKtuaAgVxyXG4gICAgb3JkZXIudmFsdWUhLm9yZGVyU3RhdGUgPSBPcmRlclN0YXRlLkRhaVNob3VIdW9cclxuICB9XHJcbn1cclxuLy8g56Gu6K6k5pS26LSnXHJcbmNvbnN0IG9uT3JkZXJDb25maXJtID0gKCkgPT4ge1xyXG4gIC8vIOS6jOasoeehruiupOW8ueeql1xyXG4gIHVuaS5zaG93TW9kYWwoe1xyXG4gICAgY29udGVudDogJ+S4uuS/nemanOaCqOeahOadg+ebiu+8jOivt+aUtuWIsOi0p+W5tuehruiupOaXoOivr+WQju+8jOWGjeehruiupOaUtui0pycsXHJcbiAgICBjb25maXJtQ29sb3I6ICcjMjdCQTlCJyxcclxuICAgIHN1Y2Nlc3M6IGFzeW5jIChzdWNjZXNzKSA9PiB7XHJcbiAgICAgIGlmIChzdWNjZXNzLmNvbmZpcm0pIHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBwdXRNZW1iZXJPcmRlclJlY2VpcHRCeUlkQVBJKHF1ZXJ5LmlkKVxyXG4gICAgICAgIC8vIOabtOaWsOiuouWNleeKtuaAgVxyXG4gICAgICAgIG9yZGVyLnZhbHVlID0gcmVzLnJlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuLy8g5Yig6Zmk6K6i5Y2VXHJcbmNvbnN0IG9uT3JkZXJEZWxldGUgPSAoKSA9PiB7XHJcbiAgLy8g5LqM5qyh56Gu6K6kXHJcbiAgdW5pLnNob3dNb2RhbCh7XHJcbiAgICBjb250ZW50OiAn5piv5ZCm5Yig6Zmk6K6i5Y2VJyxcclxuICAgIGNvbmZpcm1Db2xvcjogJyMyN0JBOUInLFxyXG4gICAgc3VjY2VzczogYXN5bmMgKHN1Y2Nlc3MpID0+IHtcclxuICAgICAgaWYgKHN1Y2Nlc3MuY29uZmlybSkge1xyXG4gICAgICAgIGF3YWl0IGRlbGV0ZU1lbWJlck9yZGVyQVBJKHsgaWRzOiBbcXVlcnkuaWRdIH0pXHJcbiAgICAgICAgdW5pLnJlZGlyZWN0VG8oeyB1cmw6ICcvcGFnZXNPcmRlci9saXN0L2xpc3QnIH0pXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5cclxuLy8g5Y+W5raI6K6i5Y2VXHJcbmNvbnN0IG9uT3JkZXJDYW5jZWwgPSBhc3luYyAoKSA9PiB7XHJcbiAgLy8g5Y+R6YCB6K+35rGCXHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0TWVtYmVyT3JkZXJDYW5jZWxCeUlkQVBJKHF1ZXJ5LmlkLCB7IGNhbmNlbFJlYXNvbjogcmVhc29uLnZhbHVlIH0pXHJcbiAgLy8g5pu05paw6K6i5Y2V5L+h5oGvXHJcbiAgb3JkZXIudmFsdWUgPSByZXMucmVzdWx0XHJcbiAgLy8g5YWz6Zet5by556qXXHJcbiAgcG9wdXAudmFsdWU/LmNsb3NlISgpXHJcbiAgLy8g6L275o+Q56S6XHJcbiAgdW5pLnNob3dUb2FzdCh7IGljb246ICdub25lJywgdGl0bGU6ICforqLljZXlj5bmtojmiJDlip8nIH0pXHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPCEtLSDoh6rlrprkuYnlr7zoiKrmoI86IOm7mOiupOmAj+aYjuS4jeWPr+ingSwgc2Nyb2xsLXZpZXcg5rua5Yqo5YiwIDUwIOaXtuWxleekuiAtLT5cclxuICA8dmlldyBjbGFzcz1cIm5hdmJhclwiIDpzdHlsZT1cInsgcGFkZGluZ1RvcDogc2FmZUFyZWFJbnNldHM/LnRvcCArICdweCcgfVwiPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ3cmFwXCI+XHJcbiAgICAgIDxuYXZpZ2F0b3JcclxuICAgICAgICB2LWlmPVwicGFnZXMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgb3Blbi10eXBlPVwibmF2aWdhdGVCYWNrXCJcclxuICAgICAgICBjbGFzcz1cImJhY2sgaWNvbi1sZWZ0XCJcclxuICAgICAgPjwvbmF2aWdhdG9yPlxyXG4gICAgICA8bmF2aWdhdG9yIHYtZWxzZSB1cmw9XCIvcGFnZXMvaW5kZXgvaW5kZXhcIiBvcGVuLXR5cGU9XCJzd2l0Y2hUYWJcIiBjbGFzcz1cImJhY2sgaWNvbi1ob21lXCI+XHJcbiAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInRpdGxlXCI+6K6i5Y2V6K+m5oOFPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG4gIDwvdmlldz5cclxuICA8c2Nyb2xsLXZpZXdcclxuICAgIGVuYWJsZS1iYWNrLXRvLXRvcFxyXG4gICAgc2Nyb2xsLXlcclxuICAgIGNsYXNzPVwidmlld3BvcnRcIlxyXG4gICAgaWQ9XCJzY3JvbGxlclwiXHJcbiAgICBAc2Nyb2xsdG9sb3dlcj1cIm9uU2Nyb2xsdG9sb3dlclwiXHJcbiAgPlxyXG4gICAgPHRlbXBsYXRlIHYtaWY9XCJvcmRlclwiPlxyXG4gICAgICA8IS0tIOiuouWNleeKtuaAgSAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJvdmVydmlld1wiIDpzdHlsZT1cInsgcGFkZGluZ1RvcDogc2FmZUFyZWFJbnNldHMhLnRvcCArIDIwICsgJ3B4JyB9XCI+XHJcbiAgICAgICAgPCEtLSDlvoXku5jmrL7nirbmgIE65bGV56S65YCS6K6h5pe2IC0tPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwib3JkZXIub3JkZXJTdGF0ZSA9PT0gT3JkZXJTdGF0ZS5EYWlGdUt1YW5cIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwic3RhdHVzIGljb24tY2xvY2tcIj7nrYnlvoXku5jmrL48L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInRpcHNcIj5cclxuICAgICAgICAgICAgPHRleHQgY2xhc3M9XCJtb25leVwiPuW6lOS7mOmHkeminTogwqUge3sgb3JkZXIucGF5TW9uZXkgfX08L3RleHQ+XHJcbiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPVwidGltZVwiPuaUr+S7mOWJqeS9mTwvdGV4dD5cclxuICAgICAgICAgICAgPHVuaS1jb3VudGRvd25cclxuICAgICAgICAgICAgICA6c2Vjb25kPVwib3JkZXIuY291bnRkb3duXCJcclxuICAgICAgICAgICAgICBjb2xvcj1cIiNmZmZcIlxyXG4gICAgICAgICAgICAgIHNwbGl0b3ItY29sb3I9XCIjZmZmXCJcclxuICAgICAgICAgICAgICA6c2hvdy1kYXk9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgOnNob3ctY29sb249XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgQHRpbWV1cD1cIm9uVGltZXVwXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uXCIgQHRhcD1cIm9uT3JkZXJQYXlcIj7ljrvmlK/ku5g8L3ZpZXc+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8IS0tIOWFtuS7luiuouWNleeKtuaAgTrlsZXnpLrlho3mrKHotK3kubDmjInpkq4gLS0+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgIDwhLS0g6K6i5Y2V54q25oCB5paH5a2XIC0tPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJzdGF0dXNcIj4ge3sgb3JkZXJTdGF0ZUxpc3Rbb3JkZXIub3JkZXJTdGF0ZV0udGV4dCB9fSA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzT3JkZXIvY3JlYXRlL2NyZWF0ZT9vcmRlcklkPSR7cXVlcnkuaWR9YFwiXHJcbiAgICAgICAgICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIOWGjeasoei0reS5sFxyXG4gICAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgICAgPCEtLSDlvoXlj5HotKfnirbmgIHvvJrmqKHmi5/lj5HotKcs5byA5Y+R5pyf6Ze05L2/55SoLOeUqOS6juS/ruaUueiuouWNleeKtuaAgeS4uuW3suWPkei0pyAtLT5cclxuICAgICAgICAgICAgPHZpZXdcclxuICAgICAgICAgICAgICB2LWlmPVwiaXNEZXYgJiYgb3JkZXIub3JkZXJTdGF0ZSA9PSBPcmRlclN0YXRlLkRhaUZhSHVvXCJcclxuICAgICAgICAgICAgICBAdGFwPVwib25PcmRlclNlbmRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIOaooeaLn+WPkei0p1xyXG4gICAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDwhLS0g5b6F5pS26LSn54q25oCBOiDlsZXnpLrnoa7orqTmlLbotKfmjInpkq4gLS0+XHJcbiAgICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgICAgdi1pZj1cIm9yZGVyLm9yZGVyU3RhdGUgPT09IE9yZGVyU3RhdGUuRGFpU2hvdUh1b1wiXHJcbiAgICAgICAgICAgICAgQHRhcD1cIm9uT3JkZXJDb25maXJtXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDnoa7orqTmlLbotKdcclxuICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPCEtLSDphY3pgIHnirbmgIEgLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwic2hpcG1lbnRcIj5cclxuICAgICAgICA8IS0tIOiuouWNleeJqea1geS/oeaBryAtLT5cclxuICAgICAgICA8dmlldyB2LWZvcj1cIml0ZW0gaW4gbG9naXN0aWNMaXN0XCIgOmtleT1cIml0ZW0uaWRcIiBjbGFzcz1cIml0ZW1cIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwibWVzc2FnZVwiPlxyXG4gICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiZGF0ZVwiPiB7eyBpdGVtLnRpbWUgfX0gPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8IS0tIOeUqOaIt+aUtui0p+WcsOWdgCAtLT5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImxvY2F0ZVwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJ1c2VyXCI+IHt7IG9yZGVyLnJlY2VpdmVyQ29udGFjdCB9fSB7eyBvcmRlci5yZWNlaXZlck1vYmlsZSB9fSA8L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImFkZHJlc3NcIj4ge3sgb3JkZXIucmVjZWl2ZXJBZGRyZXNzIH19IDwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgIDwhLS0g5ZWG5ZOB5L+h5oGvIC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cImdvb2RzXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICAgIGNsYXNzPVwibmF2aWdhdG9yXCJcclxuICAgICAgICAgICAgdi1mb3I9XCJpdGVtIGluIG9yZGVyLnNrdXNcIlxyXG4gICAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXHJcbiAgICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzL2dvb2RzL2dvb2RzP2lkPSR7aXRlbS5zcHVJZH1gXCJcclxuICAgICAgICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGltYWdlIGNsYXNzPVwiY292ZXJcIiA6c3JjPVwiaXRlbS5pbWFnZVwiPjwvaW1hZ2U+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxyXG4gICAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwibmFtZSBlbGxpcHNpc1wiPnt7IGl0ZW0ubmFtZSB9fTwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInR5cGVcIj57eyBpdGVtLmF0dHJzVGV4dCB9fTwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cImFjdHVhbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dCBjbGFzcz1cInN5bWJvbFwiPsKlPC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dD57eyBpdGVtLmN1clByaWNlIH19PC90ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgICAgICA8dmlldyBjbGFzcz1cInF1YW50aXR5XCI+eHt7IGl0ZW0ucXVhbnRpdHkgfX08L3ZpZXc+XHJcbiAgICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgPCEtLSDlvoXor4Tku7fnirbmgIE65bGV56S65oyJ6ZKuIC0tPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJhY3Rpb25cIiB2LWlmPVwib3JkZXIub3JkZXJTdGF0ZSA9PT0gT3JkZXJTdGF0ZS5EYWlQaW5nSmlhXCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIj7nlLPor7fllK7lkI48L3ZpZXc+XHJcbiAgICAgICAgICAgIDxuYXZpZ2F0b3IgdXJsPVwiXCIgY2xhc3M9XCJidXR0b25cIj4g5Y676K+E5Lu3IDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdmlldz5cclxuICAgICAgICA8IS0tIOWQiOiuoSAtLT5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInRvdGFsXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInRleHRcIj7llYblk4HmgLvku7c6IDwvdmlldz5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJzeW1ib2xcIj57eyBvcmRlci50b3RhbE1vbmV5IH19PC92aWV3PlxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0ZXh0XCI+6L+Q6LS5OiA8L3ZpZXc+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwic3ltYm9sXCI+e3sgb3JkZXIucG9zdEZlZSB9fTwvdmlldz5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDx2aWV3IGNsYXNzPVwidGV4dFwiPuW6lOS7mOmHkeminTogPC92aWV3PlxyXG4gICAgICAgICAgICA8dmlldyBjbGFzcz1cInN5bWJvbCBwcmltYXJ5XCI+e3sgb3JkZXIucGF5TW9uZXkgfX08L3ZpZXc+XHJcbiAgICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcblxyXG4gICAgICA8IS0tIOiuouWNleS/oeaBryAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJkZXRhaWxcIj5cclxuICAgICAgICA8dmlldyBjbGFzcz1cInRpdGxlXCI+6K6i5Y2V5L+h5oGvPC92aWV3PlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIml0ZW1cIj5cclxuICAgICAgICAgICAg6K6i5Y2V57yW5Y+3OiB7eyBxdWVyeS5pZCB9fSA8dGV4dCBjbGFzcz1cImNvcHlcIiBAdGFwPVwib25Db3B5KHF1ZXJ5LmlkKVwiPuWkjeWItjwvdGV4dD5cclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiaXRlbVwiPuS4i+WNleaXtumXtDoge3sgb3JkZXIuY3JlYXRlVGltZSB9fTwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuXHJcbiAgICAgIDwhLS0g54yc5L2g5Zac5qyiIC0tPlxyXG4gICAgICA8WHR4R3Vlc3MgcmVmPVwiZ3Vlc3NSZWZcIiAvPlxyXG5cclxuICAgICAgPCEtLSDlupXpg6jmk43kvZzmoI8gLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwidG9vbGJhci1oZWlnaHRcIiA6c3R5bGU9XCJ7IHBhZGRpbmdCb3R0b206IHNhZmVBcmVhSW5zZXRzPy5ib3R0b20gKyAncHgnIH1cIj48L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwidG9vbGJhclwiIDpzdHlsZT1cInsgcGFkZGluZ0JvdHRvbTogc2FmZUFyZWFJbnNldHM/LmJvdHRvbSArICdweCcgfVwiPlxyXG4gICAgICAgIDwhLS0g5b6F5LuY5qy+54q25oCBOuWxleekuuaUr+S7mOaMiemSriAtLT5cclxuICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIm9yZGVyLm9yZGVyU3RhdGUgPT09IE9yZGVyU3RhdGUuRGFpRnVLdWFuXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCIgQHRhcD1cIm9uT3JkZXJQYXlcIj4g5Y675pSv5LuYIDwvdmlldz5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uXCIgQHRhcD1cInBvcHVwPy5vcGVuPy4oKVwiPiDlj5bmtojorqLljZUgPC92aWV3PlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPCEtLSDlhbbku5borqLljZXnirbmgIE65oyJ6ZyA5bGV56S65oyJ6ZKuIC0tPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzT3JkZXIvY3JlYXRlL2NyZWF0ZT9vcmRlcklkPSR7cXVlcnkuaWR9YFwiXHJcbiAgICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOWGjeasoei0reS5sFxyXG4gICAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgICA8IS0tIOW+heaUtui0p+eKtuaAgTog5bGV56S656Gu6K6k5pS26LSnIC0tPlxyXG4gICAgICAgICAgPHZpZXdcclxuICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gcHJpbWFyeVwiXHJcbiAgICAgICAgICAgIHYtaWY9XCJvcmRlci5vcmRlclN0YXRlID09PSBPcmRlclN0YXRlLkRhaVNob3VIdW9cIlxyXG4gICAgICAgICAgICBAdGFwPVwib25PcmRlckNvbmZpcm1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICDnoa7orqTmlLbotKdcclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICAgIDwhLS0g5b6F6K+E5Lu354q25oCBOiDlsZXnpLrljrvor4Tku7cgLS0+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvblwiIHYtaWY9XCJvcmRlci5vcmRlclN0YXRlID09PSBPcmRlclN0YXRlLkRhaVBpbmdKaWFcIj4g5Y676K+E5Lu3IDwvdmlldz5cclxuICAgICAgICAgIDwhLS0g5b6F6K+E5Lu3L+W3suWujOaIkC/lt7Llj5bmtogg54q25oCBOiDlsZXnpLrliKDpmaTorqLljZUgLS0+XHJcbiAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBkZWxldGVcIlxyXG4gICAgICAgICAgICB2LWlmPVwib3JkZXIub3JkZXJTdGF0ZSA+PSBPcmRlclN0YXRlLkRhaVBpbmdKaWFcIlxyXG4gICAgICAgICAgICBAdGFwPVwib25PcmRlckRlbGV0ZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOWIoOmZpOiuouWNlVxyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICA8IS0tIOmqqOaetuWxj+e7hOS7tiAtLT5cclxuICAgICAgPFBhZ2VTa2VsZXRvbiAvPlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICA8L3Njcm9sbC12aWV3PlxyXG4gIDwhLS0g5Y+W5raI6K6i5Y2V5by556qXIC0tPlxyXG4gIDx1bmktcG9wdXAgcmVmPVwicG9wdXBcIiB0eXBlPVwiYm90dG9tXCIgYmFja2dyb3VuZC1jb2xvcj1cIiNmZmZcIj5cclxuICAgIDx2aWV3IGNsYXNzPVwicG9wdXAtcm9vdFwiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInRpdGxlXCI+6K6i5Y2V5Y+W5raIPC92aWV3PlxyXG4gICAgICA8dmlldyBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJ0aXBzXCI+6K+36YCJ5oup5Y+W5raI6K6i5Y2V55qE5Y6f5Zug77yaPC92aWV3PlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiY2VsbFwiIHYtZm9yPVwiaXRlbSBpbiByZWFzb25MaXN0XCIgOmtleT1cIml0ZW1cIiBAdGFwPVwicmVhc29uID0gaXRlbVwiPlxyXG4gICAgICAgICAgPHRleHQgY2xhc3M9XCJ0ZXh0XCI+e3sgaXRlbSB9fTwvdGV4dD5cclxuICAgICAgICAgIDx0ZXh0IGNsYXNzPVwiaWNvblwiIDpjbGFzcz1cInsgY2hlY2tlZDogaXRlbSA9PT0gcmVhc29uIH1cIj48L3RleHQ+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b25cIiBAdGFwPVwicG9wdXA/LmNsb3NlPy4oKVwiPuWPlua2iDwvdmlldz5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCIgQHRhcD1cIm9uT3JkZXJDYW5jZWxcIj7noa7orqQ8L3ZpZXc+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICA8L3VuaS1wb3B1cD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbn1cclxuXHJcbi5uYXZiYXIge1xyXG4gIHdpZHRoOiA3NTBycHg7XHJcbiAgY29sb3I6ICMwMDA7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHotaW5kZXg6IDk7XHJcbiAgLyogYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsgKi9cclxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuXHJcbiAgLndyYXAge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG5cclxuICAgIC50aXRsZSB7XHJcbiAgICAgIGhlaWdodDogNDRweDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzJycHg7XHJcbiAgICAgIC8qIGNvbG9yOiAjMDAwOyAqL1xyXG4gICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmJhY2sge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIGhlaWdodDogNDRweDtcclxuICAgICAgd2lkdGg6IDQ0cHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogNDRycHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAvKiBjb2xvcjogIzAwMDsgKi9cclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjg7XHJcbn1cclxuXHJcbi5vdmVydmlldyB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblxyXG4gIGxpbmUtaGVpZ2h0OiAxO1xyXG4gIHBhZGRpbmctYm90dG9tOiAzMHJweDtcclxuICBjb2xvcjogI2ZmZjtcclxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly9wY2FwaS14aWFvdHV4aWFuLWZyb250LWRldnRlc3QuaXRoZWltYS5uZXQvbWluaWFwcC9pbWFnZXMvb3JkZXJfYmcucG5nKTtcclxuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xyXG5cclxuICAuc3RhdHVzIHtcclxuICAgIGZvbnQtc2l6ZTogMzZycHg7XHJcbiAgfVxyXG5cclxuICAuc3RhdHVzOjpiZWZvcmUge1xyXG4gICAgbWFyZ2luLXJpZ2h0OiA2cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICB9XHJcblxyXG4gIC50aXBzIHtcclxuICAgIG1hcmdpbjogMzBycHggMDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cclxuICAgIC5tb25leSB7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMzBycHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuYnV0dG9uLWdyb3VwIHtcclxuICAgIG1hcmdpbi10b3A6IDMwcnB4O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC5idXR0b24ge1xyXG4gICAgd2lkdGg6IDI2MHJweDtcclxuICAgIGhlaWdodDogNjRycHg7XHJcbiAgICBtYXJnaW46IDAgMTBycHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBsaW5lLWhlaWdodDogNjRycHg7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgY29sb3I6ICMyN2JhOWI7XHJcbiAgICBib3JkZXItcmFkaXVzOiA2OHJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgfVxyXG59XHJcblxyXG4uc2hpcG1lbnQge1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICBtYXJnaW46IDIwcnB4IDIwcnB4IDA7XHJcbiAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHJcbiAgLmxvY2F0ZSxcclxuICAuaXRlbSB7XHJcbiAgICBtaW4taGVpZ2h0OiAxMjBycHg7XHJcbiAgICBwYWRkaW5nOiAzMHJweCAzMHJweCAyNXJweCA3NXJweDtcclxuICAgIGJhY2tncm91bmQtc2l6ZTogNTBycHg7XHJcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNnJweCBjZW50ZXI7XHJcbiAgfVxyXG5cclxuICAubG9jYXRlIHtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL3BjYXBpLXhpYW90dXhpYW4tZnJvbnQtZGV2dGVzdC5pdGhlaW1hLm5ldC9taW5pYXBwL2ltYWdlcy9sb2NhdGUucG5nKTtcclxuXHJcbiAgICAudXNlciB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgfVxyXG5cclxuICAgIC5hZGRyZXNzIHtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuaXRlbSB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly9wY2FwaS14aWFvdHV4aWFuLWZyb250LWRldnRlc3QuaXRoZWltYS5uZXQvbWluaWFwcC9pbWFnZXMvY2FyLnBuZyk7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcnB4IHNvbGlkICNlZWU7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblxyXG4gICAgLm1lc3NhZ2Uge1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogIzQ0NDtcclxuICAgIH1cclxuXHJcbiAgICAuZGF0ZSB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmdvb2RzIHtcclxuICBtYXJnaW46IDIwcnB4IDIwcnB4IDA7XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cclxuICAuaXRlbSB7XHJcbiAgICBwYWRkaW5nOiAzMHJweCAwO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZWVlO1xyXG5cclxuICAgIC5uYXZpZ2F0b3Ige1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBtYXJnaW46IDIwcnB4IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmNvdmVyIHtcclxuICAgICAgd2lkdGg6IDE3MHJweDtcclxuICAgICAgaGVpZ2h0OiAxNzBycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IDIwcnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5tZXRhIHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAubmFtZSB7XHJcbiAgICAgIGhlaWdodDogODBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgfVxyXG5cclxuICAgIC50eXBlIHtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuODtcclxuICAgICAgcGFkZGluZzogMCAxNXJweDtcclxuICAgICAgbWFyZ2luLXRvcDogNnJweDtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNHJweDtcclxuICAgICAgY29sb3I6ICM4ODg7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjg7XHJcbiAgICB9XHJcblxyXG4gICAgLnByaWNlIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgbWFyZ2luLXRvcDogNnJweDtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgIH1cclxuXHJcbiAgICAuc3ltYm9sIHtcclxuICAgICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIH1cclxuXHJcbiAgICAub3JpZ2luYWwge1xyXG4gICAgICBjb2xvcjogIzk5OTtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XHJcbiAgICB9XHJcblxyXG4gICAgLmFjdHVhbCB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAxMHJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnRleHQge1xyXG4gICAgICBmb250LXNpemU6IDIycnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5xdWFudGl0eSB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICByaWdodDogMDtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmFjdGlvbiB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xyXG4gICAgICBwYWRkaW5nOiAzMHJweCAwIDA7XHJcblxyXG4gICAgICAuYnV0dG9uIHtcclxuICAgICAgICB3aWR0aDogMjAwcnB4O1xyXG4gICAgICAgIGhlaWdodDogNjBycHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiA2MHJweDtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMjBycHg7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNjBycHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcnB4IHNvbGlkICNjY2M7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgICBjb2xvcjogIzQ0NDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLnByaW1hcnkge1xyXG4gICAgICAgIGNvbG9yOiAjMjdiYTliO1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogIzI3YmE5YjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnRvdGFsIHtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIHBhZGRpbmc6IDIwcnB4IDA7XHJcbiAgICBjb2xvcjogIzY2NjtcclxuXHJcbiAgICAucm93IHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBwYWRkaW5nOiAxMHJweCAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5zeW1ib2w6OmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6ICfCpSc7XHJcbiAgICAgIGZvbnQtc2l6ZTogODAlO1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IDNycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLnByaW1hcnkge1xyXG4gICAgICBjb2xvcjogI2NmNDQ0NDtcclxuICAgICAgZm9udC1zaXplOiAzNnJweDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi5kZXRhaWwge1xyXG4gIGxpbmUtaGVpZ2h0OiAxO1xyXG4gIHBhZGRpbmc6IDMwcnB4IDIwcnB4IDA7XHJcbiAgbWFyZ2luOiAyMHJweCAyMHJweCAwO1xyXG4gIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgY29sb3I6ICM2NjY7XHJcbiAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIGZvbnQtc2l6ZTogMzBycHg7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuICB9XHJcblxyXG4gIC5yb3cge1xyXG4gICAgcGFkZGluZzogMjBycHggMDtcclxuXHJcbiAgICAuaXRlbSB7XHJcbiAgICAgIHBhZGRpbmc6IDEwcnB4IDA7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLmNvcHkge1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAyMHJweDtcclxuICAgICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcclxuICAgICAgcGFkZGluZzogNXJweCAxMHJweDtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDEwcnB4O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLnRvb2xiYXItaGVpZ2h0IHtcclxuICBoZWlnaHQ6IDEwMHJweDtcclxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxufVxyXG5cclxuLnRvb2xiYXIge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBsZWZ0OiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogY2FsYyh2YXIoLS13aW5kb3ctYm90dG9tKSk7XHJcbiAgei1pbmRleDogMTtcclxuXHJcbiAgaGVpZ2h0OiAxMDBycHg7XHJcbiAgcGFkZGluZzogMCAyMHJweDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xyXG4gIGJvcmRlci10b3A6IDFycHggc29saWQgI2VkZWRlZDtcclxuICBib3JkZXItYm90dG9tOiAxcnB4IHNvbGlkICNlZGVkZWQ7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuXHJcbiAgLmJ1dHRvbiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cclxuICAgIHdpZHRoOiAyMDBycHg7XHJcbiAgICBoZWlnaHQ6IDcycnB4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDE1cnB4O1xyXG4gICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDcycnB4O1xyXG4gICAgYm9yZGVyOiAxcnB4IHNvbGlkICNjY2M7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuICB9XHJcblxyXG4gIC5kZWxldGUge1xyXG4gICAgb3JkZXI6IDQ7XHJcbiAgICBjb2xvcjogI2NmNDQ0NDtcclxuICB9XHJcblxyXG4gIC5idXR0b24ge1xyXG4gICAgb3JkZXI6IDM7XHJcbiAgfVxyXG5cclxuICAuc2Vjb25kYXJ5IHtcclxuICAgIG9yZGVyOiAyO1xyXG4gICAgY29sb3I6ICMyN2JhOWI7XHJcbiAgICBib3JkZXItY29sb3I6ICMyN2JhOWI7XHJcbiAgfVxyXG5cclxuICAucHJpbWFyeSB7XHJcbiAgICBvcmRlcjogMTtcclxuICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuICB9XHJcbn1cclxuXHJcbi5wb3B1cC1yb290IHtcclxuICBwYWRkaW5nOiAzMHJweCAzMHJweCAwO1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcnB4IDEwcnB4IDAgMDtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAudGl0bGUge1xyXG4gICAgZm9udC1zaXplOiAzMHJweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbi1ib3R0b206IDMwcnB4O1xyXG4gIH1cclxuXHJcbiAgLmRlc2NyaXB0aW9uIHtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBwYWRkaW5nOiAwIDIwcnB4O1xyXG5cclxuICAgIC50aXBzIHtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDEycnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5jZWxsIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBwYWRkaW5nOiAxNXJweCAwO1xyXG4gICAgICBjb2xvcjogIzY2NjtcclxuICAgIH1cclxuXHJcbiAgICAuaWNvbjo6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJ1xcZTZjZCc7XHJcbiAgICAgIGZvbnQtZmFtaWx5OiAnZXJhYmJpdCcgIWltcG9ydGFudDtcclxuICAgICAgZm9udC1zaXplOiAzOHJweDtcclxuICAgICAgY29sb3I6ICM5OTk7XHJcbiAgICB9XHJcblxyXG4gICAgLmljb24uY2hlY2tlZDo6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJ1xcZTZjYyc7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzhycHg7XHJcbiAgICAgIGNvbG9yOiAjMjdiYTliO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmZvb3RlciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgcGFkZGluZzogMzBycHggMCA0MHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuXHJcbiAgICAuYnV0dG9uIHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgaGVpZ2h0OiA3MnJweDtcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICBsaW5lLWhlaWdodDogNzJycHg7XHJcbiAgICAgIG1hcmdpbjogMCAyMHJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDcycnB4O1xyXG4gICAgICBib3JkZXI6IDFycHggc29saWQgI2NjYztcclxuICAgIH1cclxuXHJcbiAgICAucHJpbWFyeSB7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG4gICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHVzZUd1ZXNzTGlzdCB9IGZyb20gJ0AvY29tcG9zYWJsZXMnXHJcblxyXG4vLyDojrflj5bpobXpnaLlj4LmlbBcclxuY29uc3QgcXVlcnkgPSBkZWZpbmVQcm9wczx7XHJcbiAgaWQ6IHN0cmluZ1xyXG59PigpXHJcblxyXG4vLyDnjJzkvaDllpzmrKJcclxuY29uc3QgeyBndWVzc1JlZiwgb25TY3JvbGx0b2xvd2VyIH0gPSB1c2VHdWVzc0xpc3QoKVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8c2Nyb2xsLXZpZXcgZW5hYmxlLWJhY2stdG8tdG9wIGNsYXNzPVwidmlld3BvcnRcIiBzY3JvbGwteSBAc2Nyb2xsdG9sb3dlcj1cIm9uU2Nyb2xsdG9sb3dlclwiPlxyXG4gICAgPCEtLSDorqLljZXnirbmgIEgLS0+XHJcbiAgICA8dmlldyBjbGFzcz1cIm92ZXJ2aWV3XCI+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwic3RhdHVzIGljb24tY2hlY2tlZFwiPuaUr+S7mOaIkOWKnzwvdmlldz5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJidXR0b25zXCI+XHJcbiAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIG5hdmlnYXRvclwiXHJcbiAgICAgICAgICB1cmw9XCIvcGFnZXMvaW5kZXgvaW5kZXhcIlxyXG4gICAgICAgICAgb3Blbi10eXBlPVwic3dpdGNoVGFiXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICDov5Tlm57pppbpobVcclxuICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICA8bmF2aWdhdG9yXHJcbiAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gbmF2aWdhdG9yXCJcclxuICAgICAgICAgIDp1cmw9XCJgL3BhZ2VzT3JkZXIvZGV0YWlsL2RldGFpbD9pZD0ke3F1ZXJ5LmlkfWBcIlxyXG4gICAgICAgICAgb3Blbi10eXBlPVwicmVkaXJlY3RcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIOafpeeci+iuouWNlVxyXG4gICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcblxyXG4gICAgPCEtLSDnjJzkvaDllpzmrKIgLS0+XHJcbiAgICA8WHR4R3Vlc3MgcmVmPVwiZ3Vlc3NSZWZcIiAvPlxyXG4gIDwvc2Nyb2xsLXZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4udmlld3BvcnQge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjg7XHJcbn1cclxuXHJcbi5vdmVydmlldyB7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgcGFkZGluZzogNTBycHggMDtcclxuICBjb2xvcjogI2ZmZjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG5cclxuICAuc3RhdHVzIHtcclxuICAgIGZvbnQtc2l6ZTogMzZycHg7XHJcbiAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuXHJcbiAgLnN0YXR1czo6YmVmb3JlIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgZm9udC1zaXplOiAxMTBycHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuICB9XHJcblxyXG4gIC5idXR0b25zIHtcclxuICAgIGhlaWdodDogNjBycHg7XHJcbiAgICBsaW5lLWhlaWdodDogNjBycHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbWFyZ2luLXRvcDogNjBycHg7XHJcbiAgfVxyXG5cclxuICAuYnV0dG9uIHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbjogMCAxMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuXHJcbiAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgd2lkdGg6IDIwMHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNjRycHg7XHJcbiAgICAgIGJvcmRlcjogMXJweCBzb2xpZCAjZmZmO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyB1c2VHdWVzc0xpc3QgfSBmcm9tICdAL2NvbXBvc2FibGVzJ1xyXG5cclxuLy8g6I635Y+W6aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIGlkOiBzdHJpbmdcclxufT4oKVxyXG5cclxuLy8g54yc5L2g5Zac5qyiXHJcbmNvbnN0IHsgZ3Vlc3NSZWYsIG9uU2Nyb2xsdG9sb3dlciB9ID0gdXNlR3Vlc3NMaXN0KClcclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHNjcm9sbC12aWV3IGVuYWJsZS1iYWNrLXRvLXRvcCBjbGFzcz1cInZpZXdwb3J0XCIgc2Nyb2xsLXkgQHNjcm9sbHRvbG93ZXI9XCJvblNjcm9sbHRvbG93ZXJcIj5cclxuICAgIDwhLS0g6K6i5Y2V54q25oCBIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJvdmVydmlld1wiPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInN0YXR1cyBpY29uLWNoZWNrZWRcIj7mlK/ku5jmiJDlip88L3ZpZXc+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uc1wiPlxyXG4gICAgICAgIDxuYXZpZ2F0b3JcclxuICAgICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBuYXZpZ2F0b3JcIlxyXG4gICAgICAgICAgdXJsPVwiL3BhZ2VzL2luZGV4L2luZGV4XCJcclxuICAgICAgICAgIG9wZW4tdHlwZT1cInN3aXRjaFRhYlwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg6L+U5Zue6aaW6aG1XHJcbiAgICAgICAgPC9uYXZpZ2F0b3I+XHJcbiAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIG5hdmlnYXRvclwiXHJcbiAgICAgICAgICA6dXJsPVwiYC9wYWdlc09yZGVyL2RldGFpbC9kZXRhaWw/aWQ9JHtxdWVyeS5pZH1gXCJcclxuICAgICAgICAgIG9wZW4tdHlwZT1cInJlZGlyZWN0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICDmn6XnnIvorqLljZVcclxuICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgPC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG5cclxuICAgIDwhLS0g54yc5L2g5Zac5qyiIC0tPlxyXG4gICAgPFh0eEd1ZXNzIHJlZj1cImd1ZXNzUmVmXCIgLz5cclxuICA8L3Njcm9sbC12aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcbnBhZ2Uge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLnZpZXdwb3J0IHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y4O1xyXG59XHJcblxyXG4ub3ZlcnZpZXcge1xyXG4gIGxpbmUtaGVpZ2h0OiAxO1xyXG4gIHBhZGRpbmc6IDUwcnB4IDA7XHJcbiAgY29sb3I6ICNmZmY7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuXHJcbiAgLnN0YXR1cyB7XHJcbiAgICBmb250LXNpemU6IDM2cnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC5zdGF0dXM6OmJlZm9yZSB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGZvbnQtc2l6ZTogMTEwcnB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMjBycHg7XHJcbiAgfVxyXG5cclxuICAuYnV0dG9ucyB7XHJcbiAgICBoZWlnaHQ6IDYwcnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDYwcnB4O1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIG1hcmdpbi10b3A6IDYwcnB4O1xyXG4gIH1cclxuXHJcbiAgLmJ1dHRvbiB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDAgMTBycHg7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcblxyXG4gICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgIHdpZHRoOiAyMDBycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDY0cnB4O1xyXG4gICAgICBib3JkZXI6IDFycHggc29saWQgI2ZmZjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgT3JkZXJTdGF0ZSB9IGZyb20gJ0Avc2VydmljZXMvY29uc3RhbnRzJ1xyXG5pbXBvcnQgeyBvcmRlclN0YXRlTGlzdCB9IGZyb20gJ0Avc2VydmljZXMvY29uc3RhbnRzJ1xyXG5pbXBvcnQgeyBwdXRNZW1iZXJPcmRlclJlY2VpcHRCeUlkQVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9vcmRlcidcclxuaW1wb3J0IHsgZGVsZXRlTWVtYmVyT3JkZXJBUEkgfSBmcm9tICdAL3NlcnZpY2VzL29yZGVyJ1xyXG5pbXBvcnQgeyBnZXRNZW1iZXJPcmRlckFQSSB9IGZyb20gJ0Avc2VydmljZXMvb3JkZXInXHJcbmltcG9ydCB7IGdldFBheU1vY2tBUEksIGdldFBheVd4UGF5TWluaVBheUFQSSB9IGZyb20gJ0Avc2VydmljZXMvcGF5J1xyXG5pbXBvcnQgdHlwZSB7IE9yZGVySXRlbSB9IGZyb20gJ0AvdHlwZXMvb3JkZXInXHJcbmltcG9ydCB0eXBlIHsgT3JkZXJMaXN0UGFyYW1zIH0gZnJvbSAnQC90eXBlcy9vcmRlcidcclxuaW1wb3J0IHsgb25Nb3VudGVkLCByZWYgfSBmcm9tICd2dWUnXHJcblxyXG4vLyDojrflj5blsY/luZXovrnnlYzliLDlronlhajljLrln5/ot53nprtcclxuY29uc3QgeyBzYWZlQXJlYUluc2V0cyB9ID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKClcclxuXHJcbi8vIOWumuS5iSBwb3Jwc1xyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICBvcmRlclN0YXRlOiBudW1iZXJcclxufT4oKVxyXG5cclxuLy8g6K+35rGC5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5UGFyYW1zOiBSZXF1aXJlZDxPcmRlckxpc3RQYXJhbXM+ID0ge1xyXG4gIHBhZ2U6IDEsXHJcbiAgcGFnZVNpemU6IDUsXHJcbiAgb3JkZXJTdGF0ZTogcHJvcHMub3JkZXJTdGF0ZSxcclxufVxyXG5cclxuLy8g6I635Y+W6K6i5Y2V5YiX6KGoXHJcbmNvbnN0IG9yZGVyTGlzdCA9IHJlZjxPcmRlckl0ZW1bXT4oW10pXHJcbi8vIOaYr+WQpuWKoOi9veS4reagh+iusO+8jOeUqOS6jumYsuatoua7muWKqOinpuW6leinpuWPkeWkmuasoeivt+axglxyXG5jb25zdCBpc0xvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGdldE1lbWJlck9yZGVyRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAvLyDlpoLmnpzmlbDmja7lh7rkuo7liqDovb3kuK3vvIzpgIDlh7rlh73mlbBcclxuICBpZiAoaXNMb2FkaW5nLnZhbHVlKSByZXR1cm5cclxuICAvLyDpgIDlh7rliIbpobXliKTmlq1cclxuICBpZiAoaXNGaW5pc2gudmFsdWUgPT09IHRydWUpIHtcclxuICAgIHJldHVybiB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ25vbmUnLCB0aXRsZTogJ+ayoeacieabtOWkmuaVsOaNrn4nIH0pXHJcbiAgfVxyXG4gIC8vIOWPkemAgeivt+axguWJje+8jOagh+iusOS4uuWKoOi9veS4rVxyXG4gIGlzTG9hZGluZy52YWx1ZSA9IHRydWVcclxuICAvLyDlj5HpgIHor7fmsYJcclxuICBjb25zdCByZXMgPSBhd2FpdCBnZXRNZW1iZXJPcmRlckFQSShxdWVyeVBhcmFtcylcclxuICAvLyDlj5HpgIHor7fmsYLlkI7vvIzph43nva7moIforrBcclxuICBpc0xvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIC8vIOaVsOe7hOi/veWKoFxyXG4gIG9yZGVyTGlzdC52YWx1ZS5wdXNoKC4uLnJlcy5yZXN1bHQuaXRlbXMpXHJcbiAgLy8g5YiG6aG15p2h5Lu2XHJcbiAgaWYgKHF1ZXJ5UGFyYW1zLnBhZ2UgPCByZXMucmVzdWx0LnBhZ2VzKSB7XHJcbiAgICAvLyDpobXnoIHntK/liqBcclxuICAgIHF1ZXJ5UGFyYW1zLnBhZ2UrK1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyDliIbpobXlt7Lnu5PmnZ9cclxuICAgIGlzRmluaXNoLnZhbHVlID0gdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxub25Nb3VudGVkKCgpID0+IHtcclxuICBnZXRNZW1iZXJPcmRlckRhdGEoKVxyXG59KVxyXG5cclxuLy8g6K6i5Y2V5pSv5LuYXHJcbmNvbnN0IG9uT3JkZXJQYXkgPSBhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xyXG4gIGlmIChpbXBvcnQubWV0YS5lbnYuREVWKSB7XHJcbiAgICAvLyDlvIDlj5Hnjq/looPmqKHmi5/mlK/ku5hcclxuICAgIGF3YWl0IGdldFBheU1vY2tBUEkoeyBvcmRlcklkOiBpZCB9KVxyXG4gIH0gZWxzZSB7XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgLy8gSDXnq68g5ZKMIEFwcCDnq6/mnKrlvIDpgJrmlK/ku5gt5qih5ouf5pSv5LuY5L2T6aqMXHJcbiAgICBhd2FpdCBnZXRQYXlNb2NrQVBJKHsgb3JkZXJJZDogaWQgfSlcclxuXHJcbiAgfVxyXG4gIC8vIOaIkOWKn+aPkOekulxyXG4gIHVuaS5zaG93VG9hc3QoeyB0aXRsZTogJ+aUr+S7mOaIkOWKnycgfSlcclxuICAvLyDmm7TmlrDorqLljZXnirbmgIFcclxuICBjb25zdCBvcmRlciA9IG9yZGVyTGlzdC52YWx1ZS5maW5kKCh2KSA9PiB2LmlkID09PSBpZClcclxuICBvcmRlciEub3JkZXJTdGF0ZSA9IE9yZGVyU3RhdGUuRGFpRmFIdW9cclxufVxyXG5cclxuLy8g56Gu6K6k5pS26LSnXHJcbmNvbnN0IG9uT3JkZXJDb25maXJtID0gKGlkOiBzdHJpbmcpID0+IHtcclxuICB1bmkuc2hvd01vZGFsKHtcclxuICAgIGNvbnRlbnQ6ICfkuLrkv53pmpzmgqjnmoTmnYPnm4rvvIzor7fmlLbliLDotKflubbnoa7orqTml6Dor6/lkI7vvIzlho3noa7orqTmlLbotKcnLFxyXG4gICAgY29uZmlybUNvbG9yOiAnIzI3QkE5QicsXHJcbiAgICBzdWNjZXNzOiBhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMuY29uZmlybSkge1xyXG4gICAgICAgIGF3YWl0IHB1dE1lbWJlck9yZGVyUmVjZWlwdEJ5SWRBUEkoaWQpXHJcbiAgICAgICAgdW5pLnNob3dUb2FzdCh7IGljb246ICdzdWNjZXNzJywgdGl0bGU6ICfnoa7orqTmlLbotKfmiJDlip8nIH0pXHJcbiAgICAgICAgLy8g56Gu6K6k5oiQ5Yqf77yM5pu05paw5Li65b6F6K+E5Lu3XHJcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBvcmRlckxpc3QudmFsdWUuZmluZCgodikgPT4gdi5pZCA9PT0gaWQpXHJcbiAgICAgICAgb3JkZXIhLm9yZGVyU3RhdGUgPSBPcmRlclN0YXRlLkRhaVBpbmdKaWFcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcblxyXG4vLyDliKDpmaTorqLljZVcclxuY29uc3Qgb25PcmRlckRlbGV0ZSA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgdW5pLnNob3dNb2RhbCh7XHJcbiAgICBjb250ZW50OiAn5L2g56Gu5a6a6KaB5Yig6Zmk6K+l6K6i5Y2V77yfJyxcclxuICAgIGNvbmZpcm1Db2xvcjogJyMyN0JBOUInLFxyXG4gICAgc3VjY2VzczogYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgICAgICBhd2FpdCBkZWxldGVNZW1iZXJPcmRlckFQSSh7IGlkczogW2lkXSB9KVxyXG4gICAgICAgIC8vIOWIoOmZpOaIkOWKn++8jOeVjOmdouS4reWIoOmZpOiuouWNlVxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gb3JkZXJMaXN0LnZhbHVlLmZpbmRJbmRleCgodikgPT4gdi5pZCA9PT0gaWQpXHJcbiAgICAgICAgb3JkZXJMaXN0LnZhbHVlLnNwbGljZShpbmRleCwgMSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcblxyXG4vLyDmmK/lkKbliIbpobXnu5PmnZ9cclxuY29uc3QgaXNGaW5pc2ggPSByZWYoZmFsc2UpXHJcbi8vIOaYr+WQpuinpuWPkeS4i+aLieWIt+aWsFxyXG5jb25zdCBpc1RyaWdnZXJlZCA9IHJlZihmYWxzZSlcclxuLy8g6Ieq5a6a5LmJ5LiL5ouJ5Yi35paw6KKr6Kem5Y+RXHJcbmNvbnN0IG9uUmVmcmVzaGVycmVmcmVzaCA9IGFzeW5jICgpID0+IHtcclxuICAvLyDlvIDlp4vliqjnlLtcclxuICBpc1RyaWdnZXJlZC52YWx1ZSA9IHRydWVcclxuICAvLyDph43nva7mlbDmja5cclxuICBxdWVyeVBhcmFtcy5wYWdlID0gMVxyXG4gIG9yZGVyTGlzdC52YWx1ZSA9IFtdXHJcbiAgaXNGaW5pc2gudmFsdWUgPSBmYWxzZVxyXG4gIC8vIOWKoOi9veaVsOaNrlxyXG4gIGF3YWl0IGdldE1lbWJlck9yZGVyRGF0YSgpXHJcbiAgLy8g5YWz6Zet5Yqo55S7XHJcbiAgaXNUcmlnZ2VyZWQudmFsdWUgPSBmYWxzZVxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDxzY3JvbGwtdmlld1xyXG4gICAgZW5hYmxlLWJhY2stdG8tdG9wXHJcbiAgICBzY3JvbGwteVxyXG4gICAgY2xhc3M9XCJvcmRlcnNcIlxyXG4gICAgcmVmcmVzaGVyLWVuYWJsZWRcclxuICAgIDpyZWZyZXNoZXItdHJpZ2dlcmVkPVwiaXNUcmlnZ2VyZWRcIlxyXG4gICAgQHJlZnJlc2hlcnJlZnJlc2g9XCJvblJlZnJlc2hlcnJlZnJlc2hcIlxyXG4gICAgQHNjcm9sbHRvbG93ZXI9XCJnZXRNZW1iZXJPcmRlckRhdGFcIlxyXG4gID5cclxuICAgIDx2aWV3IGNsYXNzPVwiY2FyZFwiIHYtZm9yPVwib3JkZXIgaW4gb3JkZXJMaXN0XCIgOmtleT1cIm9yZGVyLmlkXCI+XHJcbiAgICAgIDwhLS0g6K6i5Y2V5L+h5oGvIC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cInN0YXR1c1wiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwiZGF0ZVwiPnt7IG9yZGVyLmNyZWF0ZVRpbWUgfX08L3RleHQ+XHJcbiAgICAgICAgPCEtLSDorqLljZXnirbmgIHmloflrZcgLS0+XHJcbiAgICAgICAgPHRleHQ+e3sgb3JkZXJTdGF0ZUxpc3Rbb3JkZXIub3JkZXJTdGF0ZV0udGV4dCB9fTwvdGV4dD5cclxuICAgICAgICA8IS0tIOW+heivhOS7ty/lt7LlrozmiJAv5bey5Y+W5raIIOeKtuaAgTog5bGV56S65Yig6Zmk6K6i5Y2VIC0tPlxyXG4gICAgICAgIDx0ZXh0XHJcbiAgICAgICAgICB2LWlmPVwib3JkZXIub3JkZXJTdGF0ZSA+PSBPcmRlclN0YXRlLkRhaVBpbmdKaWFcIlxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uLWRlbGV0ZVwiXHJcbiAgICAgICAgICBAdGFwPVwib25PcmRlckRlbGV0ZShvcmRlci5pZClcIlxyXG4gICAgICAgID48L3RleHQ+XHJcbiAgICAgIDwvdmlldz5cclxuICAgICAgPCEtLSDllYblk4Hkv6Hmga/vvIzngrnlh7vllYblk4Hot7PovazliLDorqLljZXor6bmg4XvvIzkuI3mmK/llYblk4Hor6bmg4UgLS0+XHJcbiAgICAgIDxuYXZpZ2F0b3JcclxuICAgICAgICB2LWZvcj1cIml0ZW0gaW4gb3JkZXIuc2t1c1wiXHJcbiAgICAgICAgOmtleT1cIml0ZW0uaWRcIlxyXG4gICAgICAgIGNsYXNzPVwiZ29vZHNcIlxyXG4gICAgICAgIDp1cmw9XCJgL3BhZ2VzT3JkZXIvZGV0YWlsL2RldGFpbD9pZD0ke29yZGVyLmlkfWBcIlxyXG4gICAgICAgIGhvdmVyLWNsYXNzPVwibm9uZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8dmlldyBjbGFzcz1cImNvdmVyXCI+XHJcbiAgICAgICAgICA8aW1hZ2UgY2xhc3M9XCJpbWFnZVwiIG1vZGU9XCJhc3BlY3RGaXRcIiA6c3JjPVwiaXRlbS5pbWFnZVwiPjwvaW1hZ2U+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwibWV0YVwiPlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJuYW1lIGVsbGlwc2lzXCI+e3sgaXRlbS5uYW1lIH19PC92aWV3PlxyXG4gICAgICAgICAgPHZpZXcgY2xhc3M9XCJ0eXBlXCI+e3sgaXRlbS5hdHRyc1RleHQgfX08L3ZpZXc+XHJcbiAgICAgICAgPC92aWV3PlxyXG4gICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgPCEtLSDmlK/ku5jkv6Hmga8gLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwicGF5bWVudFwiPlxyXG4gICAgICAgIDx0ZXh0IGNsYXNzPVwicXVhbnRpdHlcIj7lhbF7eyBvcmRlci50b3RhbE51bSB9feS7tuWVhuWTgTwvdGV4dD5cclxuICAgICAgICA8dGV4dD7lrp7ku5g8L3RleHQ+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJhbW91bnRcIj4gPHRleHQgY2xhc3M9XCJzeW1ib2xcIj7CpTwvdGV4dD57eyBvcmRlci5wYXlNb25leSB9fTwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8IS0tIOiuouWNleaTjeS9nOaMiemSriAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJhY3Rpb25cIj5cclxuICAgICAgICA8IS0tIOW+heS7mOasvueKtuaAge+8muaYvuekuuWOu+aUr+S7mOaMiemSriAtLT5cclxuICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIm9yZGVyLm9yZGVyU3RhdGUgPT09IE9yZGVyU3RhdGUuRGFpRnVLdWFuXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCIgQHRhcD1cIm9uT3JkZXJQYXkob3JkZXIuaWQpXCI+5Y675pSv5LuYPC92aWV3PlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgIDxuYXZpZ2F0b3JcclxuICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgOnVybD1cImAvcGFnZXNPcmRlci9jcmVhdGUvY3JlYXRlP29yZGVySWQ9JHtvcmRlci5pZH1gXCJcclxuICAgICAgICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5YaN5qyh6LSt5LmwXHJcbiAgICAgICAgICA8L25hdmlnYXRvcj5cclxuICAgICAgICAgIDwhLS0g5b6F5pS26LSn54q25oCBOiDlsZXnpLrnoa7orqTmlLbotKcgLS0+XHJcbiAgICAgICAgICA8dmlld1xyXG4gICAgICAgICAgICB2LWlmPVwib3JkZXIub3JkZXJTdGF0ZSA9PT0gT3JkZXJTdGF0ZS5EYWlTaG91SHVvXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gcHJpbWFyeVwiXHJcbiAgICAgICAgICAgIEB0YXA9XCJvbk9yZGVyQ29uZmlybShvcmRlci5pZClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICDnoa7orqTmlLbotKdcclxuICAgICAgICAgIDwvdmlldz5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tIOW6lemDqOaPkOekuuaWh+WtlyAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwibG9hZGluZy10ZXh0XCIgOnN0eWxlPVwieyBwYWRkaW5nQm90dG9tOiBzYWZlQXJlYUluc2V0cz8uYm90dG9tICsgJ3B4JyB9XCI+XHJcbiAgICAgIHt7IGlzRmluaXNoID8gJ+ayoeacieabtOWkmuaVsOaNrn4nIDogJ+ato+WcqOWKoOi9vS4uLicgfX1cclxuICAgIDwvdmlldz5cclxuICA8L3Njcm9sbC12aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4vLyDorqLljZXliJfooahcclxuLm9yZGVycyB7XHJcbiAgLmNhcmQge1xyXG4gICAgbWluLWhlaWdodDogMTAwcnB4O1xyXG4gICAgcGFkZGluZzogMjBycHg7XHJcbiAgICBtYXJnaW46IDIwcnB4IDIwcnB4IDA7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHJweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblxyXG4gICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDQwcnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnN0YXR1cyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICAgIG1hcmdpbi1ib3R0b206IDE1cnB4O1xyXG5cclxuICAgIC5kYXRlIHtcclxuICAgICAgY29sb3I6ICM2NjY7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICB9XHJcblxyXG4gICAgLnByaW1hcnkge1xyXG4gICAgICBjb2xvcjogI2ZmOTI0MDtcclxuICAgIH1cclxuXHJcbiAgICAuaWNvbi1kZWxldGUge1xyXG4gICAgICBsaW5lLWhlaWdodDogMTtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDEwcnB4O1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDEwcnB4O1xyXG4gICAgICBib3JkZXItbGVmdDogMXJweCBzb2xpZCAjZTNlM2UzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmdvb2RzIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAyMHJweDtcclxuXHJcbiAgICAuY292ZXIge1xyXG4gICAgICB3aWR0aDogMTcwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDE3MHJweDtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAyMHJweDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgLmltYWdlIHtcclxuICAgICAgICB3aWR0aDogMTcwcnB4O1xyXG4gICAgICAgIGhlaWdodDogMTcwcnB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLnF1YW50aXR5IHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBib3R0b206IDA7XHJcbiAgICAgIHJpZ2h0OiAwO1xyXG4gICAgICBsaW5lLWhlaWdodDogMTtcclxuICAgICAgcGFkZGluZzogNnJweCA0cnB4IDZycHggOHJweDtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4IDAgMCAwO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XHJcbiAgICB9XHJcblxyXG4gICAgLm1ldGEge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICAubmFtZSB7XHJcbiAgICAgIGhlaWdodDogODBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgfVxyXG5cclxuICAgIC50eXBlIHtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuODtcclxuICAgICAgcGFkZGluZzogMCAxNXJweDtcclxuICAgICAgbWFyZ2luLXRvcDogMTBycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRycHg7XHJcbiAgICAgIGNvbG9yOiAjODg4O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y4O1xyXG4gICAgfVxyXG5cclxuICAgIC5tb3JlIHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjJycHg7XHJcbiAgICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnBheW1lbnQge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICBwYWRkaW5nOiAyMHJweCAwO1xyXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgICBjb2xvcjogIzk5OTtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcnB4IHNvbGlkICNlZWU7XHJcblxyXG4gICAgLnF1YW50aXR5IHtcclxuICAgICAgZm9udC1zaXplOiAyNHJweDtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAxNnJweDtcclxuICAgIH1cclxuXHJcbiAgICAuYW1vdW50IHtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiA2cnB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5zeW1ib2wge1xyXG4gICAgICBmb250LXNpemU6IDIwcnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFjdGlvbiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBwYWRkaW5nLXRvcDogMjBycHg7XHJcblxyXG4gICAgLmJ1dHRvbiB7XHJcbiAgICAgIHdpZHRoOiAxODBycHg7XHJcbiAgICAgIGhlaWdodDogNjBycHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBtYXJnaW4tbGVmdDogMjBycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDYwcnB4O1xyXG4gICAgICBib3JkZXI6IDFycHggc29saWQgI2NjYztcclxuICAgICAgZm9udC1zaXplOiAyNnJweDtcclxuICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnNlY29uZGFyeSB7XHJcbiAgICAgIGNvbG9yOiAjMjdiYTliO1xyXG4gICAgICBib3JkZXItY29sb3I6ICMyN2JhOWI7XHJcbiAgICB9XHJcblxyXG4gICAgLnByaW1hcnkge1xyXG4gICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuICAgICAgYm9yZGVyLWNvbG9yOiAjMjdiYTliO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmxvYWRpbmctdGV4dCB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgY29sb3I6ICM2NjY7XHJcbiAgICBwYWRkaW5nOiAyMHJweCAwO1xyXG4gIH1cclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBPcmRlclN0YXRlIH0gZnJvbSAnQC9zZXJ2aWNlcy9jb25zdGFudHMnXHJcbmltcG9ydCB7IG9yZGVyU3RhdGVMaXN0IH0gZnJvbSAnQC9zZXJ2aWNlcy9jb25zdGFudHMnXHJcbmltcG9ydCB7IHB1dE1lbWJlck9yZGVyUmVjZWlwdEJ5SWRBUEkgfSBmcm9tICdAL3NlcnZpY2VzL29yZGVyJ1xyXG5pbXBvcnQgeyBkZWxldGVNZW1iZXJPcmRlckFQSSB9IGZyb20gJ0Avc2VydmljZXMvb3JkZXInXHJcbmltcG9ydCB7IGdldE1lbWJlck9yZGVyQVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9vcmRlcidcclxuaW1wb3J0IHsgZ2V0UGF5TW9ja0FQSSwgZ2V0UGF5V3hQYXlNaW5pUGF5QVBJIH0gZnJvbSAnQC9zZXJ2aWNlcy9wYXknXHJcbmltcG9ydCB0eXBlIHsgT3JkZXJJdGVtIH0gZnJvbSAnQC90eXBlcy9vcmRlcidcclxuaW1wb3J0IHR5cGUgeyBPcmRlckxpc3RQYXJhbXMgfSBmcm9tICdAL3R5cGVzL29yZGVyJ1xyXG5pbXBvcnQgeyBvbk1vdW50ZWQsIHJlZiB9IGZyb20gJ3Z1ZSdcclxuXHJcbi8vIOiOt+WPluWxj+W5lei+ueeVjOWIsOWuieWFqOWMuuWfn+i3neemu1xyXG5jb25zdCB7IHNhZmVBcmVhSW5zZXRzIH0gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKVxyXG5cclxuLy8g5a6a5LmJIHBvcnBzXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIG9yZGVyU3RhdGU6IG51bWJlclxyXG59PigpXHJcblxyXG4vLyDor7fmsYLlj4LmlbBcclxuY29uc3QgcXVlcnlQYXJhbXM6IFJlcXVpcmVkPE9yZGVyTGlzdFBhcmFtcz4gPSB7XHJcbiAgcGFnZTogMSxcclxuICBwYWdlU2l6ZTogNSxcclxuICBvcmRlclN0YXRlOiBwcm9wcy5vcmRlclN0YXRlLFxyXG59XHJcblxyXG4vLyDojrflj5borqLljZXliJfooahcclxuY29uc3Qgb3JkZXJMaXN0ID0gcmVmPE9yZGVySXRlbVtdPihbXSlcclxuLy8g5piv5ZCm5Yqg6L295Lit5qCH6K6w77yM55So5LqO6Ziy5q2i5rua5Yqo6Kem5bqV6Kem5Y+R5aSa5qyh6K+35rGCXHJcbmNvbnN0IGlzTG9hZGluZyA9IHJlZihmYWxzZSlcclxuY29uc3QgZ2V0TWVtYmVyT3JkZXJEYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gIC8vIOWmguaenOaVsOaNruWHuuS6juWKoOi9veS4re+8jOmAgOWHuuWHveaVsFxyXG4gIGlmIChpc0xvYWRpbmcudmFsdWUpIHJldHVyblxyXG4gIC8vIOmAgOWHuuWIhumhteWIpOaWrVxyXG4gIGlmIChpc0ZpbmlzaC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgcmV0dXJuIHVuaS5zaG93VG9hc3QoeyBpY29uOiAnbm9uZScsIHRpdGxlOiAn5rKh5pyJ5pu05aSa5pWw5o2uficgfSlcclxuICB9XHJcbiAgLy8g5Y+R6YCB6K+35rGC5YmN77yM5qCH6K6w5Li65Yqg6L295LitXHJcbiAgaXNMb2FkaW5nLnZhbHVlID0gdHJ1ZVxyXG4gIC8vIOWPkemAgeivt+axglxyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldE1lbWJlck9yZGVyQVBJKHF1ZXJ5UGFyYW1zKVxyXG4gIC8vIOWPkemAgeivt+axguWQju+8jOmHjee9ruagh+iusFxyXG4gIGlzTG9hZGluZy52YWx1ZSA9IGZhbHNlXHJcbiAgLy8g5pWw57uE6L+95YqgXHJcbiAgb3JkZXJMaXN0LnZhbHVlLnB1c2goLi4ucmVzLnJlc3VsdC5pdGVtcylcclxuICAvLyDliIbpobXmnaHku7ZcclxuICBpZiAocXVlcnlQYXJhbXMucGFnZSA8IHJlcy5yZXN1bHQucGFnZXMpIHtcclxuICAgIC8vIOmhteeggee0r+WKoFxyXG4gICAgcXVlcnlQYXJhbXMucGFnZSsrXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIOWIhumhteW3sue7k+adn1xyXG4gICAgaXNGaW5pc2gudmFsdWUgPSB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5vbk1vdW50ZWQoKCkgPT4ge1xyXG4gIGdldE1lbWJlck9yZGVyRGF0YSgpXHJcbn0pXHJcblxyXG4vLyDorqLljZXmlK/ku5hcclxuY29uc3Qgb25PcmRlclBheSA9IGFzeW5jIChpZDogc3RyaW5nKSA9PiB7XHJcbiAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcclxuICAgIC8vIOW8gOWPkeeOr+Wig+aooeaLn+aUr+S7mFxyXG4gICAgYXdhaXQgZ2V0UGF5TW9ja0FQSSh7IG9yZGVySWQ6IGlkIH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vICNpZmRlZiBNUC1XRUlYSU5cclxuICAgIC8vIOato+W8j+eOr+Wig+W+ruS/oeaUr+S7mFxyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0UGF5V3hQYXlNaW5pUGF5QVBJKHsgb3JkZXJJZDogaWQgfSlcclxuICAgIGF3YWl0IHd4LnJlcXVlc3RQYXltZW50KHJlcy5yZXN1bHQpXHJcbiAgICAvLyAjZW5kaWZcclxuXHJcbiAgICAvLyAjaWZkZWYgSDUgfHwgQVBQLVBMVVNcclxuICAgIC8vIEg156uvIOWSjCBBcHAg56uv5pyq5byA6YCa5pSv5LuYLeaooeaLn+aUr+S7mOS9k+mqjFxyXG4gICAgYXdhaXQgZ2V0UGF5TW9ja0FQSSh7IG9yZGVySWQ6IGlkIH0pXHJcbiAgICAvLyAjZW5kaWZcclxuICB9XHJcbiAgLy8g5oiQ5Yqf5o+Q56S6XHJcbiAgdW5pLnNob3dUb2FzdCh7IHRpdGxlOiAn5pSv5LuY5oiQ5YqfJyB9KVxyXG4gIC8vIOabtOaWsOiuouWNleeKtuaAgVxyXG4gIGNvbnN0IG9yZGVyID0gb3JkZXJMaXN0LnZhbHVlLmZpbmQoKHYpID0+IHYuaWQgPT09IGlkKVxyXG4gIG9yZGVyIS5vcmRlclN0YXRlID0gT3JkZXJTdGF0ZS5EYWlGYUh1b1xyXG59XHJcblxyXG4vLyDnoa7orqTmlLbotKdcclxuY29uc3Qgb25PcmRlckNvbmZpcm0gPSAoaWQ6IHN0cmluZykgPT4ge1xyXG4gIHVuaS5zaG93TW9kYWwoe1xyXG4gICAgY29udGVudDogJ+S4uuS/nemanOaCqOeahOadg+ebiu+8jOivt+aUtuWIsOi0p+W5tuehruiupOaXoOivr+WQju+8jOWGjeehruiupOaUtui0pycsXHJcbiAgICBjb25maXJtQ29sb3I6ICcjMjdCQTlCJyxcclxuICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAgICAgYXdhaXQgcHV0TWVtYmVyT3JkZXJSZWNlaXB0QnlJZEFQSShpZClcclxuICAgICAgICB1bmkuc2hvd1RvYXN0KHsgaWNvbjogJ3N1Y2Nlc3MnLCB0aXRsZTogJ+ehruiupOaUtui0p+aIkOWKnycgfSlcclxuICAgICAgICAvLyDnoa7orqTmiJDlip/vvIzmm7TmlrDkuLrlvoXor4Tku7dcclxuICAgICAgICBjb25zdCBvcmRlciA9IG9yZGVyTGlzdC52YWx1ZS5maW5kKCh2KSA9PiB2LmlkID09PSBpZClcclxuICAgICAgICBvcmRlciEub3JkZXJTdGF0ZSA9IE9yZGVyU3RhdGUuRGFpUGluZ0ppYVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuXHJcbi8vIOWIoOmZpOiuouWNlVxyXG5jb25zdCBvbk9yZGVyRGVsZXRlID0gKGlkOiBzdHJpbmcpID0+IHtcclxuICB1bmkuc2hvd01vZGFsKHtcclxuICAgIGNvbnRlbnQ6ICfkvaDnoa7lrpropoHliKDpmaTor6XorqLljZXvvJ8nLFxyXG4gICAgY29uZmlybUNvbG9yOiAnIzI3QkE5QicsXHJcbiAgICBzdWNjZXNzOiBhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMuY29uZmlybSkge1xyXG4gICAgICAgIGF3YWl0IGRlbGV0ZU1lbWJlck9yZGVyQVBJKHsgaWRzOiBbaWRdIH0pXHJcbiAgICAgICAgLy8g5Yig6Zmk5oiQ5Yqf77yM55WM6Z2i5Lit5Yig6Zmk6K6i5Y2VXHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBvcmRlckxpc3QudmFsdWUuZmluZEluZGV4KCh2KSA9PiB2LmlkID09PSBpZClcclxuICAgICAgICBvcmRlckxpc3QudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuXHJcbi8vIOaYr+WQpuWIhumhtee7k+adn1xyXG5jb25zdCBpc0ZpbmlzaCA9IHJlZihmYWxzZSlcclxuLy8g5piv5ZCm6Kem5Y+R5LiL5ouJ5Yi35pawXHJcbmNvbnN0IGlzVHJpZ2dlcmVkID0gcmVmKGZhbHNlKVxyXG4vLyDoh6rlrprkuYnkuIvmi4nliLfmlrDooqvop6blj5FcclxuY29uc3Qgb25SZWZyZXNoZXJyZWZyZXNoID0gYXN5bmMgKCkgPT4ge1xyXG4gIC8vIOW8gOWni+WKqOeUu1xyXG4gIGlzVHJpZ2dlcmVkLnZhbHVlID0gdHJ1ZVxyXG4gIC8vIOmHjee9ruaVsOaNrlxyXG4gIHF1ZXJ5UGFyYW1zLnBhZ2UgPSAxXHJcbiAgb3JkZXJMaXN0LnZhbHVlID0gW11cclxuICBpc0ZpbmlzaC52YWx1ZSA9IGZhbHNlXHJcbiAgLy8g5Yqg6L295pWw5o2uXHJcbiAgYXdhaXQgZ2V0TWVtYmVyT3JkZXJEYXRhKClcclxuICAvLyDlhbPpl63liqjnlLtcclxuICBpc1RyaWdnZXJlZC52YWx1ZSA9IGZhbHNlXHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHNjcm9sbC12aWV3XHJcbiAgICBlbmFibGUtYmFjay10by10b3BcclxuICAgIHNjcm9sbC15XHJcbiAgICBjbGFzcz1cIm9yZGVyc1wiXHJcbiAgICByZWZyZXNoZXItZW5hYmxlZFxyXG4gICAgOnJlZnJlc2hlci10cmlnZ2VyZWQ9XCJpc1RyaWdnZXJlZFwiXHJcbiAgICBAcmVmcmVzaGVycmVmcmVzaD1cIm9uUmVmcmVzaGVycmVmcmVzaFwiXHJcbiAgICBAc2Nyb2xsdG9sb3dlcj1cImdldE1lbWJlck9yZGVyRGF0YVwiXHJcbiAgPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJjYXJkXCIgdi1mb3I9XCJvcmRlciBpbiBvcmRlckxpc3RcIiA6a2V5PVwib3JkZXIuaWRcIj5cclxuICAgICAgPCEtLSDorqLljZXkv6Hmga8gLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwic3RhdHVzXCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJkYXRlXCI+e3sgb3JkZXIuY3JlYXRlVGltZSB9fTwvdGV4dD5cclxuICAgICAgICA8IS0tIOiuouWNleeKtuaAgeaWh+WtlyAtLT5cclxuICAgICAgICA8dGV4dD57eyBvcmRlclN0YXRlTGlzdFtvcmRlci5vcmRlclN0YXRlXS50ZXh0IH19PC90ZXh0PlxyXG4gICAgICAgIDwhLS0g5b6F6K+E5Lu3L+W3suWujOaIkC/lt7Llj5bmtogg54q25oCBOiDlsZXnpLrliKDpmaTorqLljZUgLS0+XHJcbiAgICAgICAgPHRleHRcclxuICAgICAgICAgIHYtaWY9XCJvcmRlci5vcmRlclN0YXRlID49IE9yZGVyU3RhdGUuRGFpUGluZ0ppYVwiXHJcbiAgICAgICAgICBjbGFzcz1cImljb24tZGVsZXRlXCJcclxuICAgICAgICAgIEB0YXA9XCJvbk9yZGVyRGVsZXRlKG9yZGVyLmlkKVwiXHJcbiAgICAgICAgPjwvdGV4dD5cclxuICAgICAgPC92aWV3PlxyXG4gICAgICA8IS0tIOWVhuWTgeS/oeaBr++8jOeCueWHu+WVhuWTgei3s+i9rOWIsOiuouWNleivpuaDhe+8jOS4jeaYr+WVhuWTgeivpuaDhSAtLT5cclxuICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgIHYtZm9yPVwiaXRlbSBpbiBvcmRlci5za3VzXCJcclxuICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXHJcbiAgICAgICAgY2xhc3M9XCJnb29kc1wiXHJcbiAgICAgICAgOnVybD1cImAvcGFnZXNPcmRlci9kZXRhaWwvZGV0YWlsP2lkPSR7b3JkZXIuaWR9YFwiXHJcbiAgICAgICAgaG92ZXItY2xhc3M9XCJub25lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDx2aWV3IGNsYXNzPVwiY292ZXJcIj5cclxuICAgICAgICAgIDxpbWFnZSBjbGFzcz1cImltYWdlXCIgbW9kZT1cImFzcGVjdEZpdFwiIDpzcmM9XCJpdGVtLmltYWdlXCI+PC9pbWFnZT5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgICAgPHZpZXcgY2xhc3M9XCJtZXRhXCI+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cIm5hbWUgZWxsaXBzaXNcIj57eyBpdGVtLm5hbWUgfX08L3ZpZXc+XHJcbiAgICAgICAgICA8dmlldyBjbGFzcz1cInR5cGVcIj57eyBpdGVtLmF0dHJzVGV4dCB9fTwvdmlldz5cclxuICAgICAgICA8L3ZpZXc+XHJcbiAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICA8IS0tIOaUr+S7mOS/oeaBryAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJwYXltZW50XCI+XHJcbiAgICAgICAgPHRleHQgY2xhc3M9XCJxdWFudGl0eVwiPuWFsXt7IG9yZGVyLnRvdGFsTnVtIH195Lu25ZWG5ZOBPC90ZXh0PlxyXG4gICAgICAgIDx0ZXh0PuWunuS7mDwvdGV4dD5cclxuICAgICAgICA8dGV4dCBjbGFzcz1cImFtb3VudFwiPiA8dGV4dCBjbGFzcz1cInN5bWJvbFwiPsKlPC90ZXh0Pnt7IG9yZGVyLnBheU1vbmV5IH19PC90ZXh0PlxyXG4gICAgICA8L3ZpZXc+XHJcbiAgICAgIDwhLS0g6K6i5Y2V5pON5L2c5oyJ6ZKuIC0tPlxyXG4gICAgICA8dmlldyBjbGFzcz1cImFjdGlvblwiPlxyXG4gICAgICAgIDwhLS0g5b6F5LuY5qy+54q25oCB77ya5pi+56S65Y675pSv5LuY5oyJ6ZKuIC0tPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwib3JkZXIub3JkZXJTdGF0ZSA9PT0gT3JkZXJTdGF0ZS5EYWlGdUt1YW5cIj5cclxuICAgICAgICAgIDx2aWV3IGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIiBAdGFwPVwib25PcmRlclBheShvcmRlci5pZClcIj7ljrvmlK/ku5g8L3ZpZXc+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgPG5hdmlnYXRvclxyXG4gICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICA6dXJsPVwiYC9wYWdlc09yZGVyL2NyZWF0ZS9jcmVhdGU/b3JkZXJJZD0ke29yZGVyLmlkfWBcIlxyXG4gICAgICAgICAgICBob3Zlci1jbGFzcz1cIm5vbmVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICDlho3mrKHotK3kubBcclxuICAgICAgICAgIDwvbmF2aWdhdG9yPlxyXG4gICAgICAgICAgPCEtLSDlvoXmlLbotKfnirbmgIE6IOWxleekuuehruiupOaUtui0pyAtLT5cclxuICAgICAgICAgIDx2aWV3XHJcbiAgICAgICAgICAgIHYtaWY9XCJvcmRlci5vcmRlclN0YXRlID09PSBPcmRlclN0YXRlLkRhaVNob3VIdW9cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCJcclxuICAgICAgICAgICAgQHRhcD1cIm9uT3JkZXJDb25maXJtKG9yZGVyLmlkKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOehruiupOaUtui0p1xyXG4gICAgICAgICAgPC92aWV3PlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgIDwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g5bqV6YOo5o+Q56S65paH5a2XIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJsb2FkaW5nLXRleHRcIiA6c3R5bGU9XCJ7IHBhZGRpbmdCb3R0b206IHNhZmVBcmVhSW5zZXRzPy5ib3R0b20gKyAncHgnIH1cIj5cclxuICAgICAge3sgaXNGaW5pc2ggPyAn5rKh5pyJ5pu05aSa5pWw5o2uficgOiAn5q2j5Zyo5Yqg6L29Li4uJyB9fVxyXG4gICAgPC92aWV3PlxyXG4gIDwvc2Nyb2xsLXZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLy8g6K6i5Y2V5YiX6KGoXHJcbi5vcmRlcnMge1xyXG4gIC5jYXJkIHtcclxuICAgIG1pbi1oZWlnaHQ6IDEwMHJweDtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgbWFyZ2luOiAyMHJweCAyMHJweCAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTBycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cclxuICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgIHBhZGRpbmctYm90dG9tOiA0MHJweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5zdGF0dXMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAxNXJweDtcclxuXHJcbiAgICAuZGF0ZSB7XHJcbiAgICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgfVxyXG5cclxuICAgIC5wcmltYXJ5IHtcclxuICAgICAgY29sb3I6ICNmZjkyNDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmljb24tZGVsZXRlIHtcclxuICAgICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAxMHJweDtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAxMHJweDtcclxuICAgICAgYm9yZGVyLWxlZnQ6IDFycHggc29saWQgI2UzZTNlMztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5nb29kcyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMjBycHg7XHJcblxyXG4gICAgLmNvdmVyIHtcclxuICAgICAgd2lkdGg6IDE3MHJweDtcclxuICAgICAgaGVpZ2h0OiAxNzBycHg7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMjBycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcnB4O1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgIC5pbWFnZSB7XHJcbiAgICAgICAgd2lkdGg6IDE3MHJweDtcclxuICAgICAgICBoZWlnaHQ6IDE3MHJweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5xdWFudGl0eSB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICByaWdodDogMDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICAgIHBhZGRpbmc6IDZycHggNHJweCA2cnB4IDhycHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAxMHJweCAwIDAgMDtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xyXG4gICAgfVxyXG5cclxuICAgIC5tZXRhIHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLm5hbWUge1xyXG4gICAgICBoZWlnaHQ6IDgwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI2cnB4O1xyXG4gICAgICBjb2xvcjogIzQ0NDtcclxuICAgIH1cclxuXHJcbiAgICAudHlwZSB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjg7XHJcbiAgICAgIHBhZGRpbmc6IDAgMTVycHg7XHJcbiAgICAgIG1hcmdpbi10b3A6IDEwcnB4O1xyXG4gICAgICBmb250LXNpemU6IDI0cnB4O1xyXG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA0cnB4O1xyXG4gICAgICBjb2xvcjogIzg4ODtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmODtcclxuICAgIH1cclxuXHJcbiAgICAubW9yZSB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICBmb250LXNpemU6IDIycnB4O1xyXG4gICAgICBjb2xvcjogIzMzMztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5wYXltZW50IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgcGFkZGluZzogMjBycHggMDtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgY29sb3I6ICM5OTk7XHJcbiAgICBmb250LXNpemU6IDI4cnB4O1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXJweCBzb2xpZCAjZWVlO1xyXG5cclxuICAgIC5xdWFudGl0eSB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRycHg7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMTZycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmFtb3VudCB7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgICBtYXJnaW4tbGVmdDogNnJweDtcclxuICAgIH1cclxuXHJcbiAgICAuc3ltYm9sIHtcclxuICAgICAgZm9udC1zaXplOiAyMHJweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5hY3Rpb24ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgcGFkZGluZy10b3A6IDIwcnB4O1xyXG5cclxuICAgIC5idXR0b24ge1xyXG4gICAgICB3aWR0aDogMTgwcnB4O1xyXG4gICAgICBoZWlnaHQ6IDYwcnB4O1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDIwcnB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA2MHJweDtcclxuICAgICAgYm9yZGVyOiAxcnB4IHNvbGlkICNjY2M7XHJcbiAgICAgIGZvbnQtc2l6ZTogMjZycHg7XHJcbiAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgfVxyXG5cclxuICAgIC5zZWNvbmRhcnkge1xyXG4gICAgICBjb2xvcjogIzI3YmE5YjtcclxuICAgICAgYm9yZGVyLWNvbG9yOiAjMjdiYTliO1xyXG4gICAgfVxyXG5cclxuICAgIC5wcmltYXJ5IHtcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyN2JhOWI7XHJcbiAgICAgIGJvcmRlci1jb2xvcjogIzI3YmE5YjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5sb2FkaW5nLXRleHQge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgIGNvbG9yOiAjNjY2O1xyXG4gICAgcGFkZGluZzogMjBycHggMDtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xyXG5pbXBvcnQgT3JkZXJMaXN0IGZyb20gJy4vY29tcG9uZW50cy9PcmRlckxpc3QudnVlJ1xyXG5cclxuLy8g6I635Y+W6aG16Z2i5Y+C5pWwXHJcbmNvbnN0IHF1ZXJ5ID0gZGVmaW5lUHJvcHM8e1xyXG4gIHR5cGU6IHN0cmluZ1xyXG59PigpXHJcblxyXG4vLyB0YWJzIOaVsOaNrlxyXG5jb25zdCBvcmRlclRhYnMgPSByZWYoW1xyXG4gIHsgb3JkZXJTdGF0ZTogMCwgdGl0bGU6ICflhajpg6gnLCBpc1JlbmRlcjogZmFsc2UgfSxcclxuICB7IG9yZGVyU3RhdGU6IDEsIHRpdGxlOiAn5b6F5LuY5qy+JywgaXNSZW5kZXI6IGZhbHNlIH0sXHJcbiAgeyBvcmRlclN0YXRlOiAyLCB0aXRsZTogJ+W+heWPkei0pycsIGlzUmVuZGVyOiBmYWxzZSB9LFxyXG4gIHsgb3JkZXJTdGF0ZTogMywgdGl0bGU6ICflvoXmlLbotKcnLCBpc1JlbmRlcjogZmFsc2UgfSxcclxuICB7IG9yZGVyU3RhdGU6IDQsIHRpdGxlOiAn5b6F6K+E5Lu3JywgaXNSZW5kZXI6IGZhbHNlIH0sXHJcbl0pXHJcblxyXG4vLyDpq5jkuq7kuIvmoIdcclxuY29uc3QgYWN0aXZlSW5kZXggPSByZWYob3JkZXJUYWJzLnZhbHVlLmZpbmRJbmRleCgodikgPT4gdi5vcmRlclN0YXRlID09PSBOdW1iZXIocXVlcnkudHlwZSkpKVxyXG4vLyDpu5jorqTmuLLmn5Plrrnlmahcclxub3JkZXJUYWJzLnZhbHVlW2FjdGl2ZUluZGV4LnZhbHVlXS5pc1JlbmRlciA9IHRydWVcclxuPC9zY3JpcHQ+XHJcblxyXG48dGVtcGxhdGU+XHJcbiAgPHZpZXcgY2xhc3M9XCJ2aWV3cG9ydFwiPlxyXG4gICAgPCEtLSB0YWJzIC0tPlxyXG4gICAgPHZpZXcgY2xhc3M9XCJ0YWJzXCI+XHJcbiAgICAgIDx0ZXh0XHJcbiAgICAgICAgY2xhc3M9XCJpdGVtXCJcclxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gb3JkZXJUYWJzXCJcclxuICAgICAgICA6a2V5PVwiaXRlbS50aXRsZVwiXHJcbiAgICAgICAgQHRhcD1cIlxyXG4gICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICBhY3RpdmVJbmRleCA9IGluZGV4XHJcbiAgICAgICAgICAgIGl0ZW0uaXNSZW5kZXIgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cclxuICAgICAgPC90ZXh0PlxyXG4gICAgICA8IS0tIOa4uOaghyAtLT5cclxuICAgICAgPHZpZXcgY2xhc3M9XCJjdXJzb3JcIiA6c3R5bGU9XCJ7IGxlZnQ6IGFjdGl2ZUluZGV4ICogMjAgKyAnJScgfVwiPjwvdmlldz5cclxuICAgIDwvdmlldz5cclxuICAgIDwhLS0g5ruR5Yqo5a655ZmoIC0tPlxyXG4gICAgPHN3aXBlciBjbGFzcz1cInN3aXBlclwiIDpjdXJyZW50PVwiYWN0aXZlSW5kZXhcIiBAY2hhbmdlPVwiYWN0aXZlSW5kZXggPSAkZXZlbnQuZGV0YWlsLmN1cnJlbnRcIj5cclxuICAgICAgPCEtLSDmu5HliqjpobkgLS0+XHJcbiAgICAgIDxzd2lwZXItaXRlbSB2LWZvcj1cIml0ZW0gaW4gb3JkZXJUYWJzXCIgOmtleT1cIml0ZW0udGl0bGVcIj5cclxuICAgICAgICA8IS0tIOiuouWNleWIl+ihqCAtLT5cclxuICAgICAgICA8T3JkZXJMaXN0IHYtaWY9XCJpdGVtLmlzUmVuZGVyXCIgOm9yZGVyLXN0YXRlPVwiaXRlbS5vcmRlclN0YXRlXCIgLz5cclxuICAgICAgPC9zd2lwZXItaXRlbT5cclxuICAgIDwvc3dpcGVyPlxyXG4gIDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5wYWdlIHtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLnZpZXdwb3J0IHtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbi8vIHRhYnNcclxuLnRhYnMge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XHJcbiAgbGluZS1oZWlnaHQ6IDYwcnB4O1xyXG4gIG1hcmdpbjogMCAxMHJweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gIGJveC1zaGFkb3c6IDAgNHJweCA2cnB4IHJnYmEoMjQwLCAyNDAsIDI0MCwgMC42KTtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgei1pbmRleDogOTtcclxuXHJcbiAgLml0ZW0ge1xyXG4gICAgZmxleDogMTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIHBhZGRpbmc6IDIwcnB4O1xyXG4gICAgZm9udC1zaXplOiAyOHJweDtcclxuICAgIGNvbG9yOiAjMjYyNjI2O1xyXG4gIH1cclxuXHJcbiAgLmN1cnNvciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgd2lkdGg6IDIwJTtcclxuICAgIGhlaWdodDogNnJweDtcclxuICAgIHBhZGRpbmc6IDAgNTBycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdiYTliO1xyXG4gICAgLyog6L+H5rih5pWI5p6cICovXHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC40cztcclxuICB9XHJcbn1cclxuXHJcbi8vIHN3aXBlclxyXG4uc3dpcGVyIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y4O1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcclxuaW1wb3J0IE9yZGVyTGlzdCBmcm9tICcuL2NvbXBvbmVudHMvT3JkZXJMaXN0LnZ1ZSdcclxuXHJcbi8vIOiOt+WPlumhtemdouWPguaVsFxyXG5jb25zdCBxdWVyeSA9IGRlZmluZVByb3BzPHtcclxuICB0eXBlOiBzdHJpbmdcclxufT4oKVxyXG5cclxuLy8gdGFicyDmlbDmja5cclxuY29uc3Qgb3JkZXJUYWJzID0gcmVmKFtcclxuICB7IG9yZGVyU3RhdGU6IDAsIHRpdGxlOiAn5YWo6YOoJywgaXNSZW5kZXI6IGZhbHNlIH0sXHJcbiAgeyBvcmRlclN0YXRlOiAxLCB0aXRsZTogJ+W+heS7mOasvicsIGlzUmVuZGVyOiBmYWxzZSB9LFxyXG4gIHsgb3JkZXJTdGF0ZTogMiwgdGl0bGU6ICflvoXlj5HotKcnLCBpc1JlbmRlcjogZmFsc2UgfSxcclxuICB7IG9yZGVyU3RhdGU6IDMsIHRpdGxlOiAn5b6F5pS26LSnJywgaXNSZW5kZXI6IGZhbHNlIH0sXHJcbiAgeyBvcmRlclN0YXRlOiA0LCB0aXRsZTogJ+W+heivhOS7tycsIGlzUmVuZGVyOiBmYWxzZSB9LFxyXG5dKVxyXG5cclxuLy8g6auY5Lqu5LiL5qCHXHJcbmNvbnN0IGFjdGl2ZUluZGV4ID0gcmVmKG9yZGVyVGFicy52YWx1ZS5maW5kSW5kZXgoKHYpID0+IHYub3JkZXJTdGF0ZSA9PT0gTnVtYmVyKHF1ZXJ5LnR5cGUpKSlcclxuLy8g6buY6K6k5riy5p+T5a655ZmoXHJcbm9yZGVyVGFicy52YWx1ZVthY3RpdmVJbmRleC52YWx1ZV0uaXNSZW5kZXIgPSB0cnVlXHJcbjwvc2NyaXB0PlxyXG5cclxuPHRlbXBsYXRlPlxyXG4gIDx2aWV3IGNsYXNzPVwidmlld3BvcnRcIj5cclxuICAgIDwhLS0gdGFicyAtLT5cclxuICAgIDx2aWV3IGNsYXNzPVwidGFic1wiPlxyXG4gICAgICA8dGV4dFxyXG4gICAgICAgIGNsYXNzPVwiaXRlbVwiXHJcbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIG9yZGVyVGFic1wiXHJcbiAgICAgICAgOmtleT1cIml0ZW0udGl0bGVcIlxyXG4gICAgICAgIEB0YXA9XCJcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgYWN0aXZlSW5kZXggPSBpbmRleFxyXG4gICAgICAgICAgICBpdGVtLmlzUmVuZGVyID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBpdGVtLnRpdGxlIH19XHJcbiAgICAgIDwvdGV4dD5cclxuICAgICAgPCEtLSDmuLjmoIcgLS0+XHJcbiAgICAgIDx2aWV3IGNsYXNzPVwiY3Vyc29yXCIgOnN0eWxlPVwieyBsZWZ0OiBhY3RpdmVJbmRleCAqIDIwICsgJyUnIH1cIj48L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbiAgICA8IS0tIOa7keWKqOWuueWZqCAtLT5cclxuICAgIDxzd2lwZXIgY2xhc3M9XCJzd2lwZXJcIiA6Y3VycmVudD1cImFjdGl2ZUluZGV4XCIgQGNoYW5nZT1cImFjdGl2ZUluZGV4ID0gJGV2ZW50LmRldGFpbC5jdXJyZW50XCI+XHJcbiAgICAgIDwhLS0g5ruR5Yqo6aG5IC0tPlxyXG4gICAgICA8c3dpcGVyLWl0ZW0gdi1mb3I9XCJpdGVtIGluIG9yZGVyVGFic1wiIDprZXk9XCJpdGVtLnRpdGxlXCI+XHJcbiAgICAgICAgPCEtLSDorqLljZXliJfooaggLS0+XHJcbiAgICAgICAgPE9yZGVyTGlzdCB2LWlmPVwiaXRlbS5pc1JlbmRlclwiIDpvcmRlci1zdGF0ZT1cIml0ZW0ub3JkZXJTdGF0ZVwiIC8+XHJcbiAgICAgIDwvc3dpcGVyLWl0ZW0+XHJcbiAgICA8L3N3aXBlcj5cclxuICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxucGFnZSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbn1cclxuXHJcbi52aWV3cG9ydCB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG59XHJcblxyXG4vLyB0YWJzXHJcbi50YWJzIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG4gIGxpbmUtaGVpZ2h0OiA2MHJweDtcclxuICBtYXJnaW46IDAgMTBycHg7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICBib3gtc2hhZG93OiAwIDRycHggNnJweCByZ2JhKDI0MCwgMjQwLCAyNDAsIDAuNik7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHotaW5kZXg6IDk7XHJcblxyXG4gIC5pdGVtIHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBwYWRkaW5nOiAyMHJweDtcclxuICAgIGZvbnQtc2l6ZTogMjhycHg7XHJcbiAgICBjb2xvcjogIzI2MjYyNjtcclxuICB9XHJcblxyXG4gIC5jdXJzb3Ige1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgbGVmdDogMDtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIHdpZHRoOiAyMCU7XHJcbiAgICBoZWlnaHQ6IDZycHg7XHJcbiAgICBwYWRkaW5nOiAwIDUwcnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YmE5YjtcclxuICAgIC8qIOi/h+a4oeaViOaenCAqL1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNHM7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBzd2lwZXJcclxuLnN3aXBlciB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmODtcclxufVxyXG48L3N0eWxlPlxyXG4iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBvbkxhdW5jaCwgb25TaG93LCBvbkhpZGUgfSBmcm9tICdAZGNsb3VkaW8vdW5pLWFwcCdcclxuXHJcbm9uTGF1bmNoKCgpID0+IHtcclxuICBfX2ZfXygnbG9nJywnYXQgQXBwLnZ1ZTo1JywnQXBwIExhdW5jaCcpXHJcbn0pXHJcbm9uU2hvdygoKSA9PiB7XHJcbiAgX19mX18oJ2xvZycsJ2F0IEFwcC52dWU6OCcsJ0FwcCBTaG93JylcclxufSlcclxub25IaWRlKCgpID0+IHtcclxuICBfX2ZfXygnbG9nJywnYXQgQXBwLnZ1ZToxMScsJ0FwcCBIaWRlJylcclxufSlcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuLy8g5a2X5L2T5Zu+5qCHXHJcbkBpbXBvcnQgJ0Avc3R5bGVzL2ZvbnRzLnNjc3MnO1xyXG5AaW1wb3J0ICdAL3N0YXRpYy9pY29uZm9udC9pY29uZm9udC5jc3MnO1xyXG5cclxudmlldyxcclxubmF2aWdhdG9yLFxyXG5pbnB1dCxcclxuc2Nyb2xsLXZpZXcge1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbn1cclxuXHJcbmJ1dHRvbjo6YWZ0ZXIge1xyXG4gIGJvcmRlcjogbm9uZTtcclxufVxyXG5cclxuc3dpcGVyLFxyXG5zY3JvbGwtdmlldyB7XHJcbiAgZmxleDogMTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuaW1hZ2Uge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG59XHJcblxyXG4vLyDkuKTooYznnIHnlaVcclxuLmVsbGlwc2lzIHtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xyXG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcclxuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xyXG59XHJcbjwvc3R5bGU+XHJcbiJdLCJuYW1lcyI6WyJfc2ZjX3JlbmRlciIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwiX25vcm1hbGl6ZVN0eWxlIiwiX2NyZWF0ZUNvbW1lbnRWTm9kZSIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfRnJhZ21lbnQiLCJfcmVuZGVyTGlzdCIsInJlZiIsIl9jcmVhdGVWTm9kZSIsImVhc3ljb20iLCJnZXRDdXJyZW50SW5zdGFuY2UiLCJpc0luU1NSQ29tcG9uZW50U2V0dXAiLCJpbmplY3RIb29rIiwic2V0IiwiZSIsInBpbmlhIiwibyIsIk11dGF0aW9uVHlwZSIsImEiLCJwb3B1cCIsIm9wZW4iLCJzdGF0ZSIsInN0b3JlIiwidG9SYXciLCJub3ciLCJ3YXRjaCIsInVucmVmIiwibWFya1JhdyIsImVmZmVjdFNjb3BlIiwiaXNSZWYiLCJpc1JlYWN0aXZlIiwiZ2V0Q3VycmVudFNjb3BlIiwib25TY29wZURpc3Bvc2UiLCJ0b1JlZnMiLCJjb21wdXRlZCIsIm5leHRUaWNrIiwib3B0aW9ucyIsInJlYWN0aXZlIiwidG9SZWYiLCJwIiwiaW5qZWN0IiwiaXNPYmplY3QiLCJ2IiwicGVyc2lzdCIsIl9fZl9fIiwiX19yZXNvbHZlRHluYW1pY0NvbXBvbmVudCIsIl9fZWFzeWNvbV8wIiwiX25vcm1hbGl6ZUNsYXNzIiwiX3RvRGlzcGxheVN0cmluZyIsImdvb2RzIiwiX3NmY19tYWluIiwiX3dpdGhNb2RpZmllcnMiLCJiaW5kaW5neCIsIm1wb3RoZXIiLCJfcmVuZGVyU2xvdCIsIm9uTW91bnRlZCIsIl9fZWFzeWNvbV8zIiwiX3dpdGhDdHgiLCJfY3JlYXRlQmxvY2siLCJfaW1wb3J0c18wIiwiX2NyZWF0ZVRleHRWTm9kZSIsImkiLCJ2dCIsImIiLCJfIiwiVmFsaWRhdG9yIiwiaW52YWxpZEZpZWxkcyIsIl9fZWFzeWNvbV8yIiwiX3dpdGhEaXJlY3RpdmVzIiwicyIsImoiLCJuIiwidHlwZSIsIlNrdU1vZGUiLCJfX2Vhc3ljb21fMSIsIl9lIiwiX2EiLCJpc0VxdWFsIiwiaXNSZXF1aXJlZEZpZWxkIiwidCIsInIiLCJjIiwidSIsImgiLCJsIiwiZCIsImYiLCJnIiwibSIsInkiLCJ3IiwiSSIsIlMiLCJrIiwiQSIsIkMiLCJQIiwiVCIsIngiLCJPIiwidW5pQ2xvdWQiLCJ0aGlzIiwiJCIsIk0iLCJEIiwibG9jYXRpb24iLCJwZXJtaXNpb24iLCJnZXRCaW5kUGFyYW1zIiwidXVpZCIsInN0Iiwid2FyZWhvdXNlU2NhbiIsImltYWdlcyIsInJlcyIsIl9fZWFzeWNvbV82IiwibWVzc2FnZXMiLCJmb3JtYXRlciIsImtleSIsInZhbHVlcyIsImxvY2FsZSIsImVuIiwiemhIYW5zIiwiemhIYW50IiwiX19lYXN5Y29tXzUiLCJ1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbiIsInRtcCIsInRleHQiLCJwYWdlcyIsIml0ZW0iLCJfX2Vhc3ljb21fNyIsInNwYWNlIiwiZGV0YWlscyIsImRhdGEiLCJPcmRlclN0YXRlIiwiX2IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxZQUFNLEVBQUUsZUFBQSxJQUFtQixJQUFJLGtCQUFrQjs7Ozs7O0FDRmxDLFFBQUEsZUFBQTs7Ozs7Ozs7V0NNRkEsY0FBUyxNQUFBLFFBQUEsUUFBQSxRQUFBLE9BQUEsVUFBQTtXQUFPQyxJQUFBQSxVQU43QixHQUFBQyxJQUFBO0FBQUEsTUFNNkM7QUFBQSxNQUFBO0FBQUEsUUFBQSxPQUFBO0FBQUEsUUFDekMsT0FBZUMsSUFBQUEsZUFBQSxFQUFBLFlBQUEsT0FBQSxlQUFBLE1BQUEsS0FBQSxNQUFBO0FBQUEsTUFBQTtBQUFBLE1BQ2Y7QUFBQSxRQUFBQyxJQUFBQSxtQkFDRSxVQUFpRTtBQUFBLFFBQUFDLElBQUFBLG1CQUFwRCxRQUFZLEVBQUEsT0FBQSxPQUFBLEdBQUE7QUFBQSxVQUErQkEsSUFBQUEsbUJBQUEsU0FBQTtBQUFBLFlBQUEsT0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNFMUQsV0FBQUwsY0FBQSxNQUFBLFFBQUEsUUFnQlksUUEzQmhCLE9BQUEsVUFBQTttREFXSSxRQWdCWSxFQUFBLE9BQUEsY0FBQTtBQUFBLE9BZkpDLElBQUEsVUFBQSxJQUFBLEdBQUFDLElBQUE7QUFBQSxRQUFlSSxJQUFBO0FBQUEsUUFBQTtBQUFBLFFBQUFDLElBQUFBLFdBQUEsT0FBQSxNQUFBLENBQUEsU0FBQTtBQUNyQixpQkFBQU4sSUFBQSxVQUFBLEdBQWtCQyxJQUFBLG1CQUFBLGFBQUE7QUFBQSxZQUNqQixPQUFLO0FBQUEsWUFFTCxlQUFZO0FBQUEsWUFBQSxLQUFBLEtBQUE7QUFBQSxZQUViLEtBQUEsS0FBQTtBQUFBLFVBQUEsR0FBQTtBQUFBO2NBbEJOO0FBQUEsY0FBQTtBQUFBLGdCQUFBLE9BQUE7QUFBQTs7Ozs7Z0JBd0J1Q0csSUFBQUEsbUJBQUEsU0FBQTtBQUFBLGtCQUFBLE9BQUE7QUFBQTtnQkFFakMsR0FBQSxNQUFBLEdBQXlDLENBQW5DLEtBQUEsQ0FBQTtBQUFBLGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25CWixZQUFNLGVBQWVHLElBQUFBLElBQW9CO0FBQUEsUUFDdkM7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFFBQVEsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUM3QixRQUFRO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDUjtBQUFBLE1BQUEsQ0FDRDs7Ozs7O1dDS0dSLGNBQWUsTUFBQSxRQUFBLFFBQUEsUUFBQSxPQUFBLFVBQUE7V0FDZkMsSUFBQUEsVUFBZ0IsR0FBQUMsSUFBQSxtQkFBQSxRQUFBLEVBQUEsT0FBQSxjQUFBO0FBQUEsTUFDaEJFLElBQUFBLG1CQUFhLFVBQUE7QUFBQSxNQUNiSyxnQkFHYyxPQUFBLGNBQUEsQ0FBQTtBQUFBLE1BQUFMLElBQUFBLG1CQUhELFFBQWtCO0FBQUEsTUFBQUMsSUFBQUEsbUJBQUUsZUFBd0I7QUFBQSxRQUFFLHNCQUFtQjtBQUFBLFFBQUMscUJBQVE7QUFBQSxRQUFBLE9BQUE7QUFBQSxRQUNyRixZQUFBO0FBQUEsTUFBQSxHQUNBO0FBQUEsUUFBQUQsSUFBQUEsbUJBQUEsUUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7QUNwRUEsWUFBQSxjQUFjSSxRQUFJLENBQUM7QUFHbkIsWUFBQSxXQUFxQyxDQUFDLE9BQU87QUFDckMsb0JBQUEsUUFBUSxHQUFHLE9BQU87QUFBQSxNQUFBOzs7Ozs7V0NVNUJSLGNBTVMsTUFBQSxRQUFBLFFBQUEsUUFBQSxPQUFBLFVBQUE7V0FOQUMsSUFBQUEsVUFBYyxHQUFBQyxJQUFBLG1CQUFBLFFBQUEsRUFBQSxPQUFBLGNBQUE7QUFBQSxNQUFBRyxJQUFBO0FBQUEsUUFBa0I7QUFBQSxRQUFBO0FBQUEsVUFBRyxVQUFVO0FBQUEsVUFBTyxVQUFRO0FBQUEsVUFBQSxVQUFBO0FBQUE7Ozt5QkFDM0IsSUFBTyxHQUFBSCxJQUFBO0FBQUEsWUFBQUksSUFBQTtBQUFBLFlBQUE7QUFBQSxZQUFBQyxJQUFBQSxXQUFBLE9BQUEsTUFBQSxDQUFBLFNBQUE7O2dCQUM3QyxLQUFBLEtBQUE7QUFBQSxjQUFBLEdBQUE7QUFBQSx1Q0FBZ0QsYUFBTTtBQUFBLGtCQUFDLEtBQUs7QUFBQSxrQkFBQSxlQUFBO0FBQUEsa0JBQzFELE9BQUE7QUFBQSxnQkFBQSxHQUFBO0FBQUEsa0JBQXNDRixJQUFBQSxtQkFBQSxTQUFBO0FBQUEsb0JBQUUsTUFBSztBQUFBLG9CQUFBLE9BQUE7QUFBQTs7OztZQUluRCxDQUFBO0FBQUEsWUFBQTtBQUFBO0FBQUEsVUFBWTtBQUFBLFFBQ1o7QUFBQSxRQUFBO0FBQUE7QUFBQSxNQU9PO0FBQUEsTUFOTEQsSUFBQUEsbUJBQUEsT0FBQTtBQUFBLE1BS1FDLElBQUFBLG1CQUFBLFFBQUEsRUFBQSxPQUFBLFlBQUEsR0FBQTtBQUFBLFNBQUFKLElBQUEsVUFIQSxJQUFPLEdBQUFDLElBQUE7QUFBQSxVQUFBSSxJQUFBO0FBQUEsVUFBQTtBQUFBLFVBQUFDLElBQUFBLFdBQUEsT0FBQSxNQUFBLENBQUEsTUFBQSxVQUFBO21CQUNSTixJQUFBQSxVQTlCYixHQUFBQyxJQUFBO0FBQUEsY0E4Qm1CO0FBQUEsY0FDWTtBQUFBLGdCQUFBLEtBQUEsS0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7OztBQzRRL0IsUUFBTSxVQUFVO0FBQ2hCLFFBQU0sVUFBVTtBQUVoQixRQUFNLFlBQVk7QUFTbEIsUUFBTSxVQUFVO0FBRWhCLFFBQU0sWUFBWTtBQU1sQixRQUFNLGdCQUFnQjtBQVN0QixRQUFNLCtCQUErQjtBQ3RSckMsV0FBUyxvQkFBb0IsTUFBTTtBQUMvQixXQUFPLEtBQUssY0FBYyxJQUFJO0FBQUEsRUFDbEM7QUFFQSxXQUFTLGFBQWEsTUFBTSxhQUFhLE1BQU07QUFFM0MsUUFBSSxJQUFJLFNBQVM7QUFFYixVQUFJLFFBQVEsTUFBTSxVQUFVLEdBQUcsSUFBSTtBQUFBLElBQ3RDLE9BQ0k7QUFDRCxjQUFRLElBQUksRUFBRSxNQUFNLFNBQVMsQ0FBQyxHQUFHLE1BQU0sUUFBUSxDQUFDO0FBQUEsSUFDbkQ7QUFBQSxFQUNMO0FBS0EsV0FBUyxlQUFlLFdBQVdRLFVBQVM7QUFDeEMsV0FBTyxPQUFPLGNBQWMsV0FBV0EsV0FBVTtBQUFBLEVBQ3JEO0FBR0EsUUFBTSxhQUFhLENBQUMsY0FBYyxDQUFDLE1BQU0sU0FBU0MsSUFBa0IsbUJBQUEsTUFBTztBQUV2RSxLQUFDQyxJQUFxQix5QkFBSUMsSUFBVSxXQUFDLFdBQVcsTUFBTSxNQUFNO0FBQUEsRUFDaEU7QUFDQSxRQUFNLFNBQXVCLDJCQUFXLE9BQU87QUFDL0MsUUFBTSxTQUF1QiwyQkFBVyxPQUFPO0FBQy9DLFFBQU0sV0FDUSwyQkFBVyxTQUFTO0FBWWxDLFFBQU0sU0FDUSwyQkFBVyxPQUFPO0FBRWhDLFFBQU0sV0FBeUIsMkJBQVcsU0FBUztBQUduRCxRQUFNLGNBQ1EsMkJBQVcsYUFBYTtBQWV0QyxRQUFNLDJCQUF5QywyQkFBVyw0QkFBNEI7QUNoSHRGLE1BQUksU0FBUztBQU1OLFdBQVNDLE1BQUksUUFBUSxLQUFLLEtBQUs7QUFDcEMsUUFBSSxNQUFNLFFBQVEsTUFBTSxHQUFHO0FBQ3pCLGFBQU8sU0FBUyxLQUFLLElBQUksT0FBTyxRQUFRLEdBQUc7QUFDM0MsYUFBTyxPQUFPLEtBQUssR0FBRyxHQUFHO0FBQ3pCLGFBQU87QUFBQSxJQUNSO0FBQ0QsV0FBTyxHQUFHLElBQUk7QUFDZCxXQUFPO0FBQUEsRUFDVDtBQUVPLFdBQVMsSUFBSSxRQUFRLEtBQUs7QUFDL0IsUUFBSSxNQUFNLFFBQVEsTUFBTSxHQUFHO0FBQ3pCLGFBQU8sT0FBTyxLQUFLLENBQUM7QUFDcEI7QUFBQSxJQUNEO0FBQ0QsV0FBTyxPQUFPLEdBQUc7QUFBQSxFQUNuQjtBQ3hCTyxXQUFTLHdCQUF3QjtBQUNwQyxXQUFPLFVBQVcsRUFBQztBQUFBLEVBQ3ZCO0FBQ08sV0FBUyxZQUFZO0FBRXhCLFdBQVEsT0FBTyxjQUFjLGVBQWUsT0FBTyxXQUFXLGNBQ3hELFNBQ0EsT0FBTyxXQUFXLGNBQ2QsU0FDQTtFQUNkO0FBQ08sUUFBTSxtQkFBbUIsT0FBTyxVQUFVO0FDWDFDLFFBQU0sYUFBYTtBQUNuQixRQUFNLDJCQUEyQjtBQ0R4QyxNQUFJO0FBQ0osTUFBSTtBQUNHLFdBQVMseUJBQXlCO0FBQ3JDLFFBQUk7QUFDSixRQUFJLGNBQWMsUUFBVztBQUN6QixhQUFPO0FBQUEsSUFDVjtBQUNELFFBQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxhQUFhO0FBQ3JELGtCQUFZO0FBQ1osYUFBTyxPQUFPO0FBQUEsSUFDakIsV0FDUSxPQUFPLFdBQVcsaUJBQWlCLEtBQUssT0FBTyxnQkFBZ0IsUUFBUSxPQUFPLFNBQVMsU0FBUyxHQUFHLGNBQWM7QUFDdEgsa0JBQVk7QUFDWixhQUFPLE9BQU8sV0FBVztBQUFBLElBQzVCLE9BQ0k7QUFDRCxrQkFBWTtBQUFBLElBQ2Y7QUFDRCxXQUFPO0FBQUEsRUFDWDtBQUNPLFdBQVMsTUFBTTtBQUNsQixXQUFPLHVCQUF3QixJQUFHLEtBQUssSUFBRyxJQUFLLEtBQUs7RUFDeEQ7QUFBQSxFQ3BCTyxNQUFNLFNBQVM7QUFBQSxJQUNsQixZQUFZLFFBQVEsTUFBTTtBQUN0QixXQUFLLFNBQVM7QUFDZCxXQUFLLGNBQWM7QUFDbkIsV0FBSyxVQUFVO0FBQ2YsV0FBSyxTQUFTO0FBQ2QsV0FBSyxPQUFPO0FBQ1osWUFBTSxrQkFBa0IsQ0FBQTtBQUN4QixVQUFJLE9BQU8sVUFBVTtBQUNqQixtQkFBVyxNQUFNLE9BQU8sVUFBVTtBQUM5QixnQkFBTSxPQUFPLE9BQU8sU0FBUyxFQUFFO0FBQy9CLDBCQUFnQixFQUFFLElBQUksS0FBSztBQUFBLFFBQzlCO0FBQUEsTUFDSjtBQUNELFlBQU0sc0JBQXNCLG1DQUFtQyxPQUFPLEVBQUU7QUFDeEUsVUFBSSxrQkFBa0IsT0FBTyxPQUFPLENBQUUsR0FBRSxlQUFlO0FBQ3ZELFVBQUk7QUFDQSxjQUFNLE1BQU0sYUFBYSxRQUFRLG1CQUFtQjtBQUNwRCxjQUFNLE9BQU8sS0FBSyxNQUFNLEdBQUc7QUFDM0IsZUFBTyxPQUFPLGlCQUFpQixJQUFJO0FBQUEsTUFDdEMsU0FDTUMsSUFBRztBQUFBLE1BRVQ7QUFDRCxXQUFLLFlBQVk7QUFBQSxRQUNiLGNBQWM7QUFDVixpQkFBTztBQUFBLFFBQ1Y7QUFBQSxRQUNELFlBQVksT0FBTztBQUNmLGNBQUk7QUFDQSx5QkFBYSxRQUFRLHFCQUFxQixLQUFLLFVBQVUsS0FBSyxDQUFDO0FBQUEsVUFDbEUsU0FDTUEsSUFBRztBQUFBLFVBRVQ7QUFDRCw0QkFBa0I7QUFBQSxRQUNyQjtBQUFBLFFBQ0QsTUFBTTtBQUNGLGlCQUFPLElBQUc7QUFBQSxRQUNiO0FBQUEsTUFDYjtBQUNRLFVBQUksTUFBTTtBQUNOLGFBQUssR0FBRywwQkFBMEIsQ0FBQyxVQUFVLFVBQVU7QUFDbkQsY0FBSSxhQUFhLEtBQUssT0FBTyxJQUFJO0FBQzdCLGlCQUFLLFVBQVUsWUFBWSxLQUFLO0FBQUEsVUFDbkM7QUFBQSxRQUNqQixDQUFhO0FBQUEsTUFDSjtBQUNELFdBQUssWUFBWSxJQUFJLE1BQU0sSUFBSTtBQUFBLFFBQzNCLEtBQUssQ0FBQyxTQUFTLFNBQVM7QUFDcEIsY0FBSSxLQUFLLFFBQVE7QUFDYixtQkFBTyxLQUFLLE9BQU8sR0FBRyxJQUFJO0FBQUEsVUFDN0IsT0FDSTtBQUNELG1CQUFPLElBQUksU0FBUztBQUNoQixtQkFBSyxRQUFRLEtBQUs7QUFBQSxnQkFDZCxRQUFRO0FBQUEsZ0JBQ1I7QUFBQSxjQUM1QixDQUF5QjtBQUFBLFlBQ3pCO0FBQUEsVUFDaUI7QUFBQSxRQUNKO0FBQUEsTUFDYixDQUFTO0FBQ0QsV0FBSyxnQkFBZ0IsSUFBSSxNQUFNLElBQUk7QUFBQSxRQUMvQixLQUFLLENBQUMsU0FBUyxTQUFTO0FBQ3BCLGNBQUksS0FBSyxRQUFRO0FBQ2IsbUJBQU8sS0FBSyxPQUFPLElBQUk7QUFBQSxVQUMxQixXQUNRLFNBQVMsTUFBTTtBQUNwQixtQkFBTyxLQUFLO0FBQUEsVUFDZixXQUNRLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRSxTQUFTLElBQUksR0FBRztBQUNqRCxtQkFBTyxJQUFJLFNBQVM7QUFDaEIsbUJBQUssWUFBWSxLQUFLO0FBQUEsZ0JBQ2xCLFFBQVE7QUFBQSxnQkFDUjtBQUFBLGdCQUNBLFNBQVMsTUFBTTtBQUFBLGdCQUFHO0FBQUEsY0FDOUMsQ0FBeUI7QUFDRCxxQkFBTyxLQUFLLFVBQVUsSUFBSSxFQUFFLEdBQUcsSUFBSTtBQUFBLFlBQzNEO0FBQUEsVUFDaUIsT0FDSTtBQUNELG1CQUFPLElBQUksU0FBUztBQUNoQixxQkFBTyxJQUFJLFFBQVEsYUFBVztBQUMxQixxQkFBSyxZQUFZLEtBQUs7QUFBQSxrQkFDbEIsUUFBUTtBQUFBLGtCQUNSO0FBQUEsa0JBQ0E7QUFBQSxnQkFDaEMsQ0FBNkI7QUFBQSxjQUM3QixDQUF5QjtBQUFBLFlBQ3pCO0FBQUEsVUFDaUI7QUFBQSxRQUNKO0FBQUEsTUFDYixDQUFTO0FBQUEsSUFDSjtBQUFBLElBQ0QsTUFBTSxjQUFjLFFBQVE7QUFDeEIsV0FBSyxTQUFTO0FBQ2QsaUJBQVcsUUFBUSxLQUFLLFNBQVM7QUFDN0IsYUFBSyxPQUFPLEdBQUcsS0FBSyxNQUFNLEVBQUUsR0FBRyxLQUFLLElBQUk7QUFBQSxNQUMzQztBQUNELGlCQUFXLFFBQVEsS0FBSyxhQUFhO0FBQ2pDLGFBQUssUUFBUSxNQUFNLEtBQUssT0FBTyxLQUFLLE1BQU0sRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDNUQ7QUFBQSxJQUNKO0FBQUEsRUFDTDtBQ3BHTyxXQUFTLG9CQUFvQixrQkFBa0IsU0FBUztBQUMzRCxVQUFNLGFBQWE7QUFDbkIsVUFBTSxTQUFTO0FBQ2YsVUFBTSxPQUFPO0FBQ2IsVUFBTSxjQUFjLG9CQUFvQixXQUFXO0FBQ25ELFFBQUksU0FBUyxPQUFPLHlDQUF5QyxDQUFDLGNBQWM7QUFDeEUsV0FBSyxLQUFLLFlBQVksa0JBQWtCLE9BQU87QUFBQSxJQUNsRCxPQUNJO0FBQ0QsWUFBTSxRQUFRLGNBQWMsSUFBSSxTQUFTLFlBQVksSUFBSSxJQUFJO0FBQzdELFlBQU0sT0FBTyxPQUFPLDJCQUEyQixPQUFPLDRCQUE0QixDQUFBO0FBQ2xGLFdBQUssS0FBSztBQUFBLFFBQ04sa0JBQWtCO0FBQUEsUUFDbEI7QUFBQSxRQUNBO0FBQUEsTUFDWixDQUFTO0FBQ0QsVUFBSTtBQUNBLGdCQUFRLE1BQU0sYUFBYTtBQUFBLElBQ2xDO0FBQUEsRUFDTDtBQUFBLEVDekJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSxNQUFJO0FBT0osUUFBTSxpQkFBaUIsQ0FBQ0MsV0FBVyxjQUFjQTtBQUtqRCxRQUFNLGNBQXlELE9BQU8sT0FBTztBQUU3RSxXQUFTLGNBRVRDLElBQUc7QUFDQyxXQUFRQSxNQUNKLE9BQU9BLE9BQU0sWUFDYixPQUFPLFVBQVUsU0FBUyxLQUFLQSxFQUFDLE1BQU0scUJBQ3RDLE9BQU9BLEdBQUUsV0FBVztBQUFBLEVBQzVCO0FBTUEsTUFBSTtBQUFBLEdBQ0gsU0FBVUMsZUFBYztBQVFyQkEsa0JBQWEsUUFBUSxJQUFJO0FBTXpCQSxrQkFBYSxhQUFhLElBQUk7QUFNOUJBLGtCQUFhLGVBQWUsSUFBSTtBQUFBLEVBRXBDLEdBQUcsaUJBQWlCLGVBQWUsQ0FBRyxFQUFBO0FBRXRDLFFBQU0sWUFBWSxPQUFPLFdBQVc7QUFPcEMsUUFBTSxlQUE2SztBQVluTCxRQUFNLFVBQXlCLHVCQUFNLE9BQU8sV0FBVyxZQUFZLE9BQU8sV0FBVyxTQUMvRSxTQUNBLE9BQU8sU0FBUyxZQUFZLEtBQUssU0FBUyxPQUN0QyxPQUNBLE9BQU8sV0FBVyxZQUFZLE9BQU8sV0FBVyxTQUM1QyxTQUNBLE9BQU8sZUFBZSxXQUNsQixhQUNBLEVBQUUsYUFBYSxLQUFRLEdBQUE7QUFDekMsV0FBUyxJQUFJLE1BQU0sRUFBRSxVQUFVLE1BQU0sSUFBSSxDQUFBLEdBQUk7QUFHekMsUUFBSSxXQUNBLDZFQUE2RSxLQUFLLEtBQUssSUFBSSxHQUFHO0FBQzlGLGFBQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxhQUFhLEtBQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxNQUFNLEtBQUssS0FBTSxDQUFBO0FBQUEsSUFDNUU7QUFDTyxXQUFBO0FBQUEsRUFDWDtBQUNBLFdBQVMsU0FBUyxLQUFLLE1BQU0sTUFBTTtBQUN6QixVQUFBLE1BQU0sSUFBSTtBQUNaLFFBQUEsS0FBSyxPQUFPLEdBQUc7QUFDbkIsUUFBSSxlQUFlO0FBQ25CLFFBQUksU0FBUyxXQUFZO0FBQ2QsYUFBQSxJQUFJLFVBQVUsTUFBTSxJQUFJO0FBQUEsSUFBQTtBQUVuQyxRQUFJLFVBQVUsV0FBWTtBQUN0QixjQUFRLE1BQU0seUJBQXlCO0FBQUEsSUFBQTtBQUUzQyxRQUFJLEtBQUs7QUFBQSxFQUNiO0FBQ0EsV0FBUyxZQUFZLEtBQUs7QUFDaEIsVUFBQSxNQUFNLElBQUk7QUFFWixRQUFBLEtBQUssUUFBUSxLQUFLLEtBQUs7QUFDdkIsUUFBQTtBQUNBLFVBQUksS0FBSztBQUFBLGFBRU5ILElBQUc7QUFBQSxJQUFFO0FBQ1osV0FBTyxJQUFJLFVBQVUsT0FBTyxJQUFJLFVBQVU7QUFBQSxFQUM5QztBQUVBLFdBQVMsTUFBTSxNQUFNO0FBQ2IsUUFBQTtBQUNBLFdBQUssY0FBYyxJQUFJLFdBQVcsT0FBTyxDQUFDO0FBQUEsYUFFdkNBLElBQUc7QUFDQSxZQUFBLE1BQU0sU0FBUyxZQUFZLGFBQWE7QUFDOUMsVUFBSSxlQUFlLFNBQVMsTUFBTSxNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLE9BQU8sT0FBTyxPQUFPLE9BQU8sR0FBRyxJQUFJO0FBQ3BHLFdBQUssY0FBYyxHQUFHO0FBQUEsSUFDMUI7QUFBQSxFQUNKO0FBQ0EsUUFBTSxhQUNMLE9BQU8sY0FBYyxXQUFXLFlBQVksRUFBRSxXQUFXO0FBSTFELFFBQU0saUJBQXNDLHVCQUFBLFlBQVksS0FBSyxXQUFXLFNBQVMsS0FDN0UsY0FBYyxLQUFLLFdBQVcsU0FBUyxLQUN2QyxDQUFDLFNBQVMsS0FBSyxXQUFXLFNBQVM7QUFDdkMsUUFBTSxTQUFTLENBQUMsWUFDVixNQUFNO0FBQUEsRUFBRTtBQUFBO0FBQUEsSUFFTixPQUFPLHNCQUFzQixlQUN6QixjQUFjLGtCQUFrQixhQUNoQyxDQUFDLGlCQUNDO0FBQUE7QUFBQSxNQUVFLHNCQUFzQixhQUNoQjtBQUFBO0FBQUEsUUFFRTtBQUFBO0FBQUE7QUFBQTtBQUN4QixXQUFTLGVBQWUsTUFBTSxPQUFPLFlBQVksTUFBTTtBQUM3QyxVQUFBSSxLQUFJLFNBQVMsY0FBYyxHQUFHO0FBQ3BDLElBQUFBLEdBQUUsV0FBVztBQUNiLElBQUFBLEdBQUUsTUFBTTtBQUdKLFFBQUEsT0FBTyxTQUFTLFVBQVU7QUFFMUIsTUFBQUEsR0FBRSxPQUFPO0FBQ0wsVUFBQUEsR0FBRSxXQUFXLFNBQVMsUUFBUTtBQUMxQixZQUFBLFlBQVlBLEdBQUUsSUFBSSxHQUFHO0FBQ1osbUJBQUEsTUFBTSxNQUFNLElBQUk7QUFBQSxRQUFBLE9BRXhCO0FBQ0QsVUFBQUEsR0FBRSxTQUFTO0FBQ1gsZ0JBQU1BLEVBQUM7QUFBQSxRQUNYO0FBQUEsTUFBQSxPQUVDO0FBQ0QsY0FBTUEsRUFBQztBQUFBLE1BQ1g7QUFBQSxJQUFBLE9BRUM7QUFFQyxNQUFBQSxHQUFBLE9BQU8sSUFBSSxnQkFBZ0IsSUFBSTtBQUNqQyxpQkFBVyxXQUFZO0FBQ2YsWUFBQSxnQkFBZ0JBLEdBQUUsSUFBSTtBQUFBLFNBQzNCLEdBQUc7QUFDTixpQkFBVyxXQUFZO0FBQ25CLGNBQU1BLEVBQUM7QUFBQSxTQUNSLENBQUM7QUFBQSxJQUNSO0FBQUEsRUFDSjtBQUNBLFdBQVMsU0FBUyxNQUFNLE9BQU8sWUFBWSxNQUFNO0FBQ3pDLFFBQUEsT0FBTyxTQUFTLFVBQVU7QUFDdEIsVUFBQSxZQUFZLElBQUksR0FBRztBQUNWLGlCQUFBLE1BQU0sTUFBTSxJQUFJO0FBQUEsTUFBQSxPQUV4QjtBQUNLLGNBQUFBLEtBQUksU0FBUyxjQUFjLEdBQUc7QUFDcEMsUUFBQUEsR0FBRSxPQUFPO0FBQ1QsUUFBQUEsR0FBRSxTQUFTO0FBQ1gsbUJBQVcsV0FBWTtBQUNuQixnQkFBTUEsRUFBQztBQUFBLFFBQUEsQ0FDVjtBQUFBLE1BQ0w7QUFBQSxJQUFBLE9BRUM7QUFFRCxnQkFBVSxpQkFBaUIsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJO0FBQUEsSUFDcEQ7QUFBQSxFQUNKO0FBQ0EsV0FBUyxnQkFBZ0IsTUFBTSxNQUFNLE1BQU1DLFFBQU87QUFHdEMsSUFBQUEsU0FBQUEsVUFBUyxLQUFLLElBQUksUUFBUTtBQUNsQyxRQUFJQSxRQUFPO0FBQ1AsTUFBQUEsT0FBTSxTQUFTLFFBQVFBLE9BQU0sU0FBUyxLQUFLLFlBQVk7QUFBQSxJQUMzRDtBQUNBLFFBQUksT0FBTyxTQUFTO0FBQ1QsYUFBQSxTQUFTLE1BQU0sTUFBTSxJQUFJO0FBQzlCLFVBQUEsUUFBUSxLQUFLLFNBQVM7QUFDdEIsVUFBQSxXQUFXLGVBQWUsS0FBSyxPQUFPLFFBQVEsV0FBVyxDQUFDLEtBQUssWUFBWTtBQUNqRixVQUFNLGNBQWMsZUFBZSxLQUFLLFVBQVUsU0FBUztBQUMzRCxTQUFLLGVBQWdCLFNBQVMsWUFBYSxtQkFDdkMsT0FBTyxlQUFlLGFBQWE7QUFFN0IsWUFBQSxTQUFTLElBQUk7QUFDbkIsYUFBTyxZQUFZLFdBQVk7QUFDM0IsWUFBSSxNQUFNLE9BQU87QUFDYixZQUFBLE9BQU8sUUFBUSxVQUFVO0FBQ2pCLFVBQUFBLFNBQUE7QUFDRixnQkFBQSxJQUFJLE1BQU0sMEJBQTBCO0FBQUEsUUFDOUM7QUFDQSxjQUFNLGNBQ0EsTUFDQSxJQUFJLFFBQVEsZ0JBQWdCLHVCQUF1QjtBQUN6RCxZQUFJQSxRQUFPO0FBQ1AsVUFBQUEsT0FBTSxTQUFTLE9BQU87QUFBQSxRQUFBLE9BRXJCO0FBQ0QsbUJBQVMsT0FBTyxHQUFHO0FBQUEsUUFDdkI7QUFDUSxRQUFBQSxTQUFBO0FBQUEsTUFBQTtBQUVaLGFBQU8sY0FBYyxJQUFJO0FBQUEsSUFBQSxPQUV4QjtBQUNLLFlBQUEsTUFBTSxJQUFJLGdCQUFnQixJQUFJO0FBQ2hDLFVBQUFBO0FBQ00sUUFBQUEsT0FBQSxTQUFTLE9BQU8sR0FBRztBQUFBO0FBRXpCLGlCQUFTLE9BQU87QUFDWixNQUFBQSxTQUFBO0FBQ1IsaUJBQVcsV0FBWTtBQUNuQixZQUFJLGdCQUFnQixHQUFHO0FBQUEsU0FDeEIsR0FBRztBQUFBLElBQ1Y7QUFBQSxFQUNKO0FBUUEsV0FBUyxhQUFhLFNBQVMsTUFBTTtBQUNqQyxVQUFNLGVBQWUsUUFBUTtBQUN6QixRQUFBLE9BQU8sMkJBQTJCLFlBQVk7QUFDOUMsNkJBQXVCLGNBQWMsSUFBSTtBQUFBLElBQUEsV0FFcEMsU0FBUyxTQUFTO0FBQ3ZCLGNBQVEsTUFBTSxZQUFZO0FBQUEsSUFBQSxXQUVyQixTQUFTLFFBQVE7QUFDdEIsY0FBUSxLQUFLLFlBQVk7QUFBQSxJQUFBLE9BRXhCO0FBQ0QsY0FBUSxJQUFJLFlBQVk7QUFBQSxJQUM1QjtBQUFBLEVBQ0o7QUFDQSxXQUFTLFFBQVFILElBQUc7QUFDVCxXQUFBLFFBQVFBLE1BQUssYUFBYUE7QUFBQSxFQUNyQztBQUVBLFdBQVMsdUJBQXVCO0FBQ3hCLFFBQUEsRUFBRSxlQUFlLFlBQVk7QUFDN0IsbUJBQWEsa0RBQWtELE9BQU87QUFDL0QsYUFBQTtBQUFBLElBQ1g7QUFBQSxFQUNKO0FBQ0EsV0FBUyxxQkFBcUIsT0FBTztBQUM3QixRQUFBLGlCQUFpQixTQUNqQixNQUFNLFFBQVEsY0FBYyxTQUFTLHlCQUF5QixHQUFHO0FBQ2pFLG1CQUFhLG1HQUFtRyxNQUFNO0FBQy9HLGFBQUE7QUFBQSxJQUNYO0FBQ08sV0FBQTtBQUFBLEVBQ1g7QUFDQSxpQkFBZSxzQkFBc0JELFFBQU87QUFDeEMsUUFBSSxxQkFBcUI7QUFDckI7QUFDQSxRQUFBO0FBQ00sWUFBQSxVQUFVLFVBQVUsVUFBVSxLQUFLLFVBQVVBLE9BQU0sTUFBTSxLQUFLLENBQUM7QUFDckUsbUJBQWEsbUNBQW1DO0FBQUEsYUFFN0MsT0FBTztBQUNWLFVBQUkscUJBQXFCLEtBQUs7QUFDMUI7QUFDSixtQkFBYSxzRUFBc0UsT0FBTztBQUMxRixjQUFRLE1BQU0sS0FBSztBQUFBLElBQ3ZCO0FBQUEsRUFDSjtBQUNBLGlCQUFlLHVCQUF1QkEsUUFBTztBQUN6QyxRQUFJLHFCQUFxQjtBQUNyQjtBQUNBLFFBQUE7QUFDTSxNQUFBQSxPQUFBLE1BQU0sUUFBUSxLQUFLLE1BQU0sTUFBTSxVQUFVLFVBQVUsVUFBVTtBQUNuRSxtQkFBYSxxQ0FBcUM7QUFBQSxhQUUvQyxPQUFPO0FBQ1YsVUFBSSxxQkFBcUIsS0FBSztBQUMxQjtBQUNKLG1CQUFhLHVGQUF1RixPQUFPO0FBQzNHLGNBQVEsTUFBTSxLQUFLO0FBQUEsSUFDdkI7QUFBQSxFQUNKO0FBQ0EsaUJBQWUsc0JBQXNCQSxRQUFPO0FBQ3BDLFFBQUE7QUFDTyxhQUFBLElBQUksS0FBSyxDQUFDLEtBQUssVUFBVUEsT0FBTSxNQUFNLEtBQUssQ0FBQyxHQUFHO0FBQUEsUUFDakQsTUFBTTtBQUFBLE1BQUEsQ0FDVCxHQUFHLGtCQUFrQjtBQUFBLGFBRW5CLE9BQU87QUFDVixtQkFBYSwyRUFBMkUsT0FBTztBQUMvRixjQUFRLE1BQU0sS0FBSztBQUFBLElBQ3ZCO0FBQUEsRUFDSjtBQUNBLE1BQUk7QUFDSixXQUFTLGdCQUFnQjtBQUNyQixRQUFJLENBQUMsV0FBVztBQUNBLGtCQUFBLFNBQVMsY0FBYyxPQUFPO0FBQzFDLGdCQUFVLE9BQU87QUFDakIsZ0JBQVUsU0FBUztBQUFBLElBQ3ZCO0FBQ0EsYUFBUyxXQUFXO0FBQ2hCLGFBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3BDLGtCQUFVLFdBQVcsWUFBWTtBQUM3QixnQkFBTSxRQUFRLFVBQVU7QUFDeEIsY0FBSSxDQUFDO0FBQ0QsbUJBQU8sUUFBUSxJQUFJO0FBQ2pCLGdCQUFBLE9BQU8sTUFBTSxLQUFLLENBQUM7QUFDekIsY0FBSSxDQUFDO0FBQ0QsbUJBQU8sUUFBUSxJQUFJO0FBQ2hCLGlCQUFBLFFBQVEsRUFBRSxNQUFNLE1BQU0sS0FBSyxLQUFLLEdBQUcsTUFBTTtBQUFBLFFBQUE7QUFHMUMsa0JBQUEsV0FBVyxNQUFNLFFBQVEsSUFBSTtBQUN2QyxrQkFBVSxVQUFVO0FBQ3BCLGtCQUFVLE1BQU07QUFBQSxNQUFBLENBQ25CO0FBQUEsSUFDTDtBQUNPLFdBQUE7QUFBQSxFQUNYO0FBQ0EsaUJBQWUsMEJBQTBCQSxRQUFPO0FBQ3hDLFFBQUE7QUFDTUssWUFBQUEsUUFBTyxNQUFNO0FBQ2IsWUFBQSxTQUFTLE1BQU1BO0FBQ3JCLFVBQUksQ0FBQztBQUNEO0FBQ0UsWUFBQSxFQUFFLE1BQU0sS0FBUyxJQUFBO0FBQ3ZCLE1BQUFMLE9BQU0sTUFBTSxRQUFRLEtBQUssTUFBTSxJQUFJO0FBQ3RCLG1CQUFBLCtCQUErQixLQUFLLElBQUksSUFBSTtBQUFBLGFBRXRELE9BQU87QUFDVixtQkFBYSwyRUFBMkUsT0FBTztBQUMvRixjQUFRLE1BQU0sS0FBSztBQUFBLElBQ3ZCO0FBQUEsRUFDSjtBQUVBLFdBQVMsY0FBYyxTQUFTO0FBQ3JCLFdBQUE7QUFBQSxNQUNILFNBQVM7QUFBQSxRQUNMO0FBQUEsTUFDSjtBQUFBLElBQUE7QUFBQSxFQUVSO0FBQ0EsUUFBTSxtQkFBbUI7QUFDekIsUUFBTSxnQkFBZ0I7QUFDdEIsV0FBUyw0QkFBNEIsT0FBTztBQUNqQyxXQUFBLFFBQVEsS0FBSyxJQUNkO0FBQUEsTUFDRSxJQUFJO0FBQUEsTUFDSixPQUFPO0FBQUEsSUFBQSxJQUVUO0FBQUEsTUFDRSxJQUFJLE1BQU07QUFBQSxNQUNWLE9BQU8sTUFBTTtBQUFBLElBQUE7QUFBQSxFQUV6QjtBQUNBLFdBQVMsNkJBQTZCLE9BQU87QUFDckMsUUFBQSxRQUFRLEtBQUssR0FBRztBQUNoQixZQUFNLGFBQWEsTUFBTSxLQUFLLE1BQU0sR0FBRyxNQUFNO0FBQzdDLFlBQU0sV0FBVyxNQUFNO0FBQ3ZCLFlBQU1NLFNBQVE7QUFBQSxRQUNWLE9BQU8sV0FBVyxJQUFJLENBQUMsYUFBYTtBQUFBLFVBQ2hDLFVBQVU7QUFBQSxVQUNWLEtBQUs7QUFBQSxVQUNMLE9BQU8sTUFBTSxNQUFNLE1BQU0sT0FBTztBQUFBLFFBQUEsRUFDbEM7QUFBQSxRQUNGLFNBQVMsV0FDSixPQUFPLENBQUMsT0FBTyxTQUFTLElBQUksRUFBRSxFQUFFLFFBQVEsRUFDeEMsSUFBSSxDQUFDLE9BQU87QUFDUEMsZ0JBQUFBLFNBQVEsU0FBUyxJQUFJLEVBQUU7QUFDdEIsaUJBQUE7QUFBQSxZQUNILFVBQVU7QUFBQSxZQUNWLEtBQUs7QUFBQSxZQUNMLE9BQU9BLE9BQU0sU0FBUyxPQUFPLENBQUMsU0FBUyxRQUFRO0FBQ25DLHNCQUFBLEdBQUcsSUFBSUEsT0FBTSxHQUFHO0FBQ2pCLHFCQUFBO0FBQUEsWUFDWCxHQUFHLEVBQUU7QUFBQSxVQUFBO0FBQUEsUUFDVCxDQUNIO0FBQUEsTUFBQTtBQUVFRCxhQUFBQTtBQUFBQSxJQUNYO0FBQ0EsVUFBTSxRQUFRO0FBQUEsTUFDVixPQUFPLE9BQU8sS0FBSyxNQUFNLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztBQUFBLFFBQzNDLFVBQVU7QUFBQSxRQUNWO0FBQUEsUUFDQSxPQUFPLE1BQU0sT0FBTyxHQUFHO0FBQUEsTUFBQSxFQUN6QjtBQUFBLElBQUE7QUFHTixRQUFJLE1BQU0sWUFBWSxNQUFNLFNBQVMsUUFBUTtBQUN6QyxZQUFNLFVBQVUsTUFBTSxTQUFTLElBQUksQ0FBQyxnQkFBZ0I7QUFBQSxRQUNoRCxVQUFVO0FBQUEsUUFDVixLQUFLO0FBQUEsUUFDTCxPQUFPLE1BQU0sVUFBVTtBQUFBLE1BQ3pCLEVBQUE7QUFBQSxJQUNOO0FBQ0ksUUFBQSxNQUFNLGtCQUFrQixNQUFNO0FBQ3hCLFlBQUEsbUJBQW1CLE1BQU0sS0FBSyxNQUFNLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTO0FBQUEsUUFDdkUsVUFBVTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLE9BQU8sTUFBTSxHQUFHO0FBQUEsTUFDbEIsRUFBQTtBQUFBLElBQ047QUFDTyxXQUFBO0FBQUEsRUFDWDtBQUNBLFdBQVMsZ0JBQWdCLFFBQVE7QUFDN0IsUUFBSSxDQUFDO0FBQ0QsYUFBTztBQUNQLFFBQUEsTUFBTSxRQUFRLE1BQU0sR0FBRztBQUV2QixhQUFPLE9BQU8sT0FBTyxDQUFDLE1BQU0sVUFBVTtBQUM3QixhQUFBLEtBQUssS0FBSyxNQUFNLEdBQUc7QUFDbkIsYUFBQSxXQUFXLEtBQUssTUFBTSxJQUFJO0FBQy9CLGFBQUssU0FBUyxNQUFNLEdBQUcsSUFBSSxNQUFNO0FBQ2pDLGFBQUssU0FBUyxNQUFNLEdBQUcsSUFBSSxNQUFNO0FBQzFCLGVBQUE7QUFBQSxNQUFBLEdBQ1I7QUFBQSxRQUNDLFVBQVUsQ0FBQztBQUFBLFFBQ1gsTUFBTSxDQUFDO0FBQUEsUUFDUCxZQUFZLENBQUM7QUFBQSxRQUNiLFVBQVUsQ0FBQztBQUFBLE1BQUEsQ0FDZDtBQUFBLElBQUEsT0FFQTtBQUNNLGFBQUE7QUFBQSxRQUNILFdBQVcsY0FBYyxPQUFPLElBQUk7QUFBQSxRQUNwQyxLQUFLLGNBQWMsT0FBTyxHQUFHO0FBQUEsUUFDN0IsVUFBVSxPQUFPO0FBQUEsUUFDakIsVUFBVSxPQUFPO0FBQUEsTUFBQTtBQUFBLElBRXpCO0FBQUEsRUFDSjtBQUNBLFdBQVMsbUJBQW1CLE1BQU07QUFDOUIsWUFBUSxNQUFNO0FBQUEsTUFDVixLQUFLLGFBQWE7QUFDUCxlQUFBO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDUCxlQUFBO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDUCxlQUFBO0FBQUEsTUFDWDtBQUNXLGVBQUE7QUFBQSxJQUNmO0FBQUEsRUFDSjtBQUdBLE1BQUksbUJBQW1CO0FBQ3ZCLFFBQU0sc0JBQXNCLENBQUE7QUFDNUIsUUFBTSxxQkFBcUI7QUFDM0IsUUFBTSxlQUFlO0FBT3JCLFFBQU0sZUFBZSxDQUFDLE9BQU8sUUFBUTtBQVFyQyxXQUFTLHNCQUFzQixLQUFLTixRQUFPO0FBQ25CLHdCQUFBO0FBQUEsTUFDaEIsSUFBSTtBQUFBLE1BQ0osT0FBTztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ04sYUFBYTtBQUFBLE1BQ2IsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxNQUNBO0FBQUEsSUFDSixHQUFHLENBQUMsUUFBUTtBQUNKLFVBQUEsT0FBTyxJQUFJLFFBQVEsWUFBWTtBQUMvQixxQkFBYSx5TUFBeU07QUFBQSxNQUMxTjtBQUNBLFVBQUksaUJBQWlCO0FBQUEsUUFDakIsSUFBSTtBQUFBLFFBQ0osT0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLE1BQUEsQ0FDVjtBQUNELFVBQUksYUFBYTtBQUFBLFFBQ2IsSUFBSTtBQUFBLFFBQ0osT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sdUJBQXVCO0FBQUEsUUFDdkIsU0FBUztBQUFBLFVBQ0w7QUFBQSxZQUNJLE1BQU07QUFBQSxZQUNOLFFBQVEsTUFBTTtBQUNWLG9DQUFzQkEsTUFBSztBQUFBLFlBQy9CO0FBQUEsWUFDQSxTQUFTO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxZQUNJLE1BQU07QUFBQSxZQUNOLFFBQVEsWUFBWTtBQUNoQixvQkFBTSx1QkFBdUJBLE1BQUs7QUFDbEMsa0JBQUksa0JBQWtCLFlBQVk7QUFDbEMsa0JBQUksbUJBQW1CLFlBQVk7QUFBQSxZQUN2QztBQUFBLFlBQ0EsU0FBUztBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsWUFDSSxNQUFNO0FBQUEsWUFDTixRQUFRLE1BQU07QUFDVixvQ0FBc0JBLE1BQUs7QUFBQSxZQUMvQjtBQUFBLFlBQ0EsU0FBUztBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsWUFDSSxNQUFNO0FBQUEsWUFDTixRQUFRLFlBQVk7QUFDaEIsb0JBQU0sMEJBQTBCQSxNQUFLO0FBQ3JDLGtCQUFJLGtCQUFrQixZQUFZO0FBQ2xDLGtCQUFJLG1CQUFtQixZQUFZO0FBQUEsWUFDdkM7QUFBQSxZQUNBLFNBQVM7QUFBQSxVQUNiO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1Q7QUFBQSxZQUNJLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFFBQVEsQ0FBQyxXQUFXO0FBQ2hCLG9CQUFNLFFBQVFBLE9BQU0sR0FBRyxJQUFJLE1BQU07QUFDakMsa0JBQUksQ0FBQyxPQUFPO0FBQ0ssNkJBQUEsaUJBQWlCLE1BQU0sb0NBQW9DLE1BQU07QUFBQSxjQUFBLFdBRXpFLENBQUMsTUFBTSxlQUFlO0FBQ2QsNkJBQUEsaUJBQWlCLE1BQU0sdUNBQXVDLE1BQU07QUFBQSxjQUFBLE9BRWhGO0FBQ0Qsc0JBQU0sT0FBTztBQUNBLDZCQUFBLFVBQVUsTUFBTSxVQUFVO0FBQUEsY0FDM0M7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUFBLENBQ0g7QUFDRCxVQUFJLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxRQUFRO0FBQ3RDLGNBQU0sUUFBUyxRQUFRLHFCQUNuQixRQUFRLGtCQUFrQjtBQUMxQixZQUFBLFNBQVMsTUFBTSxVQUFVO0FBQ25CLGdCQUFBLGNBQWMsUUFBUSxrQkFBa0IsTUFBTTtBQUNwRCxpQkFBTyxPQUFPLFdBQVcsRUFBRSxRQUFRLENBQUMsVUFBVTtBQUNsQyxvQkFBQSxhQUFhLE1BQU0sS0FBSztBQUFBLGNBQzVCLE1BQU0sYUFBYSxNQUFNLEdBQUc7QUFBQSxjQUM1QixLQUFLO0FBQUEsY0FDTCxVQUFVO0FBQUEsY0FDVixPQUFPLE1BQU0sZ0JBQ1A7QUFBQSxnQkFDRSxTQUFTO0FBQUEsa0JBQ0wsT0FBT1EsSUFBQUEsTUFBTSxNQUFNLE1BQU07QUFBQSxrQkFDekIsU0FBUztBQUFBLG9CQUNMO0FBQUEsc0JBQ0ksTUFBTTtBQUFBLHNCQUNOLFNBQVM7QUFBQSxzQkFDVCxRQUFRLE1BQU0sTUFBTSxPQUFPO0FBQUEsb0JBQy9CO0FBQUEsa0JBQ0o7QUFBQSxnQkFDSjtBQUFBLGNBQ0o7QUFBQTtBQUFBLGdCQUVJLE9BQU8sS0FBSyxNQUFNLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxRQUFRO0FBQzdDLHdCQUFNLEdBQUcsSUFBSSxNQUFNLE9BQU8sR0FBRztBQUN0Qix5QkFBQTtBQUFBLGdCQUNYLEdBQUcsRUFBRTtBQUFBO0FBQUEsWUFBQSxDQUNoQjtBQUNELGdCQUFJLE1BQU0sWUFBWSxNQUFNLFNBQVMsUUFBUTtBQUNqQyxzQkFBQSxhQUFhLE1BQU0sS0FBSztBQUFBLGdCQUM1QixNQUFNLGFBQWEsTUFBTSxHQUFHO0FBQUEsZ0JBQzVCLEtBQUs7QUFBQSxnQkFDTCxVQUFVO0FBQUEsZ0JBQ1YsT0FBTyxNQUFNLFNBQVMsT0FBTyxDQUFDLFNBQVMsUUFBUTtBQUN2QyxzQkFBQTtBQUNRLDRCQUFBLEdBQUcsSUFBSSxNQUFNLEdBQUc7QUFBQSwyQkFFckIsT0FBTztBQUVWLDRCQUFRLEdBQUcsSUFBSTtBQUFBLGtCQUNuQjtBQUNPLHlCQUFBO0FBQUEsZ0JBQ1gsR0FBRyxFQUFFO0FBQUEsY0FBQSxDQUNSO0FBQUEsWUFDTDtBQUFBLFVBQUEsQ0FDSDtBQUFBLFFBQ0w7QUFBQSxNQUFBLENBQ0g7QUFDRyxVQUFBLEdBQUcsaUJBQWlCLENBQUMsWUFBWTtBQUNqQyxZQUFJLFFBQVEsUUFBUSxPQUFPLFFBQVEsZ0JBQWdCLGNBQWM7QUFDekQsY0FBQSxTQUFTLENBQUNSLE1BQUs7QUFDVixtQkFBQSxPQUFPLE9BQU8sTUFBTSxLQUFLQSxPQUFNLEdBQUcsT0FBUSxDQUFBLENBQUM7QUFDcEQsa0JBQVEsYUFBYSxRQUFRLFNBQ3ZCLE9BQU8sT0FBTyxDQUFDLFVBQVUsU0FBUyxRQUM5QixNQUFNLElBQ0gsY0FDQSxTQUFTLFFBQVEsT0FBTyxZQUFBLENBQWEsSUFDeEMsaUJBQWlCLFlBQUEsRUFBYyxTQUFTLFFBQVEsT0FBTyxZQUFhLENBQUEsQ0FBQyxJQUN6RSxRQUFRLElBQUksMkJBQTJCO0FBQUEsUUFDakQ7QUFBQSxNQUFBLENBQ0g7QUFDRyxVQUFBLEdBQUcsa0JBQWtCLENBQUMsWUFBWTtBQUNsQyxZQUFJLFFBQVEsUUFBUSxPQUFPLFFBQVEsZ0JBQWdCLGNBQWM7QUFDdkQsZ0JBQUEsaUJBQWlCLFFBQVEsV0FBVyxnQkFDcENBLFNBQ0FBLE9BQU0sR0FBRyxJQUFJLFFBQVEsTUFBTTtBQUNqQyxjQUFJLENBQUMsZ0JBQWdCO0FBR2pCO0FBQUEsVUFDSjtBQUNBLGNBQUksZ0JBQWdCO0FBQ1Isb0JBQUEsUUFBUSw2QkFBNkIsY0FBYztBQUFBLFVBQy9EO0FBQUEsUUFDSjtBQUFBLE1BQUEsQ0FDSDtBQUNELFVBQUksR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLFFBQVE7QUFDeEMsWUFBSSxRQUFRLFFBQVEsT0FBTyxRQUFRLGdCQUFnQixjQUFjO0FBQ3ZELGdCQUFBLGlCQUFpQixRQUFRLFdBQVcsZ0JBQ3BDQSxTQUNBQSxPQUFNLEdBQUcsSUFBSSxRQUFRLE1BQU07QUFDakMsY0FBSSxDQUFDLGdCQUFnQjtBQUNqQixtQkFBTyxhQUFhLFVBQVUsUUFBUSxNQUFNLGVBQWUsT0FBTztBQUFBLFVBQ3RFO0FBQ00sZ0JBQUEsRUFBRSxLQUFTLElBQUE7QUFDYixjQUFBLENBQUMsUUFBUSxjQUFjLEdBQUc7QUFFMUIsZ0JBQUksS0FBSyxXQUFXLEtBQ2hCLENBQUMsZUFBZSxrQkFBa0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUM3QyxLQUFLLENBQUMsS0FBSyxlQUFlLFFBQVE7QUFDbEMsbUJBQUssUUFBUSxRQUFRO0FBQUEsWUFDekI7QUFBQSxVQUFBLE9BRUM7QUFFRCxpQkFBSyxRQUFRLE9BQU87QUFBQSxVQUN4QjtBQUNtQiw2QkFBQTtBQUNuQixrQkFBUSxJQUFJLGdCQUFnQixNQUFNLFFBQVEsTUFBTSxLQUFLO0FBQ2xDLDZCQUFBO0FBQUEsUUFDdkI7QUFBQSxNQUFBLENBQ0g7QUFDRyxVQUFBLEdBQUcsbUJBQW1CLENBQUMsWUFBWTtBQUNuQyxZQUFJLFFBQVEsS0FBSyxXQUFXLElBQUksR0FBRztBQUMvQixnQkFBTSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsRUFBRTtBQUNqRCxnQkFBTSxRQUFRQSxPQUFNLEdBQUcsSUFBSSxPQUFPO0FBQ2xDLGNBQUksQ0FBQyxPQUFPO0FBQ1IsbUJBQU8sYUFBYSxVQUFVLE9BQU8sZUFBZSxPQUFPO0FBQUEsVUFDL0Q7QUFDTSxnQkFBQSxFQUFFLEtBQVMsSUFBQTtBQUNiLGNBQUEsS0FBSyxDQUFDLE1BQU0sU0FBUztBQUNkLG1CQUFBLGFBQWEsMkJBQTJCLE9BQU87QUFBQSxFQUFPLElBQUk7QUFBQSw0QkFBK0I7QUFBQSxVQUNwRztBQUdBLGVBQUssQ0FBQyxJQUFJO0FBQ1MsNkJBQUE7QUFDbkIsa0JBQVEsSUFBSSxPQUFPLE1BQU0sUUFBUSxNQUFNLEtBQUs7QUFDekIsNkJBQUE7QUFBQSxRQUN2QjtBQUFBLE1BQUEsQ0FDSDtBQUFBLElBQUEsQ0FDSjtBQUFBLEVBQ0w7QUFDQSxXQUFTLG1CQUFtQixLQUFLLE9BQU87QUFDcEMsUUFBSSxDQUFDLG9CQUFvQixTQUFTLGFBQWEsTUFBTSxHQUFHLENBQUMsR0FBRztBQUN4RCwwQkFBb0IsS0FBSyxhQUFhLE1BQU0sR0FBRyxDQUFDO0FBQUEsSUFDcEQ7QUFDb0Isd0JBQUE7QUFBQSxNQUNoQixJQUFJO0FBQUEsTUFDSixPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUEsTUFDTixhQUFhO0FBQUEsTUFDYixVQUFVO0FBQUEsTUFDVjtBQUFBLE1BQ0E7QUFBQSxNQUNBLFVBQVU7QUFBQSxRQUNOLGlCQUFpQjtBQUFBLFVBQ2IsT0FBTztBQUFBLFVBQ1AsTUFBTTtBQUFBLFVBQ04sY0FBYztBQUFBLFFBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTUo7QUFBQSxJQUNKLEdBQUcsQ0FBQyxRQUFRO0FBRUYsWUFBQVMsT0FBTSxPQUFPLElBQUksUUFBUSxhQUFhLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLO0FBQ3JFLFlBQU0sVUFBVSxDQUFDLEVBQUUsT0FBTyxTQUFTLE1BQU0sV0FBVztBQUNoRCxjQUFNLFVBQVU7QUFDaEIsWUFBSSxpQkFBaUI7QUFBQSxVQUNqQixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsWUFDSCxNQUFNQSxLQUFJO0FBQUEsWUFDVixPQUFPLFFBQVE7QUFBQSxZQUNmLFVBQVU7QUFBQSxZQUNWLE1BQU07QUFBQSxjQUNGLE9BQU8sY0FBYyxNQUFNLEdBQUc7QUFBQSxjQUM5QixRQUFRLGNBQWMsSUFBSTtBQUFBLGNBQzFCO0FBQUEsWUFDSjtBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQUEsUUFBQSxDQUNIO0FBQ0QsY0FBTSxDQUFDLFdBQVc7QUFDQyx5QkFBQTtBQUNmLGNBQUksaUJBQWlCO0FBQUEsWUFDakIsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLGNBQ0gsTUFBTUEsS0FBSTtBQUFBLGNBQ1YsT0FBTyxRQUFRO0FBQUEsY0FDZixVQUFVO0FBQUEsY0FDVixNQUFNO0FBQUEsZ0JBQ0YsT0FBTyxjQUFjLE1BQU0sR0FBRztBQUFBLGdCQUM5QixRQUFRLGNBQWMsSUFBSTtBQUFBLGdCQUMxQjtBQUFBLGdCQUNBO0FBQUEsY0FDSjtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFBQSxDQUNIO0FBQUEsUUFBQSxDQUNKO0FBQ0QsZ0JBQVEsQ0FBQyxVQUFVO0FBQ0EseUJBQUE7QUFDZixjQUFJLGlCQUFpQjtBQUFBLFlBQ2pCLFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxjQUNILE1BQU1BLEtBQUk7QUFBQSxjQUNWLFNBQVM7QUFBQSxjQUNULE9BQU8sUUFBUTtBQUFBLGNBQ2YsVUFBVTtBQUFBLGNBQ1YsTUFBTTtBQUFBLGdCQUNGLE9BQU8sY0FBYyxNQUFNLEdBQUc7QUFBQSxnQkFDOUIsUUFBUSxjQUFjLElBQUk7QUFBQSxnQkFDMUI7QUFBQSxnQkFDQTtBQUFBLGNBQ0o7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQUEsQ0FDSDtBQUFBLFFBQUEsQ0FDSjtBQUFBLFNBQ0YsSUFBSTtBQUNELFlBQUEsa0JBQWtCLFFBQVEsQ0FBQyxTQUFTO0FBQ2hDQyxZQUFBLE1BQUEsTUFBTUMsSUFBQUEsTUFBTSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxhQUFhO0FBQ3BELGNBQUksc0JBQXNCO0FBQzFCLGNBQUksbUJBQW1CLFlBQVk7QUFDbkMsY0FBSSxrQkFBa0I7QUFDbEIsZ0JBQUksaUJBQWlCO0FBQUEsY0FDakIsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLGdCQUNILE1BQU1GLEtBQUk7QUFBQSxnQkFDVixPQUFPO0FBQUEsZ0JBQ1AsVUFBVTtBQUFBLGdCQUNWLE1BQU07QUFBQSxrQkFDRjtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0o7QUFBQSxnQkFDQSxTQUFTO0FBQUEsY0FDYjtBQUFBLFlBQUEsQ0FDSDtBQUFBLFVBQ0w7QUFBQSxRQUFBLEdBQ0QsRUFBRSxNQUFNLEtBQUEsQ0FBTTtBQUFBLE1BQUEsQ0FDcEI7QUFDRCxZQUFNLFdBQVcsQ0FBQyxFQUFFLFFBQVEsS0FBQSxHQUFRLFVBQVU7QUFDMUMsWUFBSSxzQkFBc0I7QUFDMUIsWUFBSSxtQkFBbUIsWUFBWTtBQUNuQyxZQUFJLENBQUM7QUFDRDtBQUVKLGNBQU0sWUFBWTtBQUFBLFVBQ2QsTUFBTUEsS0FBSTtBQUFBLFVBQ1YsT0FBTyxtQkFBbUIsSUFBSTtBQUFBLFVBQzlCLE1BQU07QUFBQSxZQUNGLE9BQU8sY0FBYyxNQUFNLEdBQUc7QUFBQSxZQUM5QixHQUFHLGdCQUFnQixNQUFNO0FBQUEsVUFDN0I7QUFBQSxVQUNBLFNBQVM7QUFBQSxRQUFBO0FBR0UsdUJBQUE7QUFDWCxZQUFBLFNBQVMsYUFBYSxlQUFlO0FBQ3JDLG9CQUFVLFdBQVc7QUFBQSxRQUFBLFdBRWhCLFNBQVMsYUFBYSxhQUFhO0FBQ3hDLG9CQUFVLFdBQVc7QUFBQSxtQkFFaEIsVUFBVSxDQUFDLE1BQU0sUUFBUSxNQUFNLEdBQUc7QUFDdkMsb0JBQVUsV0FBVyxPQUFPO0FBQUEsUUFDaEM7QUFDQSxZQUFJLFFBQVE7QUFDRSxvQkFBQSxLQUFLLGFBQWEsSUFBSTtBQUFBLFlBQzVCLFNBQVM7QUFBQSxjQUNMLFNBQVM7QUFBQSxjQUNULE1BQU07QUFBQSxjQUNOLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNYO0FBQUEsVUFBQTtBQUFBLFFBRVI7QUFDQSxZQUFJLGlCQUFpQjtBQUFBLFVBQ2pCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxRQUFBLENBQ1Y7QUFBQSxTQUNGLEVBQUUsVUFBVSxNQUFNLE9BQU8sT0FBUSxDQUFBO0FBQ3BDLFlBQU0sWUFBWSxNQUFNO0FBQ2xCLFlBQUEsYUFBYUcsWUFBUSxDQUFDLGFBQWE7QUFDckMsa0JBQVUsUUFBUTtBQUNsQixZQUFJLGlCQUFpQjtBQUFBLFVBQ2pCLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxZQUNILE1BQU1ILEtBQUk7QUFBQSxZQUNWLE9BQU8sUUFBUSxNQUFNO0FBQUEsWUFDckIsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLGNBQ0YsT0FBTyxjQUFjLE1BQU0sR0FBRztBQUFBLGNBQzlCLE1BQU0sY0FBYyxZQUFZO0FBQUEsWUFDcEM7QUFBQSxVQUNKO0FBQUEsUUFBQSxDQUNIO0FBRUQsWUFBSSxzQkFBc0I7QUFDMUIsWUFBSSxrQkFBa0IsWUFBWTtBQUNsQyxZQUFJLG1CQUFtQixZQUFZO0FBQUEsTUFBQSxDQUN0QztBQUNLLFlBQUEsRUFBRSxTQUFhLElBQUE7QUFDckIsWUFBTSxXQUFXLE1BQU07QUFDVjtBQUNULFlBQUksc0JBQXNCO0FBQzFCLFlBQUksa0JBQWtCLFlBQVk7QUFDbEMsWUFBSSxtQkFBbUIsWUFBWTtBQUNuQyxZQUFJLGNBQWMsbUJBQ2QsYUFBYSxhQUFhLE1BQU0sR0FBRyxZQUFZO0FBQUEsTUFBQTtBQUd2RCxVQUFJLHNCQUFzQjtBQUMxQixVQUFJLGtCQUFrQixZQUFZO0FBQ2xDLFVBQUksbUJBQW1CLFlBQVk7QUFDbkMsVUFBSSxjQUFjLG1CQUNkLGFBQWEsSUFBSSxNQUFNLEdBQUcsc0JBQXNCO0FBQUEsSUFBQSxDQUN2RDtBQUFBLEVBQ0w7QUFDQSxNQUFJLGtCQUFrQjtBQUN0QixNQUFJO0FBU0osV0FBUyx1QkFBdUIsT0FBTyxhQUFhO0FBRWhELFVBQU0sVUFBVSxZQUFZLE9BQU8sQ0FBQyxjQUFjLGVBQWU7QUFFN0QsbUJBQWEsVUFBVSxJQUFJRCxJQUFBQSxNQUFNLEtBQUssRUFBRSxVQUFVO0FBQzNDLGFBQUE7QUFBQSxJQUNYLEdBQUcsQ0FBRSxDQUFBO0FBQ0wsZUFBVyxjQUFjLFNBQVM7QUFDeEIsWUFBQSxVQUFVLElBQUksV0FBWTtBQUc1QixjQUFNLFlBQVk7QUFDWixjQUFBLGVBQWUsSUFBSSxNQUFNLE9BQU87QUFBQSxVQUNsQyxPQUFPLE1BQU07QUFDTSwyQkFBQTtBQUNSLG1CQUFBLFFBQVEsSUFBSSxHQUFHLElBQUk7QUFBQSxVQUM5QjtBQUFBLFVBQ0EsT0FBTyxNQUFNO0FBQ00sMkJBQUE7QUFDUixtQkFBQSxRQUFRLElBQUksR0FBRyxJQUFJO0FBQUEsVUFDOUI7QUFBQSxRQUFBLENBQ0g7QUFDRCxlQUFPLFFBQVEsVUFBVSxFQUFFLE1BQU0sY0FBYyxTQUFTO0FBQUEsTUFBQTtBQUFBLElBRWhFO0FBQUEsRUFDSjtBQUlBLFdBQVMsZUFBZSxFQUFFLEtBQUssT0FBTyxXQUFXO0FBRTdDLFFBQUksTUFBTSxJQUFJLFdBQVcsUUFBUSxHQUFHO0FBQ2hDO0FBQUEsSUFDSjtBQUVBLFFBQUksUUFBUSxPQUFPO0FBQ2YsWUFBTSxnQkFBZ0I7QUFBQSxJQUMxQjtBQUdJLFFBQUEsT0FBTyxRQUFRLFVBQVUsWUFBWTtBQUNyQztBQUFBO0FBQUEsUUFFQTtBQUFBLFFBQU8sT0FBTyxLQUFLLFFBQVEsT0FBTztBQUFBLE1BQUE7QUFDbEMsWUFBTSxvQkFBb0IsTUFBTTtBQUVoQ0EsVUFBQUEsTUFBTSxLQUFLLEVBQUUsYUFBYSxTQUFVLFVBQVU7QUFDeEIsMEJBQUEsTUFBTSxNQUFNLFNBQVM7QUFDdkMsK0JBQXVCLE9BQU8sT0FBTyxLQUFLLFNBQVMsWUFBWSxPQUFPLENBQUM7QUFBQSxNQUFBO0FBQUEsSUFFL0U7QUFDQTtBQUFBLE1BQW1CO0FBQUE7QUFBQSxNQUVuQjtBQUFBLElBQUE7QUFBQSxFQUNKO0FBS0EsV0FBUyxjQUFjO0FBQ2IsVUFBQSxRQUFRSyxnQkFBWSxJQUFJO0FBRzlCLFVBQU0sUUFBUSxNQUFNLElBQUksTUFBTXJCLElBQUksSUFBQSxDQUFFLENBQUEsQ0FBQztBQUNyQyxRQUFJLEtBQUssQ0FBQTtBQUVULFFBQUksZ0JBQWdCLENBQUE7QUFDcEIsVUFBTVEsU0FBUVksSUFBQUEsUUFBUTtBQUFBLE1BQ2xCLFFBQVEsS0FBSztBQUdULHVCQUFlWixNQUFLO0FBQ1A7QUFDVCxVQUFBQSxPQUFNLEtBQUs7QUFDUCxjQUFBLFFBQVEsYUFBYUEsTUFBSztBQUMxQixjQUFBLE9BQU8saUJBQWlCLFNBQVNBO0FBRXJDLGNBQUksY0FBYztBQUNkLGtDQUFzQixLQUFLQSxNQUFLO0FBQUEsVUFDcEM7QUFDQSx3QkFBYyxRQUFRLENBQUMsV0FBVyxHQUFHLEtBQUssTUFBTSxDQUFDO0FBQ2pELDBCQUFnQixDQUFBO0FBQUEsUUFDcEI7QUFBQSxNQUNKO0FBQUEsTUFDQSxJQUFJLFFBQVE7QUFDUixZQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsUUFBUTtBQUNyQix3QkFBYyxLQUFLLE1BQU07QUFBQSxRQUFBLE9BRXhCO0FBQ0QsYUFBRyxLQUFLLE1BQU07QUFBQSxRQUNsQjtBQUNPLGVBQUE7QUFBQSxNQUNYO0FBQUEsTUFDQTtBQUFBO0FBQUE7QUFBQSxNQUdBLElBQUk7QUFBQSxNQUNKLElBQUk7QUFBQSxNQUNKLHdCQUFRLElBQUk7QUFBQSxNQUNaO0FBQUEsSUFBQSxDQUNIO0FBR0csUUFBQSxnQkFBZ0IsT0FBTyxVQUFVLGFBQWE7QUFDOUMsTUFBQUEsT0FBTSxJQUFJLGNBQWM7QUFBQSxJQUM1QjtBQUNPLFdBQUFBO0FBQUEsRUFDWDtBQW9CQSxXQUFTLFlBQVksVUFBVSxVQUFVO0FBRXJDLGVBQVcsT0FBTyxVQUFVO0FBQ2xCLFlBQUEsV0FBVyxTQUFTLEdBQUc7QUFFekIsVUFBQSxFQUFFLE9BQU8sV0FBVztBQUNwQjtBQUFBLE1BQ0o7QUFDTSxZQUFBLGNBQWMsU0FBUyxHQUFHO0FBQ2hDLFVBQUksY0FBYyxXQUFXLEtBQ3pCLGNBQWMsUUFBUSxLQUN0QixDQUFDYyxJQUFBLE1BQU0sUUFBUSxLQUNmLENBQUNDLElBQUEsV0FBVyxRQUFRLEdBQUc7QUFDdkIsaUJBQVMsR0FBRyxJQUFJLFlBQVksYUFBYSxRQUFRO0FBQUEsTUFBQSxPQUVoRDtBQU1JO0FBQ0QsbUJBQVMsR0FBRyxJQUFJO0FBQUEsUUFDcEI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUNPLFdBQUE7QUFBQSxFQUNYO0FBbURBLFFBQU0sT0FBTyxNQUFNO0FBQUEsRUFBRTtBQUNyQixXQUFTLGdCQUFnQixlQUFlLFVBQVUsVUFBVSxZQUFZLE1BQU07QUFDMUUsa0JBQWMsS0FBSyxRQUFRO0FBQzNCLFVBQU0scUJBQXFCLE1BQU07QUFDdkIsWUFBQSxNQUFNLGNBQWMsUUFBUSxRQUFRO0FBQzFDLFVBQUksTUFBTSxJQUFJO0FBQ0ksc0JBQUEsT0FBTyxLQUFLLENBQUM7QUFDakI7TUFDZDtBQUFBLElBQUE7QUFFQSxRQUFBLENBQUMsWUFBWUMsSUFBQUEsbUJBQW1CO0FBQ2hDQyxVQUFBLGVBQWUsa0JBQWtCO0FBQUEsSUFDckM7QUFDTyxXQUFBO0FBQUEsRUFDWDtBQUNBLFdBQVMscUJBQXFCLGtCQUFrQixNQUFNO0FBQ2xELGtCQUFjLE1BQU0sRUFBRSxRQUFRLENBQUMsYUFBYTtBQUN4QyxlQUFTLEdBQUcsSUFBSTtBQUFBLElBQUEsQ0FDbkI7QUFBQSxFQUNMO0FBRUEsV0FBUyxxQkFBcUIsUUFBUSxjQUFjO0FBRTVDLFFBQUEsa0JBQWtCLE9BQU8sd0JBQXdCLEtBQUs7QUFDekMsbUJBQUEsUUFBUSxDQUFDLE9BQU8sUUFBUSxPQUFPLElBQUksS0FBSyxLQUFLLENBQUM7QUFBQSxJQUMvRDtBQUVJLFFBQUEsa0JBQWtCLE9BQU8sd0JBQXdCLEtBQUs7QUFDekMsbUJBQUEsUUFBUSxPQUFPLEtBQUssTUFBTTtBQUFBLElBQzNDO0FBRUEsZUFBVyxPQUFPLGNBQWM7QUFDeEIsVUFBQSxDQUFDLGFBQWEsZUFBZSxHQUFHO0FBQ2hDO0FBQ0UsWUFBQSxXQUFXLGFBQWEsR0FBRztBQUMzQixZQUFBLGNBQWMsT0FBTyxHQUFHO0FBQzlCLFVBQUksY0FBYyxXQUFXLEtBQ3pCLGNBQWMsUUFBUSxLQUN0QixPQUFPLGVBQWUsR0FBRyxLQUN6QixDQUFDSCxJQUFBQSxNQUFNLFFBQVEsS0FDZixDQUFDQyxJQUFBQSxXQUFXLFFBQVEsR0FBRztBQUl2QixlQUFPLEdBQUcsSUFBSSxxQkFBcUIsYUFBYSxRQUFRO0FBQUEsTUFBQSxPQUV2RDtBQUVELGVBQU8sR0FBRyxJQUFJO0FBQUEsTUFDbEI7QUFBQSxJQUNKO0FBQ08sV0FBQTtBQUFBLEVBQ1g7QUFDQSxRQUFNLG9CQUNBLE9BQU8scUJBQXFCO0FBc0JsQyxXQUFTLGNBQWMsS0FBSztBQUNqQixXQUVELENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLGVBQWUsaUJBQWlCO0FBQUEsRUFDdEU7QUFDQSxRQUFNLEVBQUUsT0FBVyxJQUFBO0FBQ25CLFdBQVMsV0FBV2QsSUFBRztBQUNuQixXQUFPLENBQUMsRUFBRWEsSUFBQUEsTUFBTWIsRUFBQyxLQUFLQSxHQUFFO0FBQUEsRUFDNUI7QUFDQSxXQUFTLG1CQUFtQixJQUFJLFNBQVNELFFBQU8sS0FBSztBQUNqRCxVQUFNLEVBQUUsT0FBTyxTQUFTLFFBQUEsSUFBWTtBQUNwQyxVQUFNLGVBQWVBLE9BQU0sTUFBTSxNQUFNLEVBQUU7QUFDckMsUUFBQTtBQUNKLGFBQVMsUUFBUTtBQUNULFVBQUEsQ0FBQyxnQkFBNkQsQ0FBQyxLQUFNO0FBS2hFO0FBQ0QsVUFBQUEsT0FBTSxNQUFNLE1BQU0sRUFBRSxJQUFJLFFBQVEsVUFBVTtRQUM5QztBQUFBLE1BQ0o7QUFFQSxZQUFNLGFBQXdEO0FBQUE7QUFBQSxRQUV0RGtCLElBQUEsT0FBTzFCLFFBQUksUUFBUSxNQUFBLElBQVUsQ0FBQSxDQUFFLEVBQUUsS0FBSztBQUFBLFVBQ3hDMEIsSUFBQUEsT0FBT2xCLE9BQU0sTUFBTSxNQUFNLEVBQUUsQ0FBQztBQUNsQyxhQUFPLE9BQU8sWUFBWSxTQUFTLE9BQU8sS0FBSyxXQUFXLENBQUEsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsU0FBUztBQUM1RixZQUErQyxRQUFRLFlBQVk7QUFDL0Qsa0JBQVEsS0FBSyx1R0FBdUcsSUFBSSxlQUFlLEVBQUUsSUFBSTtBQUFBLFFBQ2pKO0FBQ0Esd0JBQWdCLElBQUksSUFBSVksSUFBUSxRQUFBTyxJQUFBLFNBQVMsTUFBTTtBQUMzQyx5QkFBZW5CLE1BQUs7QUFFcEIsZ0JBQU1PLFNBQVFQLE9BQU0sR0FBRyxJQUFJLEVBQUU7QUFRN0IsaUJBQU8sUUFBUSxJQUFJLEVBQUUsS0FBS08sUUFBT0EsTUFBSztBQUFBLFFBQ3pDLENBQUEsQ0FBQztBQUNLLGVBQUE7QUFBQSxNQUFBLEdBQ1IsQ0FBQSxDQUFFLENBQUM7QUFBQSxJQUNWO0FBQ0EsWUFBUSxpQkFBaUIsSUFBSSxPQUFPLFNBQVNQLFFBQU8sS0FBSyxJQUFJO0FBQ3ZELFVBQUEsU0FBUyxTQUFTLFNBQVM7QUFDN0IsWUFBTSxXQUFXLFFBQVEsTUFBTSxJQUFJLENBQUE7QUFFOUIsV0FBQSxPQUFPLENBQUMsV0FBVztBQUNwQixlQUFPLFFBQVEsUUFBUTtBQUFBLE1BQUEsQ0FDMUI7QUFBQSxJQUFBO0FBRUUsV0FBQTtBQUFBLEVBQ1g7QUFDQSxXQUFTLGlCQUFpQixLQUFLLE9BQU8sVUFBVSxDQUFBLEdBQUlBLFFBQU8sS0FBSyxnQkFBZ0I7QUFDeEUsUUFBQTtBQUNKLFVBQU0sbUJBQW1CLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBQSxHQUFLLE9BQU87QUFHVCxRQUFBLENBQUNBLE9BQU0sR0FBRyxRQUFRO0FBQ3ZELFlBQUEsSUFBSSxNQUFNLGlCQUFpQjtBQUFBLElBQ3JDO0FBRUEsVUFBTSxvQkFBb0I7QUFBQSxNQUN0QixNQUFNO0FBQUE7QUFBQSxJQUFBO0FBSThDO0FBQ2xDLHdCQUFBLFlBQVksQ0FBQyxVQUFVO0FBRXJDLFlBQUksYUFBYTtBQUNJLDJCQUFBO0FBQUEsUUFHWixXQUFBLGVBQWUsU0FBUyxDQUFDLE1BQU0sY0FBYztBQUc5QyxjQUFBLE1BQU0sUUFBUSxjQUFjLEdBQUc7QUFDL0IsMkJBQWUsS0FBSyxLQUFLO0FBQUEsVUFBQSxPQUV4QjtBQUNELG9CQUFRLE1BQU0sa0ZBQWtGO0FBQUEsVUFDcEc7QUFBQSxRQUNKO0FBQUEsTUFBQTtBQUFBLElBRVI7QUFFSSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUEsZ0JBQWdCWSxZQUFRLENBQUEsQ0FBRTtBQUMxQixRQUFBLHNCQUFzQkEsWUFBUSxDQUFBLENBQUU7QUFDaEMsUUFBQTtBQUNKLFVBQU0sZUFBZVosT0FBTSxNQUFNLE1BQU0sR0FBRztBQUcxQyxRQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQTZELENBQUMsS0FBTTtBQUtuRjtBQUNELFFBQUFBLE9BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFBO0FBQUEsTUFDN0I7QUFBQSxJQUNKO0FBQ00sVUFBQSxXQUFXUixRQUFJLENBQUEsQ0FBRTtBQUduQixRQUFBO0FBQ0osYUFBUyxPQUFPLHVCQUF1QjtBQUMvQixVQUFBO0FBQ0osb0JBQWMsa0JBQWtCO0FBR2E7QUFDekMseUJBQWlCLENBQUE7QUFBQSxNQUNyQjtBQUNJLFVBQUEsT0FBTywwQkFBMEIsWUFBWTtBQUM3Qyw4QkFBc0JRLE9BQU0sTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUNyQiwrQkFBQTtBQUFBLFVBQ25CLE1BQU0sYUFBYTtBQUFBLFVBQ25CLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUFBO0FBQUEsTUFDWixPQUVDO0FBQ0QsNkJBQXFCQSxPQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUcscUJBQXFCO0FBQzNDLCtCQUFBO0FBQUEsVUFDbkIsTUFBTSxhQUFhO0FBQUEsVUFDbkIsU0FBUztBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQUE7QUFBQSxNQUVoQjtBQUNNLFlBQUEsZUFBZ0IsaUJBQWlCO0FBQzlCb0IsVUFBQSxTQUFBLEVBQUUsS0FBSyxNQUFNO0FBQ2xCLFlBQUksbUJBQW1CLGNBQWM7QUFDbkIsd0JBQUE7QUFBQSxRQUNsQjtBQUFBLE1BQUEsQ0FDSDtBQUNpQix3QkFBQTtBQUVsQiwyQkFBcUIsZUFBZSxzQkFBc0JwQixPQUFNLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFBQSxJQUNwRjtBQUVNLFVBQUEsU0FDQSxNQUFNO0FBQ0osWUFBTSxJQUFJLE1BQU0sY0FBYyxHQUFHLG9FQUFvRTtBQUFBLElBQUE7QUFHN0csYUFBUyxXQUFXO0FBQ2hCLFlBQU0sS0FBSztBQUNYLHNCQUFnQixDQUFBO0FBQ2hCLDRCQUFzQixDQUFBO0FBQ2hCLE1BQUFBLE9BQUEsR0FBRyxPQUFPLEdBQUc7QUFBQSxJQUN2QjtBQVFTLGFBQUEsV0FBVyxNQUFNLFFBQVE7QUFDOUIsYUFBTyxXQUFZO0FBQ2YsdUJBQWVBLE1BQUs7QUFDZCxjQUFBLE9BQU8sTUFBTSxLQUFLLFNBQVM7QUFDakMsY0FBTSxvQkFBb0IsQ0FBQTtBQUMxQixjQUFNLHNCQUFzQixDQUFBO0FBQzVCLGlCQUFTLE1BQU0sVUFBVTtBQUNyQiw0QkFBa0IsS0FBSyxRQUFRO0FBQUEsUUFDbkM7QUFDQSxpQkFBUyxRQUFRLFVBQVU7QUFDdkIsOEJBQW9CLEtBQUssUUFBUTtBQUFBLFFBQ3JDO0FBRUEsNkJBQXFCLHFCQUFxQjtBQUFBLFVBQ3RDO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQUEsQ0FDSDtBQUNHLFlBQUE7QUFDQSxZQUFBO0FBQ00sZ0JBQUEsT0FBTyxNQUFNLFFBQVEsS0FBSyxRQUFRLE1BQU0sT0FBTyxPQUFPLElBQUk7QUFBQSxpQkFHN0QsT0FBTztBQUNWLCtCQUFxQixxQkFBcUIsS0FBSztBQUN6QyxnQkFBQTtBQUFBLFFBQ1Y7QUFDQSxZQUFJLGVBQWUsU0FBUztBQUNqQixpQkFBQSxJQUNGLEtBQUssQ0FBQyxVQUFVO0FBQ2pCLGlDQUFxQixtQkFBbUIsS0FBSztBQUN0QyxtQkFBQTtBQUFBLFVBQUEsQ0FDVixFQUNJLE1BQU0sQ0FBQyxVQUFVO0FBQ2xCLGlDQUFxQixxQkFBcUIsS0FBSztBQUN4QyxtQkFBQSxRQUFRLE9BQU8sS0FBSztBQUFBLFVBQUEsQ0FDOUI7QUFBQSxRQUNMO0FBRUEsNkJBQXFCLG1CQUFtQixHQUFHO0FBQ3BDLGVBQUE7QUFBQSxNQUFBO0FBQUEsSUFFZjtBQUNBLFVBQU0sY0FBb0NZLG9CQUFBQSxRQUFBO0FBQUEsTUFDdEMsU0FBUyxDQUFDO0FBQUEsTUFDVixTQUFTLENBQUM7QUFBQSxNQUNWLE9BQU8sQ0FBQztBQUFBLE1BQ1I7QUFBQSxJQUFBLENBQ0g7QUFDRCxVQUFNLGVBQWU7QUFBQSxNQUNqQixJQUFJWjtBQUFBO0FBQUEsTUFFSjtBQUFBLE1BQ0EsV0FBVyxnQkFBZ0IsS0FBSyxNQUFNLG1CQUFtQjtBQUFBLE1BQ3pEO0FBQUEsTUFDQTtBQUFBLE1BQ0EsV0FBVyxVQUFVcUIsV0FBVSxJQUFJO0FBQ3pCLGNBQUEscUJBQXFCLGdCQUFnQixlQUFlLFVBQVVBLFNBQVEsVUFBVSxNQUFNLGFBQWE7QUFDekcsY0FBTSxjQUFjLE1BQU0sSUFBSSxNQUFNWCxJQUFBQSxNQUFNLE1BQU1WLE9BQU0sTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVU7QUFDL0UsY0FBSXFCLFNBQVEsVUFBVSxTQUFTLGtCQUFrQixhQUFhO0FBQ2pELHFCQUFBO0FBQUEsY0FDTCxTQUFTO0FBQUEsY0FDVCxNQUFNLGFBQWE7QUFBQSxjQUNuQixRQUFRO0FBQUEsZUFDVCxLQUFLO0FBQUEsVUFDWjtBQUFBLFdBQ0QsT0FBTyxJQUFJLG1CQUFtQkEsUUFBTyxDQUFDLENBQUM7QUFDbkMsZUFBQTtBQUFBLE1BQ1g7QUFBQSxNQUNBO0FBQUEsSUFBQTtBQU9FLFVBQUEsUUFBUUMsSUFBQUEsU0FDUjtBQUFBLE1BQU87QUFBQSxRQUNMO0FBQUEsUUFDQSxtQkFBbUJWLElBQUFBLFFBQVksb0JBQUEsS0FBSztBQUFBO0FBQUEsTUFDeEM7QUFBQSxNQUFHO0FBQUE7QUFBQTtBQUFBLEtBSVc7QUFHWixJQUFBWixPQUFBLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFFdkIsVUFBTSxhQUFhQSxPQUFNLEdBQUcsSUFBSSxNQUFNO0FBQ2xDLGNBQVFhLElBQVksWUFBQTtBQUNwQixhQUFPLE1BQU0sSUFBSSxNQUFNLE1BQU8sQ0FBQTtBQUFBLElBQUEsQ0FDakM7QUFFRCxlQUFXLE9BQU8sWUFBWTtBQUNwQixZQUFBLE9BQU8sV0FBVyxHQUFHO0FBQ3RCLFVBQUFDLElBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBTUMsSUFBQUEsV0FBVyxJQUFJLEdBQUc7QUFFeEQsWUFBK0MsS0FBSztBQUNoRGpCLGdCQUFJLFNBQVMsT0FBTyxLQUFLeUIsSUFBQUEsTUFBTSxZQUFZLEdBQUcsQ0FBQztBQUFBLFFBQUEsV0FJMUMsQ0FBQyxnQkFBZ0I7QUFFbEIsY0FBQSxnQkFBZ0IsY0FBYyxJQUFJLEdBQUc7QUFDakMsZ0JBQUFULElBQUFBLE1BQU0sSUFBSSxHQUFHO0FBQ1IsbUJBQUEsUUFBUSxhQUFhLEdBQUc7QUFBQSxZQUFBLE9BRTVCO0FBR29CLG1DQUFBLE1BQU0sYUFBYSxHQUFHLENBQUM7QUFBQSxZQUNoRDtBQUFBLFVBQ0o7QUFNSztBQUNELFlBQUFkLE9BQU0sTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUk7QUFBQSxVQUNsQztBQUFBLFFBQ0o7QUFFNkM7QUFDN0Isc0JBQUEsTUFBTSxLQUFLLEdBQUc7QUFBQSxRQUM5QjtBQUFBLE1BQUEsV0FHSyxPQUFPLFNBQVMsWUFBWTtBQUVqQyxjQUFNLGNBQXlELE1BQU0sT0FBTyxXQUFXLEtBQUssSUFBSTtBQU8zRjtBQUVELHFCQUFXLEdBQUcsSUFBSTtBQUFBLFFBQ3RCO0FBRTZDO0FBQzdCLHNCQUFBLFFBQVEsR0FBRyxJQUFJO0FBQUEsUUFDL0I7QUFHaUIseUJBQUEsUUFBUSxHQUFHLElBQUk7QUFBQSxNQUFBLE9BRWM7QUFFMUMsWUFBQSxXQUFXLElBQUksR0FBRztBQUNOLHNCQUFBLFFBQVEsR0FBRyxJQUFJO0FBQUE7QUFBQSxZQUVuQixRQUFRLFFBQVEsR0FBRztBQUFBLGNBQ3JCO0FBQ04sY0FBSSxXQUFXO0FBQ1gsa0JBQU0sVUFBVSxXQUFXO0FBQUEsYUFFdEIsV0FBVyxXQUFXWSxZQUFRLENBQUEsQ0FBRTtBQUNyQyxvQkFBUSxLQUFLLEdBQUc7QUFBQSxVQUNwQjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQVFLO0FBQ0QsYUFBTyxPQUFPLFVBQVU7QUFHakIsYUFBQUosSUFBQSxNQUFNLEtBQUssR0FBRyxVQUFVO0FBQUEsSUFDbkM7QUFJTyxXQUFBLGVBQWUsT0FBTyxVQUFVO0FBQUEsTUFDbkMsS0FBSyxNQUFrRCxNQUFNLFNBQVMsUUFBUVIsT0FBTSxNQUFNLE1BQU0sR0FBRztBQUFBLE1BQ25HLEtBQUssQ0FBQyxVQUFVO0FBRVosWUFBK0MsS0FBSztBQUMxQyxnQkFBQSxJQUFJLE1BQU0scUJBQXFCO0FBQUEsUUFDekM7QUFDQSxlQUFPLENBQUMsV0FBVztBQUNmLGlCQUFPLFFBQVEsS0FBSztBQUFBLFFBQUEsQ0FDdkI7QUFBQSxNQUNMO0FBQUEsSUFBQSxDQUNIO0FBRzRDO0FBQ25DLFlBQUEsYUFBYVksWUFBUSxDQUFDLGFBQWE7QUFDckMsY0FBTSxlQUFlO0FBQ3JCLGlCQUFTLFlBQVksTUFBTSxRQUFRLENBQUMsYUFBYTtBQUN6QyxjQUFBLFlBQVksTUFBTSxRQUFRO0FBQ3BCLGtCQUFBLGlCQUFpQixTQUFTLE9BQU8sUUFBUTtBQUN6QyxrQkFBQSxpQkFBaUIsTUFBTSxPQUFPLFFBQVE7QUFDeEMsZ0JBQUEsT0FBTyxtQkFBbUIsWUFDMUIsY0FBYyxjQUFjLEtBQzVCLGNBQWMsY0FBYyxHQUFHO0FBQy9CLDBCQUFZLGdCQUFnQixjQUFjO0FBQUEsWUFBQSxPQUV6QztBQUVRLHVCQUFBLE9BQU8sUUFBUSxJQUFJO0FBQUEsWUFDaEM7QUFBQSxVQUNKO0FBR0FkLGdCQUFJLE9BQU8sVUFBVXlCLElBQUFBLE1BQU0sU0FBUyxRQUFRLFFBQVEsQ0FBQztBQUFBLFFBQUEsQ0FDeEQ7QUFFRCxlQUFPLEtBQUssTUFBTSxNQUFNLEVBQUUsUUFBUSxDQUFDLGFBQWE7QUFDeEMsY0FBQSxFQUFFLFlBQVksU0FBUyxTQUFTO0FBQ2hDLGdCQUFJLE9BQU8sUUFBUTtBQUFBLFVBQ3ZCO0FBQUEsUUFBQSxDQUNIO0FBRWEsc0JBQUE7QUFDSSwwQkFBQTtBQUNsQixRQUFBdkIsT0FBTSxNQUFNLE1BQU0sR0FBRyxJQUFJdUIsSUFBQUEsTUFBTSxTQUFTLGFBQWEsVUFBVTtBQUM3QywwQkFBQTtBQUNUSCxZQUFBLFNBQUEsRUFBRSxLQUFLLE1BQU07QUFDSix3QkFBQTtBQUFBLFFBQUEsQ0FDakI7QUFDVSxtQkFBQSxjQUFjLFNBQVMsWUFBWSxTQUFTO0FBQzdDLGdCQUFBLFNBQVMsU0FBUyxVQUFVO0FBQ2xDdEIsZ0JBQUksT0FBTyxZQUFZLFdBQVcsWUFBWSxNQUFNLENBQUM7QUFBQSxRQUN6RDtBQUVXLG1CQUFBLGNBQWMsU0FBUyxZQUFZLFNBQVM7QUFDbkQsZ0JBQU0sU0FBUyxTQUFTLFlBQVksUUFBUSxVQUFVO0FBQ3RELGdCQUFNLGNBQWM7QUFBQTtBQUFBLFlBRVpxQixJQUFBQSxTQUFTLE1BQU07QUFDWCw2QkFBZW5CLE1BQUs7QUFDYixxQkFBQSxPQUFPLEtBQUssT0FBTyxLQUFLO0FBQUEsWUFBQSxDQUNsQztBQUFBLGNBQ0g7QUFDRkYsZ0JBQUEsT0FBTyxZQUFZLFdBQVc7QUFBQSxRQUN0QztBQUVBLGVBQU8sS0FBSyxNQUFNLFlBQVksT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRO0FBQ3BELGNBQUksRUFBRSxPQUFPLFNBQVMsWUFBWSxVQUFVO0FBQ3hDLGdCQUFJLE9BQU8sR0FBRztBQUFBLFVBQ2xCO0FBQUEsUUFBQSxDQUNIO0FBRUQsZUFBTyxLQUFLLE1BQU0sWUFBWSxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVE7QUFDcEQsY0FBSSxFQUFFLE9BQU8sU0FBUyxZQUFZLFVBQVU7QUFDeEMsZ0JBQUksT0FBTyxHQUFHO0FBQUEsVUFDbEI7QUFBQSxRQUFBLENBQ0g7QUFFRCxjQUFNLGNBQWMsU0FBUztBQUM3QixjQUFNLFdBQVcsU0FBUztBQUMxQixjQUFNLGVBQWU7QUFBQSxNQUFBLENBQ3hCO0FBQUEsSUFDTDtBQUNBLFFBQUksY0FBYztBQUNkLFlBQU0sZ0JBQWdCO0FBQUEsUUFDbEIsVUFBVTtBQUFBLFFBQ1YsY0FBYztBQUFBO0FBQUEsUUFFZCxZQUFZO0FBQUEsTUFBQTtBQUVoQixPQUFDLE1BQU0sZUFBZSxZQUFZLG1CQUFtQixFQUFFLFFBQVEsQ0FBQzBCLE9BQU07QUFDM0QsZUFBQSxlQUFlLE9BQU9BLElBQUc7QUFBQSxVQUM1QixPQUFPLE1BQU1BLEVBQUM7QUFBQSxVQUNkLEdBQUc7QUFBQSxRQUFBLENBQ047QUFBQSxNQUFBLENBQ0o7QUFBQSxJQUNMO0FBT00sSUFBQXhCLE9BQUEsR0FBRyxRQUFRLENBQUMsYUFBYTtBQUUzQixVQUFJLGNBQWM7QUFDZCxjQUFNLGFBQWEsTUFBTSxJQUFJLE1BQU0sU0FBUztBQUFBLFVBQ3hDO0FBQUEsVUFDQSxLQUFLQSxPQUFNO0FBQUEsVUFDWCxPQUFBQTtBQUFBLFVBQ0EsU0FBUztBQUFBLFFBQ1osQ0FBQSxDQUFDO0FBQ0YsZUFBTyxLQUFLLGNBQWMsQ0FBQSxDQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsTUFBTSxrQkFBa0IsSUFBSSxHQUFHLENBQUM7QUFDL0UsZUFBTyxPQUFPLFVBQVU7QUFBQSxNQUFBLE9BRXZCO0FBQ0QsZUFBTyxPQUFPLE1BQU0sSUFBSSxNQUFNLFNBQVM7QUFBQSxVQUNuQztBQUFBLFVBQ0EsS0FBS0EsT0FBTTtBQUFBLFVBQ1gsT0FBQUE7QUFBQSxVQUNBLFNBQVM7QUFBQSxRQUNaLENBQUEsQ0FBQyxDQUFDO0FBQUEsTUFDUDtBQUFBLElBQUEsQ0FDSDtBQUNELFFBQ0ksTUFBTSxVQUNOLE9BQU8sTUFBTSxXQUFXLFlBQ3hCLE9BQU8sTUFBTSxPQUFPLGdCQUFnQixjQUNwQyxDQUFDLE1BQU0sT0FBTyxZQUFZLFdBQVcsU0FBUyxlQUFlLEdBQUc7QUFDaEUsY0FBUSxLQUFLO0FBQUE7QUFBQSxrQkFFVSxNQUFNLEdBQUcsSUFBSTtBQUFBLElBQ3hDO0FBRUksUUFBQSxnQkFDQSxrQkFDQSxRQUFRLFNBQVM7QUFDVCxjQUFBLFFBQVEsTUFBTSxRQUFRLFlBQVk7QUFBQSxJQUM5QztBQUNjLGtCQUFBO0FBQ0ksc0JBQUE7QUFDWCxXQUFBO0FBQUEsRUFDWDtBQUNBLFdBQVMsWUFFVCxhQUFhLE9BQU8sY0FBYztBQUMxQixRQUFBO0FBQ0EsUUFBQTtBQUNFLFVBQUEsZUFBZSxPQUFPLFVBQVU7QUFDbEMsUUFBQSxPQUFPLGdCQUFnQixVQUFVO0FBQzVCLFdBQUE7QUFFTCxnQkFBVSxlQUFlLGVBQWU7QUFBQSxJQUFBLE9BRXZDO0FBQ1MsZ0JBQUE7QUFDVixXQUFLLFlBQVk7QUFBQSxJQUNyQjtBQUNTLGFBQUEsU0FBU0EsUUFBTyxLQUFLO0FBQzFCLFlBQU0sa0JBQWtCTCxJQUFBQTtBQUN4QixNQUFBSztBQUFBO0FBQUEsTUFHdUZBLFVBQzlFLG1CQUFtQnlCLFdBQU8sV0FBVztBQUMxQyxVQUFBekI7QUFDQSx1QkFBZUEsTUFBSztBQUN4QixVQUErQyxDQUFDLGFBQWE7QUFDekQsY0FBTSxJQUFJLE1BQU07QUFBQTtBQUFBO0FBQUEsOEJBR21CO0FBQUEsTUFDdkM7QUFDUSxNQUFBQSxTQUFBO0FBQ1IsVUFBSSxDQUFDQSxPQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUc7QUFFbkIsWUFBSSxjQUFjO0FBQ0csMkJBQUEsSUFBSSxPQUFPLFNBQVNBLE1BQUs7QUFBQSxRQUFBLE9BRXpDO0FBQ2tCLDZCQUFBLElBQUksU0FBU0EsTUFBSztBQUFBLFFBQ3pDO0FBRTZDO0FBRXpDLG1CQUFTLFNBQVNBO0FBQUEsUUFDdEI7QUFBQSxNQUNKO0FBQ0EsWUFBTSxRQUFRQSxPQUFNLEdBQUcsSUFBSSxFQUFFO0FBQzdCLFVBQStDLEtBQUs7QUFDaEQsY0FBTSxRQUFRLFdBQVc7QUFDekIsY0FBTSxXQUFXLGVBQ1gsaUJBQWlCLE9BQU8sT0FBTyxTQUFTQSxRQUFPLElBQUksSUFDbkQsbUJBQW1CLE9BQU8sT0FBTyxDQUFBLEdBQUksT0FBTyxHQUFHQSxRQUFPLElBQUk7QUFDaEUsWUFBSSxXQUFXLFFBQVE7QUFFaEIsZUFBQUEsT0FBTSxNQUFNLE1BQU0sS0FBSztBQUN4QixRQUFBQSxPQUFBLEdBQUcsT0FBTyxLQUFLO0FBQUEsTUFDekI7QUFHSSxVQUFBLGFBQ0EsbUJBQ0EsZ0JBQWdCO0FBQUEsTUFFaEIsQ0FBQyxLQUFLO0FBQ04sY0FBTSxLQUFLLGdCQUFnQjtBQUMzQixjQUFNLFFBQVEsY0FBYyxLQUFLLEdBQUcsV0FBWSxHQUFHLFdBQVc7QUFDOUQsY0FBTSxFQUFFLElBQUk7QUFBQSxNQUNoQjtBQUVPLGFBQUE7QUFBQSxJQUNYO0FBQ0EsYUFBUyxNQUFNO0FBQ1IsV0FBQTtBQUFBLEVBQ1g7QUM3c0RBLFdBQVMwQixXQUFTQyxJQUFHO0FBQ25CLFdBQU8sT0FBT0EsT0FBTSxZQUFZQSxPQUFNO0FBQUEsRUFDeEM7QUFDQSxXQUFTLGlCQUFpQixTQUFTLGdCQUFnQjtBQUNqRCxjQUFVRCxXQUFTLE9BQU8sSUFBSSxVQUEwQix1QkFBTyxPQUFPLElBQUk7QUFDMUUsV0FBTyxJQUFJLE1BQU0sU0FBUztBQUFBLE1BQ3hCLElBQUksUUFBUSxLQUFLLFVBQVU7QUFDekIsWUFBSSxRQUFRO0FBQ1YsaUJBQU8sUUFBUSxJQUFJLFFBQVEsS0FBSyxRQUFRO0FBQzFDLGVBQU8sUUFBUSxJQUFJLFFBQVEsS0FBSyxRQUFRLEtBQUssUUFBUSxJQUFJLGdCQUFnQixLQUFLLFFBQVE7QUFBQSxNQUN2RjtBQUFBLElBQ0wsQ0FBRztBQUFBLEVBQ0g7QUFHQSxXQUFTLElBQUksT0FBTyxNQUFNO0FBQ3hCLFdBQU8sS0FBSyxPQUFPLENBQUMsS0FBS0YsT0FBTTtBQUM3QixhQUFPLE9BQU8sT0FBTyxTQUFTLElBQUlBLEVBQUM7QUFBQSxJQUNwQyxHQUFFLEtBQUs7QUFBQSxFQUNWO0FBQ0EsV0FBUyxJQUFJLE9BQU8sTUFBTSxLQUFLO0FBQzdCLFdBQU8sS0FBSyxNQUFNLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLQSxPQUFNO0FBQzFDLFVBQUksZ0JBQWdCLEtBQUtBLEVBQUM7QUFDeEIsZUFBTzs7QUFFUCxlQUFPLElBQUlBLEVBQUMsSUFBSSxJQUFJQSxFQUFDLEtBQUssQ0FBQTtBQUFBLElBQ2hDLEdBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxJQUFJLEtBQUs7QUFBQSxFQUMxQztBQUNBLFdBQVMsS0FBSyxXQUFXLE9BQU87QUFDOUIsV0FBTyxNQUFNLE9BQU8sQ0FBQyxVQUFVLFNBQVM7QUFDdEMsWUFBTSxZQUFZLEtBQUssTUFBTSxHQUFHO0FBQ2hDLGFBQU8sSUFBSSxVQUFVLFdBQVcsSUFBSSxXQUFXLFNBQVMsQ0FBQztBQUFBLElBQzFELEdBQUUsQ0FBRSxDQUFBO0FBQUEsRUFDUDtBQUdBLFdBQVMsYUFBYSxPQUFPLEVBQUUsU0FBUyxZQUFZLEtBQUssU0FBUztBQUNoRSxRQUFJO0FBQ0YsWUFBTSxjQUFjLFdBQVcsT0FBTyxTQUFTLFFBQVEsUUFBUSxHQUFHO0FBQ2xFLFVBQUk7QUFDRixjQUFNLE9BQU8sY0FBYyxPQUFPLFNBQVMsV0FBVyxZQUFZLFdBQVcsQ0FBQztBQUFBLElBQ2pGLFNBQVEsT0FBTztBQUNkLFVBQUk7QUFDRixnQkFBUSxNQUFNLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0g7QUFDQSxXQUFTLGFBQWEsT0FBTyxFQUFFLFNBQVMsWUFBWSxLQUFLLE9BQU8sU0FBUztBQUN2RSxRQUFJO0FBQ0YsWUFBTSxVQUFVLE1BQU0sUUFBUSxLQUFLLElBQUksS0FBSyxPQUFPLEtBQUssSUFBSTtBQUM1RCxjQUFRLFFBQVEsS0FBSyxXQUFXLFVBQVUsT0FBTyxDQUFDO0FBQUEsSUFDbkQsU0FBUSxPQUFPO0FBQ2QsVUFBSTtBQUNGLGdCQUFRLE1BQU0sS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDSDtBQUNBLFdBQVMscUJBQXFCLGlCQUFpQixJQUFJO0FBQ2pELFdBQU8sQ0FBQyxZQUFZO0FBQ2xCLFlBQU0sRUFBRSxPQUFPLE1BQU8sSUFBRztBQUN6QixZQUFNO0FBQUEsUUFDSixTQUFTLEVBQUUsVUFBVSxLQUFNO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE9BQUF4QjtBQUFBLE1BQ0QsSUFBRztBQUNKLFVBQUksQ0FBQztBQUNIO0FBQ0YsVUFBSSxFQUFFLE1BQU0sT0FBT0EsT0FBTSxNQUFNLFFBQVE7QUFDckMsY0FBTSxpQkFBaUJBLE9BQU0sR0FBRyxJQUFJLE1BQU0sSUFBSSxRQUFRLFVBQVUsRUFBRSxDQUFDO0FBQ25FLFlBQUk7QUFDRixrQkFBUSxRQUFPLEVBQUcsS0FBSyxNQUFNLGVBQWUsU0FBUSxDQUFFO0FBQ3hEO0FBQUEsTUFDRDtBQUNELFlBQU0sZ0JBQWdCLE1BQU0sUUFBUSxPQUFPLElBQUksUUFBUSxJQUFJLENBQUN3QixPQUFNLGlCQUFpQkEsSUFBRyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixTQUFTLGNBQWMsQ0FBQyxHQUFHO0FBQUEsUUFDcEosQ0FBQztBQUFBLFVBQ0MsVUFBVTtBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsZUFBZTtBQUFBLFVBQ2YsYUFBYTtBQUFBLFlBQ1gsV0FBVyxLQUFLO0FBQUEsWUFDaEIsYUFBYSxLQUFLO0FBQUEsVUFDbkI7QUFBQSxVQUNELE1BQU0sTUFBTTtBQUFBLFVBQ1osUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFFBQ2hCLE1BQVk7QUFDSixjQUFJO0FBQ0osaUJBQU87QUFBQSxZQUNMO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxPQUFPLEtBQUssZUFBZSxRQUFRLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLE9BQU8sV0FBVyxNQUFNLElBQUksTUFBTSxHQUFHLENBQUM7QUFBQSxZQUN0RztBQUFBLFlBQ0E7QUFBQSxVQUNWO0FBQUEsUUFDTztBQUFBLE1BQ1A7QUFDSSxZQUFNLFdBQVcsTUFBTTtBQUNyQixxQkFBYSxRQUFRLENBQUMsZ0JBQWdCO0FBQ3BDLHVCQUFhLE1BQU0sUUFBUSxXQUFXO0FBQUEsUUFDOUMsQ0FBTztBQUFBLE1BQ1A7QUFDSSxZQUFNLFdBQVcsQ0FBQyxFQUFFLFdBQVcsS0FBSSxJQUFLLENBQUEsTUFBTztBQUM3QyxxQkFBYSxRQUFRLENBQUMsZ0JBQWdCO0FBQ3BDLGdCQUFNLEVBQUUsZUFBZSxhQUFjLElBQUc7QUFDeEMsY0FBSTtBQUNGLDZCQUFpQixPQUFPLFNBQVMsY0FBYyxPQUFPO0FBQ3hELHVCQUFhLE9BQU8sV0FBVztBQUMvQixjQUFJO0FBQ0YsNEJBQWdCLE9BQU8sU0FBUyxhQUFhLE9BQU87QUFBQSxRQUM5RCxDQUFPO0FBQUEsTUFDUDtBQUNJLG1CQUFhLFFBQVEsQ0FBQyxnQkFBZ0I7QUFDcEMsY0FBTSxFQUFFLGVBQWUsYUFBYyxJQUFHO0FBQ3hDLHlCQUFpQixPQUFPLFNBQVMsY0FBYyxPQUFPO0FBQ3RELHFCQUFhLE9BQU8sV0FBVztBQUMvQix3QkFBZ0IsT0FBTyxTQUFTLGFBQWEsT0FBTztBQUNwRCxjQUFNO0FBQUEsVUFDSixDQUFDLFdBQVcsVUFBVTtBQUNwQix5QkFBYSxPQUFPLFdBQVc7QUFBQSxVQUNoQztBQUFBLFVBQ0Q7QUFBQSxZQUNFLFVBQVU7QUFBQSxVQUNYO0FBQUEsUUFDVDtBQUFBLE1BQ0EsQ0FBSztBQUFBLElBQ0w7QUFBQSxFQUNBO0FBR0EsTUFBSSxjQUFjLHFCQUFzQjtBQzdIakMsUUFBTSxpQkFBaUI7QUFBQSxJQUM1QjtBQUFBLElBQ0EsTUFBTTtBQUVKLFlBQU0sVUFBVWhDLElBQUFBO0FBR1YsWUFBQSxhQUFhLENBQUMsUUFBcUI7QUFDdkMsZ0JBQVEsUUFBUTtBQUFBLE1BQUE7QUFJbEIsWUFBTSxlQUFlLE1BQU07QUFDekIsZ0JBQVEsUUFBUTtBQUFBLE1BQUE7QUFJWCxhQUFBO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFBQTtBQUFBLElBRUo7QUFBQSxJQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFJRSxTQUFTO0FBQUEsUUFDUCxTQUFTO0FBQUEsVUFDUCxRQUFRLEtBQUs7QUFDSixtQkFBQSxJQUFJLGVBQWUsR0FBRztBQUFBLFVBQy9CO0FBQUEsVUFDQSxRQUFRLEtBQUssT0FBTztBQUNkLGdCQUFBLGVBQWUsS0FBSyxLQUFLO0FBQUEsVUFDL0I7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FDdkNBLFFBQU0sUUFBUSxZQUFZO0FBRTFCLFFBQU0sSUFBSW9DLFdBQU87O0FDU2pCLFFBQU0sVUFBVTtBQUNKLGVBQUEsT0FBQSx1QkFBQSxPQUFPLDhCQUFlO0FBQ2xDLGVBQUEsT0FBQSx1QkFBWSxRQUFRLE9BQU87QUFFM0IsUUFBTSxrQkFBa0I7QUFBQTtBQUFBLElBRXRCLE9BQU8sU0FBZ0M7O0FBRXJDLFVBQUksQ0FBQyxRQUFRLElBQUksV0FBVyxNQUFNLEdBQUc7QUFDM0IsZ0JBQUEsTUFBTSxVQUFVLFFBQVE7QUFBQSxNQUNsQztBQUVBLGNBQVEsVUFBVTtBQUVsQixjQUFRLFNBQVM7QUFBQSxRQUNmLEdBQUcsUUFBUTtBQUFBLFFBQ1gsaUJBQWlCO0FBQUEsTUFBQTtBQUduQixZQUFNLGNBQWM7QUFDZCxZQUFBLFNBQVEsaUJBQVksWUFBWixtQkFBcUI7QUFDbkMsVUFBSSxPQUFPO0FBQ1QsZ0JBQVEsT0FBTyxVQUFVO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLE1BQUksZUFBZSxXQUFXLGVBQWU7QUFDN0MsTUFBSSxlQUFlLGNBQWMsZUFBZTtBQXFCbkMsUUFBQSxPQUFPLENBQUksWUFBbUM7QUFFekQsV0FBTyxJQUFJLFFBQWlCLENBQUMsU0FBUyxXQUFXO0FBQy9DLFVBQUksUUFBUTtBQUFBLFFBQ1YsR0FBRztBQUFBO0FBQUEsUUFFSCxRQUFRLEtBQUs7QUFFWCxjQUFJLElBQUksY0FBYyxPQUFPLElBQUksYUFBYSxLQUFLO0FBRWpELGtCQUFNLE9BQU8sSUFBSTtBQUNiLGdCQUFBLEtBQUssU0FBUyxLQUFLO0FBRVRDLDJCQUFBLE9BQUEsdUJBQUEseUJBQXlCO0FBQ3JDLG9CQUFNLGNBQWM7QUFDcEIsMEJBQVksYUFBYTtBQUN6QixrQkFBSSxXQUFXLEVBQUUsS0FBSyxxQkFBc0IsQ0FBQTtBQUM1QyxxQkFBTyxHQUFHO0FBQUEsWUFBQSxXQUNELEtBQUssU0FBUyxLQUFLO0FBRTVCQSwyQkFBQSxPQUFBLHVCQUFZLGlCQUFpQjtBQUM3QixvQkFBTSxjQUFjO0FBQ3BCLDBCQUFZLGFBQWE7QUFDekIsa0JBQUksV0FBVyxFQUFFLEtBQUsscUJBQXNCLENBQUE7QUFDNUMscUJBQU8sR0FBRztBQUFBLFlBQUEsT0FDTDtBQUNMLHNCQUFRLElBQUksSUFBZTtBQUFBLFlBQzdCO0FBQUEsVUFBQSxXQUNTLElBQUksZUFBZSxLQUFLO0FBRWpDLGtCQUFNLGNBQWM7QUFDcEIsd0JBQVksYUFBYTtBQUN6QixnQkFBSSxXQUFXLEVBQUUsS0FBSyxxQkFBc0IsQ0FBQTtBQUM1QyxtQkFBTyxHQUFHO0FBQUEsVUFBQSxPQUNMO0FBRUwsZ0JBQUksVUFBVTtBQUFBLGNBQ1osTUFBTTtBQUFBLGNBQ04sT0FBUSxJQUFJLEtBQWlCLE9BQU87QUFBQSxZQUFBLENBQ3JDO0FBQ0QsbUJBQU8sR0FBRztBQUFBLFVBQ1o7QUFBQSxRQUNGO0FBQUE7QUFBQSxRQUVBLEtBQUssS0FBSztBQUNSLGNBQUksVUFBVTtBQUFBLFlBQ1osTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFVBQUEsQ0FDUjtBQUNELGlCQUFPLEdBQUc7QUFBQSxRQUNaO0FBQUEsTUFBQSxDQUNEO0FBQUEsSUFBQSxDQUNGO0FBQUEsRUFDSDtBQzlHTyxRQUFNLG9CQUFvQixNQUFNO0FBQ3JDLFdBQU8sS0FBd0I7QUFBQSxNQUM3QixRQUFRO0FBQUEsTUFDUixLQUFLO0FBQUEsSUFBQSxDQUNOO0FBQUEsRUFDSDtBQ0hhLFFBQUEsbUJBQW1CLENBQUMsbUJBQW1CLE1BQU07QUFDeEQsV0FBTyxLQUFtQjtBQUFBLE1BQ3hCLFFBQVE7QUFBQSxNQUNSLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxRQUNKO0FBQUEsTUFDRjtBQUFBLElBQUEsQ0FDRDtBQUFBLEVBQ0g7QUF5QmEsUUFBQSwyQkFBMkIsQ0FBQyxTQUFzQjtBQUM3RCxXQUFPLEtBQTRCO0FBQUEsTUFDakMsUUFBUTtBQUFBLE1BQ1IsS0FBSztBQUFBLE1BQ0w7QUFBQSxJQUFBLENBQ0Q7QUFBQSxFQUNIOzsrQkNpSFMsUUFBQTtXQURFNUMsSUFBQUEsVUFBQSxHQUFBQyxJQTdKZSxtQkFBQSxRQUFBLEVBQUEsT0FBQSxrQkFBQTtBQUFBLDZCQVFiLFFBQUEsRUFBQSxPQVBJLFdBQVMsR0FBQTtBQUFBLCtCQU1YLFFBQUEsRUFBQSxPQUxJLFNBQVEsR0FBQTtBQUFBLFVBQ2pCRyxJQUFBQSxtQkFBQSxRQUNFLEVBQUEsT0FBSyxRQUFDLEdBQUE7QUFBQTs7U0F3Skw7QUFBQSwrQkF0SFMsUUFBQSxFQUFBLE9BQUEsYUFBQSxHQUFBO0FBQUEsVUE1QkFBLElBQUFBLG1CQUFjLGVBQUE7QUFBQSxZQUFFLFlBQWU7QUFBQTthQUdwQztBQUFBLFlBRExBLElBQUFBLG1CQUFBLFFBQU0sRUFBQSxPQUFLLHlDQUFDLEdBQUE7QUFBQTthQUlQO0FBQUEsWUFETEEsSUFBQUEsbUJBQUEsUUFBTSxFQUFBLE9BQUssa0NBQUMsR0FBQTtBQUFBO2FBSVA7QUFBQSxZQURMQSxJQUFBQSxtQkFBQSxRQUFNLEVBQUEsT0FBSyxrQ0FBQyxHQUFBO0FBQUE7YUFJUDtBQUFBLFlBRExBLElBQUFBLG1CQUFBLFFBQU0sRUFBQSxPQUFLLGtDQUFDLEdBQUE7QUFBQTthQUlQO0FBQUEsWUFETEEsSUFBQUEsbUJBQUEsUUFBTSxFQUFBLE9BQUssa0NBQUMsR0FBQTtBQUFBO2FBSVA7QUFBQSxZQURMQSxJQUFBQSxtQkFBQSxRQUFNLEVBQUEsT0FBSyxrQ0FBQyxHQUFBO0FBQUE7YUFJUDtBQUFBLFlBRExBLElBQUFBLG1CQUFBLFFBQU0sRUFBQSxPQUFLLGtDQUFDLEdBQUE7QUFBQTthQUlQO0FBQUEsWUFETEEsSUFBQUEsbUJBQUEsUUFBTSxFQUFBLE9BQUssa0NBQUMsR0FBQTtBQUFBO2FBSVA7QUFBQSxZQURMQSxJQUFBQSxtQkFBQSxRQUFNLEVBQUEsT0FBSyxrQ0FBQyxHQUFBO0FBQUE7O1dBdUhGO0FBQUEsVUFwSEFBLElBQUFBLG1CQUFjLGVBQUE7QUFBQSxZQUFFLFlBQWlCO0FBQUE7YUFXdEM7QUFBQSxZQVZEQSxJQUFBQSxtQkFBeUIsUUFBQTtBQUFBLGNBQUMsSUFBQTtBQUFBO2VBU3ZCO0FBQUEscUNBREUsUUFBQSxFQUFBLE9BTkksK0JBQWlDLEdBQUE7QUFBQSx1Q0FDdUIsUUFBQSxFQUFBLE9BQXRELGlDQUE4QyxHQUFBO0FBQUEsa0JBQ3pEQSxJQUFBQSxtQkFBd0MsUUFBQSxFQUFsQyxPQUFNLDhDQUFvQixDQUFBO0FBQUEsa0JBQ2hDQSxJQUFBQSxtQkFBd0MsUUFBQSxFQUFsQyxPQUFNLHFCQUFvQixDQUFBO0FBQUEsa0JBQ2hDQSxJQUFBQSxtQkFBd0MsUUFBQSxFQUFsQyxPQUFNLHFCQUFvQixDQUFBO0FBQUEsa0JBQ2hDQSxJQUFBQSxtQkFBd0MsUUFBQSxFQUFsQyxPQUFNLHFCQUFvQixDQUFBO0FBQUE7OzthQW1DL0I7QUFBQSxtQ0F2QkUsUUFBQSxFQUFBLE9BUEksUUFBUSxHQUFBO0FBQUEsY0FDakJBLElBQUFBLG1CQUFBLFFBQU0sRUFBQSxPQUFLLFFBQUMsR0FBQTtBQUFBLGdCQUNaQSxJQUFBQSxtQkFHaUIsUUFBQSxFQUFBLE9BQUEsa0RBQUEsR0FBQSxRQUFBO0FBQUEsZ0JBRmZBLElBQUFBLG1CQUFrRixhQUFBO0FBQUEsa0JBQ2xGLE9BQUE7QUFBQSxpQ0FDRztBQUFBO2VBd0JBO0FBQUEscUNBWE8sUUFBQSxFQUFBLE9BQUEsVUFBQSxHQUFBO0FBQUEsZ0JBVERBLElBQUFBLG1CQUFhLGFBQUE7QUFBQSxrQkFBQyxPQUFBO0FBQUE7bUJBQ2U7QUFBQSxrQkFDdENBLElBQUFBLG1CQUNxQixTQURmLEVBQUEsT0FBTSxpQkFBQSxDQUFBO0FBQUEsa0JBR1pBLElBQUFBLG1CQUdPLFFBQUEsRUFIRCxPQUFNLDJEQUFPLEdBQUEsYUFBQTtBQUFBLGtCQUNqQkEsSUFBQUEsbUJBQUEsUUFBTSxFQUFBLE9BQUssUUFBQyxHQUFBO0FBQUEsb0JBQ1pBLElBQUFBLG1CQUE2RSxRQUF2RSxFQUFBLE9BQU0sbUNBQUEsR0FBQSxHQUFBO0FBQUE7O2lCQVlKO0FBQUEsZ0JBVERBLElBQUFBLG1CQUFhLGFBQUE7QUFBQSxrQkFBQyxPQUFBO0FBQUE7bUJBQ2U7QUFBQSxrQkFDdENBLElBQUFBLG1CQUMyQixTQURyQixFQUFBLE9BQU0saUJBQUEsQ0FBQTtBQUFBLGtCQUdaQSxJQUFBQSxtQkFHTyxRQUFBLEVBSEQsT0FBTSwyREFBTyxHQUFBLG1CQUFBO0FBQUEsa0JBQ2pCQSxJQUFBQSxtQkFBQSxRQUFNLEVBQUEsT0FBSyxRQUFDLEdBQUE7QUFBQSxvQkFDWkEsSUFBQUEsbUJBQTZFLFFBQXZFLEVBQUEsT0FBTSxtQ0FBQSxHQUFBLEdBQUE7QUFBQTs7OzthQTRFYjtBQUFBLG1DQS9ERSxRQUFBLEVBQUEsT0FQSSxRQUFRLEdBQUE7QUFBQSxjQUNqQkEsSUFBQUEsbUJBQUEsUUFBTSxFQUFBLE9BQUssUUFBQyxHQUFBO0FBQUEsZ0JBQ1pBLElBQUFBLG1CQUdpQixRQUFBLEVBQUEsT0FBQSxrREFBQSxHQUFBLElBQUE7QUFBQSxnQkFGZkEsSUFBQUEsbUJBQWtGLGFBQUE7QUFBQSxrQkFDbEYsT0FBQTtBQUFBLGlDQUNHO0FBQUE7ZUFnRUE7QUFBQSxxQ0FuRE8sUUFBQSxFQUFBLE9BQUEsVUFBQSxHQUFBO0FBQUEsZ0JBVERBLElBQUFBLG1CQUFhLGFBQUE7QUFBQSxrQkFBQyxPQUFBO0FBQUE7bUJBQ2U7QUFBQSxrQkFDdENBLElBQUFBLG1CQUN5QixTQURuQixFQUFBLE9BQU0saUJBQUEsQ0FBQTtBQUFBLGtCQUdaQSxJQUFBQSxtQkFHTyxRQUFBLEVBSEQsT0FBTSwyREFBTyxHQUFBLGlCQUFBO0FBQUEsa0JBQ2pCQSxJQUFBQSxtQkFBQSxRQUFNLEVBQUEsT0FBSyxRQUFDLEdBQUE7QUFBQSxvQkFDWkEsSUFBQUEsbUJBQTZFLFFBQXZFLEVBQUEsT0FBTSxtQ0FBQSxHQUFBLEdBQUE7QUFBQTs7aUJBWUo7QUFBQSxnQkFUREEsSUFBQUEsbUJBQWEsYUFBQTtBQUFBLGtCQUFDLE9BQUE7QUFBQTttQkFDZTtBQUFBLGtCQUN0Q0EsSUFBQUEsbUJBQzBCLFNBRHBCLEVBQUEsT0FBTSxpQkFBQSxDQUFBO0FBQUEsa0JBR1pBLElBQUFBLG1CQUdPLFFBQUEsRUFIRCxPQUFNLDJEQUFPLEdBQUEsa0JBQUE7QUFBQSxrQkFDakJBLElBQUFBLG1CQUFBLFFBQU0sRUFBQSxPQUFLLFFBQUMsR0FBQTtBQUFBLG9CQUNaQSxJQUFBQSxtQkFBNEUsUUFBdEUsRUFBQSxPQUFNLG1DQUFBLEdBQUEsR0FBQTtBQUFBOztpQkFZSjtBQUFBLGdCQVREQSxJQUFBQSxtQkFBYSxhQUFBO0FBQUEsa0JBQUMsT0FBQTtBQUFBO21CQUNlO0FBQUEsa0JBQ3RDQSxJQUFBQSxtQkFDbUIsU0FEYixFQUFBLE9BQU0saUJBQUEsQ0FBQTtBQUFBLGtCQUdaQSxJQUFBQSxtQkFHTyxRQUFBLEVBSEQsT0FBTSwyREFBTyxHQUFBLFdBQUE7QUFBQSxrQkFDakJBLElBQUFBLG1CQUFBLFFBQU0sRUFBQSxPQUFLLFFBQUMsR0FBQTtBQUFBLG9CQUNaQSxJQUFBQSxtQkFBNEUsUUFBdEUsRUFBQSxPQUFNLG1DQUFBLEdBQUEsR0FBQTtBQUFBOztpQkFZSjtBQUFBLGdCQVREQSxJQUFBQSxtQkFBYSxhQUFBO0FBQUEsa0JBQUMsT0FBQTtBQUFBO21CQUNlO0FBQUEsa0JBQ3RDQSxJQUFBQSxtQkFDeUIsU0FEbkIsRUFBQSxPQUFNLGlCQUFBLENBQUE7QUFBQSxrQkFHWkEsSUFBQUEsbUJBR08sUUFBQSxFQUhELE9BQU0sMERBQU8sR0FBQSxpQkFBQTtBQUFBLGtCQUNqQkEsSUFBQUEsbUJBQUEsUUFBTSxFQUFBLE9BQUssUUFBQyxHQUFBO0FBQUEsb0JBQ1pBLElBQUFBLG1CQUE2RSxRQUF2RSxFQUFBLE9BQU0sbUNBQUEsR0FBQSxHQUFBO0FBQUE7O2lCQVlKO0FBQUEsZ0JBVERBLElBQUFBLG1CQUFhLGFBQUE7QUFBQSxrQkFBQyxPQUFBO0FBQUE7bUJBQ2U7QUFBQSxrQkFDdENBLElBQUFBLG1CQUN3QixTQURsQixFQUFBLE9BQU0saUJBQUEsQ0FBQTtBQUFBLGtCQUdaQSxJQUFBQSxtQkFHTyxRQUFBLEVBSEQsT0FBTSwwREFBTyxHQUFBLGdCQUFBO0FBQUEsa0JBQ2pCQSxJQUFBQSxtQkFBQSxRQUFNLEVBQUEsT0FBSyxRQUFDLEdBQUE7QUFBQSxvQkFDWkEsSUFBQUEsbUJBQTRFLFFBQXRFLEVBQUEsT0FBTSxtQ0FBQSxHQUFBLEdBQUE7QUFBQTs7aUJBWUo7QUFBQSxnQkFUREEsSUFBQUEsbUJBQWEsYUFBQTtBQUFBLGtCQUFDLE9BQUE7QUFBQTttQkFDZTtBQUFBLGtCQUN0Q0EsSUFBQUEsbUJBQzJCLFNBRHJCLEVBQUEsT0FBTSxpQkFBQSxDQUFBO0FBQUEsa0JBR1pBLElBQUFBLG1CQUdPLFFBQUEsRUFIRCxPQUFNLDJEQUFPLEdBQUEsbUJBQUE7QUFBQSxrQkFDakJBLElBQUFBLG1CQUFBLFFBQU0sRUFBQSxPQUFLLFFBQUMsR0FBQTtBQUFBLG9CQUNaQSxJQUFBQSxtQkFBNEUsUUFBdEUsRUFBQSxPQUFNLG1DQUFBLEdBQUEsR0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUM5SXhCLFlBQUEsYUFBYUcsUUFBa0IsQ0FBQSxDQUFFO0FBQ3ZDLFlBQU0sZ0JBQWdCLFlBQVk7QUFDMUIsY0FBQSxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsbUJBQVcsUUFBUSxJQUFJO0FBQUEsTUFBQTtBQUluQixZQUFBLGVBQWVBLFFBQXVCLENBQUEsQ0FBRTtBQUN4QyxZQUFBLGNBQWNBLFFBQUksQ0FBQztBQUN6QixZQUFNLHFCQUFxQixZQUFZO0FBQy9CLGNBQUEsTUFBTSxNQUFNO0FBQ2xCLHFCQUFhLFFBQVEsSUFBSTtBQUFBLE1BQUE7QUFJckIsWUFBQSxXQUFXQSxRQUFJLEtBQUs7QUFFMUIsYUFBTyxZQUFZO0FBQ2pCLGNBQU0sUUFBUSxJQUFJLENBQUMsaUJBQWlCLG1CQUFvQixDQUFBLENBQUM7QUFDekQsaUJBQVMsUUFBUTtBQUFBLE1BQUEsQ0FDbEI7QUFHSyxZQUFBLGtCQUFrQjJCLElBQUFBLFNBQVMsTUFBTTs7QUFDckMsaUJBQU8sa0JBQWEsTUFBTSxZQUFZLEtBQUssTUFBcEMsbUJBQXVDLGFBQVk7TUFBQyxDQUM1RDs7Ozs7OztBQ0lzQyxVQUFBLHVCQUFBLGVBQUFXLElBQUFBLHdCQUFBLFdBQUEsR0FBQUMsYUFBQTtBQXZDdkMsV0FBQSxPQUFBLFlBQUE5QyxJQUFBLFVBQUEsR0F1Q3dCQyxJQUFBQSxtQkFBQSxRQUFBO0FBQUEsTUFBQSxLQUFBO0FBQUEsTUFDcEIsT0FBQTtBQUFBLElBQUEsR0FDQTtBQUFBLE1BQUFFLElBQUFBLG1CQUNFLE9BRU87QUFBQSxNQURMQyxJQUFBQSxtQkFBQSxRQUFtQyxTQUE3QixTQUFNLEdBQUE7QUFBQSxRQUFBQSxJQUFBQSxtQkFBQSxRQUFBLEVBQUEsT0FBQSxRQUFBLEdBQUE7QUFBQTtRQUdoQixDQUFBO0FBQUEsTUFBQSxDQUNBO0FBQUEsTUFDRUQsSUFBQUEsbUJBQUEsTUFBQTtBQUFBLE1BQUFDLElBQUFBLG1CQUNBLFFBWWMsRUFBQSxPQUFBLGFBQUEsR0FBQTtBQUFBLFFBWmNELElBQUFBLG1CQUFBLFdBQUE7QUFBQSxRQUFTQyxJQUFBQSxtQkFBQSxlQUFBO0FBQUEsVUFBQSxPQUFBO0FBQUE7O3lCQUczQixJQUFPLEdBQUFILElBQUE7QUFBQSxZQUFBSSxJQUFBO0FBQUEsWUFBQTtBQUFBLFlBQUFDLElBQUFBLFdBQUEsT0FBQSxjQUFBLENBQUEsTUFBQSxVQUFBO0FBQ1IscUJBQUFOLElBQUEsVUFBQSwwQkFBTyxRQUNXO0FBQUEsZ0JBQ3RCLEtBQUcsS0FBQTtBQUFBLGdCQUFBLE9BQUErQyxJQUFBQSxlQUFBLENBQUEsUUFBQSxFQUFBLFFBQUEsVUFBQSxPQUFBLFlBQUEsQ0FBQSxDQUFBO0FBQUEsZ0JBRUosU0FBQSxDQUFBLFdBRU8sT0FGSyxjQUFBO0FBQUEsY0FBQSxHQUFBO0FBQUE7Ozs7Ozs7O1lBS2hCLENBQUE7QUFBQSxZQUFBO0FBQUE7QUFBQSxVQUFBO0FBQUEsUUFBQSxDQUNBO0FBQUEsUUFBQTVDLElBQUFBLG1CQUFhLFdBQWtCO0FBQUEsUUFBa0JDLElBQUFBLG1CQUFBLGVBQUE7QUFBQSxVQUFDLHNCQUFRO0FBQUEsVUFBQSxPQUFBO0FBQUEsVUFDeEQsWUFBQTtBQUFBLFFBQUEsR0FDQTtBQUFBLFVBQXlCRCxJQUFBQSxtQkFBQSxPQUFBO0FBQUEsVUFBQUssSUFBQUEsWUFBUSxzQkFBVTtBQUFBLFlBQUEsT0FBQTtBQUFBLFlBQzNDLE1BQUEsT0FBQTtBQUFBLFVBQ0EsR0FBQSxNQUFBLEdBQUEsQ0FBQSxNQUFBLENBQUE7QUFBQSxVQUFBTCxJQUFBQSxtQkFBQSxRQUFBO0FBQUEsV0FBQUgsSUFBQSxVQUFZLElBQU8sR0FBQUMsSUFBQTtBQUFBLFlBQUFJLElBQUE7QUFBQSxZQUFBO0FBQUEsWUFBQUMsSUFBQUEsV0FBQSxPQUFBLGlCQUFBLENBQUEsU0FBQTtxQkFBdUNOLElBQU8sVUFBQSxHQUFBQyxJQUFBLG1CQUFBLFFBQUE7QUFBQSxnQkFBQSxPQUFBO0FBQUEsZ0JBQy9ELEtBQUEsS0FBQTtBQUFBLGNBQUEsR0FBQTtBQUFBLHVDQUVFLFFBQXlELEVBQUEsT0FBQSxRQUFBLEdBQUE7QUFBQSxrQkFBQUcsSUFBQTtBQUFBLG9CQUFsQztBQUFBLG9CQUFBLEVBQUEsT0FBQSxPQUFBO0FBQUEsb0JBQUE0QyxJQUFBLGdCQUFBLEtBQUEsSUFBQTtBQUFBLG9CQUFBO0FBQUE7QUFBQSxrQkFBQTtBQUFBLGtCQUFBNUMsSUFBQUEsbUJBQWEsYUFBTTtBQUFBLG9CQUFHLE9BQUE7QUFBQSxvQkFBQSxlQUFBO0FBQUEsa0JBRS9DLEdBQUEsSUFBQTtBQUFBLGdCQUFBLENBQUE7QUFBQSwrQ0FDRSxFQWFZLE9BQUEsVUFBQSxHQUFBO0FBQUEsbUJBQUFKLElBQUEsVUFYSixJQUFNLEdBQUVDLElBQUE7QUFBQSxvQkFBQUksSUFBQTtBQUFBLG9CQUFBO0FBQUEsb0JBQUFDLElBQUFBLFdBQUEsS0FBQSxPQUFBLENBQUEyQyxXQUFBOzZCQUNUakQsSUFBUSxVQUFBLEdBQUFDLElBQUEsbUJBQUEsYUFBQTtBQUFBLHdCQUNiLEtBQUFnRCxPQUFBO0FBQUEsd0JBQ0MsT0FBRztBQUFBLHdCQUFBLGVBQUE7QUFBQSx3QkFFSixLQUFrRCx5QkFBQUEsT0FBQSxFQUFBO0FBQUEsc0JBQUEsR0FBQTtBQUFBLHdCQUFWN0MsSUFBQUEsbUJBQUEsU0FBQTtBQUFBLDBCQUFBLE9BQUE7QUFBQSwwQkFDeEMsS0FBQTZDLE9BQUE7QUFBQSxvQ0FJTyxDQUhELEtBQUEsQ0FBQTtBQUFBLHdCQUFBN0MsSUFBQTtBQUFBLDBCQUNKO0FBQUEsMEJBQTZCLFNBQWxCLGdCQUFVO0FBQUEsMEJBQUM0QyxJQUFBLGdCQUFBQyxPQUFBLElBQUE7QUFBQSwwQkFBQTtBQUFBO0FBQUEsd0JBQUE7QUFBQSx3QkFDdEI3QyxJQUFBQSxtQkFBQSxRQUE2QyxFQUFsQyxPQUFBLFFBQUEsR0FBUztBQUFBLDBCQUFBQSxJQUFBQSxtQkFBQSxRQUFBLEVBQUEsT0FBQSxTQUFBLEdBQUEsR0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIcEMsUUFBSzhDLGNBQVU7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLE9BQU8sQ0FBQyxxQkFBcUIsU0FBUyxVQUFVLFFBQVEsUUFBUSxPQUFPO0FBQUEsSUFDdkUsT0FBTztBQUFBO0FBQUEsTUFFTCxPQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBLE1BQ0QsWUFBWTtBQUFBLFFBQ1YsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsU0FBUztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsS0FBSztBQUFBLFFBQ0gsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsS0FBSztBQUFBLFFBQ0gsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsTUFBTTtBQUFBLFFBQ0osTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsV0FBVztBQUFBLFFBQ1QsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsY0FBYztBQUFBLFFBQ1osTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsVUFBVTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsTUFBTTtBQUFBLFFBQ0osTUFBTSxDQUFDLFFBQVEsTUFBTTtBQUFBLFFBQ3JCLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELE9BQU87QUFBQSxRQUNMLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELFlBQVk7QUFBQSxRQUNWLE1BQU0sQ0FBQyxRQUFRLE1BQU07QUFBQSxRQUNyQixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxhQUFhO0FBQUEsUUFDWCxNQUFNLENBQUMsUUFBUSxNQUFNO0FBQUEsUUFDckIsU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsT0FBTztBQUFBLFFBQ0wsTUFBTSxDQUFDLFFBQVEsTUFBTTtBQUFBLFFBQ3JCLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQTtBQUFBLE1BR0QsZUFBZTtBQUFBLFFBQ2IsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsZUFBZTtBQUFBLFFBQ2IsTUFBTSxDQUFDLFFBQVEsTUFBTTtBQUFBLFFBQ3JCLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELFdBQVc7QUFBQSxRQUNULE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELFdBQVc7QUFBQSxRQUNULE1BQU0sQ0FBQyxRQUFRLE1BQU07QUFBQSxRQUNyQixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxpQkFBaUI7QUFBQSxRQUNmLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUEsSUFDRjtBQUFBLElBQ0QsT0FBTztBQUFBLE1BQ0wsU0FBUyxJQUFJLElBQUk7QUFFZixZQUFJLENBQUMsS0FBSyxpQkFBaUI7QUFDekIsZUFBSyxXQUFXO0FBSWhCLGVBQUssVUFBVSxXQUFZO0FBQ3pCLGlCQUFLLGtCQUFrQjtBQUFBLFdBQ3hCO0FBQUEsUUFDSDtBQUFBLE1BQ0Q7QUFBQSxNQUNELFNBQVMsSUFBSSxJQUFJO0FBRWYsWUFBSSxNQUFNO0FBQUk7QUFDZCxZQUFJLFFBQVE7QUFFWixZQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDMUIsWUFBSSxPQUFPLE1BQU0sS0FBSyxPQUFPLE1BQU0sS0FBSztBQUFLLGtCQUFRO0FBQUE7QUFDaEQsa0JBQVE7QUFFYixZQUFJLEtBQUssaUJBQWlCO0FBRXhCLGNBQUksS0FBSyxLQUFLLE9BQU8sRUFBRSxFQUFFLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDNUMsb0JBQVE7QUFFUixpQkFBSyxVQUFVLE1BQU07QUFDbkIsbUJBQUssV0FBVztBQUFBLGFBQ2pCO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFFQSxhQUFLLGFBQWEsT0FBTyxRQUFRO0FBQUEsTUFDbEM7QUFBQSxNQUNELElBQUksSUFBSTtBQUNOLFlBQUksT0FBTyxVQUFhLE1BQU0sTUFBTSxLQUFLLFdBQVcsSUFBSTtBQUN0RCxlQUFLLE1BQU0sU0FBUyxFQUFFO0FBQ3RCLGVBQUssTUFBTSxxQkFBcUIsRUFBRTtBQUFBLFFBQ3BDO0FBQUEsTUFDRDtBQUFBLE1BQ0QsSUFBSSxJQUFJO0FBQ04sWUFBSSxPQUFPLFVBQWEsTUFBTSxNQUFNLEtBQUssV0FBVyxJQUFJO0FBQ3RELGVBQUssTUFBTSxTQUFTLEVBQUU7QUFDdEIsZUFBSyxNQUFNLHFCQUFxQixFQUFFO0FBQUEsUUFDcEM7QUFBQSxNQUNEO0FBQUEsSUFDRjtBQUFBLElBQ0QsT0FBTztBQUNMLGFBQU87QUFBQSxRQUNMLFVBQVU7QUFBQTtBQUFBLFFBQ1YsT0FBTztBQUFBO0FBQUEsUUFDUCxpQkFBaUI7QUFBQTtBQUFBLFFBQ2pCLGtCQUFrQjtBQUFBO0FBQUEsTUFDcEI7QUFBQSxJQUNEO0FBQUEsSUFDRCxVQUFVO0FBQ1IsV0FBSyxXQUFXLE9BQU8sS0FBSyxRQUFRO0FBQUEsSUFDckM7QUFBQSxJQUNELFVBQVU7QUFBQSxNQUNSLFdBQVc7QUFNVCxlQUFPLEtBQUs7QUFBQSxNQUViO0FBQUEsTUFDRCxtQkFBbUI7QUFFakIsZUFBTyxPQUFPLElBQUksT0FBTyxLQUFLLGFBQWEsQ0FBQztBQUFBLE1BQzdDO0FBQUEsSUFDRjtBQUFBLElBQ0QsU0FBUztBQUFBO0FBQUEsTUFFUCxjQUFjLFVBQVU7QUFFdEIsYUFBSyxRQUFRLEVBQUU7QUFFZixZQUFJLENBQUMsS0FBSztBQUFXO0FBQ3JCLHNCQUFjLEtBQUssS0FBSztBQUN4QixhQUFLLFFBQVE7QUFDYixhQUFLLFFBQVEsWUFBWSxNQUFNO0FBRTdCLGVBQUssUUFBUSxFQUFFO0FBQUEsUUFDakIsR0FBRyxLQUFLLFNBQVM7QUFBQSxNQUNsQjtBQUFBLE1BQ0QsYUFBYTtBQUNYLGFBQUssVUFBVSxNQUFNO0FBQ25CLHdCQUFjLEtBQUssS0FBSztBQUN4QixlQUFLLFFBQVE7QUFBQSxTQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0QsUUFBUTtBQUNOLGFBQUssV0FBVyxPQUFPO0FBQUEsTUFDeEI7QUFBQSxNQUNELE9BQU87QUFDTCxhQUFLLFdBQVcsTUFBTTtBQUFBLE1BQ3ZCO0FBQUE7QUFBQSxNQUVELFNBQVMsTUFBTSxNQUFNO0FBQ25CLFlBQUksU0FBUyxVQUFVO0FBQ3ZCLFlBQUk7QUFDRixxQkFBVyxLQUFLLFNBQVUsRUFBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFBQSxRQUMzQyxTQUFTcEMsSUFBRztBQUNWLHFCQUFXO0FBQUEsUUFDYjtBQUNBLFlBQUk7QUFDRixxQkFBVyxLQUFLLFNBQVUsRUFBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFBQSxRQUMzQyxTQUFTQSxJQUFHO0FBQ1YscUJBQVc7QUFBQSxRQUNiO0FBQ0Esa0JBQVUsS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLFVBQVUsUUFBUSxDQUFDO0FBQ25ELFlBQUksWUFBWSxZQUFZLFdBQVcsV0FBVztBQUNsRCxpQkFBUyxPQUFPLFVBQVUsT0FBTyxXQUFXLFNBQVMsUUFBUSxTQUFTO0FBQUEsTUFDdkU7QUFBQTtBQUFBLE1BRUQsVUFBVSxNQUFNLE1BQU07QUFDcEIsWUFBSSxTQUFTLFVBQVU7QUFDdkIsWUFBSTtBQUNGLHFCQUFXLEtBQUssU0FBVSxFQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRTtBQUFBLFFBQzNDLFNBQVNBLElBQUc7QUFDVixxQkFBVztBQUFBLFFBQ2I7QUFDQSxZQUFJO0FBQ0YscUJBQVcsS0FBSyxTQUFVLEVBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQUEsUUFDM0MsU0FBU0EsSUFBRztBQUNWLHFCQUFXO0FBQUEsUUFDYjtBQUNBLGtCQUFVLEtBQUssSUFBSSxJQUFJLEtBQUssSUFBSSxVQUFVLFFBQVEsQ0FBQztBQUNuRCxZQUFJLFlBQVksWUFBWSxXQUFXLFdBQVc7QUFDbEQsaUJBQVMsT0FBTyxVQUFVLE9BQU8sV0FBVyxTQUFTLFFBQVEsU0FBUztBQUFBLE1BQ3ZFO0FBQUEsTUFDRCxXQUFXLE1BQU07QUFDZixZQUFJLGFBQWE7QUFDakIsWUFBSSxLQUFLO0FBQVU7QUFDbkIsWUFBSSxRQUFRO0FBR1osWUFBSSxTQUFTLFNBQVM7QUFDcEIsY0FBSSxLQUFLLFlBQVksS0FBSyxLQUFLLFlBQVksS0FBSyxXQUFXO0FBQ3pELG9CQUFRLEtBQUs7QUFBQSxpQkFDUjtBQUNMLG9CQUFRLEtBQUssVUFBVSxLQUFLLFVBQVUsS0FBSyxJQUFJO0FBQUEsVUFDakQ7QUFBQSxtQkFDUyxTQUFTLFFBQVE7QUFDMUIsY0FBSSxLQUFLLFlBQVksS0FBSyxLQUFLLFdBQVcsS0FBSyxXQUFXO0FBQ3hELG9CQUFRLEtBQUs7QUFBQSxpQkFDUjtBQUNMLG9CQUFRLEtBQUssU0FBUyxLQUFLLFVBQVUsS0FBSyxJQUFJO0FBQUEsVUFDaEQ7QUFBQSxRQUNGO0FBQ0EsWUFBSSxLQUFLLGNBQWM7QUFDckIsY0FBSSxXQUFXLFFBQVEsS0FBSztBQUM1QixjQUFJLFdBQVcsR0FBRztBQUNoQixxQkFBUztBQUFBLFVBQ1g7QUFBQSxRQUNGO0FBQ0EsWUFBSSxRQUFRLEtBQUssS0FBSztBQUNwQixrQkFBUSxLQUFLO0FBQUEsbUJBQ0osUUFBUSxLQUFLLEtBQUs7QUFDM0Isa0JBQVEsS0FBSztBQUFBLFFBQ2Y7QUFFQSxhQUFLLFdBQVc7QUFDaEIsYUFBSyxhQUFhLE9BQU8sSUFBSTtBQUFBLE1BQzlCO0FBQUE7QUFBQSxNQUVELE9BQU8sT0FBTztBQUNaLFlBQUksTUFBTTtBQUNWLFlBQUksUUFBUSxNQUFNLE9BQU87QUFHekIsWUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUs7QUFBRyxnQkFBTSxLQUFLO0FBQ3hELGNBQU0sQ0FBQztBQUdQLFlBQUksS0FBSyxZQUFZLEtBQUssS0FBSyxXQUFXLEtBQUssYUFBYSxLQUFLLFdBQVcsR0FBRztBQUM3RSxnQkFBTSxLQUFLO0FBQUEsUUFDYjtBQUVBLFlBQUksS0FBSyxjQUFjO0FBQ3JCLGNBQUksV0FBVyxNQUFNLEtBQUs7QUFDMUIsY0FBSSxXQUFXLEdBQUc7QUFDaEIsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUNBLFlBQUksTUFBTSxLQUFLLEtBQUs7QUFDbEIsZ0JBQU0sS0FBSztBQUFBLFFBQ2IsV0FBVyxNQUFNLEtBQUssS0FBSztBQUN6QixnQkFBTSxLQUFLO0FBQUEsUUFDYjtBQUNBLGFBQUssVUFBVSxNQUFNO0FBQ25CLGVBQUssV0FBVztBQUFBLFNBQ2pCO0FBQ0QsYUFBSyxhQUFhLEtBQUssTUFBTTtBQUFBLE1BQzlCO0FBQUEsTUFDRCxhQUFhLE9BQU8sTUFBTTtBQUN4QixZQUFJLEtBQUs7QUFBVTtBQUVuQixZQUFJLEtBQUssa0JBQWtCO0FBQ3pCLHVCQUFhLEtBQUssZ0JBQWdCO0FBQ2xDLGVBQUssbUJBQW1CO0FBQUEsUUFDMUI7QUFFQSxhQUFLLGtCQUFrQjtBQUd2QixhQUFLLG1CQUFtQixXQUFXLE1BQU07QUFDdkMsZUFBSyxrQkFBa0I7QUFBQSxRQUN4QixHQUFFLEdBQUc7QUFDTixhQUFLLE1BQU0sU0FBUyxPQUFPLEtBQUssQ0FBQztBQUNqQyxhQUFLLE1BQU0scUJBQXFCLE9BQU8sS0FBSyxDQUFDO0FBQzdDLGFBQUssTUFBTSxNQUFNO0FBQUE7QUFBQSxVQUVmLE9BQU8sT0FBTyxLQUFLO0FBQUEsVUFDbkIsT0FBTyxLQUFLO0FBQUEsU0FDYjtBQUFBLE1BQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlELFNBQVMsT0FBTztBQUNkLGVBQU8sOENBQThDLEtBQUssS0FBSztBQUFBLE1BQ2hFO0FBQUEsSUFDRjtBQUFBLEVBQ0g7OzRCQXRaRWIsSUErQ08sbUJBQUEsUUFBQSxFQS9DRCxPQUFNLDhCQUEwQjtBQUFBLE1BQ3BDRyxJQUFBQTtBQUFBQSxRQWNPO0FBQUEsUUFBQTtBQUFBLFVBYkwsT0FKTjJDLG9CQUlZLGdCQUFjLEVBQUEsbUJBQ1MsbUJBQVksTUFBQSxZQUFZLE9BQUcsSUFBQSxDQUFBLENBQUE7QUFBQSxVQUN2RCxPQU5QN0MsSUFBQUEsZUFBQTtBQUFBLHdCQU1nQixPQUFBO0FBQUEsb0JBQUEsT0FBQSxjQUFBO0FBQUEsbUJBQUEsT0FBQTtBQUFBLHNCQUFBLE9BQUEsT0FBQTtBQUFBOztVQU9ULGNBQVUsT0FBQSxDQUFBLE1BQUEsT0FBQSxDQUFBLElBYmpCaUQsOEJBYTJCLFNBQWEsY0FBQSxPQUFBLEdBQUEsQ0FBQSxTQUFBLENBQUE7QUFBQSxVQUNqQyxZQUFRLE9BQUEsQ0FBQSxNQUFBLE9BQUEsQ0FBQSxJQWRmQSxJQUFBQSwyQkFjOEIsU0FBVSxjQUFBLFNBQUEsV0FBQSxHQUFBLElBQUEsR0FBQSxDQUFBLFFBQUEsU0FBQSxDQUFBO0FBQUE7O1VBRWxDL0MsSUFBQUE7QUFBQUEsWUFBa0Y7QUFBQSxZQUFBO0FBQUEsY0FBM0UsT0FoQmJGLElBQUFBLGVBQUEsZ0JBZ0JvQyxPQUFPLE9BQUksSUFBQSxJQUFBLE1BQUEsS0FBQTtBQUFBLGNBQWlCLE9BQU07QUFBQTtZQUFVO0FBQUEsWUFBQztBQUFBO0FBQUEsVUFBQTtBQUFBOzs7O3lCQUU3RUUsSUFlRSxtQkFBQSxTQUFBO0FBQUEsUUFqQ04sdUJBQUEsT0FBQSxDQUFBLE1BQUEsT0FBQSxDQUFBLElBQUEsWUFtQmUsTUFBUSxXQUFBO0FBQUEsUUFDaEIsVUFBVSxPQUFhLGlCQUFJLE9BQVE7QUFBQSxRQUNuQyxrQkFBZ0IsU0FBZ0I7QUFBQSxRQUNoQyxPQXRCUDJDLElBQUEsZUFBQSxDQUFBLEVBQUEsb0JBc0JvQyxPQUFRLFNBQUEsR0FDaEMsZ0JBQWdCLENBQUE7QUFBQSxRQUN0QixNQUFLO0FBQUEsUUFDSixPQXpCUDdDLElBQUFBLGVBQUE7QUFBQSxpQkF5QmdCLE9BQUE7QUFBQSxvQkFBQSxPQUFBLE9BQUE7QUFBQSxzQkFBQSxPQUFBO0FBQUEsa0JBQUEsT0FBQSxjQUFBO0FBQUEsaUJBQUEsT0FBQSxhQUFBO0FBQUE7UUFPVCwrQ0FBTSxTQUFNLFVBQUEsU0FBQSxPQUFBLEdBQUEsSUFBQTtBQUFBO3lCQWJKLE1BQVEsUUFBQTtBQUFBO01BZW5CRSxJQUFBQTtBQUFBQSxRQWNPO0FBQUEsUUFBQTtBQUFBLFVBYkwsT0FuQ04yQyxvQkFtQ1ksZUFBYSxFQUFBLG1CQUNVLG1CQUFZLE1BQUEsWUFBWSxPQUFHLElBQUEsQ0FBQSxDQUFBO0FBQUEsVUFDdkQsT0FyQ1A3QyxJQUFBQSxlQUFBO0FBQUEsd0JBcUNnQixPQUFBO0FBQUEsb0JBQUEsT0FBQSxjQUFBO0FBQUEsbUJBQUEsT0FBQTtBQUFBLHNCQUFBLE9BQUEsT0FBQTtBQUFBOztVQU9ULGNBQVUsT0FBQSxDQUFBLE1BQUEsT0FBQSxDQUFBLElBNUNqQmlELDhCQTRDMkIsU0FBYSxjQUFBLE1BQUEsR0FBQSxDQUFBLFNBQUEsQ0FBQTtBQUFBLFVBQ2pDLFlBQVEsT0FBQSxDQUFBLE1BQUEsT0FBQSxDQUFBLElBN0NmQSxJQUFBQSwyQkE2QzhCLFNBQVUsY0FBQSxTQUFBLFdBQUEsR0FBQSxJQUFBLEdBQUEsQ0FBQSxRQUFBLFNBQUEsQ0FBQTtBQUFBOztVQUVsQy9DLElBQUFBO0FBQUFBLFlBQWtGO0FBQUEsWUFBQTtBQUFBLGNBQTNFLE9BL0NiRixJQUFBQSxlQUFBLGdCQStDb0MsT0FBTyxPQUFJLElBQUEsSUFBQSxNQUFBLEtBQUE7QUFBQSxjQUFpQixPQUFNO0FBQUE7WUFBVTtBQUFBLFlBQUM7QUFBQTtBQUFBLFVBQUE7QUFBQTs7Ozs7OztBQy9DakYsTUFBSSxXQUFXLENBQUU7QUFVakIsYUFBVztBQUFBLElBQ1YsT0FBTztBQUNOLGFBQU87QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRDtBQUFBLElBQ0QsT0FBTztBQUFBLE1BQ04sS0FBSyxRQUFRO0FBQ1osYUFBSyxVQUFVLEtBQUs7QUFBQSxNQUNwQjtBQUFBLElBQ0Q7QUFBQSxJQUNELFVBQVU7QUFDVCxXQUFLLGNBQWMsS0FBSyxlQUFnQjtBQUN4QyxVQUFJLEtBQUssWUFBWSxhQUFhLFFBQVc7QUFDNUMsYUFBSyxZQUFZLFNBQVMsS0FBSyxJQUFJO0FBQUEsTUFDbkM7QUFBQSxJQUNEO0FBQUEsSUFDRCxVQUFVO0FBQ1QsV0FBSyxVQUFVLEtBQUs7QUFBQSxJQUNwQjtBQUFBLElBQ0QsU0FBUztBQUFBO0FBQUEsTUFFUixXQUFXWSxJQUFHO0FBQ2IsWUFBSSxDQUFDLEtBQUs7QUFBVztBQUNyQixhQUFLLFlBQVksV0FBVyxJQUFJO0FBQUEsTUFDaEM7QUFBQSxNQUVELE9BQU9BLElBQUc7QUFDVCxhQUFLLE1BQU0sVUFBVUEsR0FBRSxJQUFJO0FBQzNCLFlBQUksS0FBSyxZQUFZQSxHQUFFLE1BQU07QUFDNUIsZUFBSyxVQUFVQSxHQUFFO0FBQUEsUUFDakI7QUFBQSxNQUNEO0FBQUEsTUFFRCxjQUFjQSxJQUFHO0FBRWhCLGNBQU07QUFBQSxVQUNMO0FBQUEsUUFDSixJQUFPQSxHQUFFLGVBQWUsQ0FBQztBQUN0QixhQUFLLFVBQVU7QUFDZixhQUFLLGFBQVksb0JBQUksS0FBSSxHQUFHLFFBQVM7QUFBQSxNQUNyQztBQUFBLE1BQ0QsWUFBWUEsSUFBRyxPQUFPLE1BQU0sVUFBVTtBQUVyQyxjQUFNO0FBQUEsVUFDTDtBQUFBLFFBQ0osSUFBT0EsR0FBRSxlQUFlLENBQUM7QUFFdEIsWUFBSSxPQUFPLEtBQUssSUFBSSxLQUFLLFVBQVUsT0FBTztBQUMxQyxZQUFJLFFBQVEsb0JBQUksS0FBTSxHQUFDLFFBQU8sSUFBTSxLQUFLO0FBQ3pDLFlBQUksT0FBTyxNQUFNLE9BQU8sS0FBSztBQUM1QixlQUFLLE1BQU0sU0FBUztBQUFBLFlBQ25CLFNBQVM7QUFBQSxZQUNUO0FBQUEsWUFDQTtBQUFBLFVBQ0wsQ0FBSztBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDRCxhQUFhLE9BQU8sTUFBTSxVQUFVO0FBQ3ZCO0FBQUEsTUFRWjtBQUFBLElBQ0Q7QUFBQSxFQUNGO0FBR2UsUUFBQSxRQUFBO0FDbEZmLE1BQUksaUJBQWlCLENBQUE7QUNBckIsTUFBSSxjQUFjLENBQUE7Ozs7Ozs7OztBQ29KakIsUUFBS29DLGNBQVU7QUFBQSxJQUNkLFFBQVEsQ0FBQyxPQUFPRSxnQkFBVUMsV0FBTztBQUFBLElBQ2pDLE9BQU8sQ0FBQyxTQUFTLFFBQVE7QUFBQSxJQUN6QixPQUFPO0FBQUE7QUFBQSxNQUVOLE1BQU07QUFBQSxRQUNMLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNUO0FBQUE7QUFBQSxNQUdELFVBQVU7QUFBQSxRQUNULE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNUO0FBQUE7QUFBQSxNQUdELFdBQVc7QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNUO0FBQUE7QUFBQSxNQUdELFdBQVc7QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNUO0FBQUE7QUFBQSxNQUdELGFBQWE7QUFBQSxRQUNaLE1BQU07QUFBQSxRQUNOLFVBQVc7QUFDVixpQkFBTyxDQUFDO0FBQUEsUUFDVDtBQUFBLE1BQ0E7QUFBQTtBQUFBLE1BR0QsY0FBYztBQUFBLFFBQ2IsTUFBTTtBQUFBLFFBQ04sVUFBVztBQUNWLGlCQUFPLENBQUM7QUFBQSxRQUNUO0FBQUEsTUFDRDtBQUFBLElBRUE7QUFBQTtBQUFBLElBVUQsWUFBWTtBQUNYLFdBQUssZ0JBQWdCO0FBQ3JCLFdBQUssVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUdELFNBQVM7QUFBQSxNQUNSLFlBQVk7QUFDWCxZQUFJLEtBQUssYUFBYTtBQUNyQixlQUFLLFlBQVksU0FBUyxRQUFRLENBQUMsTUFBTSxVQUFVO0FBQ2xELGdCQUFJLFNBQVMsTUFBTTtBQUNsQixtQkFBSyxZQUFZLFNBQVMsT0FBTyxPQUFPLENBQUM7QUFBQSxZQUMxQztBQUFBLFdBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSUQsZUFBZSxPQUFPLGtCQUFrQjtBQUN2QyxZQUFJLFNBQVMsS0FBSztBQUNsQixZQUFJLGFBQWEsT0FBTyxTQUFTO0FBQ2pDLGVBQU8sZUFBZSxNQUFNO0FBQzNCLG1CQUFTLE9BQU87QUFDaEIsY0FBSSxDQUFDO0FBQVEsbUJBQU87QUFDcEIsdUJBQWEsT0FBTyxTQUFTO0FBQUEsUUFDOUI7QUFDQSxlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Q7QUFBQSxFQUNEOztBQXhPRCxXQUFBckQsY0FBQSxHQUFBQztNQUFBSSxJQUFBQTtBQUFBQSxNQUFBO0FBQUEsTUFBQTtBQUFBLFFBQ0NGLElBQUFBLG1CQUFtQyw4QkFBQTtBQUFBLFFBRW5DQyxJQUFBQSxtQkF1Q1EsUUFBQSxFQXZDRixPQUFNLFlBQVcsR0FBQTtBQUFBLFVBRXRCQSxJQUFBQSxtQkFvQ1EsUUFBQTtBQUFBLFlBcENGLE9BQU07QUFBQSxZQUFpQixlQUFhLEtBQVEsU0FBQztBQUFBLFlBQVksYUFBTSxLQUFPLE9BQUE7QUFBQSxZQUFHLGtCQUFnQixPQUFTO0FBQUEsWUFDdEcsaUJBQWUsT0FBUTtBQUFBLFlBQUcscURBQVksS0FBUSxTQUFDLGNBQVQsS0FBQSxTQUFTLFdBQVUsR0FBQSxJQUFBO0FBQUEsWUFBRyxvREFBVyxLQUFRLFNBQUMsYUFBVCxLQUFBLFNBQVMsVUFBUyxHQUFBLElBQUE7QUFBQSxZQUN6RixtREFBVSxLQUFRLFNBQUMsWUFBVCxLQUFBLFNBQVMsU0FBUSxHQUFBLElBQUE7QUFBQTtZQU8zQkQsSUFBQUEsbUJBQW1DLDhCQUFBO0FBQUEsWUFDbkNDLElBQUFBLG1CQVdPLFFBQUEsRUFYRCxPQUFNLDRDQUEyQyxHQUFBO0FBQUEsY0FDdERrRCxJQUFBQSxXQVNPLHlCQVRQLE1BU087QUFBQSxpQkFSTnRELElBQUFBLFVBQUEsSUFBQSxHQUFBQyxJQUFBO0FBQUEsa0JBT09JOztrQkF4QmJDLElBaUJtQyxXQUFBLE9BQUEsYUFqQm5DLENBaUJvQixNQUFLLFVBQUs7NENBQXhCTCxJQU9PLG1CQUFBLFFBQUE7QUFBQSxzQkFQb0MsS0FBSztBQUFBLHNCQUFRLE9BakI5REMsSUFBQUEsZUFBQTtBQUFBLHdCQWlCdUUsaUJBQUEsS0FBQSxTQUFBLEtBQUEsTUFBQSxrQkFBQSxLQUFBLE1BQUEsa0JBQUE7QUFBQTtzQkFFL0QsT0FBTTtBQUFBLHNCQUFnQyxxREFBWSxLQUFhLGlCQUFBLEtBQUEsY0FBQSxHQUFBLElBQUE7QUFBQSxzQkFDL0Qsd0JBQVUsS0FBVyxZQUFDLFFBQU8sT0FBTSxNQUFJLE1BQUE7QUFBQSxzQkFDdkMsU0FyQlJpRCxJQXFCb0IsY0FBQSxZQUFBLEtBQUEsYUFBYSxPQUFNLE1BQUksTUFBQSxHQUFBLENBQUEsTUFBQSxDQUFBO0FBQUE7c0JBQ3BDL0MsSUFBQUE7QUFBQUEsd0JBQ2tMO0FBQUEsd0JBQUE7QUFBQSwwQkFENUssT0FBTTtBQUFBLDBCQUNWLE9BdkJURixJQUFBLGVBQUEsRUFBQSxPQXVCd0IsS0FBSyxTQUFTLEtBQUssTUFBTSxRQUFRLEtBQUssTUFBTSxRQUFLLFdBQUEsVUFBdUIsS0FBSyxTQUFTLEtBQUssTUFBTSxXQUFXLEtBQUssTUFBTSxXQUFRLE9BQUEsQ0FBQTtBQUFBLHdCQUFlO0FBQUEsd0JBQUE4QyxvQkFBQSxLQUFLLElBQUk7QUFBQSx3QkFBQTtBQUFBO0FBQUEsc0JBQUE7QUFBQTs7Ozs7OztZQUkzSzVDLElBQUFBLG1CQUVPLFFBQUEsRUFGRCxPQUFNLHlCQUF3QixHQUFBO0FBQUEsY0FDbkNrRCxJQUFhLFdBQUEsS0FBQSxRQUFBLFdBQUEsQ0FBQSxHQUFBLFFBQUEsSUFBQTtBQUFBO1lBRWRsRCxJQUFBQSxtQkFVTyxRQUFBLEVBVkQsT0FBTSw2Q0FBNEMsR0FBQTtBQUFBLGNBQ3ZEa0QsSUFBQUEsV0FRTywwQkFSUCxNQVFPO0FBQUEsaUJBUE50RCxJQUFBQSxVQUFBLElBQUEsR0FBQUMsSUFBQTtBQUFBLGtCQU1PSTs7a0JBdENiQyxJQWdDbUMsV0FBQSxPQUFBLGNBaENuQyxDQWdDb0IsTUFBSyxVQUFLOzRDQUF4QkwsSUFNTyxtQkFBQSxRQUFBO0FBQUEsc0JBTnFDLEtBQUs7QUFBQSxzQkFBUSxPQWhDL0RDLElBQUFBLGVBQUE7QUFBQSx3QkFnQ3dFLGlCQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsa0JBQUEsS0FBQSxNQUFBLGtCQUFBO0FBQUE7c0JBRWhFLE9BQU07QUFBQSxzQkFBZ0MscURBQVksS0FBYSxpQkFBQSxLQUFBLGNBQUEsR0FBQSxJQUFBO0FBQUEsc0JBQy9ELHdCQUFVLEtBQVcsWUFBQyxRQUFPLE9BQU0sTUFBSSxPQUFBO0FBQUEsc0JBQ3ZDLFNBcENSaUQsSUFvQ29CLGNBQUEsWUFBQSxLQUFBLGFBQWEsT0FBTSxNQUFJLE9BQUEsR0FBQSxDQUFBLE1BQUEsQ0FBQTtBQUFBO3NCQUFXL0MsSUFBQUE7QUFBQUEsd0JBQ21JO0FBQUEsd0JBQUE7QUFBQSwwQkFEN0gsT0FBTTtBQUFBLDBCQUN6RCxPQXJDVEYsSUFBQSxlQUFBLEVBQUEsT0FxQ3dCLEtBQUssU0FBUyxLQUFLLE1BQU0sUUFBUSxLQUFLLE1BQU0sUUFBSyxXQUFBLFVBQXVCLEtBQUssU0FBUyxLQUFLLE1BQU0sV0FBVyxLQUFLLE1BQU0sV0FBUSxPQUFBLENBQUE7QUFBQSx3QkFBZTtBQUFBLHdCQUFBOEMsb0JBQUEsS0FBSyxJQUFJO0FBQUEsd0JBQUE7QUFBQTtBQUFBLHNCQUFBO0FBQUE7Ozs7Ozs7OztRQU83SzdDLElBQUFBLG1CQUE4Qix5QkFBQTtBQUFBLFFBNEI5QkEsSUFBQUEsbUJBQThCLHlCQUFBO0FBQUE7Ozs7Ozs7Ozs7QUM1RC9CLFFBQUsrQyxjQUFVO0FBQUEsSUFDZCxNQUFLO0FBQUEsSUFDTCxPQUFPO0FBQ04sYUFBTztJQUNQO0FBQUEsSUFDRCxVQUFVO0FBQ1QsV0FBSyxXQUFXO0lBQ2hCO0FBQUEsSUFDRCxTQUFTO0FBQUE7QUFBQSxNQUVSLFNBQVE7QUFBQSxNQU9QO0FBQUE7QUFBQSxNQUVELFdBQVU7QUFDVCxhQUFLLFNBQVMsUUFBUSxRQUFJO0FBRXpCLGFBQUcsVUFBVTtBQUFBLFNBTWI7QUFBQSxNQUNEO0FBQUEsTUFDRCxXQUFXLElBQUk7QUFDZCxZQUFJLEtBQUssWUFBWSxLQUFLLGFBQWEsSUFBSTtBQUUxQyxlQUFLLFNBQVMsVUFBVTtBQUFBLFFBTXpCO0FBRUEsYUFBSyxXQUFXO0FBQUEsTUFDakI7QUFBQSxJQUNEO0FBQUE7OzRCQXRERGpELHVCQUVPLFFBQUEsTUFBQTtBQUFBLE1BRE5xRCxlQUFhLEtBQUEsUUFBQSxTQUFBO0FBQUE7Ozs7OztBQ0tmLFlBQU0sYUFBbUM7QUFBQSxRQUN2QyxNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsTUFBQTtBQUdOLFlBQUEsWUFBWS9DLFFBQWlCLENBQUEsQ0FBRTtBQUUvQixZQUFBLFNBQVNBLFFBQUksS0FBSztBQUV4QixZQUFNLDRCQUE0QixZQUFZO0FBRXhDLFlBQUEsT0FBTyxVQUFVLE1BQU07QUFDekIsaUJBQU8sSUFBSSxVQUFVLEVBQUUsTUFBTSxRQUFRLE9BQU8sV0FBVztBQUFBLFFBQ3pEO0FBQ00sY0FBQSxNQUFNLE1BQU0seUJBQXlCLFVBQVU7QUFHckQsa0JBQVUsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUs7QUFFeEMsWUFBSSxXQUFXLE9BQU8sSUFBSSxPQUFPLE9BQU87QUFFM0IscUJBQUE7QUFBQSxRQUFBLE9BQ047QUFDTCxpQkFBTyxRQUFRO0FBQUEsUUFDakI7QUFBQSxNQUFBO0FBR0YsWUFBTSxZQUFZLE1BQU07QUFDdEIsbUJBQVcsT0FBTztBQUNsQixrQkFBVSxRQUFRO0FBQ2xCLGVBQU8sUUFBUTtBQUFBLE1BQUE7QUFHakJnRCxVQUFBQSxVQUFVLE1BQU07QUFDWTtNQUFBLENBQzNCO0FBRVksZUFBQTtBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVM7QUFBQSxNQUFBLENBQ1Y7Ozs7OztXQ0lDeEQsY0FBYSxNQUFBLFFBQUEsUUFBQSxRQUFBLE9BQUEsVUFBQTtXQUNiQyxJQUFBQSxVQUVPLEdBQUFDLElBQUE7QUFBQSxNQUZLSSxJQUFBO0FBQUEsTUFBUztBQUFBLE1BQUE7QUFBQSxRQUFBRixJQUFBQSxtQkFDbkIsUUFBOEI7QUFBQSxRQUFBQyxJQUFBQSxtQkFBQSxRQUFBLEVBQUEsT0FBQSxVQUFBLEdBQUE7QUFBQSxVQUVoQ0EsSUFBQUEsbUJBY08sUUFkRCxTQUFNLE9BQU8sR0FBQSxNQUFBO0FBQUEsUUFBQSxDQUFBO0FBQUEsdUNBQ2pCLEVBWVksT0FBQSxRQUFBLEdBQUE7QUFBQSxXQVhKSixJQUFBLFVBQUEsSUFBQSxHQUFBQyxJQUFBO0FBQUEsWUFBWUksSUFBQTtBQUFBLFlBQUE7QUFBQSxZQUFBQyxJQUFBQSxXQUFBLE9BQUEsV0FBQSxDQUFBLFNBQUE7cUJBRVpOLElBQU8sVUFBQSxHQUFBQyxJQUFBLG1CQUFBLGFBQUE7QUFBQSxnQkFDWixPQUFHO0FBQUEsZ0JBQUEsS0FBQSxLQUFBO0FBQUEsZ0JBRUosS0FBbUUseUJBQUEsS0FBQSxFQUFBO0FBQUEsY0FBQSxHQUFBO0FBQUEsZ0JBQTdCRyxJQUFBQSxtQkFBQSxTQUFBO0FBQUEsa0JBQUUsT0FBSztBQUFBLGtCQUFBLE1BQUE7QUFBQSxrQkFDN0MsS0FBQSxLQUFBO0FBQUEsNEJBSU8sQ0FIRCxLQUFBLENBQUE7QUFBQSxnQkFBQUEsSUFBQTtBQUFBLGtCQUNKO0FBQUEsa0JBQTRCLFNBQWpCLE9BQUM7QUFBQSxrQkFBTzRDLElBQUUsZ0JBQUEsS0FBQSxJQUFBO0FBQUEsa0JBQUE7QUFBQTtBQUFBLGdCQUFBO0FBQUEsZ0JBQUE1QyxJQUFBQSxtQkFDckIsUUFBNkIsRUFBQSxPQUFBLFFBQUEsR0FBQTtBQUFBLGtCQUFBQSxJQUFBQSxtQkFBQSxRQUFBLEVBQUEsT0FBQSxRQUFBLEdBQUEsR0FBQTtBQUFBOzs7Ozs7Ozs7WUFJbkMsQ0FBQTtBQUFBLFlBQUE7QUFBQTtBQUFBLFVBQU07QUFBQSxRQUFBLENBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztBQ2hFRCxRQUFNLGVBQWUsTUFBTTtBQUVoQyxVQUFNLFdBQVdHLElBQUFBO0FBR2pCLFVBQU0sa0JBQWtCLE1BQU07O0FBQzVCLHFCQUFTLFVBQVQsbUJBQWdCO0FBQUEsSUFBUTtBQUluQixXQUFBO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUFBO0FBQUEsRUFFSjtBQ2RhLFFBQUEsb0JBQW9CLENBQUMsU0FBMkM7QUFDM0UsV0FBTyxLQUFLO0FBQUEsTUFDVixRQUFRO0FBQUEsTUFDUixLQUFLO0FBQUEsTUFDTDtBQUFBLElBQUEsQ0FDRDtBQUFBLEVBQ0g7QUFLTyxRQUFNLG1CQUFtQixNQUFNO0FBQ3BDLFdBQU8sS0FBaUI7QUFBQSxNQUN0QixRQUFRO0FBQUEsTUFDUixLQUFLO0FBQUEsSUFBQSxDQUNOO0FBQUEsRUFDSDtBQU1hLFFBQUEsc0JBQXNCLENBQUMsU0FBNEI7QUFDOUQsV0FBTyxLQUFLO0FBQUEsTUFDVixRQUFRO0FBQUEsTUFDUixLQUFLO0FBQUEsTUFDTDtBQUFBLElBQUEsQ0FDRDtBQUFBLEVBQ0g7QUFPYSxRQUFBLDBCQUEwQixDQUNyQyxPQUNBLFNBQ0c7QUFDSCxXQUFPLEtBQUs7QUFBQSxNQUNWLFFBQVE7QUFBQSxNQUNSLEtBQUssZ0JBQWdCLEtBQUs7QUFBQSxNQUMxQjtBQUFBLElBQUEsQ0FDRDtBQUFBLEVBQ0g7QUFNYSxRQUFBLDJCQUEyQixDQUFDLFNBQWdDO0FBQ3ZFLFdBQU8sS0FBSztBQUFBLE1BQ1YsUUFBUTtBQUFBLE1BQ1IsS0FBSztBQUFBLE1BQ0w7QUFBQSxJQUFBLENBQ0Q7QUFBQSxFQUNIOzs7Ozs7OztBQzFDQSxZQUFNLEVBQUUsZUFBQSxJQUFtQixJQUFJLGtCQUFrQjtBQUdqRCxZQUFNLGNBQWM7QUFHZCxZQUFBLFdBQVdBLFFBQWdCLENBQUEsQ0FBRTtBQUU3QixZQUFBLGVBQWVBLFFBQUksSUFBSTtBQUM3QixZQUFNLG9CQUFvQixZQUFZO0FBQzlCLGNBQUEsTUFBTSxNQUFNO0FBQ2xCLGlCQUFTLFFBQVEsSUFBSTtBQUNSLHFCQUFBLFFBQVEsSUFBSSxPQUFPLFNBQVM7QUFBQSxNQUFBO0FBSTNDLGFBQU8sTUFBTTtBQUNYLFlBQUksWUFBWSxTQUFTO0FBQ0w7UUFDcEI7QUFBQSxNQUFBLENBQ0Q7QUFHSyxZQUFBLGVBQWUsQ0FBQyxVQUFrQjtBQUV0QyxZQUFJLFVBQVU7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULGNBQWM7QUFBQSxVQUNkLFNBQVMsT0FBTyxRQUFRO0FBQ3RCLGdCQUFJLElBQUksU0FBUztBQUVmLG9CQUFNLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUcsQ0FBQTtBQUV4QjtZQUNwQjtBQUFBLFVBQ0Y7QUFBQSxRQUFBLENBQ0Q7QUFBQSxNQUFBO0FBSUcsWUFBQSxnQkFBZ0IsQ0FBQyxPQUE0QjtBQUNqRCxnQ0FBd0IsR0FBRyxPQUFPLEVBQUUsT0FBTyxHQUFHLE9BQU87QUFBQSxNQUFBO0FBSWpELFlBQUEsbUJBQW1CLENBQUMsU0FBbUI7QUFFdEMsYUFBQSxXQUFXLENBQUMsS0FBSztBQUV0QixnQ0FBd0IsS0FBSyxPQUFPLEVBQUUsVUFBVSxLQUFLLFVBQVU7QUFBQSxNQUFBO0FBSTNELFlBQUEsZ0JBQWdCMkIsSUFBQUEsU0FBUyxNQUFNO0FBQzVCLGVBQUEsU0FBUyxNQUFNLFVBQVUsU0FBUyxNQUFNLE1BQU0sQ0FBQ1EsT0FBTUEsR0FBRSxRQUFRO0FBQUEsTUFBQSxDQUN2RTtBQUdELFlBQU0sc0JBQXNCLE1BQU07QUFFMUIsY0FBQSxpQkFBaUIsQ0FBQyxjQUFjO0FBRTdCLGlCQUFBLE1BQU0sUUFBUSxDQUFDLFNBQVM7QUFDL0IsZUFBSyxXQUFXO0FBQUEsUUFBQSxDQUNqQjtBQUV3QixpQ0FBQSxFQUFFLFVBQVUsZUFBQSxDQUFnQjtBQUFBLE1BQUE7QUFJakQsWUFBQSxtQkFBbUJSLElBQUFBLFNBQVMsTUFBTTtBQUN0QyxlQUFPLFNBQVMsTUFBTSxPQUFPLENBQUNRLE9BQU1BLEdBQUUsUUFBUTtBQUFBLE1BQUEsQ0FDL0M7QUFHSyxZQUFBLHdCQUF3QlIsSUFBQUEsU0FBUyxNQUFNO0FBQ3BDLGVBQUEsaUJBQWlCLE1BQU0sT0FBTyxDQUFDLEtBQUssU0FBUyxNQUFNLEtBQUssT0FBTyxDQUFDO0FBQUEsTUFBQSxDQUN4RTtBQUdLLFlBQUEsd0JBQXdCQSxJQUFBQSxTQUFTLE1BQU07QUFDM0MsZUFBTyxpQkFBaUIsTUFDckIsT0FBTyxDQUFDLEtBQUssU0FBUyxNQUFNLEtBQUssUUFBUSxLQUFLLFVBQVUsQ0FBQyxFQUN6RCxRQUFRLENBQUM7QUFBQSxNQUFBLENBQ2I7QUFHRCxZQUFNLGNBQWMsTUFBTTtBQUNwQixZQUFBLHNCQUFzQixVQUFVLEdBQUc7QUFDckMsaUJBQU8sSUFBSSxVQUFVO0FBQUEsWUFDbkIsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFVBQUEsQ0FDUjtBQUFBLFFBQ0g7QUFFQSxZQUFJLFdBQVcsRUFBRSxLQUFLLDRCQUE2QixDQUFBO0FBQUEsTUFBQTtBQUlyRCxZQUFNLEVBQUUsVUFBVSxnQkFBZ0IsSUFBSSxhQUFhOzs7Ozs7QUN2SHBDLFFBQUEsZUFBQTs7Ozs7O2dDQzJIYixlQTZGY1csSUFBQUEsd0JBQUEsVUFBQSxHQUFBVyxhQUFBO1dBN0ZrQnhELElBQUFBLFVBQVEsR0FBQUMsSUFBQTtBQUFBLE1BQUE7QUFBQSxNQUFBO0FBQUEsUUFBQyxzQkFBbUI7QUFBQSxRQUFFLFlBQUE7QUFBQSxRQUFBLE9BQUE7QUFBQSxRQUM1RCxpQkFBbUIsT0FBQSxDQUFBLE1BQUEsT0FBQSxDQUFBLElBQUEsSUFBQSxTQUFBLE9BQUEsbUJBQUEsT0FBQSxnQkFBQSxHQUFBLElBQUE7QUFBQSxNQUFBO0FBQUEsTUFDSDtBQUFBLFFBQWhCRSxJQUFBQSxtQkFBQSxjQUFBO0FBQUEsUUFBQSxPQUNFLFlBQzhCLFdBQUFILElBQUFBLFVBQUEsR0FBQUMsSUFBQTtBQUFBLFVBQVlJLElBQUE7QUFBQSxVQUFBLEVBQUEsS0FBQSxFQUFBO0FBQUEsVUFBQTtBQUFBLFlBQTFDRixJQUFBQSxtQkFBQSxTQUFBO0FBQUEsWUFBQSxPQS9ITixpQ0ErSDZCRixJQUFBQSxtQkFBQSxRQUFBO0FBQUEsY0FBQSxLQUFBO0FBQUEsY0FDckIsT0FBQTtBQUFBLFlBQUEsR0FDQTtBQUFBLGNBQUFFLElBQUFBLG1CQUNFLFFBQTZCO0FBQUEsY0FDN0JDLElBQUFBLG1CQUFBLFFBQXVDLEVBQTVCLE9BQUEsT0FBQSxHQUFPO0FBQUEsZ0JBQUFBLElBQUFBLG1CQUFBLFFBQUEsRUFBQSxPQUFBLFFBQUEsR0FBQSxJQUFBO0FBQUEsZ0JBRXBCQSxJQUFBQSxtQkFBZSxRQUFBLEVBQUEsT0FBQSxPQUFBLEdBQUEsZUFBQTtBQUFBLGNBQUEsQ0FDZjtBQUFBLGNBQUFELElBQUFBLG1CQUNFLFVBQWM7QUFBQSxjQUFBSyxJQUFBLFlBQWQsNkJBQWMsTUFBQTtBQUFBLGdCQUNkLFNBQUFpRCxJQUFBLFFBQUEsTUFBQTtBQUFBLGtCQUFBdEQsSUFBQUEsbUJBQUEsU0FBQTtBQUFBLG1CQUFBSCxJQUFBLFVBQXNELElBQUssR0FBS0MsSUFBQTtBQUFBLG9CQUFBSSxJQUFBO0FBQUEsb0JBQUE7QUFBQSxvQkFBQUMsSUFBQUEsV0FBQSxPQUFBLFVBQUEsQ0FBQSxTQUFBO0FBQU8sNkJBQUFOLElBQUFBLFVBQWEsR0FBQTBELElBQUE7QUFBQSx3QkFBQTtBQUFBLHdCQUFBO0FBQUEsMEJBQUEsS0FBQSxLQUFBO0FBQUEsMEJBaUN2RSxPQUFLO0FBQUEsd0JBQUE7QUFBQTswQkFFWixPQUFBRCxJQUFBLFFBQUEsTUFBQTtBQUFBLDRCQUFBckQsSUFBQUEsbUJBQVksUUFBRSxFQUF1QixPQUFBLG1CQUFBLEdBQUE7QUFBQSw4QkFBU0EsSUFBQUEsbUJBQUEsVUFBQTtBQUFBLGdDQUF5QixTQUFBLENBQUEsV0FBQSxPQUFBLGFBQUEsS0FBQSxLQUFBO0FBQUEsZ0NBQUEsT0FBQTtBQUFBOzRCQTNLdkYsQ0FBQTtBQUFBLDBCQUFBLENBQUE7QUFBQSwwQkEySWMsU0FBQXFELElBQUEsUUFBQSxNQUFBO0FBQUEsNEJBQUFyRCxJQUFBQSxtQkFDQSxRQUlRLEVBQUEsT0FBQSxRQUFBLEdBQUE7QUFBQSw4QkFBQUQsSUFBQUEsbUJBSEYsUUFBRTtBQUFBLDhCQUFBQyxJQUFBQSxtQkE3SXRCLFFBOElzQjtBQUFBLGdDQUFBLFNBQUEsQ0FBQSxXQUFBLE9BQUEsaUJBQUEsSUFBQTtBQUFBLGdDQUdSLE9BV1kyQyxJQUFBLGVBQUEsQ0FBQSxZQUFBLEVBQUEsU0FBQSxLQUFBLFNBQUEsQ0FBQSxDQUFBO0FBQUEsOEJBVlQsR0FBQSxNQUFHLElBQTJCLENBQU8sU0FBQSxDQUFBO0FBQUEsOEJBQUEzQyxJQUFBQSxtQkFDMUIsYUFBTTtBQUFBLGdDQUNsQixLQUFLLHlCQUFZLEtBQUEsRUFBQTtBQUFBLGdDQUFBLGVBQUE7QUFBQSxnQ0FFakIsT0FBQTtBQUFBLDhCQUFBLEdBQUE7QUFBQSxnQ0FBd0NBLElBQUFBLG1CQUFBLFNBQUE7QUFBQSxrQ0FBRSxNQUFLO0FBQUEsa0NBQUEsT0FBQTtBQUFBLGtDQUMvQyxLQUFBLEtBQUE7QUFBQSxnQ0FBQSxHQUNFLE1BQWtELEdBQUEsQ0FBQSxLQUFBLENBQUE7QUFBQSxnQ0FDbERBLElBQUFBLG1CQUFBLFFBQTRELFNBQWpELE9BQUMsR0FBQTtBQUFBLGtDQUNaQSxJQUFBO0FBQUEsb0NBQThDO0FBQUEsb0NBQUEsRUFBeEMsT0FBTSxnQkFBTztBQUFBLG9DQUFBNEMsSUFBQSxnQkFBUyxLQUFRLElBQUE7QUFBQSxvQ0FBQTtBQUFBO0FBQUEsa0NBQUE7QUFBQSxrQ0FBQTVDLElBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztnQ0FHeEMsQ0FBQTtBQUFBLDhCQUFBLEdBU08sR0FBQSxDQUFBLEtBQUEsQ0FBQTtBQUFBLDhCQURIRCxJQUFBQSxtQkFBQSxRQUFBO0FBQUEsOEJBQUFDLElBQUFBLG1CQUxhLFFBQU0sRUFBQSxPQUFBLFFBQUEsR0FBQTtBQUFBLGdDQUFBSSxJQUFBQSxZQWhLckMscUNBZ0txQztBQUFBLGtDQUNsQixZQUFNLEtBQUE7QUFBQSxrQ0FDTix1QkFBZSxDQUFBLFdBQUEsS0FBQSxRQUFBO0FBQUEsa0NBQ2YsS0FBSztBQUFBLGtDQUNMLEtBQVEsS0FBQTtBQUFBLGtDQUFBLE9BQUEsS0FBQTtBQUFBOzs7NEJBcEszQixDQUFBO0FBQUEsMEJBQUEsQ0FBQTtBQUFBOzs7Ozs7b0JBQUEsQ0FBQTtBQUFBLG9CQUFBO0FBQUE7QUFBQSxrQkFBQTtBQUFBLGdCQUFBLENBQUE7QUFBQTs7O1lBa0xNLENBQUEsTUFBQVIsSUFBQSxVQUFBLEdBQUFDLElBQUE7QUFBQSxjQUFNSSxJQUFBO0FBQUEsY0FBTSxFQUFZLEtBQUEsRUFBQTtBQUFBLGNBQUE7QUFBQSxnQkFBQUYsSUFBQUEsbUJBQ3RCLFVBQTJEO0FBQUEsZ0JBQWpCQyxJQUFBQSxtQkFBQSxRQUFBLEVBQUEsT0FBQSxhQUFBLEdBQUE7QUFBQSxrQkFBY0EsSUFBQUEsbUJBQUEsU0FBQTtBQUFBLG9CQUFBLEtBQUF1RDtBQUFBQSxvQkFDeEQsT0FBQTtBQUFBLGtCQUFBLENBQ0E7QUFBQSxrQkFBQXZELElBQUFBLG1CQUFlLFFBQW9CLEVBQUEsT0FBQSxPQUFBLEdBQUEsaUJBQUE7QUFBQSxrQkFBQUEsSUFBQUEsbUJBQWEsYUFBTTtBQUFBLG9CQUFBLEtBQUE7QUFBQSxvQkFDcEQsZUFBQTtBQUFBLGtCQUFBLEdBQUE7QUFBQTs7Z0JBR0osQ0FBQTtBQUFBLGNBRVE7QUFBQSxjQUFBO0FBQUE7QUFBQSxZQUFBO0FBQUEsWUFEUkQsSUFBQUEsbUJBQUEsU0FBQTtBQUFBLFlBQUEsT0ExTE4sZ0JBNExjSCxJQUFBLFVBQUEsR0FBQUMsSUFBQTtBQUFBLGNBQVM7QUFBQSxjQUFBO0FBQUEsZ0JBQ2QsS0FBSztBQUFBLGdCQUFBLE9BQUE7QUFBQSxnQkFFTixPQUEwRkMsSUFBQSxlQUFBLEVBQUEsZUFBQSxPQUFBLHdCQUFBLFlBQUEsbUJBQUEsbUJBQUEsVUFBQSxPQUFBLEVBQUEsQ0FBQTtBQUFBLGNBQUE7QUFBQTs7a0JBL0xsRztBQUFBLGtCQStMK0M7QUFBQSxvQkFBNEMsU0FBQSxPQUFBO0FBQUEsb0JBQ25GLE9BQTZCNkMsSUFBQSxlQUFBLENBQUEsT0FBdkIsRUFBSyxTQUFPLE9BQUMsY0FBRyxDQUFBLENBQUE7QUFBQSxrQkFDdEI7QUFBQSxrQkFBQTtBQUFBLGtCQUFBO0FBQUE7QUFBQSxnQkFBdUQ7QUFBQSxnQkFDdkQzQyxJQUFBQSxtQkFRTyxRQVJELEVBQUEsT0FBTSxPQUFlLEdBQUEsS0FBQTtBQUFBLGdCQUFBQSxJQUFBO0FBQUEsa0JBQ3pCO0FBQUEsa0JBTU8sRUFBQSxPQUFBLFNBQUE7QUFBQSxrQkFBQTRDLElBQUEsZ0JBQUEsT0FBQSxxQkFBQTtBQUFBLGtCQUFBO0FBQUE7QUFBQSxnQkFBQTtBQUFBLGdCQUFBNUMsSUFBQUEsbUJBTEMsUUFBVyxFQUFBLE9BQUEsZ0JBQUEsR0FBQTtBQUFBLGtCQUFBQSxJQUFBO0FBQUEsb0JBcE03QjtBQUFBLG9CQXFNa0I7QUFBQSxzQkFHRixTQUFBLE9BQUE7QUFBQSxzQkFBQSxPQUFBMkMsSUFBQUEsZUFBQSxDQUFBLHlCQUFBLEVBQUEsVUFBQSxPQUFBLDBCQUFBLEVBQUEsQ0FBQSxDQUFBO0FBQUE7Ozs7O2dCQXhNaEIsQ0FBQTtBQUFBLGNBQUE7QUFBQTs7d0NBOE1JLFFBS08sSUFBQTtBQUFBLFVBQUE7QUFBQSxVQU5QO0FBQUE7QUFBQSxRQUFBLE1BQ0EvQyxJQUFBQSxVQUFBLEdBQUFDLElBQUE7QUFBQSxVQUFNSSxJQUFBO0FBQUEsVUFBTSxFQUFhLEtBQUEsRUFBQTtBQUFBLFVBQUE7QUFBQSxZQUFBRixJQUFBQSxtQkFDdkIsYUFBTTtBQUFBLFlBQUFDLElBQUFBLG1CQUNOLFFBRVksRUFBQSxPQUFBLGNBQUEsR0FBQTtBQUFBLGNBQUFBLElBQUFBLG1CQUZHLFFBQW9CLEVBQUEsT0FBQSxPQUFBLEdBQUEsZUFBQTtBQUFBLGNBQUFBLElBQUFBLG1CQUFhLGFBQU07QUFBQSxnQkFBQSxLQUFBO0FBQUEsZ0JBQ3BELGVBQUE7QUFBQSxjQUFBLEdBQUE7QUFBQTs7WUFHSixDQUFBO0FBQUEsVUFDQTtBQUFBLFVBQUE7QUFBQTtBQUFBLFFBQUE7QUFBQSxRQUNBRCxJQUFBQSxtQkFBQSxRQUFBO0FBQUEsUUFDQUssSUFBQTtBQUFBLFVBQUE7QUFBQSxVQUFNLEVBQUssS0FBQyxXQUFBO0FBQUEsVUFBZ0I7QUFBQSxVQUFBO0FBQUE7QUFBQSxRQUFBO0FBQUEsUUFBQUwsSUFBQUEsbUJBQUEsV0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQ2xOOUJKLGNBQWdCLE1BQUEsUUFBQSxRQUFBLFFBQUEsT0FBQSxVQUFBO1dBQ2hCQyxJQUFBQSxVQUFtQyxHQUFBQyxJQUFBO0FBQUEsTUFBekJJLElBQUE7QUFBQSxNQUFBO0FBQUEsTUFBQTtBQUFBLFFBQUFGLElBQUFBLG1CQUFBLFdBQUE7QUFBQTs7Ozs7Ozs7Ozs7QUNGWixZQUFNLEVBQUUsZUFBQSxJQUFtQixJQUFJLGtCQUFrQjtBQUVqRCxZQUFNLGFBQWE7QUFBQSxRQUNqQixFQUFFLE1BQU0sS0FBSyxNQUFNLE9BQU8sTUFBTSxnQkFBZ0I7QUFBQSxRQUNoRCxFQUFFLE1BQU0sS0FBSyxNQUFNLE9BQU8sTUFBTSxZQUFZO0FBQUEsUUFDNUMsRUFBRSxNQUFNLEtBQUssTUFBTSxPQUFPLE1BQU0sYUFBYTtBQUFBLFFBQzdDLEVBQUUsTUFBTSxLQUFLLE1BQU0sT0FBTyxNQUFNLGVBQWU7QUFBQSxNQUFBO0FBR2pELFlBQU0sY0FBYztBQUVwQixZQUFNLEVBQUUsVUFBVSxnQkFBZ0IsSUFBSSxhQUFhOzs7Ozs7V0NJcENKLGNBQWtCLE1BQUEsUUFBQSxRQUFBLFFBQUEsT0FBQSxVQUFBO1dBQUVDLElBQUFBLFVBQWEsR0FBQUMsSUFBQTtBQUFBLE1BQUE7QUFBQSxNQUFBO0FBQUEsUUFBbUIsc0JBQWdCO0FBQUEsUUFBQyxpQkFBUSxPQUFBLENBQUEsTUFBQSxPQUFBLENBQUEsSUFBQSxJQUFBLFNBQUEsT0FBQSxtQkFBQSxPQUFBLGdCQUFBLEdBQUEsSUFBQTtBQUFBLFFBQUEsT0FBQTtBQUFBLFFBQ3hGLFlBQUE7QUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLFFBQXFCRSxJQUFBQSxtQkFBQSxRQUFBO0FBQUEsUUFBQUMsSUFBQTtBQUFBLFVBckJ6QjtBQUFBLFVBQUE7QUFBQSxZQUFBLE9BQUE7QUFBQSxZQXNCTSxPQUFnQkYsSUFBQSxlQUFBLEVBQUEsWUFBQSxPQUFBLGVBQUEsTUFBQSxNQUFBO0FBQUEsVUFBQTtBQUFBLFVBQ2E7QUFBQSxZQUE3QkMsSUFBQUEsbUJBQUEsV0FBQTtBQUFBLFlBQUEsT0F2Qk4sd0NBdUI0QkYsSUFBQUEsbUJBQUEsUUFBQTtBQUFBLGNBQUEsS0FBQTtBQUFBLGNBQ3BCLE9BQUE7QUFBQSxZQUFBLEdBQUE7QUFBQSxxQ0FBMEQsYUFBTTtBQUFBLGdCQUFBLEtBQUE7QUFBQSxnQkFDOUQsZUFBQTtBQUFBLGNBQUEsR0FBQTtBQUFBLHVDQUE0QixTQUFZO0FBQUEsa0JBQWdCLE9BQUs7QUFBQSxrQkFBQSxLQUFBLE9BQUEsWUFBQSxRQUFBO0FBQUE7Z0JBRS9ELEdBQUEsTUFBQSxHQU9PLENBUEQsS0FBQSxDQUFBO0FBQUEsY0FBQSxDQUFBO0FBQUEscUNBSUosUUFFWSxFQUFBLE9BQUEsT0FBQSxHQUFBO0FBQUEsZ0JBQUFHLElBQUE7QUFBQSxrQkFGWTtBQUFBLGtCQUFBLEVBQUEsT0FBQSxXQUFBO0FBQUEsa0JBQUE0QyxvQkFBQSxPQUFBLFlBQUEsUUFBQSxZQUFBLE9BQUEsWUFBQSxRQUFBLFFBQUE7QUFBQSxrQkFBQTtBQUFBO0FBQUEsZ0JBQUE7QUFBQSxnQkFBSzVDLElBQUFBLG1CQUFBLGFBQUE7QUFBQSxrQkFBK0IsT0FBQTtBQUFBLGtCQUFBLEtBQUE7QUFBQSxrQkFDMUQsZUFBQTtBQUFBLGdCQUFBLEdBQUE7QUFBQTs7O1lBS04sQ0FBQSxNQUFBSixJQUFBLFVBQUEsR0FBQUMsSUFBQTtBQUFBLGNBQU1JLElBQUE7QUFBQSxjQUFNLEVBQVUsS0FBQSxFQUFBO0FBQUEsY0FBQTtBQUFBLGdCQUFBRixJQUFBQSxtQkFDcEIsV0FNWTtBQUFBLGdCQUFBQyxJQUFBQSxtQkFORyxRQUFvQixFQUFBLE9BQUEsV0FBQSxHQUFBO0FBQUEsa0JBQUFBLElBQUFBLG1CQUFhLGFBQU07QUFBQSxvQkFBQSxLQUFBO0FBQUEsb0JBQ3BELGVBQUE7QUFBQSxrQkFBQSxHQUFBO0FBQUEsb0JBRW1CQSxJQUFBQSxtQkFBQSxTQUFBO0FBQUEsc0JBQ2pCLE9BQUk7QUFBQSxzQkFBQSxNQUFBO0FBQUE7b0JBR1IsQ0FBQTtBQUFBLGtCQUFBLENBQUE7QUFBQSx5Q0FDaUIsUUFBb0IsRUFBQSxPQUFBLE9BQUEsR0FBQTtBQUFBLG9CQUFBQSxJQUFBQSxtQkFBYSxhQUFNO0FBQUEsc0JBQUMsS0FBSztBQUFBLHNCQUU1RCxlQUFBO0FBQUEsc0JBQ0EsT0FBQTtBQUFBLG9CQUNFLEdBQUEsT0FBQTtBQUFBLG9CQUFBQSxJQUFBQSxtQkFBQSxRQUFBLEVBQUEsT0FBQSxRQUFBLEdBQUE7QUFBQTs7O2dCQUlOLENBQUE7QUFBQSxjQUFXO0FBQUEsY0FBSztBQUFBO0FBQUEsWUFBQTtBQUFBLFlBQWdCQSxJQUFBQSxtQkFBQSxhQUFBO0FBQUEsY0FBaUMsT0FBQTtBQUFBLGNBQW1CLEtBQUE7QUFBQSxjQUFBLGVBQUE7QUFBQSxZQUl0RixHQUFBLE1BQUE7QUFBQSxVQUNBO0FBQUEsVUFBQTtBQUFBO0FBQUEsUUFBQTtBQUFBLFFBQUFELElBQUFBLG1CQUNFLFFBS087QUFBQSxRQUFBQyxJQUFBQSxtQkFqRWIsUUE0RDBCLEVBRWxCLE9BQUEsU0FBQSxHQUFBO0FBQUEsVUFFWUEsSUFBQUEsbUJBQUEsUUFBQSxFQUFBLE9BQUEsUUFBQSxHQUFBO0FBQUEsWUFBQXdELElBQUFBLGdCQUZLLFFBQVc7QUFBQSxZQUFLeEQsSUFBQUEsbUJBQUEsYUFBQTtBQUFBLGNBQStCLE9BQUE7QUFBQSxjQUFBLEtBQUE7QUFBQSxjQTlEeEUsZUFBQTtBQUFBLFlBQUEsR0ErRGdCO0FBQUEsY0FBQXdELElBQUFBLGdCQUFBLFNBQUE7QUFBQTtZQUdWLENBQUE7QUFBQSxVQUFBLENBQUE7QUFBQSxpQ0FFRSxRQVNZLEVBQUEsT0FBQSxVQUFBLEdBQUE7QUFBQSxZQVRaekQsSUFBQUEsbUJBQUEsTUFBQTtBQUFBLGFBQUFILElBQUFBLFVBRWEsR0FBQUMsSUFBQTtBQUFBLGNBQUlJLElBQUE7QUFBQSxjQUFBO0FBQUEsY0FBQUMsSUFBQUEsV0FBQSxPQUFBLFlBQUEsQ0FBQSxTQUFBO0FBQ1QsdUJBQUFGLElBQUFBLG1CQUFFLGFBRUY7QUFBQSxrQkFETCxLQUFHLEtBQUE7QUFBQSxrQkFFSixPQUFrQjJDLElBQUFBLGVBQUEsQ0FBQSxLQUFBLE1BQUEsV0FBQSxDQUFBO0FBQUEsa0JBRU4sS0FBQSw4QkFBQSxLQUFBLElBQUE7QUFBQSxrQkFBQSxlQUFBO0FBQUEsbUJBRUhDLElBQUFBLGdCQUFBLEtBQUEsSUFBQSxHQUFBLElBQUEsQ0FBQSxLQUFBLENBQUE7QUFBQSxjQUFBLENBQUE7QUFBQTs7Ozs7Ozs7Ozs7O0FDOUVKLFFBQUEsUUFBQTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZTtBQUFBLElBQ2YsVUFBVTtBQUFBLE1BQ1I7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0g7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDQztBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNIO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0M7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDSDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNDO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUN6QjtBQUFBLE1BQU07QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDekI7QUFBQSxNQUFNO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDSDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNDO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0g7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDQztBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNIO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0M7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxtQkFBbUI7QUFBQSxNQUNwQjtBQUFBLE1BQ0Q7QUFBQSxRQUNFLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLG1CQUFtQjtBQUFBLE1BQ3BCO0FBQUEsTUFDRDtBQUFBLFFBQ0UsV0FBVztBQUFBLFFBQ1gsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLFFBQ1gsbUJBQW1CO0FBQUEsTUFDcEI7QUFBQSxNQUNEO0FBQUEsUUFDRSxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsUUFDUixj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QSxNQUNWO0FBQUE7QUFBQSxNQUVELFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQTtBQUFBLE1BR0QsYUFBYTtBQUFBLFFBQ1gsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsV0FBVztBQUFBLFFBQ1QsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsYUFBYTtBQUFBLFFBQ1gsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsV0FBVztBQUFBLFFBQ1QsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsYUFBYTtBQUFBLFFBQ1gsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsY0FBYztBQUFBLFFBQ1osTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsV0FBVztBQUFBLFFBQ1QsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsWUFBWTtBQUFBLFFBQ1YsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsc0JBQXNCO0FBQUEsUUFDcEIsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsTUFBTTtBQUFBLFFBQ0osTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsZUFBZTtBQUFBLFFBQ2IsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsY0FBYztBQUFBLFFBQ1osTUFBTSxDQUFDLFFBQVEsTUFBTTtBQUFBLFFBQ3JCLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELGdCQUFnQjtBQUFBLFFBQ2QsTUFBTSxDQUFDLE1BQU07QUFBQSxRQUNiLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELDJCQUEyQjtBQUFBLFFBQ3pCLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELFdBQVc7QUFBQSxRQUNULE1BQU0sQ0FBQyxRQUFRLE1BQU07QUFBQSxRQUNyQixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxXQUFXO0FBQUEsUUFDVCxNQUFNLENBQUMsUUFBUSxNQUFNO0FBQUEsUUFDckIsU0FBUztBQUFBLE1BQ1Y7QUFBQTtBQUFBLE1BRUQsWUFBWTtBQUFBLFFBQ1YsTUFBTSxDQUFDLFFBQVEsTUFBTTtBQUFBLFFBQ3JCLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELGNBQWM7QUFBQSxRQUNaLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELGNBQWM7QUFBQSxRQUNaLE1BQU0sQ0FBQyxRQUFRO0FBQUEsUUFDZixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxXQUFXO0FBQUEsUUFDVCxNQUFNO0FBQUEsTUFDUDtBQUFBO0FBQUEsTUFFRCxZQUFZO0FBQUEsUUFDVixNQUFNO0FBQUEsTUFDUDtBQUFBO0FBQUEsTUFFRCxZQUFZO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxhQUFhO0FBQUEsUUFDWCxNQUFNO0FBQUEsTUFDUDtBQUFBO0FBQUEsTUFFRCx1QkFBdUI7QUFBQSxRQUNyQixNQUFNO0FBQUEsTUFDUDtBQUFBO0FBQUEsTUFFRCxhQUFhO0FBQUEsUUFDWCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxjQUFjO0FBQUEsUUFDWixNQUFNO0FBQUEsTUFDUDtBQUFBO0FBQUEsTUFFRCx3QkFBd0I7QUFBQSxRQUN0QixNQUFNO0FBQUEsTUFDUDtBQUFBO0FBQUEsTUFFRCxjQUFjO0FBQUEsUUFDWixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxjQUFjO0FBQUEsUUFDWixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxVQUFVO0FBQUEsUUFDUixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxXQUFXO0FBQUEsUUFDVCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxZQUFZO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixTQUNFO0FBQUEsTUFDSDtBQUFBO0FBQUEsTUFFRCxXQUFXO0FBQUEsUUFDVCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxPQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxZQUFZO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUEsTUFFRCxlQUFlO0FBQUEsUUFDYixNQUFNO0FBQUEsTUFDUDtBQUFBO0FBQUEsTUFFRCxVQUFVO0FBQUEsUUFDUixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLRCxjQUFjO0FBQUEsUUFDWixNQUFNO0FBQUEsTUFDUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU1ELFlBQVk7QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELGNBQWM7QUFBQSxRQUNaLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUE7QUFBQSxNQUVELHFCQUFxQjtBQUFBLFFBQ25CLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNWO0FBQUEsSUFDRjtBQUFBLElBQ0QsT0FBTztBQUNMLGFBQU87QUFBQSxRQUNMLFlBQVk7QUFBQTtBQUFBLFFBQ1osVUFBVTtBQUFBO0FBQUEsUUFDVixXQUFXLENBQUU7QUFBQTtBQUFBLFFBQ2IsUUFBUTtBQUFBO0FBQUEsUUFDUixTQUFTO0FBQUE7QUFBQSxRQUVULGNB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SSxJQUFBO0FBQUEsVUFBQTtBQUFBLFVBQUFDLElBQUFBLFdBQUEsT0FBQSxXQUFBLENBQUEsU0FBQTs7Y0FDckQsS0FBQSxLQUFBO0FBQUEsWUFBQSxHQUNpQjtBQUFBLGNBQWpCSCxJQUFBQSxtQkFBQSxRQUFBO0FBQUEsY0FqRFIsS0FBQSxZQUFBSCxJQUFBLFVBQUEsR0FpRG9EMEQsSUFBQUEsWUFBTyxPQUFVLFdBQUEsR0FBQTtBQUFBLGdCQUFBLEtBQUE7QUFBQSxnQkFqRHJFLGVBQUEsS0FBQTtBQUFBLGNBQUEsR0FBQSxNQUFBLEdBQUEsQ0FBQSxhQUFBLENBQUEsS0FBQXZELElBQUEsbUJBQUEsUUFBQSxJQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0dBLGVBQVMsTUFBTTtBQUNQeUMscUJBQUEsT0FBTSxnQkFBZSxZQUFZO0FBQUEsTUFBQSxDQUN4QztBQUNELGFBQU8sTUFBTTtBQUNMQSxxQkFBQSxPQUFNLGdCQUFlLFVBQVU7QUFBQSxNQUFBLENBQ3RDO0FBQ0QsYUFBTyxNQUFNO0FBQ0xBLHFCQUFBLE9BQU0saUJBQWdCLFVBQVU7QUFBQSxNQUFBLENBQ3ZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDI3LDI4LDI5LDMwLDMxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDU1LDU2LDU3LDY0LDY1LDY2LDY3LDY4LDY5LDc4LDc5LDgwLDk4LDk5LDEwMCwxMDEsMTAyLDEwOCwxMjMsMTQyLDE0M119